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(), views.GroupedOrderDeleteView.as_view(),
name="delete_grouped_order", name="delete_grouped_order",
), ),
path(
"<int:pk>/dupliquer",
views.GroupedOrderDuplicateView.as_view(),
name="duplicate_grouped_order",
),
path( path(
"<int:pk>/gerer-produits/nouveau", "<int:pk>/gerer-produits/nouveau",
views.ItemCreateView.as_view(), views.ItemCreateView.as_view(),

View file

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

View file

@ -129,6 +129,47 @@ class GroupedOrderUpdateView(UserPassesTestMixin, generic.UpdateView):
return kwargs 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): class GroupedOrderDeleteView(UserPassesTestMixin, generic.DeleteView):
"""View for deleting a grouped order""" """View for deleting a grouped order"""