use the grouped order unique code in url path

This commit is contained in:
Laetitia Getti 2023-08-08 16:48:05 +02:00 committed by Laetitia Getti
parent 2083142d47
commit 6006cbe8df
15 changed files with 166 additions and 139 deletions

View file

@ -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} €)"

View file

@ -11,7 +11,7 @@
<p class="title">Gestion des produits - {{ grouped_order.name }}</p>
<p>Sur cette page, vous pouvez ajouter et modifier les produits de votre commande groupée.</p>
{% url 'order:item_create' pk=grouped_order.pk as create_item_url %}
{% url 'order:item_create' grouped_order.code as create_item_url %}
<table class="table">
<thead>
@ -55,7 +55,7 @@
<div class="modal-content">
<div class="box">
<p>Voulez-vous vraiment supprimer le produit {{ item.name }} de la commande ?</p>
<form action="{% url 'order:item_delete' grouped_order.id item.id %}" method="post">
<form action="{% url 'order:item_delete' grouped_order.code item.id %}" method="post">
{% csrf_token %}
<input type="submit" name="{{ item.id }}" value="Oui" class="button is-danger"/>
<a class="button is-light" href="">Non</a>
@ -70,7 +70,7 @@
</table>
<div class="buttons is-pulled-right">
<a href="{% url 'order:grouped_order_overview' pk=grouped_order.id %}" class="button is-primary">Valider</a>
<a href="{% url 'order:grouped_order_overview' grouped_order.code %}" class="button is-primary">Valider</a>
</div>
</div>

View file

@ -9,10 +9,10 @@
<div class="box">
<p>Voulez-vous vraiment supprimer la commande groupée {{ grouped_order }} définitivement ?</p>
<p>Cela supprimera toutes les commandes des participants et tous les produits de la commande.</p>
<form action="{% url 'order:delete_grouped_order' grouped_order.pk %}" method="post">
<form action="{% url 'order:delete_grouped_order' grouped_order.code %}" method="post">
{% csrf_token %}
<input type="submit" name="{{ item.id }}" value="Oui" class="button is-danger"/>
<a class="button is-light" href="{% url 'order:grouped_order_overview' grouped_order.pk %}">Non</a>
<a class="button is-light" href="{% url 'order:grouped_order_overview' grouped_order.code %}">Non</a>
</form>
</div>
{% endblock %}

View file

@ -20,7 +20,7 @@
{% if grouped_order.description %}<p>{{ grouped_order.description }}</p>{% endif %}
{% if not user.is_authenticated %}
<p><span class="has-text-dark is-italic">Vous êtes l'organisateur·ice ?</span>
<a href="{% url 'order:grouped_order_overview' grouped_order.id %}">
<a href="{% url 'order:grouped_order_overview' grouped_order.code %}">
Connectez-vous pour accéder à la page de gestion</a>
</p>
{% endif %}
@ -37,7 +37,7 @@
</p>
{% if user == grouped_order.orga %}
<a class="button is-primary" href="{% url 'order:grouped_order_overview' grouped_order.id %}">
<a class="button is-primary" href="{% url 'order:grouped_order_overview' grouped_order.code %}">
<i class="fa fa-list-ul mr-3" aria-hidden="true"></i>Gestion de la commande groupée
</a>
{% else %}
@ -69,7 +69,7 @@
<p>Il n'y a pas de produits disponibles dans cette commande !</p>
{% else %}
<p class="title">Commander</p>
<form id="inputs-parent" method="post" action="{% url 'order:order' grouped_order.id %}">
<form id="inputs-parent" method="post" action="{% url 'order:order' grouped_order.code %}">
<!-- Tableau de commandes - sur ordi -->
<table class="table is-hidden-touch">

View file

@ -7,7 +7,7 @@
{% block content_title %}{{ grouped_order }} : gestion de la commande{% endblock %}
</p>
<div class="buttons">
<a class="button is-light" href={% url 'order:grouped_order_detail' grouped_order.id %}>
<a class="button is-light" href={% url 'order:grouped_order_detail' grouped_order.code %}>
<i class="fa fa-arrow-left mr-3" aria-hidden="true"></i>Retour à la page de commande
</a>
<a class="button is-primary" href="{% url 'order:index' %}">
@ -31,10 +31,10 @@
Livraison le {{ grouped_order.delivery_date }}
</p>
<div class="buttons">
<a class="button is-light" href="{% url 'order:update_grouped_order' grouped_order.id %}">
<a class="button is-light" href="{% url 'order:update_grouped_order' grouped_order.code %}">
<i class="fa fa-pencil mr-3" aria-hidden="true"></i>Modifier la commande
</a>
<a class="button is-light" href="{% url 'order:delete_grouped_order' grouped_order.id %}">
<a class="button is-light" href="{% url 'order:delete_grouped_order' grouped_order.code %}">
<i class="fa fa-trash mr-3" aria-hidden="true"></i>Supprimer la commande
</a>
</div>
@ -89,10 +89,10 @@
<div class="column">
<p>Pour vous aider à distribuer les produits le jour J, vous pouvez télécharger la liste des commandes
au format PDF pour l'<strong>imprimer</strong>, ou au format CSV pour l'<strong>afficher dans un tableur</strong> :</p>
<a class="button is-info" href="{% url 'order:grouped_order_sheet' grouped_order.id %}" target="_blank">
<a class="button is-info" href="{% url 'order:grouped_order_sheet' grouped_order.code %}" target="_blank">
<i class="fa fa-file-pdf-o mr-3" aria-hidden="true"></i>Commandes en PDF
</a>
<a class="button is-info" href="{% url 'order:grouped_order_csv_export' grouped_order.id %}" target="_blank">
<a class="button is-info" href="{% url 'order:grouped_order_csv_export' grouped_order.code %}" target="_blank">
<i class="fa fa-file-excel-o mr-3" aria-hidden="true"></i>Commandes en CSV
</a>
</div>
@ -100,7 +100,7 @@
</div>
<div id="resume" class="box tabcontent">
<a class="button is-primary is-pulled-right" href="{% url 'order:manage_items' grouped_order.pk %}">Gérer les produits</a>
<a class="button is-primary is-pulled-right" href="{% url 'order:manage_items' grouped_order.code %}">Gérer les produits</a>
<p class="title">Produits commandés</p>
{% if grouped_order.item_set.all %}
<table class="table">
@ -130,13 +130,13 @@
</tfoot>
</table>
{% else %}
<p>Vous n'avez pas ajouté de produits à cette commande groupée. Ajoutez-en <a href="{% url 'order:manage_items' grouped_order.pk %}">ici</a></p>
<p>Vous n'avez pas ajouté de produits à cette commande groupée. Ajoutez-en <a href="{% url 'order:manage_items' grouped_order.code %}">ici</a></p>
{% endif %}
</div>
<div id="commandes" class="box tabcontent">
<div class="buttons is-pulled-right">
<a class="button is-info" href="{% url 'order:email_list' grouped_order.id %}" title="Télécharger la liste des mails des participants">
<a class="button is-info" href="{% url 'order:email_list' grouped_order.code %}" title="Télécharger la liste des mails des participants">
<i class="fa fa-download mr-3" aria-hidden="true"></i>Liste des mails
</a>
</div>
@ -237,7 +237,7 @@
<p>{{ order.price }} €</p>
</div>
<div class="column">
<form action="{% url 'order:order_delete' grouped_order.id order.id %}" method="post">
<form action="{% url 'order:order_delete' grouped_order.code order.id %}" method="post">
{% csrf_token %}
<input type="submit" name="{{ item.id }}" value="Oui" class="button is-danger"/>
<a class="button is-light" aria-label="close">Non</a>

View file

@ -29,19 +29,19 @@
<tr>
<td>
<i class="fa fa-unlock-alt mr-2 has-text-success-dark" aria-hidden="true" title="Commandes ouvertes"></i>
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.id %}">{{ gr_order }}</a>
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.code %}">{{ gr_order }}</a>
</td>
<td>{{ gr_order.delivery_date }}</td>
<td>{{ gr_order.deadline }}</td>
<td>{{ gr_order.order_set.count }}</td>
<td>
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.id %}">
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.code %}">
<i class="fa fa-eye mr-3" aria-hidden="true"></i>
</a>
<a title="Gestion de la commande groupée" href="{% url 'order:grouped_order_overview' gr_order.id %}">
<a title="Gestion de la commande groupée" href="{% url 'order:grouped_order_overview' gr_order.code %}">
<i class="fa fa-list-ul mr-3" aria-hidden="true"></i>
</a>
<a title="Dupliquer la commande groupée" href="{% url 'order:duplicate_grouped_order' gr_order.id %}">
<a title="Dupliquer la commande groupée" href="{% url 'order:duplicate_grouped_order' gr_order.code %}">
<i class="fa fa-files-o mr-3" aria-hidden="true"></i>
</a>
</td>
@ -67,19 +67,19 @@
<tr>
<td>
<i class="fa fa-lock mr-2 has-text-info" aria-hidden="true" title="Livraison à venir"></i>
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.id %}">{{ gr_order }}</a>
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.code %}">{{ gr_order }}</a>
</td>
<td>{{ gr_order.delivery_date }}</td>
<td>{{ gr_order.deadline }}</td>
<td>{{ gr_order.order_set.count }}</td>
<td>
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.id %}">
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.code %}">
<i class="fa fa-eye mr-3" aria-hidden="true"></i>
</a>
<a title="Gestion de la commande groupée" href="{% url 'order:grouped_order_overview' gr_order.id %}">
<a title="Gestion de la commande groupée" href="{% url 'order:grouped_order_overview' gr_order.code %}">
<i class="fa fa-list-ul mr-3" aria-hidden="true"></i>
</a>
<a title="Dupliquer la commande groupée" href="{% url 'order:duplicate_grouped_order' gr_order.id %}">
<a title="Dupliquer la commande groupée" href="{% url 'order:duplicate_grouped_order' gr_order.code %}">
<i class="fa fa-files-o mr-3" aria-hidden="true"></i>
</a>
</td>
@ -105,19 +105,19 @@
<tr>
<td>
<i class="fa fa-check-circle mr-2 has-text-link" aria-hidden="true" title="Commande terminée"></i>
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.id %}">{{ gr_order }}</a>
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.code %}">{{ gr_order }}</a>
</td>
<td>{{ gr_order.delivery_date }}</td>
<td>{{ gr_order.deadline }}</td>
<td>{{ gr_order.order_set.count }}</td>
<td>
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.id %}">
<a title="Détail de la commande groupée" href="{% url 'order:grouped_order_detail' gr_order.code %}">
<i class="fa fa-eye mr-3" aria-hidden="true"></i>
</a>
<a title="Gestion de la commande groupée" href="{% url 'order:grouped_order_overview' gr_order.id %}">
<a title="Gestion de la commande groupée" href="{% url 'order:grouped_order_overview' gr_order.code %}">
<i class="fa fa-list-ul mr-3" aria-hidden="true"></i>
</a>
<a title="Dupliquer la commande groupée" href="{% url 'order:duplicate_grouped_order' gr_order.id %}">
<a title="Dupliquer la commande groupée" href="{% url 'order:duplicate_grouped_order' gr_order.code %}">
<i class="fa fa-files-o mr-3" aria-hidden="true"></i>
</a>
</td>

View file

@ -26,11 +26,11 @@
<a href="mailto:{{ order.grouped_order.orga.username }}">Envoyer un mail</a></p>
<div class="buttons">
<a class="button is-primary" href="{% url 'order:grouped_order_detail' order.grouped_order.pk %}">
<a class="button is-primary" href="{% url 'order:grouped_order_detail' order.grouped_order.code %}">
<i class="fa fa-arrow-left mr-3" aria-hidden="true"></i>Retour à la page de commande
</a>
{% if user == order.grouped_order.orga %}
<a class="button is-light" href="{% url 'order:grouped_order_overview' order.grouped_order.pk %}">Page de gestion de la commande</a>
<a class="button is-light" href="{% url 'order:grouped_order_overview' order.grouped_order.code %}">Page de gestion de la commande</a>
{% endif %}
</div>
</div>

View file

@ -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)

View file

@ -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"})

View file

@ -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)

View file

@ -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

View file

@ -6,67 +6,69 @@ app_name = "order"
urlpatterns = [
path("", views.IndexView.as_view(), name="index"),
path(
"<int:pk>/", views.GroupedOrderDetailView.as_view(), name="grouped_order_detail"
"<str:code>/",
views.GroupedOrderDetailView.as_view(),
name="grouped_order_detail",
),
path(
"<int:pk>/gerer",
"<str:code>/gerer",
views.GroupedOrderOverview.as_view(),
name="grouped_order_overview",
),
path("<int:grouped_order_id>/commander/", views.place_order, name="order"),
path("<str:code>/commander/", views.place_order, name="order"),
path(
"<int:grouped_order_id>/<int:pk>/confirmation/",
"<str:code>/<int:pk>/confirmation/",
views.OrderDetailView.as_view(),
name="order_confirm",
),
path(
"<int:grouped_order_id>/gerer/<int:pk>/supprimer",
"<str:code>/gerer/<int:pk>/supprimer",
views.OrderDeleteView.as_view(),
name="order_delete",
),
path("creer", views.GroupedOrderCreateView.as_view(), name="create_grouped_order"),
path(
"<int:pk>/gerer-produits",
"<str:code>/gerer-produits",
views.GroupedOrderAddItemsView.as_view(),
name="manage_items",
),
path(
"<int:pk>/modifier",
"<str:code>/modifier",
views.GroupedOrderUpdateView.as_view(),
name="update_grouped_order",
),
path(
"<int:pk>/supprimer",
"<str:code>/supprimer",
views.GroupedOrderDeleteView.as_view(),
name="delete_grouped_order",
),
path(
"<int:pk>/dupliquer",
"<str:code>/dupliquer",
views.GroupedOrderDuplicateView.as_view(),
name="duplicate_grouped_order",
),
path(
"<int:pk>/gerer-produits/nouveau",
"<str:code>/gerer-produits/nouveau",
views.ItemCreateView.as_view(),
name="item_create",
),
path(
"<int:grouped_order_id>/gerer-produits/<int:pk>/supprimer",
"<str:code>/gerer-produits/<int:pk>/supprimer",
views.ItemDeleteView.as_view(),
name="item_delete",
),
path(
"<int:pk>/gerer/imprimer",
"<str:code>/gerer/imprimer",
views.DownloadGroupedOrderSheetView.as_view(),
name="grouped_order_sheet",
),
path(
"<int:grouped_order_id>/gerer/liste-mails",
"<str:code>/gerer/liste-mails",
views.ExportGroupedOrderEmailAddressesToCSVView.as_view(),
name="email_list",
),
path(
"<int:pk>/gerer/csv",
"<str:code>/gerer/csv",
views.ExportGroupedOrderToCSVView.as_view(),
name="grouped_order_csv_export",
),

View file

@ -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()
)

View file

@ -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"""

View file

@ -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):