from django import forms from django.contrib.auth import get_user_model from django.core.exceptions import NON_FIELD_ERRORS, ValidationError from django.db import IntegrityError from la_chariotte.order.models import GroupedOrder, Item class GroupedOrderForm(forms.ModelForm): class Meta: model = GroupedOrder fields = ["name", "deadline", "delivery_date", "place", "description"] widgets = { "name": forms.TextInput( attrs={"placeholder": "ex : Des oranges pour Noël"} ), "deadline": forms.DateTimeInput(attrs={"placeholder": "JJ/MM/AAAA HH:MM"}), "delivery_date": forms.DateInput(attrs={"placeholder": "JJ/MM/AAAA"}), "place": forms.TextInput(attrs={"placeholder": "(facultatif)"}), "description": forms.Textarea( attrs={ "placeholder": "Plus d'infos sur la commande groupée ? (facultatif)" } ), } def __init__(self, *args, **kwargs): self.user = kwargs.pop("user") super().__init__(*args, **kwargs) def save(self, commit=True): self.instance.orga = get_user_model().objects.get(id=self.user.pk) return super().save(commit=commit) def clean(self): cleaned_data = self.cleaned_data try: GroupedOrder.objects.get( name=cleaned_data["name"], delivery_date=cleaned_data["delivery_date"], orga=get_user_model().objects.get(id=self.user.pk), ) except GroupedOrder.DoesNotExist: pass else: raise ValidationError( "Une commande groupée avec le même titre et la même date existe déjà" ) return cleaned_data class ItemCreateForm(forms.ModelForm): class Meta: model = Item fields = ["name", "price", "max_limit"] def __init__(self, *args, **kwargs): self.grouped_order = kwargs.pop("grouped_order") # type: GroupedOrder super().__init__(*args, **kwargs) def save(self, commit=True): self.instance.grouped_order = GroupedOrder.objects.get(id=self.grouped_order.pk) return super().save(commit=commit)