la-chariotte/la_chariotte/order/forms.py
2023-05-24 13:58:34 +02:00

64 lines
2.2 KiB
Python

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)