from django import forms from django.core.exceptions import ValidationError from django.contrib.auth.models import User from django.core.validators import MinValueValidator from dal import autocomplete from .models import Reload, Refund, Product, Keg, Menu, Category from preferences.models import PaymentMethod, PriceProfile class ReloadForm(forms.ModelForm): """ A form to create a :class:`~gestion.models.Reload`. """ def __init__(self, *args, **kwargs): super(ReloadForm, self).__init__(*args, **kwargs) self.fields['PaymentMethod'].queryset = PaymentMethod.objects.filter(is_usable_in_reload=True).filter(is_active=True) class Meta: model = Reload fields = ("customer", "amount", "PaymentMethod") widgets = {'customer': autocomplete.ModelSelect2(url='users:active-users-autocomplete', attrs={'data-minimum-input-length':2}), 'amount': forms.TextInput} class RefundForm(forms.ModelForm): """ A form to create a :class:`~gestion.models.Refund`. """ class Meta: model = Refund fields = ("customer", "amount") widgets = {'customer': autocomplete.ModelSelect2(url='users:active-users-autocomplete', attrs={'data-minimum-input-length':2}), 'amount': forms.TextInput} class ProductForm(forms.ModelForm): """ A form to create and edit a :class:`~gestion.models.Product`. """ class Meta: model = Product fields = "__all__" widgets = {'amount': forms.TextInput} class CreateKegForm(forms.ModelForm): """ A form to create a :class:`~gestion.models.Keg`. """ class Meta: model = Keg fields = ["name", "stockHold", "amount", "capacity", "deg"] widgets = {'amount': forms.TextInput} category = forms.ModelChoiceField(queryset=Category.objects.all(), label="Catégorie", help_text="Catégorie dans laquelle placer les produits pinte, demi (et galopin si besoin).") create_galopin = forms.BooleanField(required=False, label="Créer le produit galopin ?") def clean(self): cleaned_data = super().clean() if cleaned_data.get("name")[0:4] != "Fût ": raise ValidationError("Le nom du fût doit être sous la forme 'Fût nom de la bière'") class EditKegForm(forms.ModelForm): """ A form to edit a :class:`~gestion.models.Keg`. """ class Meta: model = Keg fields = ["name", "stockHold", "amount", "capacity", "pinte", "demi", "galopin", "deg"] widgets = {'amount': forms.TextInput} def clean(self): cleaned_data = super().clean() if cleaned_data.get("name")[0:4] != "Fût ": raise ValidationError("Le nom du fût doit être sous la forme 'Fût nom de la bière'") class MenuForm(forms.ModelForm): """ A form to create and edit a :class:`~gestion.models.Menu`. """ class Meta: model = Menu fields = "__all__" widgets = {'amount': forms.TextInput} class SearchProductForm(forms.Form): """ A form to search a :class:`~gestion.models.Product`. """ product = forms.ModelChoiceField(queryset=Product.objects.all(), required=True, label="Produit", widget=autocomplete.ModelSelect2(url='gestion:products-autocomplete', attrs={'data-minimum-input-length':2})) class SearchMenuForm(forms.Form): """ A form to search a :class:`~gestion.models.Menu`. """ menu = forms.ModelChoiceField(queryset=Menu.objects.all(), required=True, label="Menu", widget=autocomplete.ModelSelect2(url='gestion:menus-autocomplete', attrs={'data-minimum-input-length':2})) class GestionForm(forms.Form): """ A form for the :func:`~gestion.views.manage` view. """ client = forms.ModelChoiceField(queryset=User.objects.filter(is_active=True), required=True, label="Client", widget=autocomplete.ModelSelect2(url='users:active-users-autocomplete', attrs={'data-minimum-input-length':2})) product = forms.ModelChoiceField(queryset=Product.objects.filter(is_active=True), required=True, label="Produit", widget=autocomplete.ModelSelect2(url='gestion:active-products-autocomplete', attrs={'data-minimum-input-length':2})) class SelectPositiveKegForm(forms.Form): """ A form to search a :class:`~gestion.models.Keg` with a positive stockhold. """ keg = forms.ModelChoiceField(queryset=Keg.objects.filter(stockHold__gt = 0), required=True, label="Fût", widget=autocomplete.ModelSelect2(url='gestion:kegs-positive-autocomplete')) class SelectActiveKegForm(forms.Form): """ A form to search an active :class:`~gestion.models.Keg`. """ keg = forms.ModelChoiceField(queryset=Keg.objects.filter(is_active = True), required=True, label="Fût", widget=autocomplete.ModelSelect2(url='gestion:kegs-active-autocomplete')) class PinteForm(forms.Form): """ A form to free :class:`Pints `. """ ids = forms.CharField(widget=forms.Textarea, label="Numéros", help_text="Numéros séparés par un espace. Laissez vide pour utiliser le range.", required=False) begin = forms.IntegerField(label="Début", help_text="Début du range", required=False) end = forms.IntegerField(label="Fin", help_text="Fin du range", required=False) class GenerateReleveForm(forms.Form): """ A form to generate a releve. """ begin = forms.DateTimeField(label="Date de début") end = forms.DateTimeField(label="Date de fin") class CategoryForm(forms.ModelForm): """ A form to create and edit a :class:`~gestion.models.Category`. """ class Meta: model = Category fields = "__all__" class SearchCategoryForm(forms.Form): """ A form to search a :class:`~gestion.models.Category`. """ category = forms.ModelChoiceField(queryset=Category.objects.all(), required=True, label="Catégorie", widget=autocomplete.ModelSelect2(url='gestion:categories-autocomplete', attrs={'data-minimum-input-length':2})) class GenerateInvoiceForm(forms.Form): """ A form to generate an invoice """ invoice_date = forms.CharField(label="Date") invoice_number = forms.CharField(label="Numéro", help_text="Au format 19018, sans le FE") invoice_place = forms.CharField(label="Lieu") invoice_object = forms.CharField(label="Objet") invoice_description = forms.CharField(label="Description", required=False) client_name = forms.CharField(label="Nom du client") client_address_fisrt_line = forms.CharField(label="Première ligne d'adresse") client_address_second_line = forms.CharField(label="Deuxième ligne d'adresse") products = forms.CharField(widget=forms.Textarea, label="Produits", help_text="Au format nom;prix;quantité avec saut de ligne") class ComputePriceForm(forms.Form): """ A form to compute price """ price_profile = forms.ModelChoiceField(queryset=PriceProfile.objects.all(), label="Profil de prix") price = forms.DecimalField(max_digits=10, decimal_places=5, label="Prix")