diff --git a/la_chariotte/order/templates/order/grouped_order_add_items.html b/la_chariotte/order/templates/order/grouped_order_add_items.html
index 654e8c4..cc3a1dd 100644
--- a/la_chariotte/order/templates/order/grouped_order_add_items.html
+++ b/la_chariotte/order/templates/order/grouped_order_add_items.html
@@ -6,43 +6,124 @@
{% block content_title %}Ajouter des produits à votre commande groupée{% endblock %}
-
-Commande groupée "{{ grouped_order.name }}", le {{ grouped_order.delivery_date }}
-
Limite de commande : {{ grouped_order.deadline }}
-Sur cette page, vous pouvez voir et modifier les produits qui sont inscrits à votre commande groupée.
-
-{% url 'order:item_create' pk=grouped_order.pk as create_item_url %}
-
-
-
-
- Nom |
- Prix unitaire |
- Quantité max (optionnel) |
- Action |
-
-
-
-
-
- {% for item in item_list %}
-
- {{ item.name }} |
- {{ item.price }} |
- {% if item.max_limit %}{{ item.max_limit }}{% else %}---{% endif %} |
- Supprimer (pas possible pour l'instant) |
-
- {% endfor %}
-
-
-
-
@@ -54,6 +56,7 @@
+
Gérer les produits
Produits commandés
{% if grouped_order.item_set.all %}
diff --git a/la_chariotte/order/tests/test_views.py b/la_chariotte/order/tests/test_views.py
index a753116..643b718 100644
--- a/la_chariotte/order/tests/test_views.py
+++ b/la_chariotte/order/tests/test_views.py
@@ -779,6 +779,67 @@ class TestGroupedOrderAddItemsView:
)
)
+ def test_delete_item(self, client_log):
+ """
+ A user on the manage item page creates and then deletes an item
+ """
+ assert models.GroupedOrder.objects.count() == 0
+ create_gorder_url = reverse("order:create_grouped_order")
+ response = client_log.get(create_gorder_url)
+ assert response.status_code == 200
+ date = timezone.now().date() + datetime.timedelta(days=42)
+ deadline = timezone.now() + datetime.timedelta(days=32)
+ response = client_log.post(
+ create_gorder_url,
+ {"name": "titre test", "deadline": deadline, "delivery_date": date},
+ )
+ assert response.status_code == 302
+ assert response.url.endswith("gerer-produits")
+ assert models.GroupedOrder.objects.count() == 1
+
+ # Create an item
+ grouped_order = models.GroupedOrder.objects.first()
+ create_item_url = reverse("order:item_create", args=[grouped_order.id])
+ response = client_log.post(create_item_url, {"name": "Pain test", "price": "2"})
+ response.status_code == 302
+ response.url == reverse("order:manage_items", args=[grouped_order.pk])
+ assert grouped_order.item_set.count() == 1
+
+ # Delete the item
+ item = grouped_order.item_set.first()
+ delete_item_url = reverse("order:item_delete", args=[grouped_order.id, item.id])
+ response = client_log.post(delete_item_url)
+ assert response.status_code == 302
+ assert response.url == reverse("order:manage_items", args=[grouped_order.pk])
+ assert grouped_order.item_set.count() == 0
+
+ def test_create_or_delete_item__not_orga(self, client_log, other_user):
+ """
+ A user that is not orga delete or create an item
+ They get a 403 forbidden error
+ """
+ grouped_order = create_grouped_order(
+ days_before_delivery_date=5,
+ days_before_deadline=2,
+ name="gr order test",
+ orga_user=other_user,
+ )
+
+ # Create an item
+ grouped_order = models.GroupedOrder.objects.first()
+ create_item_url = reverse("order:item_create", args=[grouped_order.id])
+ response = client_log.post(create_item_url, {"name": "Pain test", "price": "2"})
+ response.status_code == 403
+ assert grouped_order.item_set.count() == 0
+
+ # Delete an item
+ item = grouped_order.item_set.create(name="Pain test", price="2")
+ assert grouped_order.item_set.count() == 1
+ delete_item_url = reverse("order:item_delete", args=[grouped_order.id, item.id])
+ response = client_log.post(delete_item_url)
+ assert response.status_code == 403
+ assert grouped_order.item_set.count() == 1
+
class TestItemCreateView:
def test_create_item(self, client_log):
diff --git a/la_chariotte/order/urls.py b/la_chariotte/order/urls.py
index fadbcee..11df9b9 100644
--- a/la_chariotte/order/urls.py
+++ b/la_chariotte/order/urls.py
@@ -30,6 +30,11 @@ urlpatterns = [
views.ItemCreateView.as_view(),
name="item_create",
),
+ path(
+ "/gerer-produits//supprimer",
+ views.ItemDeleteView.as_view(),
+ name="item_delete",
+ ),
path(
"/gerer/imprimer",
views.GroupedOrderSheetView.as_view(),
diff --git a/la_chariotte/order/views.py b/la_chariotte/order/views.py
index f65881d..6b5751d 100644
--- a/la_chariotte/order/views.py
+++ b/la_chariotte/order/views.py
@@ -130,6 +130,7 @@ class GroupedOrderAddItemsView(UserPassesTestMixin, generic.ListView):
def test_func(self):
"""Accessible only if the requesting user is the grouped order organizer"""
grouped_order_id = self.kwargs.get("pk")
+ # breakpoint()
return GroupedOrder.objects.get(pk=grouped_order_id).orga == self.request.user
@@ -150,6 +151,21 @@ class ItemCreateView(UserPassesTestMixin, generic.CreateView):
return GroupedOrder.objects.get(pk=grouped_order_id).orga == self.request.user
+class ItemDeleteView(UserPassesTestMixin, generic.DeleteView):
+ """DeleteView for an item
+ The form does a GET to this view - it displays a confirmation page - then we post this view
+ """
+
+ model = Item
+
+ def get_success_url(self):
+ return reverse_lazy("order:manage_items", args=[self.object.grouped_order.id])
+
+ def test_func(self):
+ """Accessible only if the requesting user is the grouped order organizer"""
+ return self.get_object().grouped_order.orga == self.request.user
+
+
def order(request, grouped_order_id):
"""Creates an AnonymousUser, and an Order for this GroupedOrder, with related OrderedItems"""
grouped_order = get_object_or_404(GroupedOrder, pk=grouped_order_id)