diff --git a/la_chariotte/order/forms.py b/la_chariotte/order/forms.py
index 9a962aa..2881ab0 100644
--- a/la_chariotte/order/forms.py
+++ b/la_chariotte/order/forms.py
@@ -11,7 +11,8 @@ from la_chariotte.order.models import GroupedOrder, Item
class GroupedOrderForm(forms.ModelForm):
deadline_date = forms.DateField(
- label="Date limite de commande", widget=forms.DateInput(attrs={"type": "date"})
+ label="Date limite de commande",
+ widget=forms.DateInput(attrs={"type": "date"}, format=("%Y-%m-%d")),
)
deadline_time = forms.TimeField(
label="Heure limite de commande",
@@ -33,7 +34,10 @@ class GroupedOrderForm(forms.ModelForm):
"name": forms.TextInput(
attrs={"placeholder": "ex : Des oranges pour Noël"}
),
- "delivery_date": forms.DateInput(attrs={"type": "date"}),
+ "delivery_date": forms.DateInput(
+ attrs={"type": "date"},
+ format=("%Y-%m-%d"),
+ ),
"place": forms.TextInput(attrs={"placeholder": "(facultatif)"}),
"description": forms.Textarea(
attrs={
@@ -46,6 +50,12 @@ class GroupedOrderForm(forms.ModelForm):
self.user = kwargs.pop("user")
super().__init__(*args, **kwargs)
+ # use object values if we are updating it
+ if kwargs["instance"]: # the Grouped Order already exists
+ self.initial["deadline_date"] = self.instance.deadline.date()
+ self.initial["deadline_time"] = self.instance.deadline.time()
+ # TODO: there is a bug here ; the time displayed in form is 2 hours earlier than the actual deadline time
+
def save(self, commit=True):
self.instance.orga = get_user_model().objects.get(id=self.user.pk)
return super().save(commit=commit)
@@ -56,18 +66,6 @@ class GroupedOrderForm(forms.ModelForm):
self.cleaned_data["deadline_date"], self.cleaned_data["deadline_time"]
)
- 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
diff --git a/la_chariotte/order/migrations/0022_alter_groupedorder_unique_together.py b/la_chariotte/order/migrations/0022_alter_groupedorder_unique_together.py
new file mode 100644
index 0000000..26b732e
--- /dev/null
+++ b/la_chariotte/order/migrations/0022_alter_groupedorder_unique_together.py
@@ -0,0 +1,16 @@
+# Generated by Django 4.2 on 2023-07-04 15:07
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("order", "0021_alter_orderauthor_email_alter_orderauthor_phone"),
+ ]
+
+ operations = [
+ migrations.AlterUniqueTogether(
+ name="groupedorder",
+ unique_together=set(),
+ ),
+ ]
diff --git a/la_chariotte/order/models.py b/la_chariotte/order/models.py
index 1bc8862..1335276 100644
--- a/la_chariotte/order/models.py
+++ b/la_chariotte/order/models.py
@@ -21,9 +21,6 @@ class GroupedOrder(models.Model):
description = models.TextField("Description", null=True, blank=True)
total_price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
- class Meta:
- unique_together = ["delivery_date", "name", "orga"]
-
def compute_total_price(self):
price = 0
for order in self.order_set.all():
@@ -59,9 +56,6 @@ class GroupedOrder(models.Model):
"La date limite de commande doit être avant la date de livraison"
)
- def validate_unique(self, exclude=None):
- super(GroupedOrder, self).validate_unique(exclude=exclude)
-
def __str__(self): # pragma: no cover
return (
self.name
diff --git a/la_chariotte/order/templates/order/grouped_order_create.html b/la_chariotte/order/templates/order/grouped_order_create.html
index f61a8ca..7ea7346 100644
--- a/la_chariotte/order/templates/order/grouped_order_create.html
+++ b/la_chariotte/order/templates/order/grouped_order_create.html
@@ -10,7 +10,7 @@
Nouvelle commande
+{% endblock %}
+
+{% block extra_js %}
+{% include 'warning_grouped_order_creation.html' %}
{% endblock %}
\ No newline at end of file
diff --git a/la_chariotte/order/templates/order/grouped_order_update.html b/la_chariotte/order/templates/order/grouped_order_update.html
index 80da6d6..e6ad3b4 100644
--- a/la_chariotte/order/templates/order/grouped_order_update.html
+++ b/la_chariotte/order/templates/order/grouped_order_update.html
@@ -8,7 +8,7 @@
{{ grouped_order.name }} - modifier
-
+{% endblock %}
+
+{% block extra_js %}
+{% include 'warning_grouped_order_creation.html' %}
{% endblock %}
\ No newline at end of file
diff --git a/la_chariotte/order/templates/warning_grouped_order_creation.html b/la_chariotte/order/templates/warning_grouped_order_creation.html
new file mode 100644
index 0000000..82fec1f
--- /dev/null
+++ b/la_chariotte/order/templates/warning_grouped_order_creation.html
@@ -0,0 +1,15 @@
+function deadlinePassedCheck(e){
+ // If the deadline is in the past, asks for a confirmation
+ deadline = document.getElementById("id_deadline_date").valueAsDate;
+ deadline_time = document.getElementById("id_deadline_time").value;
+ today = new Date();
+ deadline.setHours(deadline_time.substring(0,2));
+ deadline.setMinutes(deadline_time.substring(3));
+
+ if(deadline < today){
+ console.log("passé,"+today);
+ if(confirm("La date limite de commande est dans le passé. Voulez-vous vraiment continuer ?") == false){
+ e.preventDefault();
+ };
+ };
+};
diff --git a/la_chariotte/order/tests/test_models.py b/la_chariotte/order/tests/test_models.py
index 55af4e9..1f8e4df 100644
--- a/la_chariotte/order/tests/test_models.py
+++ b/la_chariotte/order/tests/test_models.py
@@ -123,36 +123,3 @@ class TestGroupedOrderModel:
)
"La date de livraison ne doit pas être dans le passé" in response.content.decode()
assert GroupedOrder.objects.count() == 0
-
- def test_validation_error_unique_together(self, client_log):
- """If a grouped order with the same orga, delivery date and name of the order already exist, a validation error is raised"""
- deadline_1 = timezone.now().date() + datetime.timedelta(days=12)
- date = timezone.now().date() + datetime.timedelta(days=19)
- GroupedOrder.objects.create(
- name="commande",
- orga=auth.get_user(client_log),
- delivery_date=date,
- deadline=deadline_1,
- )
- assert GroupedOrder.objects.count() == 1
- create_gorder_url = reverse("order:create_grouped_order")
- response = client_log.get(create_gorder_url)
- assert response.status_code == 200
- deadline_2 = timezone.now() + datetime.timedelta(days=15)
- response = client_log.post(
- create_gorder_url,
- {
- "name": "commande",
- "deadline_date": deadline_2.date(),
- "deadline_time": deadline_2.time().strftime("%H:%M"),
- "delivery_date": date,
- },
- )
- assert response.status_code == 200
- assert not response.context.get("form").is_valid()
- assert (
- response.context.get("form").errors["__all__"][0]
- == "Une commande groupée avec le même titre et la même date existe déjà"
- )
- "Une commande groupée avec le même titre et la même date existe déjà" in response.content.decode()
- assert GroupedOrder.objects.count() == 1
diff --git a/la_chariotte/order/tests/test_views.py b/la_chariotte/order/tests/test_views.py
index 7faf038..1227d32 100644
--- a/la_chariotte/order/tests/test_views.py
+++ b/la_chariotte/order/tests/test_views.py
@@ -994,7 +994,8 @@ class TestGroupedOrderUpdateView:
update_grouped_order_url,
{
"name": "titre test modifié",
- "deadline": deadline,
+ "deadline_date": deadline.date(),
+ "deadline_time": deadline.time().strftime("%H:%M"),
"delivery_date": date,
"place": "quelque part",
},
@@ -1034,7 +1035,8 @@ class TestGroupedOrderUpdateView:
update_grouped_order_url,
{
"name": "titre test modifié",
- "deadline": deadline,
+ "deadline_date": deadline.date(),
+ "deadline_time": deadline.time().strftime("%H:%M"),
"delivery_date": date,
"place": "quelque part",
},
diff --git a/la_chariotte/order/views/grouped_order.py b/la_chariotte/order/views/grouped_order.py
index a8e9576..ec45eaa 100644
--- a/la_chariotte/order/views/grouped_order.py
+++ b/la_chariotte/order/views/grouped_order.py
@@ -116,13 +116,18 @@ class GroupedOrderUpdateView(UserPassesTestMixin, generic.UpdateView):
model = GroupedOrder
template_name = "order/grouped_order_update.html"
- fields = ["name", "deadline", "delivery_date", "place", "description"]
context_object_name = "grouped_order"
+ form_class = GroupedOrderForm
def test_func(self):
"""Accessible only if the requesting user is the grouped order organizer"""
return self.get_object().orga == self.request.user
+ def get_form_kwargs(self):
+ kwargs = super().get_form_kwargs()
+ kwargs["user"] = self.request.user
+ return kwargs
+
class GroupedOrderAddItemsView(UserPassesTestMixin, generic.ListView):
"""After creating grouped order, view for adding items to it"""