diff --git a/la_chariotte/order/templates/order/grouped_order_overview.html b/la_chariotte/order/templates/order/grouped_order_overview.html
index 836aa55..320267a 100644
--- a/la_chariotte/order/templates/order/grouped_order_overview.html
+++ b/la_chariotte/order/templates/order/grouped_order_overview.html
@@ -157,7 +157,14 @@
- {% if order.note %}{% endif %}
+ {% if order.note %}
+
+ {% else %}
+
+ {% endif %}
+
@@ -193,6 +200,48 @@
+
+
+
+
+
+
+
+
+
+ {% for item in order.ordered_items.all %}
+ {{ item.nb }} x {{ item.item.name }}
+
+ {% endfor %}
+
+ {% if order.note %}
+
+
Note à l'organisateur·ice
+
{{ order.note }}
+
+
+ {% endif %}
+
+
{% endfor %}
diff --git a/la_chariotte/order/tests/test_views.py b/la_chariotte/order/tests/test_views.py
index 44b927f..0f41260 100644
--- a/la_chariotte/order/tests/test_views.py
+++ b/la_chariotte/order/tests/test_views.py
@@ -1027,6 +1027,44 @@ class TestOrder:
assert item2.ordered_nb == 0
assert order.ordered_items.count() == 1
+ def test_delete_order(self, client_log):
+ """The orga user deletes an order. The grouped order is updated"""
+ grouped_order = create_grouped_order(
+ days_before_delivery_date=5,
+ days_before_deadline=2,
+ name="gr order test",
+ orga_user=auth.get_user(client_log),
+ )
+ order = order_items_in_grouped_order(grouped_order)
+ author = order.author
+ order_price = order.price
+ item = order.ordered_items.first().item
+ assert (
+ models.OrderedItem.objects.all().count() == 4
+ ) # 4 orderedItem, 2 are in the order 'order'
+ assert grouped_order.order_set.all().count() == 3
+ assert grouped_order.total_price == 35
+ assert item.ordered_nb == 4
+ delete_url = reverse(
+ "order:order_delete",
+ kwargs={"grouped_order_id": grouped_order.id, "pk": order.id},
+ )
+ response = client_log.post(delete_url)
+ assert response.status_code == 302
+ assert response.url == reverse(
+ "order:grouped_order_overview",
+ kwargs={
+ "pk": grouped_order.pk,
+ },
+ )
+ client_log.get(response.url)
+ grouped_order.refresh_from_db()
+ item.refresh_from_db()
+ assert models.OrderedItem.objects.all().count() == 2
+ assert grouped_order.order_set.all().count() == 2
+ assert grouped_order.total_price == 35 - order_price
+ assert item.ordered_nb == 1
+
class TestGroupedOrderCreateView:
def test_create_grouped_order(self, client_log):
diff --git a/la_chariotte/order/urls.py b/la_chariotte/order/urls.py
index c3b73b7..44c6971 100644
--- a/la_chariotte/order/urls.py
+++ b/la_chariotte/order/urls.py
@@ -19,6 +19,11 @@ urlpatterns = [
views.OrderDetailView.as_view(),
name="order_confirm",
),
+ path(
+ "
/gerer//supprimer",
+ views.OrderDeleteView.as_view(),
+ name="order_delete",
+ ),
path("creer", views.GroupedOrderCreateView.as_view(), name="create_grouped_order"),
path(
"/gerer-produits",
diff --git a/la_chariotte/order/views/__init__.py b/la_chariotte/order/views/__init__.py
index 6b7883d..482d6b8 100644
--- a/la_chariotte/order/views/__init__.py
+++ b/la_chariotte/order/views/__init__.py
@@ -7,6 +7,6 @@ from .grouped_order import (DownloadGroupedOrderSheetView,
GroupedOrderSheetView, GroupedOrderUpdateView,
IndexView)
from .item import ItemCreateView, ItemDeleteView
-from .order import OrderDetailView, order
+from .order import OrderDeleteView, OrderDetailView, order
# fmt: on
diff --git a/la_chariotte/order/views/grouped_order.py b/la_chariotte/order/views/grouped_order.py
index c87076e..e121b8c 100644
--- a/la_chariotte/order/views/grouped_order.py
+++ b/la_chariotte/order/views/grouped_order.py
@@ -98,6 +98,7 @@ class GroupedOrderOverview(UserPassesTestMixin, generic.DetailView):
def get(self, request, *args, **kwargs):
# Compute grouped order total price before display
self.get_object().compute_total_price()
+ self.get_object().compute_items_ordered_nb()
return super().get(self, request, *args, **kwargs)
def get_context_data(self, **kwargs):
diff --git a/la_chariotte/order/views/order.py b/la_chariotte/order/views/order.py
index 86a3d5e..5debfda 100644
--- a/la_chariotte/order/views/order.py
+++ b/la_chariotte/order/views/order.py
@@ -1,6 +1,7 @@
from django import http
+from django.contrib.auth.mixins import UserPassesTestMixin
from django.shortcuts import get_object_or_404, render
-from django.urls import reverse
+from django.urls import reverse, reverse_lazy
from django.views import generic
from ..models import GroupedOrder, Order, OrderAuthor, OrderedItem
@@ -127,3 +128,18 @@ class OrderDetailView(generic.DetailView):
"""Confirmation page after a user orders"""
model = Order
+
+
+class OrderDeleteView(UserPassesTestMixin, generic.DeleteView):
+ """DeleteView for an order"""
+
+ model = Order
+
+ def get_success_url(self):
+ return reverse_lazy(
+ "order:grouped_order_overview", 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