diff --git a/la_chariotte/order/models.py b/la_chariotte/order/models.py index a368885..b5fc867 100644 --- a/la_chariotte/order/models.py +++ b/la_chariotte/order/models.py @@ -62,7 +62,7 @@ class GroupedOrder(models.Model): return self.delivery_date >= timezone.now().date() def get_absolute_url(self): - return reverse("order:manage_items", kwargs={"pk": self.pk}) + return reverse("order:manage_items", kwargs={"code": self.code}) def clean_fields(self, exclude=None): super().clean_fields(exclude=exclude) @@ -80,7 +80,7 @@ class GroupedOrder(models.Model): return ( self.name if self.name - else f"Commande groupée {self.pk} du {self.date} organisée par {self.orga}" + else f"Commande groupée {self.code} du {self.date} organisée par {self.orga}" ) @@ -130,7 +130,7 @@ class Order(models.Model): self.save() def __str__(self): # pragma: no cover - return f"Commande de {self.author} pour la commande groupée {self.grouped_order.pk}" + return f"Commande de {self.author} pour la commande groupée {self.grouped_order.code}" class Item(models.Model): @@ -161,7 +161,7 @@ class Item(models.Model): return None def get_absolute_url(self): - return reverse("order:manage_items", kwargs={"pk": self.grouped_order.pk}) + return reverse("order:manage_items", kwargs={"code": self.grouped_order.code}) def __str__(self): # pragma: no cover return f"{self.name} ({self.price} €)" 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 10cebf2..9bd6910 100644 --- a/la_chariotte/order/templates/order/grouped_order_add_items.html +++ b/la_chariotte/order/templates/order/grouped_order_add_items.html @@ -11,7 +11,7 @@

Gestion des produits - {{ grouped_order.name }}

Sur cette page, vous pouvez ajouter et modifier les produits de votre commande groupée.

- {% url 'order:item_create' pk=grouped_order.pk as create_item_url %} + {% url 'order:item_create' grouped_order.code as create_item_url %} @@ -55,7 +55,7 @@
- Valider + Valider
diff --git a/la_chariotte/order/templates/order/grouped_order_confirm_delete.html b/la_chariotte/order/templates/order/grouped_order_confirm_delete.html index 3d33745..bc8a059 100644 --- a/la_chariotte/order/templates/order/grouped_order_confirm_delete.html +++ b/la_chariotte/order/templates/order/grouped_order_confirm_delete.html @@ -9,10 +9,10 @@

Voulez-vous vraiment supprimer la commande groupée {{ grouped_order }} définitivement ?

Cela supprimera toutes les commandes des participants et tous les produits de la commande.

- + {% csrf_token %} - Non + Non
{% endblock %} diff --git a/la_chariotte/order/templates/order/grouped_order_detail.html b/la_chariotte/order/templates/order/grouped_order_detail.html index 0d897ef..9b7d890 100644 --- a/la_chariotte/order/templates/order/grouped_order_detail.html +++ b/la_chariotte/order/templates/order/grouped_order_detail.html @@ -20,7 +20,7 @@ {% if grouped_order.description %}

{{ grouped_order.description }}

{% endif %} {% if not user.is_authenticated %}

Vous êtes l'organisateur·ice ? - + Connectez-vous pour accéder à la page de gestion

{% endif %} @@ -37,7 +37,7 @@

{% if user == grouped_order.orga %} - + Gestion de la commande groupée {% else %} @@ -69,7 +69,7 @@

Il n'y a pas de produits disponibles dans cette commande !

{% else %}

Commander

-
+ diff --git a/la_chariotte/order/templates/order/grouped_order_overview.html b/la_chariotte/order/templates/order/grouped_order_overview.html index 45e6429..425ba36 100644 --- a/la_chariotte/order/templates/order/grouped_order_overview.html +++ b/la_chariotte/order/templates/order/grouped_order_overview.html @@ -7,7 +7,7 @@ {% block content_title %}{{ grouped_order }} : gestion de la commande{% endblock %}

- + Retour à la page de commande @@ -31,10 +31,10 @@ Livraison le {{ grouped_order.delivery_date }}

@@ -89,10 +89,10 @@

Pour vous aider à distribuer les produits le jour J, vous pouvez télécharger la liste des commandes au format PDF pour l'imprimer, ou au format CSV pour l'afficher dans un tableur :

- + Commandes en PDF - + Commandes en CSV
@@ -100,7 +100,7 @@
- Gérer les produits + Gérer les produits

Produits commandés

{% if grouped_order.item_set.all %}
@@ -130,13 +130,13 @@
{% else %} -

Vous n'avez pas ajouté de produits à cette commande groupée. Ajoutez-en ici

+

Vous n'avez pas ajouté de produits à cette commande groupée. Ajoutez-en ici

{% endif %}
@@ -237,7 +237,7 @@

{{ order.price }} €

- + {% csrf_token %} Non diff --git a/la_chariotte/order/templates/order/index.html b/la_chariotte/order/templates/order/index.html index a962667..aa86a76 100644 --- a/la_chariotte/order/templates/order/index.html +++ b/la_chariotte/order/templates/order/index.html @@ -29,19 +29,19 @@ - {{ gr_order }} + {{ gr_order }} {{ gr_order.delivery_date }} {{ gr_order.deadline }} {{ gr_order.order_set.count }} - + - + - + @@ -67,19 +67,19 @@ - {{ gr_order }} + {{ gr_order }} {{ gr_order.delivery_date }} {{ gr_order.deadline }} {{ gr_order.order_set.count }} - + - + - + @@ -105,19 +105,19 @@ - {{ gr_order }} + {{ gr_order }} {{ gr_order.delivery_date }} {{ gr_order.deadline }} {{ gr_order.order_set.count }} - + - + - + diff --git a/la_chariotte/order/templates/order/order_detail.html b/la_chariotte/order/templates/order/order_detail.html index 84cb558..271c92e 100644 --- a/la_chariotte/order/templates/order/order_detail.html +++ b/la_chariotte/order/templates/order/order_detail.html @@ -26,11 +26,11 @@ Envoyer un mail

diff --git a/la_chariotte/order/tests/test_views/test_views_grouped_order.py b/la_chariotte/order/tests/test_views/test_views_grouped_order.py index 11bebc6..eb5b128 100644 --- a/la_chariotte/order/tests/test_views/test_views_grouped_order.py +++ b/la_chariotte/order/tests/test_views/test_views_grouped_order.py @@ -218,7 +218,7 @@ class TestGroupedOrderDetailView: detail_url = reverse( "order:grouped_order_detail", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.get(detail_url) @@ -233,7 +233,7 @@ class TestGroupedOrderDetailView: order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.post( @@ -254,7 +254,7 @@ class TestGroupedOrderDetailView: assert response.url == reverse( "order:order_confirm", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, "pk": order.pk, }, ) @@ -294,7 +294,7 @@ class TestGroupedOrderDetailView: detail_url = reverse( "order:grouped_order_detail", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.get(detail_url) @@ -305,7 +305,7 @@ class TestGroupedOrderDetailView: order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.post( @@ -353,7 +353,7 @@ class TestGroupedOrderDetailView: detail_url = reverse( "order:grouped_order_detail", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.get(detail_url) @@ -381,7 +381,7 @@ class TestGroupedOrderDetailView: detail_url = reverse( "order:grouped_order_detail", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.get(detail_url) @@ -404,7 +404,7 @@ class TestGroupedOrderDetailView: detail_url = reverse( "order:grouped_order_detail", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.get(detail_url) @@ -415,7 +415,7 @@ class TestGroupedOrderDetailView: order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.post( @@ -451,7 +451,7 @@ class TestGroupedOrderDetailView: detail_url = reverse( "order:grouped_order_detail", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.get(detail_url) @@ -462,7 +462,7 @@ class TestGroupedOrderDetailView: order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.post( @@ -498,7 +498,7 @@ class TestGroupedOrderDetailView: detail_url = reverse( "order:grouped_order_detail", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.get(detail_url) @@ -509,7 +509,7 @@ class TestGroupedOrderDetailView: order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.post( @@ -562,7 +562,7 @@ class TestGroupedOrderDetailView: detail_url = reverse( "order:grouped_order_detail", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.get(detail_url) @@ -575,7 +575,7 @@ class TestGroupedOrderDetailView: order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.post( @@ -595,7 +595,7 @@ class TestGroupedOrderDetailView: assert response.url == reverse( "order:order_confirm", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, "pk": order.pk, }, ) @@ -632,14 +632,14 @@ class TestGroupedOrderOverview: overview_url = reverse( "order:grouped_order_overview", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) # some items are ordered order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) client_log.post( @@ -674,7 +674,7 @@ class TestGroupedOrderOverview: orga_view_url = reverse( "order:grouped_order_overview", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) assert auth.get_user(client).is_anonymous @@ -685,7 +685,7 @@ class TestGroupedOrderOverview: reverse( "order:grouped_order_overview", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) ) @@ -704,7 +704,7 @@ class TestGroupedOrderOverview: orga_view_url = reverse( "order:grouped_order_overview", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.get(orga_view_url) @@ -729,7 +729,7 @@ class TestGroupedOrderOverview: orga_view_url = reverse( "order:grouped_order_overview", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.get(orga_view_url) @@ -757,7 +757,7 @@ class TestGroupedOrderOverview: orga_view_url = reverse( "order:grouped_order_overview", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.get(orga_view_url) @@ -822,7 +822,7 @@ class TestGroupedOrderUpdateView: # get the update form update_grouped_order_url = reverse( - "order:update_grouped_order", kwargs={"pk": grouped_order.pk} + "order:update_grouped_order", kwargs={"code": grouped_order.code} ) response = client_log.get(update_grouped_order_url) assert response.status_code == 200 @@ -863,7 +863,7 @@ class TestGroupedOrderUpdateView: # get the update form update_grouped_order_url = reverse( - "order:update_grouped_order", kwargs={"pk": grouped_order.pk} + "order:update_grouped_order", kwargs={"code": grouped_order.code} ) response = client_log.get(update_grouped_order_url) assert response.status_code == 200 @@ -899,7 +899,7 @@ class TestGroupedOrderUpdateView: # get the update form update_grouped_order_url = reverse( - "order:update_grouped_order", kwargs={"pk": grouped_order.pk} + "order:update_grouped_order", kwargs={"code": grouped_order.code} ) response = client_log.get(update_grouped_order_url) assert response.status_code == 403 @@ -916,7 +916,7 @@ class TestGroupedOrderUpdateView: # get the update form update_grouped_order_url = reverse( - "order:update_grouped_order", kwargs={"pk": grouped_order.pk} + "order:update_grouped_order", kwargs={"code": grouped_order.code} ) response = client.get(update_grouped_order_url) assert response.status_code == 302 @@ -941,7 +941,7 @@ class TestGroupedOrderAddItemsView: add_items_view_url = reverse( "order:manage_items", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.get(add_items_view_url) @@ -960,7 +960,7 @@ class TestGroupedOrderAddItemsView: add_items_view_url = reverse( "order:manage_items", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) assert auth.get_user(client).is_anonymous @@ -970,9 +970,7 @@ class TestGroupedOrderAddItemsView: assert response.url.endswith( reverse( "order:manage_items", - kwargs={ - "pk": grouped_order.pk, - }, + kwargs={"code": grouped_order.code}, ) ) @@ -1001,10 +999,10 @@ class TestGroupedOrderAddItemsView: # Create an item grouped_order = models.GroupedOrder.objects.first() - create_item_url = reverse("order:item_create", args=[grouped_order.id]) + create_item_url = reverse("order:item_create", args=[grouped_order.code]) 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]) + response.url == reverse("order:manage_items", args=[grouped_order.code]) assert grouped_order.item_set.count() == 1 # Delete the item @@ -1012,7 +1010,7 @@ class TestGroupedOrderAddItemsView: 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 response.url == reverse("order:manage_items", args=[grouped_order.code]) assert grouped_order.item_set.count() == 0 def test_create_or_delete_item__not_orga(self, client_log, other_user): @@ -1062,7 +1060,7 @@ class TestGroupedOrderDeleteView: # get the delete view delete_view_url = reverse( - "order:delete_grouped_order", kwargs={"pk": grouped_order.pk} + "order:delete_grouped_order", kwargs={"code": grouped_order.code} ) response = client_log.get(delete_view_url) assert response.status_code == 200 @@ -1091,7 +1089,7 @@ class TestGroupedOrderDeleteView: # get the delete view delete_view_url = reverse( - "order:delete_grouped_order", kwargs={"pk": grouped_order.pk} + "order:delete_grouped_order", kwargs={"code": grouped_order.code} ) response = client_log.get(delete_view_url) assert response.status_code == 403 @@ -1114,7 +1112,7 @@ class TestGroupedOrderDeleteView: # get the delete view delete_view_url = reverse( - "order:delete_grouped_order", kwargs={"pk": grouped_order.pk} + "order:delete_grouped_order", kwargs={"code": grouped_order.code} ) response = client.get(delete_view_url) assert response.status_code == 302 @@ -1148,7 +1146,7 @@ class TestGroupedOrderDuplicateView: # duplicate duplicate_view_url = reverse( - "order:duplicate_grouped_order", kwargs={"pk": grouped_order.pk} + "order:duplicate_grouped_order", kwargs={"code": grouped_order.code} ) response = client_log.get(duplicate_view_url) assert models.GroupedOrder.objects.count() == 2 @@ -1166,7 +1164,7 @@ class TestGroupedOrderDuplicateView: # redirection assert response.status_code == 302 assert response.url == reverse( - "order:update_grouped_order", kwargs={"pk": new_grouped_order.pk} + "order:update_grouped_order", kwargs={"code": new_grouped_order.code} ) # The initial grouped order did not change @@ -1184,7 +1182,7 @@ class TestGroupedOrderDuplicateView: # get the duplicate view duplicate_view_url = reverse( - "order:duplicate_grouped_order", kwargs={"pk": grouped_order.pk} + "order:duplicate_grouped_order", kwargs={"code": grouped_order.code} ) response = client_log.get(duplicate_view_url) assert response.status_code == 403 @@ -1203,7 +1201,7 @@ class TestGroupedOrderDuplicateView: # get the duplicate view duplicate_view_url = reverse( - "order:duplicate_grouped_order", kwargs={"pk": grouped_order.pk} + "order:duplicate_grouped_order", kwargs={"code": grouped_order.code} ) response = client.get(duplicate_view_url) assert response.status_code == 302 @@ -1225,7 +1223,7 @@ class TestGroupedOrderSheetView: generate_sheet_url = reverse( "order:grouped_order_sheet", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.get(generate_sheet_url) @@ -1243,7 +1241,7 @@ class TestGroupedOrderSheetView: generate_sheet_url = reverse( "order:grouped_order_sheet", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.get(generate_sheet_url) @@ -1261,7 +1259,7 @@ class TestGroupedOrderSheetView: generate_sheet_url = reverse( "order:grouped_order_sheet", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.get(generate_sheet_url) @@ -1302,7 +1300,7 @@ class TestExportGroupedOrderEmailAddressesToCSVView: email_list_view_url = reverse( "order:email_list", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) assert auth.get_user(client).is_anonymous @@ -1325,7 +1323,7 @@ class TestExportGroupedOrderEmailAddressesToCSVView: email_list_view_url = reverse( "order:email_list", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.get(email_list_view_url) @@ -1344,7 +1342,7 @@ class TestExportGroupedOrderEmailAddressesToCSVView: email_list_view_url = reverse( "order:email_list", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.get(email_list_view_url) @@ -1371,7 +1369,7 @@ class TestExportGroupedOrderToCSVView: csv_view_url = reverse( "order:grouped_order_csv_export", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) assert auth.get_user(client).is_anonymous @@ -1394,7 +1392,7 @@ class TestExportGroupedOrderToCSVView: csv_view_url = reverse( "order:grouped_order_csv_export", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.get(csv_view_url) @@ -1415,7 +1413,7 @@ class TestExportGroupedOrderToCSVView: csv_view_url = reverse( "order:grouped_order_csv_export", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.get(csv_view_url) diff --git a/la_chariotte/order/tests/test_views/test_views_item.py b/la_chariotte/order/tests/test_views/test_views_item.py index 3f3386b..54cb904 100644 --- a/la_chariotte/order/tests/test_views/test_views_item.py +++ b/la_chariotte/order/tests/test_views/test_views_item.py @@ -23,7 +23,7 @@ class TestItemCreateView: create_item_view_url = reverse( "order:item_create", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.post( @@ -33,7 +33,7 @@ class TestItemCreateView: assert response.url == reverse( "order:manage_items", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) assert models.Item.objects.first().name == "titre item" @@ -53,7 +53,7 @@ class TestItemCreateView: create_item_view_url = reverse( "order:item_create", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.post(create_item_view_url, {"name": "titre item"}) @@ -75,7 +75,7 @@ class TestItemCreateView: create_item_view_url = reverse( "order:item_create", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.post(create_item_view_url, {"name": "titre item"}) diff --git a/la_chariotte/order/tests/test_views/test_views_order.py b/la_chariotte/order/tests/test_views/test_views_order.py index 38e4d38..fb3d18c 100644 --- a/la_chariotte/order/tests/test_views/test_views_order.py +++ b/la_chariotte/order/tests/test_views/test_views_order.py @@ -31,7 +31,7 @@ class TestOrder: order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.post( @@ -64,7 +64,7 @@ class TestOrder: order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.post( @@ -97,7 +97,7 @@ class TestOrder: order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client_log.post( @@ -132,7 +132,7 @@ class TestOrder: detail_url = reverse( "order:grouped_order_detail", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.get(detail_url) @@ -144,7 +144,7 @@ class TestOrder: order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.post( @@ -191,7 +191,7 @@ class TestOrder: detail_url = reverse( "order:grouped_order_detail", kwargs={ - "pk": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.get(detail_url) @@ -203,7 +203,7 @@ class TestOrder: order_url = reverse( "order:order", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, }, ) response = client.post( @@ -223,7 +223,7 @@ class TestOrder: assert response.url == reverse( "order:order_confirm", kwargs={ - "grouped_order_id": grouped_order.pk, + "code": grouped_order.code, "pk": order.pk, }, ) @@ -256,14 +256,14 @@ class TestOrder: assert item.ordered_nb == 4 delete_url = reverse( "order:order_delete", - kwargs={"grouped_order_id": grouped_order.id, "pk": order.id}, + kwargs={"code": grouped_order.code, "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, + "code": grouped_order.code, }, ) client_log.get(response.url) diff --git a/la_chariotte/order/tests/utils.py b/la_chariotte/order/tests/utils.py index f2747ce..078b7e1 100644 --- a/la_chariotte/order/tests/utils.py +++ b/la_chariotte/order/tests/utils.py @@ -22,6 +22,7 @@ def create_grouped_order( name=name, orga=orga_user, delivery_date=date, deadline=deadline ) grouped_order.create_code_from_pk() + grouped_order.save() return grouped_order diff --git a/la_chariotte/order/urls.py b/la_chariotte/order/urls.py index 7608be5..21bd7c0 100644 --- a/la_chariotte/order/urls.py +++ b/la_chariotte/order/urls.py @@ -6,67 +6,69 @@ app_name = "order" urlpatterns = [ path("", views.IndexView.as_view(), name="index"), path( - "/", views.GroupedOrderDetailView.as_view(), name="grouped_order_detail" + "/", + views.GroupedOrderDetailView.as_view(), + name="grouped_order_detail", ), path( - "/gerer", + "/gerer", views.GroupedOrderOverview.as_view(), name="grouped_order_overview", ), - path("/commander/", views.place_order, name="order"), + path("/commander/", views.place_order, name="order"), path( - "//confirmation/", + "//confirmation/", views.OrderDetailView.as_view(), name="order_confirm", ), path( - "/gerer//supprimer", + "/gerer//supprimer", views.OrderDeleteView.as_view(), name="order_delete", ), path("creer", views.GroupedOrderCreateView.as_view(), name="create_grouped_order"), path( - "/gerer-produits", + "/gerer-produits", views.GroupedOrderAddItemsView.as_view(), name="manage_items", ), path( - "/modifier", + "/modifier", views.GroupedOrderUpdateView.as_view(), name="update_grouped_order", ), path( - "/supprimer", + "/supprimer", views.GroupedOrderDeleteView.as_view(), name="delete_grouped_order", ), path( - "/dupliquer", + "/dupliquer", views.GroupedOrderDuplicateView.as_view(), name="duplicate_grouped_order", ), path( - "/gerer-produits/nouveau", + "/gerer-produits/nouveau", views.ItemCreateView.as_view(), name="item_create", ), path( - "/gerer-produits//supprimer", + "/gerer-produits//supprimer", views.ItemDeleteView.as_view(), name="item_delete", ), path( - "/gerer/imprimer", + "/gerer/imprimer", views.DownloadGroupedOrderSheetView.as_view(), name="grouped_order_sheet", ), path( - "/gerer/liste-mails", + "/gerer/liste-mails", views.ExportGroupedOrderEmailAddressesToCSVView.as_view(), name="email_list", ), path( - "/gerer/csv", + "/gerer/csv", views.ExportGroupedOrderToCSVView.as_view(), name="grouped_order_csv_export", ), diff --git a/la_chariotte/order/views/grouped_order.py b/la_chariotte/order/views/grouped_order.py index ffd169b..3d3a8b5 100644 --- a/la_chariotte/order/views/grouped_order.py +++ b/la_chariotte/order/views/grouped_order.py @@ -68,6 +68,10 @@ class GroupedOrderDetailView(generic.DetailView): template_name = "order/grouped_order_detail.html" context_object_name = "grouped_order" + def get_object(self, queryset=None): + """Get the object from the code in url path""" + return get_object_or_404(GroupedOrder, code=self.kwargs.get("code")) + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # Get remaining quantities @@ -91,6 +95,10 @@ class GroupedOrderOverview(UserPassesTestMixin, generic.DetailView): template_name = "order/grouped_order_overview.html" context_object_name = "grouped_order" + def get_object(self, queryset=None): + """Get the object from the code in url path""" + return get_object_or_404(GroupedOrder, code=self.kwargs.get("code")) + def test_func(self): """Accessible only if the requesting user is the grouped order organizer""" return self.get_object().orga == self.request.user @@ -137,6 +145,10 @@ class GroupedOrderUpdateView(UserPassesTestMixin, generic.UpdateView): context_object_name = "grouped_order" form_class = GroupedOrderForm + def get_object(self, queryset=None): + """Get the object from the code in url path""" + return get_object_or_404(GroupedOrder, code=self.kwargs.get("code")) + def test_func(self): """Accessible only if the requesting user is the grouped order organizer""" return self.get_object().orga == self.request.user @@ -151,20 +163,19 @@ 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""" - # url = reverse_lazy("order:update_grouped_order", args=(self.get_object().pk,)) - 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 + initial_grouped_order = get_object_or_404( + GroupedOrder, code=self.kwargs.get("code") ) + return initial_grouped_order.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")) + initial_grouped_order = get_object_or_404( + GroupedOrder, code=self.kwargs.get("code") + ) new_grouped_order = GroupedOrder.objects.create( name=f"{initial_grouped_order.name} - copie", orga=self.request.user, @@ -173,6 +184,9 @@ class GroupedOrderDuplicateView(UserPassesTestMixin, generic.RedirectView): place=initial_grouped_order.place, description=initial_grouped_order.description, ) + # create a unique code for the new grouped order + new_grouped_order.create_code_from_pk() + new_grouped_order.save() # duplicate each item and add it to new_grouped_order for item in initial_grouped_order.item_set.all(): item.pk = None @@ -180,13 +194,13 @@ class GroupedOrderDuplicateView(UserPassesTestMixin, generic.RedirectView): item.save() new_grouped_order.item_set.add(item) - self.kwargs["new_go_id"] = new_grouped_order.pk + self.kwargs["new_go_code"] = new_grouped_order.code 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"]} + "order:update_grouped_order", kwargs={"code": self.kwargs["new_go_code"]} ) @@ -197,6 +211,10 @@ class GroupedOrderDeleteView(UserPassesTestMixin, generic.DeleteView): template_name = "order/grouped_order_confirm_delete.html" context_object_name = "grouped_order" + def get_object(self, queryset=None): + """Get the object from the code in url path""" + return get_object_or_404(GroupedOrder, code=self.kwargs.get("code")) + def get_success_url(self): return reverse_lazy("order:index") @@ -221,18 +239,20 @@ class GroupedOrderAddItemsView(UserPassesTestMixin, generic.ListView): def get_queryset(self): items = super().get_queryset() - items = items.filter(grouped_order__id=self.kwargs.get("pk")) + items = items.filter(grouped_order__code=self.kwargs.get("code")) return items def get_context_data(self, **kwargs): context = super(GroupedOrderAddItemsView, self).get_context_data(**kwargs) - context["grouped_order"] = GroupedOrder.objects.get(id=self.kwargs.get("pk")) + context["grouped_order"] = GroupedOrder.objects.get( + code=self.kwargs.get("code") + ) return context def test_func(self): """Accessible only if the requesting user is the grouped order organizer""" - grouped_order_id = self.kwargs.get("pk") - return GroupedOrder.objects.get(pk=grouped_order_id).orga == self.request.user + grouped_order = get_object_or_404(GroupedOrder, code=self.kwargs.get("code")) + return grouped_order.orga == self.request.user class GroupedOrderExportView(UserPassesTestMixin, generic.DetailView): @@ -243,6 +263,10 @@ class GroupedOrderExportView(UserPassesTestMixin, generic.DetailView): template_name = "order/grouped_order_sheet.html" context_object_name = "grouped_order" + def get_object(self, queryset=None): + """Get the object from the code in url path""" + return get_object_or_404(GroupedOrder, code=self.kwargs.get("code")) + def test_func(self): """Accessible only if the requesting user is the grouped order organizer""" return self.get_object().orga == self.request.user @@ -288,12 +312,13 @@ class ExportGroupedOrderEmailAddressesToCSVView(UserPassesTestMixin, generic.Vie def test_func(self): """Accessible only if the requesting user is the grouped order organizer""" - grouped_order_id = self.kwargs.get("grouped_order_id") - return GroupedOrder.objects.get(pk=grouped_order_id).orga == self.request.user + initial_grouped_order = get_object_or_404( + GroupedOrder, code=self.kwargs.get("code") + ) + return initial_grouped_order.orga == self.request.user def get(self, request, *args, **kwargs): - grouped_order_id = self.kwargs.get("grouped_order_id") - grouped_order = get_object_or_404(GroupedOrder, pk=grouped_order_id) + grouped_order = get_object_or_404(GroupedOrder, code=self.kwargs.get("code")) participants = OrderAuthor.objects.filter( order__in=grouped_order.order_set.all() ) diff --git a/la_chariotte/order/views/item.py b/la_chariotte/order/views/item.py index 8d8556f..47108d7 100644 --- a/la_chariotte/order/views/item.py +++ b/la_chariotte/order/views/item.py @@ -1,4 +1,5 @@ from django.contrib.auth.mixins import UserPassesTestMixin +from django.shortcuts import get_object_or_404 from django.urls import reverse_lazy from django.views import generic @@ -14,13 +15,13 @@ class ItemCreateView(UserPassesTestMixin, generic.CreateView): def get_form_kwargs(self): kwargs = super().get_form_kwargs() - kwargs["grouped_order"] = GroupedOrder.objects.get(id=self.kwargs.get("pk")) + kwargs["grouped_order"] = GroupedOrder.objects.get(code=self.kwargs.get("code")) return kwargs def test_func(self): """Accessible only if the requesting user is the grouped order organizer""" - grouped_order_id = self.kwargs.get("pk") - return GroupedOrder.objects.get(pk=grouped_order_id).orga == self.request.user + grouped_order = get_object_or_404(GroupedOrder, code=self.kwargs.get("code")) + return grouped_order.orga == self.request.user class ItemDeleteView(UserPassesTestMixin, generic.DeleteView): @@ -31,7 +32,7 @@ class ItemDeleteView(UserPassesTestMixin, generic.DeleteView): model = Item def get_success_url(self): - return reverse_lazy("order:manage_items", args=[self.object.grouped_order.id]) + return reverse_lazy("order:manage_items", args=[self.object.grouped_order.code]) def test_func(self): """Accessible only if the requesting user is the grouped order organizer""" diff --git a/la_chariotte/order/views/order.py b/la_chariotte/order/views/order.py index 0833f22..42543df 100644 --- a/la_chariotte/order/views/order.py +++ b/la_chariotte/order/views/order.py @@ -7,9 +7,9 @@ from django.views import generic from ..models import GroupedOrder, Order, OrderAuthor, OrderedItem -def place_order(request, grouped_order_id): +def place_order(request, code): """Creates an AnonymousUser, and an Order for this GroupedOrder, with related OrderedItems""" - grouped_order = get_object_or_404(GroupedOrder, pk=grouped_order_id) + grouped_order = get_object_or_404(GroupedOrder, code=code) # check if the grouped order is ongoing or if the user is allowed to order user_is_orga = request.user == grouped_order.orga @@ -101,7 +101,7 @@ def place_order(request, grouped_order_id): # with POST data. This prevents data from being posted twice if a # user hits the Back button. return http.HttpResponseRedirect( - reverse("order:order_confirm", args=(grouped_order.pk, order.pk)) + reverse("order:order_confirm", args=(grouped_order.code, order.pk)) ) @@ -133,7 +133,7 @@ class OrderDeleteView(UserPassesTestMixin, generic.DeleteView): def get_success_url(self): return reverse_lazy( - "order:grouped_order_overview", args=[self.object.grouped_order.id] + "order:grouped_order_overview", args=[self.object.grouped_order.code] ) def test_func(self):