2018-10-05 22:03:02 +00:00
from django import forms
2018-11-22 21:52:15 +00:00
from django . core . exceptions import ValidationError
2018-10-05 22:03:02 +00:00
from django . contrib . auth . models import User
2019-06-23 14:32:38 +00:00
from django . core . validators import MinValueValidator
2018-10-05 22:03:02 +00:00
from dal import autocomplete
2019-05-03 19:09:32 +00:00
from . models import Reload , Refund , Product , Keg , Menu , Category
2019-06-23 13:31:55 +00:00
from preferences . models import PaymentMethod , PriceProfile
2018-10-05 22:03:02 +00:00
class ReloadForm ( forms . ModelForm ) :
2019-02-28 12:18:41 +00:00
"""
A form to create a : class : ` ~ gestion . models . Reload ` .
"""
2018-11-22 21:52:15 +00:00
def __init__ ( self , * args , * * kwargs ) :
super ( ReloadForm , self ) . __init__ ( * args , * * kwargs )
2018-12-16 10:20:02 +00:00
self . fields [ ' PaymentMethod ' ] . queryset = PaymentMethod . objects . filter ( is_usable_in_reload = True ) . filter ( is_active = True )
2018-11-22 21:52:15 +00:00
2018-10-05 22:03:02 +00:00
class Meta :
model = Reload
fields = ( " customer " , " amount " , " PaymentMethod " )
2019-01-17 22:25:56 +00:00
widgets = { ' customer ' : autocomplete . ModelSelect2 ( url = ' users:active-users-autocomplete ' , attrs = { ' data-minimum-input-length ' : 2 } ) , ' amount ' : forms . TextInput }
2018-11-22 21:52:15 +00:00
2018-10-05 22:03:02 +00:00
class RefundForm ( forms . ModelForm ) :
2019-02-28 12:18:41 +00:00
"""
A form to create a : class : ` ~ gestion . models . Refund ` .
"""
2018-10-05 22:03:02 +00:00
class Meta :
model = Refund
fields = ( " customer " , " amount " )
2019-01-17 22:25:56 +00:00
widgets = { ' customer ' : autocomplete . ModelSelect2 ( url = ' users:active-users-autocomplete ' , attrs = { ' data-minimum-input-length ' : 2 } ) , ' amount ' : forms . TextInput }
2018-11-22 21:52:15 +00:00
2018-10-05 22:03:02 +00:00
class ProductForm ( forms . ModelForm ) :
2019-02-28 12:18:41 +00:00
"""
A form to create and edit a : class : ` ~ gestion . models . Product ` .
"""
2018-10-05 22:03:02 +00:00
class Meta :
model = Product
fields = " __all__ "
2019-01-17 22:25:56 +00:00
widgets = { ' amount ' : forms . TextInput }
2018-10-05 22:03:02 +00:00
class KegForm ( forms . ModelForm ) :
2019-02-28 12:18:41 +00:00
"""
A form to create and edit a : class : ` ~ gestion . models . Keg ` .
"""
2018-12-17 07:42:44 +00:00
2018-10-05 22:03:02 +00:00
class Meta :
model = Keg
2019-06-23 14:43:23 +00:00
fields = [ " name " , " stockHold " , " amount " , " capacity " ]
2019-01-17 22:25:56 +00:00
widgets = { ' amount ' : forms . TextInput }
2018-10-05 22:03:02 +00:00
2019-06-23 14:32:38 +00:00
category = forms . ModelChoiceField ( queryset = Category . objects . all ( ) , label = " Catégorie " )
deg = forms . DecimalField ( max_digits = 5 , decimal_places = 2 , label = " Degré " , validators = [ MinValueValidator ( 0 ) ] )
2019-08-29 10:35:47 +00:00
create_galopin = forms . BooleanField ( required = False , label = " Créer le produit galopin ? " )
2019-06-23 14:32:38 +00:00
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 ' " )
2018-10-05 22:03:02 +00:00
class MenuForm ( forms . ModelForm ) :
2019-02-28 12:18:41 +00:00
"""
A form to create and edit a : class : ` ~ gestion . models . Menu ` .
"""
2018-10-05 22:03:02 +00:00
class Meta :
model = Menu
fields = " __all__ "
2019-01-17 22:25:56 +00:00
widgets = { ' amount ' : forms . TextInput }
2018-10-05 22:03:02 +00:00
2018-11-22 21:52:15 +00:00
class SearchProductForm ( forms . Form ) :
2019-02-28 12:18:41 +00:00
"""
A form to search a : class : ` ~ gestion . models . Product ` .
"""
2018-11-22 21:52:15 +00:00
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 ) :
2019-02-28 12:18:41 +00:00
"""
A form to search a : class : ` ~ gestion . models . Menu ` .
"""
2018-11-22 21:52:15 +00:00
menu = forms . ModelChoiceField ( queryset = Menu . objects . all ( ) , required = True , label = " Menu " , widget = autocomplete . ModelSelect2 ( url = ' gestion:menus-autocomplete ' , attrs = { ' data-minimum-input-length ' : 2 } ) )
2018-10-05 22:03:02 +00:00
class GestionForm ( forms . Form ) :
2019-02-28 12:18:41 +00:00
"""
A form for the : func : ` ~ gestion . views . manage ` view .
"""
2018-11-25 12:52:32 +00:00
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 } ) )
2018-12-23 22:55:27 +00:00
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 } ) )
2018-11-25 12:52:32 +00:00
class SelectPositiveKegForm ( forms . Form ) :
2019-02-28 12:18:41 +00:00
"""
A form to search a : class : ` ~ gestion . models . Keg ` with a positive stockhold .
"""
2018-11-25 12:52:32 +00:00
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 ) :
2019-02-28 12:18:41 +00:00
"""
A form to search an active : class : ` ~ gestion . models . Keg ` .
"""
2018-12-23 11:54:37 +00:00
keg = forms . ModelChoiceField ( queryset = Keg . objects . filter ( is_active = True ) , required = True , label = " Fût " , widget = autocomplete . ModelSelect2 ( url = ' gestion:kegs-active-autocomplete ' ) )
2018-12-23 12:05:41 +00:00
class PinteForm ( forms . Form ) :
2019-02-28 12:18:41 +00:00
"""
A form to free : class : ` Pints < gestion . models . Pinte > ` .
"""
2018-12-23 11:54:37 +00:00
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 )
2019-01-05 23:01:30 +00:00
end = forms . IntegerField ( label = " Fin " , help_text = " Fin du range " , required = False )
class GenerateReleveForm ( forms . Form ) :
2019-02-28 12:18:41 +00:00
"""
A form to generate a releve .
"""
2019-01-05 23:01:30 +00:00
begin = forms . DateTimeField ( label = " Date de début " )
2019-05-03 19:09:32 +00:00
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 ` .
"""
2019-06-23 11:46:12 +00:00
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 " )
2019-06-23 13:31:55 +00:00
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 " )