mirror of
https://github.com/nanoy42/coope
synced 2024-11-25 04:43:11 +00:00
166 lines
No EOL
6.8 KiB
Python
166 lines
No EOL
6.8 KiB
Python
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 <gestion.models.Pinte>`.
|
|
"""
|
|
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") |