duplicate grouped order part 2

This commit is contained in:
Laetitia Getti 2023-07-06 16:31:48 +02:00 committed by Laetitia Getti
parent c8c9744c98
commit 0bf680c74b
3 changed files with 49 additions and 2 deletions

View file

@ -35,6 +35,11 @@ urlpatterns = [
views.GroupedOrderDeleteView.as_view(),
name="delete_grouped_order",
),
path(
"<int:pk>/dupliquer",
views.GroupedOrderDuplicateView.as_view(),
name="duplicate_grouped_order",
),
path(
"<int:pk>/gerer-produits/nouveau",
views.ItemCreateView.as_view(),

View file

@ -2,8 +2,9 @@
from .grouped_order import (ExportGroupedOrderEmailAddressesToCSVView,
GroupedOrderAddItemsView, GroupedOrderCreateView,
GroupedOrderDeleteView, GroupedOrderDetailView,
GroupedOrderOverview, GroupedOrderSheetView,
GroupedOrderUpdateView, IndexView)
GroupedOrderDuplicateView, GroupedOrderOverview,
GroupedOrderSheetView, GroupedOrderUpdateView,
IndexView)
from .item import ItemCreateView, ItemDeleteView
from .order import OrderDetailView, order

View file

@ -129,6 +129,47 @@ class GroupedOrderUpdateView(UserPassesTestMixin, generic.UpdateView):
return kwargs
class GroupedOrderDuplicateView(UserPassesTestMixin, generic.RedirectView):
"""View for duplicating an existing grouped order : the groupedOrder is duplicated
and the user is redirected to the new grouped order update view"""
def test_func(self):
"""Accessible only if the requesting user is the grouped order organizer"""
initial_grouped_order_id = self.kwargs.get("pk")
return (
GroupedOrder.objects.get(pk=initial_grouped_order_id).orga
== self.request.user
)
def get(self, request, *args, **kwargs):
# overwrite the get function to copy the initial grouped order before redirecting to
# the update view of the new grouped order
initial_grouped_order = GroupedOrder.objects.get(pk=self.kwargs.get("pk"))
new_grouped_order = GroupedOrder.objects.create(
name=f"{initial_grouped_order.name} - copie",
orga=self.request.user,
delivery_date=initial_grouped_order.delivery_date,
deadline=initial_grouped_order.deadline,
place=initial_grouped_order.place,
description=initial_grouped_order.description,
)
# duplicate each item and add it to new_grouped_order
for item in initial_grouped_order.item_set.all():
item.pk = None
item.ordered_nb = 0
item.save()
new_grouped_order.item_set.add(item)
self.kwargs["new_go_id"] = new_grouped_order.pk
return super().get(request, *args, **kwargs)
def get_redirect_url(self, *args, **kwargs):
return reverse_lazy(
"order:update_grouped_order", kwargs={"pk": self.kwargs["new_go_id"]}
)
class GroupedOrderDeleteView(UserPassesTestMixin, generic.DeleteView):
"""View for deleting a grouped order"""