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 @@ + + + {% 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