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() return self.delivery_date >= timezone.now().date()
def get_absolute_url(self): 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): def clean_fields(self, exclude=None):
super().clean_fields(exclude=exclude) super().clean_fields(exclude=exclude)
@ -80,7 +80,7 @@ class GroupedOrder(models.Model):
return ( return (
self.name self.name
if 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() self.save()
def __str__(self): # pragma: no cover 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): class Item(models.Model):
@ -161,7 +161,7 @@ class Item(models.Model):
return None return None
def get_absolute_url(self): 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 def __str__(self): # pragma: no cover
return f"{self.name} ({self.price} €)" return f"{self.name} ({self.price} €)"

View file

@ -11,7 +11,7 @@
<p class="title">Gestion des produits - {{ grouped_order.name }}</p> <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> <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"> <table class="table">
<thead> <thead>
@ -55,7 +55,7 @@
<div class="modal-content"> <div class="modal-content">
<div class="box"> <div class="box">
<p>Voulez-vous vraiment supprimer le produit {{ item.name }} de la commande ?</p> <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 %} {% csrf_token %}
<input type="submit" name="{{ item.id }}" value="Oui" class="button is-danger"/> <input type="submit" name="{{ item.id }}" value="Oui" class="button is-danger"/>
<a class="button is-light" href="">Non</a> <a class="button is-light" href="">Non</a>
@ -70,7 +70,7 @@
</table> </table>
<div class="buttons is-pulled-right"> <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>
</div> </div>

View file

@ -9,10 +9,10 @@
<div class="box"> <div class="box">
<p>Voulez-vous vraiment supprimer la commande groupée {{ grouped_order }} définitivement ?</p> <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> <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 %} {% csrf_token %}
<input type="submit" name="{{ item.id }}" value="Oui" class="button is-danger"/> <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> </form>
</div> </div>
{% endblock %} {% endblock %}

View file

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

View file

@ -7,7 +7,7 @@
{% block content_title %}{{ grouped_order }} : gestion de la commande{% endblock %} {% block content_title %}{{ grouped_order }} : gestion de la commande{% endblock %}
</p> </p>
<div class="buttons"> <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 <i class="fa fa-arrow-left mr-3" aria-hidden="true"></i>Retour à la page de commande
</a> </a>
<a class="button is-primary" href="{% url 'order:index' %}"> <a class="button is-primary" href="{% url 'order:index' %}">
@ -31,10 +31,10 @@
Livraison le {{ grouped_order.delivery_date }} Livraison le {{ grouped_order.delivery_date }}
</p> </p>
<div class="buttons"> <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 <i class="fa fa-pencil mr-3" aria-hidden="true"></i>Modifier la commande
</a> </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 <i class="fa fa-trash mr-3" aria-hidden="true"></i>Supprimer la commande
</a> </a>
</div> </div>
@ -89,10 +89,10 @@
<div class="column"> <div class="column">
<p>Pour vous aider à distribuer les produits le jour J, vous pouvez télécharger la liste des commandes <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> 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 <i class="fa fa-file-pdf-o mr-3" aria-hidden="true"></i>Commandes en PDF
</a> </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 <i class="fa fa-file-excel-o mr-3" aria-hidden="true"></i>Commandes en CSV
</a> </a>
</div> </div>
@ -100,7 +100,7 @@
</div> </div>
<div id="resume" class="box tabcontent"> <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> <p class="title">Produits commandés</p>
{% if grouped_order.item_set.all %} {% if grouped_order.item_set.all %}
<table class="table"> <table class="table">
@ -130,13 +130,13 @@
</tfoot> </tfoot>
</table> </table>
{% else %} {% 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 %} {% endif %}
</div> </div>
<div id="commandes" class="box tabcontent"> <div id="commandes" class="box tabcontent">
<div class="buttons is-pulled-right"> <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 <i class="fa fa-download mr-3" aria-hidden="true"></i>Liste des mails
</a> </a>
</div> </div>
@ -237,7 +237,7 @@
<p>{{ order.price }} €</p> <p>{{ order.price }} €</p>
</div> </div>
<div class="column"> <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 %} {% csrf_token %}
<input type="submit" name="{{ item.id }}" value="Oui" class="button is-danger"/> <input type="submit" name="{{ item.id }}" value="Oui" class="button is-danger"/>
<a class="button is-light" aria-label="close">Non</a> <a class="button is-light" aria-label="close">Non</a>

View file

@ -29,19 +29,19 @@
<tr> <tr>
<td> <td>
<i class="fa fa-unlock-alt mr-2 has-text-success-dark" aria-hidden="true" title="Commandes ouvertes"></i> <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>
<td>{{ gr_order.delivery_date }}</td> <td>{{ gr_order.delivery_date }}</td>
<td>{{ gr_order.deadline }}</td> <td>{{ gr_order.deadline }}</td>
<td>{{ gr_order.order_set.count }}</td> <td>{{ gr_order.order_set.count }}</td>
<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> <i class="fa fa-eye mr-3" aria-hidden="true"></i>
</a> </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> <i class="fa fa-list-ul mr-3" aria-hidden="true"></i>
</a> </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> <i class="fa fa-files-o mr-3" aria-hidden="true"></i>
</a> </a>
</td> </td>
@ -67,19 +67,19 @@
<tr> <tr>
<td> <td>
<i class="fa fa-lock mr-2 has-text-info" aria-hidden="true" title="Livraison à venir"></i> <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>
<td>{{ gr_order.delivery_date }}</td> <td>{{ gr_order.delivery_date }}</td>
<td>{{ gr_order.deadline }}</td> <td>{{ gr_order.deadline }}</td>
<td>{{ gr_order.order_set.count }}</td> <td>{{ gr_order.order_set.count }}</td>
<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> <i class="fa fa-eye mr-3" aria-hidden="true"></i>
</a> </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> <i class="fa fa-list-ul mr-3" aria-hidden="true"></i>
</a> </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> <i class="fa fa-files-o mr-3" aria-hidden="true"></i>
</a> </a>
</td> </td>
@ -105,19 +105,19 @@
<tr> <tr>
<td> <td>
<i class="fa fa-check-circle mr-2 has-text-link" aria-hidden="true" title="Commande terminée"></i> <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>
<td>{{ gr_order.delivery_date }}</td> <td>{{ gr_order.delivery_date }}</td>
<td>{{ gr_order.deadline }}</td> <td>{{ gr_order.deadline }}</td>
<td>{{ gr_order.order_set.count }}</td> <td>{{ gr_order.order_set.count }}</td>
<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> <i class="fa fa-eye mr-3" aria-hidden="true"></i>
</a> </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> <i class="fa fa-list-ul mr-3" aria-hidden="true"></i>
</a> </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> <i class="fa fa-files-o mr-3" aria-hidden="true"></i>
</a> </a>
</td> </td>

View file

@ -26,11 +26,11 @@
<a href="mailto:{{ order.grouped_order.orga.username }}">Envoyer un mail</a></p> <a href="mailto:{{ order.grouped_order.orga.username }}">Envoyer un mail</a></p>
<div class="buttons"> <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 <i class="fa fa-arrow-left mr-3" aria-hidden="true"></i>Retour à la page de commande
</a> </a>
{% if user == order.grouped_order.orga %} {% 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 %} {% endif %}
</div> </div>
</div> </div>

View file

@ -218,7 +218,7 @@ class TestGroupedOrderDetailView:
detail_url = reverse( detail_url = reverse(
"order:grouped_order_detail", "order:grouped_order_detail",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.get(detail_url) response = client.get(detail_url)
@ -233,7 +233,7 @@ class TestGroupedOrderDetailView:
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.post( response = client.post(
@ -254,7 +254,7 @@ class TestGroupedOrderDetailView:
assert response.url == reverse( assert response.url == reverse(
"order:order_confirm", "order:order_confirm",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
"pk": order.pk, "pk": order.pk,
}, },
) )
@ -294,7 +294,7 @@ class TestGroupedOrderDetailView:
detail_url = reverse( detail_url = reverse(
"order:grouped_order_detail", "order:grouped_order_detail",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.get(detail_url) response = client.get(detail_url)
@ -305,7 +305,7 @@ class TestGroupedOrderDetailView:
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.post( response = client.post(
@ -353,7 +353,7 @@ class TestGroupedOrderDetailView:
detail_url = reverse( detail_url = reverse(
"order:grouped_order_detail", "order:grouped_order_detail",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.get(detail_url) response = client.get(detail_url)
@ -381,7 +381,7 @@ class TestGroupedOrderDetailView:
detail_url = reverse( detail_url = reverse(
"order:grouped_order_detail", "order:grouped_order_detail",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.get(detail_url) response = client.get(detail_url)
@ -404,7 +404,7 @@ class TestGroupedOrderDetailView:
detail_url = reverse( detail_url = reverse(
"order:grouped_order_detail", "order:grouped_order_detail",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.get(detail_url) response = client.get(detail_url)
@ -415,7 +415,7 @@ class TestGroupedOrderDetailView:
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.post( response = client.post(
@ -451,7 +451,7 @@ class TestGroupedOrderDetailView:
detail_url = reverse( detail_url = reverse(
"order:grouped_order_detail", "order:grouped_order_detail",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.get(detail_url) response = client.get(detail_url)
@ -462,7 +462,7 @@ class TestGroupedOrderDetailView:
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.post( response = client.post(
@ -498,7 +498,7 @@ class TestGroupedOrderDetailView:
detail_url = reverse( detail_url = reverse(
"order:grouped_order_detail", "order:grouped_order_detail",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.get(detail_url) response = client.get(detail_url)
@ -509,7 +509,7 @@ class TestGroupedOrderDetailView:
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.post( response = client.post(
@ -562,7 +562,7 @@ class TestGroupedOrderDetailView:
detail_url = reverse( detail_url = reverse(
"order:grouped_order_detail", "order:grouped_order_detail",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.get(detail_url) response = client.get(detail_url)
@ -575,7 +575,7 @@ class TestGroupedOrderDetailView:
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.post( response = client.post(
@ -595,7 +595,7 @@ class TestGroupedOrderDetailView:
assert response.url == reverse( assert response.url == reverse(
"order:order_confirm", "order:order_confirm",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
"pk": order.pk, "pk": order.pk,
}, },
) )
@ -632,14 +632,14 @@ class TestGroupedOrderOverview:
overview_url = reverse( overview_url = reverse(
"order:grouped_order_overview", "order:grouped_order_overview",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
# some items are ordered # some items are ordered
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
client_log.post( client_log.post(
@ -674,7 +674,7 @@ class TestGroupedOrderOverview:
orga_view_url = reverse( orga_view_url = reverse(
"order:grouped_order_overview", "order:grouped_order_overview",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
assert auth.get_user(client).is_anonymous assert auth.get_user(client).is_anonymous
@ -685,7 +685,7 @@ class TestGroupedOrderOverview:
reverse( reverse(
"order:grouped_order_overview", "order:grouped_order_overview",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
) )
@ -704,7 +704,7 @@ class TestGroupedOrderOverview:
orga_view_url = reverse( orga_view_url = reverse(
"order:grouped_order_overview", "order:grouped_order_overview",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.get(orga_view_url) response = client_log.get(orga_view_url)
@ -729,7 +729,7 @@ class TestGroupedOrderOverview:
orga_view_url = reverse( orga_view_url = reverse(
"order:grouped_order_overview", "order:grouped_order_overview",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.get(orga_view_url) response = client_log.get(orga_view_url)
@ -757,7 +757,7 @@ class TestGroupedOrderOverview:
orga_view_url = reverse( orga_view_url = reverse(
"order:grouped_order_overview", "order:grouped_order_overview",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.get(orga_view_url) response = client_log.get(orga_view_url)
@ -822,7 +822,7 @@ class TestGroupedOrderUpdateView:
# get the update form # get the update form
update_grouped_order_url = reverse( 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) response = client_log.get(update_grouped_order_url)
assert response.status_code == 200 assert response.status_code == 200
@ -863,7 +863,7 @@ class TestGroupedOrderUpdateView:
# get the update form # get the update form
update_grouped_order_url = reverse( 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) response = client_log.get(update_grouped_order_url)
assert response.status_code == 200 assert response.status_code == 200
@ -899,7 +899,7 @@ class TestGroupedOrderUpdateView:
# get the update form # get the update form
update_grouped_order_url = reverse( 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) response = client_log.get(update_grouped_order_url)
assert response.status_code == 403 assert response.status_code == 403
@ -916,7 +916,7 @@ class TestGroupedOrderUpdateView:
# get the update form # get the update form
update_grouped_order_url = reverse( 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) response = client.get(update_grouped_order_url)
assert response.status_code == 302 assert response.status_code == 302
@ -941,7 +941,7 @@ class TestGroupedOrderAddItemsView:
add_items_view_url = reverse( add_items_view_url = reverse(
"order:manage_items", "order:manage_items",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.get(add_items_view_url) response = client_log.get(add_items_view_url)
@ -960,7 +960,7 @@ class TestGroupedOrderAddItemsView:
add_items_view_url = reverse( add_items_view_url = reverse(
"order:manage_items", "order:manage_items",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
assert auth.get_user(client).is_anonymous assert auth.get_user(client).is_anonymous
@ -970,9 +970,7 @@ class TestGroupedOrderAddItemsView:
assert response.url.endswith( assert response.url.endswith(
reverse( reverse(
"order:manage_items", "order:manage_items",
kwargs={ kwargs={"code": grouped_order.code},
"pk": grouped_order.pk,
},
) )
) )
@ -1001,10 +999,10 @@ class TestGroupedOrderAddItemsView:
# Create an item # Create an item
grouped_order = models.GroupedOrder.objects.first() 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 = client_log.post(create_item_url, {"name": "Pain test", "price": "2"})
response.status_code == 302 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 assert grouped_order.item_set.count() == 1
# Delete the item # Delete the item
@ -1012,7 +1010,7 @@ class TestGroupedOrderAddItemsView:
delete_item_url = reverse("order:item_delete", args=[grouped_order.id, item.id]) delete_item_url = reverse("order:item_delete", args=[grouped_order.id, item.id])
response = client_log.post(delete_item_url) response = client_log.post(delete_item_url)
assert response.status_code == 302 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 assert grouped_order.item_set.count() == 0
def test_create_or_delete_item__not_orga(self, client_log, other_user): def test_create_or_delete_item__not_orga(self, client_log, other_user):
@ -1062,7 +1060,7 @@ class TestGroupedOrderDeleteView:
# get the delete view # get the delete view
delete_view_url = reverse( 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) response = client_log.get(delete_view_url)
assert response.status_code == 200 assert response.status_code == 200
@ -1091,7 +1089,7 @@ class TestGroupedOrderDeleteView:
# get the delete view # get the delete view
delete_view_url = reverse( 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) response = client_log.get(delete_view_url)
assert response.status_code == 403 assert response.status_code == 403
@ -1114,7 +1112,7 @@ class TestGroupedOrderDeleteView:
# get the delete view # get the delete view
delete_view_url = reverse( 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) response = client.get(delete_view_url)
assert response.status_code == 302 assert response.status_code == 302
@ -1148,7 +1146,7 @@ class TestGroupedOrderDuplicateView:
# duplicate # duplicate
duplicate_view_url = reverse( 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) response = client_log.get(duplicate_view_url)
assert models.GroupedOrder.objects.count() == 2 assert models.GroupedOrder.objects.count() == 2
@ -1166,7 +1164,7 @@ class TestGroupedOrderDuplicateView:
# redirection # redirection
assert response.status_code == 302 assert response.status_code == 302
assert response.url == reverse( 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 # The initial grouped order did not change
@ -1184,7 +1182,7 @@ class TestGroupedOrderDuplicateView:
# get the duplicate view # get the duplicate view
duplicate_view_url = reverse( 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) response = client_log.get(duplicate_view_url)
assert response.status_code == 403 assert response.status_code == 403
@ -1203,7 +1201,7 @@ class TestGroupedOrderDuplicateView:
# get the duplicate view # get the duplicate view
duplicate_view_url = reverse( 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) response = client.get(duplicate_view_url)
assert response.status_code == 302 assert response.status_code == 302
@ -1225,7 +1223,7 @@ class TestGroupedOrderSheetView:
generate_sheet_url = reverse( generate_sheet_url = reverse(
"order:grouped_order_sheet", "order:grouped_order_sheet",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.get(generate_sheet_url) response = client_log.get(generate_sheet_url)
@ -1243,7 +1241,7 @@ class TestGroupedOrderSheetView:
generate_sheet_url = reverse( generate_sheet_url = reverse(
"order:grouped_order_sheet", "order:grouped_order_sheet",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.get(generate_sheet_url) response = client.get(generate_sheet_url)
@ -1261,7 +1259,7 @@ class TestGroupedOrderSheetView:
generate_sheet_url = reverse( generate_sheet_url = reverse(
"order:grouped_order_sheet", "order:grouped_order_sheet",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.get(generate_sheet_url) response = client_log.get(generate_sheet_url)
@ -1302,7 +1300,7 @@ class TestExportGroupedOrderEmailAddressesToCSVView:
email_list_view_url = reverse( email_list_view_url = reverse(
"order:email_list", "order:email_list",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
assert auth.get_user(client).is_anonymous assert auth.get_user(client).is_anonymous
@ -1325,7 +1323,7 @@ class TestExportGroupedOrderEmailAddressesToCSVView:
email_list_view_url = reverse( email_list_view_url = reverse(
"order:email_list", "order:email_list",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.get(email_list_view_url) response = client_log.get(email_list_view_url)
@ -1344,7 +1342,7 @@ class TestExportGroupedOrderEmailAddressesToCSVView:
email_list_view_url = reverse( email_list_view_url = reverse(
"order:email_list", "order:email_list",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.get(email_list_view_url) response = client_log.get(email_list_view_url)
@ -1371,7 +1369,7 @@ class TestExportGroupedOrderToCSVView:
csv_view_url = reverse( csv_view_url = reverse(
"order:grouped_order_csv_export", "order:grouped_order_csv_export",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
assert auth.get_user(client).is_anonymous assert auth.get_user(client).is_anonymous
@ -1394,7 +1392,7 @@ class TestExportGroupedOrderToCSVView:
csv_view_url = reverse( csv_view_url = reverse(
"order:grouped_order_csv_export", "order:grouped_order_csv_export",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.get(csv_view_url) response = client_log.get(csv_view_url)
@ -1415,7 +1413,7 @@ class TestExportGroupedOrderToCSVView:
csv_view_url = reverse( csv_view_url = reverse(
"order:grouped_order_csv_export", "order:grouped_order_csv_export",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.get(csv_view_url) response = client_log.get(csv_view_url)

View file

@ -23,7 +23,7 @@ class TestItemCreateView:
create_item_view_url = reverse( create_item_view_url = reverse(
"order:item_create", "order:item_create",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.post( response = client_log.post(
@ -33,7 +33,7 @@ class TestItemCreateView:
assert response.url == reverse( assert response.url == reverse(
"order:manage_items", "order:manage_items",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
assert models.Item.objects.first().name == "titre item" assert models.Item.objects.first().name == "titre item"
@ -53,7 +53,7 @@ class TestItemCreateView:
create_item_view_url = reverse( create_item_view_url = reverse(
"order:item_create", "order:item_create",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.post(create_item_view_url, {"name": "titre item"}) response = client.post(create_item_view_url, {"name": "titre item"})
@ -75,7 +75,7 @@ class TestItemCreateView:
create_item_view_url = reverse( create_item_view_url = reverse(
"order:item_create", "order:item_create",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.post(create_item_view_url, {"name": "titre item"}) response = client_log.post(create_item_view_url, {"name": "titre item"})

View file

@ -31,7 +31,7 @@ class TestOrder:
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.post( response = client.post(
@ -64,7 +64,7 @@ class TestOrder:
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.post( response = client_log.post(
@ -97,7 +97,7 @@ class TestOrder:
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client_log.post( response = client_log.post(
@ -132,7 +132,7 @@ class TestOrder:
detail_url = reverse( detail_url = reverse(
"order:grouped_order_detail", "order:grouped_order_detail",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.get(detail_url) response = client.get(detail_url)
@ -144,7 +144,7 @@ class TestOrder:
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.post( response = client.post(
@ -191,7 +191,7 @@ class TestOrder:
detail_url = reverse( detail_url = reverse(
"order:grouped_order_detail", "order:grouped_order_detail",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.get(detail_url) response = client.get(detail_url)
@ -203,7 +203,7 @@ class TestOrder:
order_url = reverse( order_url = reverse(
"order:order", "order:order",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
}, },
) )
response = client.post( response = client.post(
@ -223,7 +223,7 @@ class TestOrder:
assert response.url == reverse( assert response.url == reverse(
"order:order_confirm", "order:order_confirm",
kwargs={ kwargs={
"grouped_order_id": grouped_order.pk, "code": grouped_order.code,
"pk": order.pk, "pk": order.pk,
}, },
) )
@ -256,14 +256,14 @@ class TestOrder:
assert item.ordered_nb == 4 assert item.ordered_nb == 4
delete_url = reverse( delete_url = reverse(
"order:order_delete", "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) response = client_log.post(delete_url)
assert response.status_code == 302 assert response.status_code == 302
assert response.url == reverse( assert response.url == reverse(
"order:grouped_order_overview", "order:grouped_order_overview",
kwargs={ kwargs={
"pk": grouped_order.pk, "code": grouped_order.code,
}, },
) )
client_log.get(response.url) 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 name=name, orga=orga_user, delivery_date=date, deadline=deadline
) )
grouped_order.create_code_from_pk() grouped_order.create_code_from_pk()
grouped_order.save()
return grouped_order return grouped_order

View file

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

View file

@ -68,6 +68,10 @@ class GroupedOrderDetailView(generic.DetailView):
template_name = "order/grouped_order_detail.html" template_name = "order/grouped_order_detail.html"
context_object_name = "grouped_order" 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): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
# Get remaining quantities # Get remaining quantities
@ -91,6 +95,10 @@ class GroupedOrderOverview(UserPassesTestMixin, generic.DetailView):
template_name = "order/grouped_order_overview.html" template_name = "order/grouped_order_overview.html"
context_object_name = "grouped_order" 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): def test_func(self):
"""Accessible only if the requesting user is the grouped order organizer""" """Accessible only if the requesting user is the grouped order organizer"""
return self.get_object().orga == self.request.user return self.get_object().orga == self.request.user
@ -137,6 +145,10 @@ class GroupedOrderUpdateView(UserPassesTestMixin, generic.UpdateView):
context_object_name = "grouped_order" context_object_name = "grouped_order"
form_class = GroupedOrderForm 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): def test_func(self):
"""Accessible only if the requesting user is the grouped order organizer""" """Accessible only if the requesting user is the grouped order organizer"""
return self.get_object().orga == self.request.user 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 """View for duplicating an existing grouped order : the groupedOrder is duplicated
and the user is redirected to the new grouped order update view""" 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): def test_func(self):
"""Accessible only if the requesting user is the grouped order organizer""" """Accessible only if the requesting user is the grouped order organizer"""
initial_grouped_order_id = self.kwargs.get("pk") initial_grouped_order = get_object_or_404(
return ( GroupedOrder, code=self.kwargs.get("code")
GroupedOrder.objects.get(pk=initial_grouped_order_id).orga
== self.request.user
) )
return initial_grouped_order.orga == self.request.user
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
# overwrite the get function to copy the initial grouped order before redirecting to # overwrite the get function to copy the initial grouped order before redirecting to
# the update view of the new grouped order # 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( new_grouped_order = GroupedOrder.objects.create(
name=f"{initial_grouped_order.name} - copie", name=f"{initial_grouped_order.name} - copie",
orga=self.request.user, orga=self.request.user,
@ -173,6 +184,9 @@ class GroupedOrderDuplicateView(UserPassesTestMixin, generic.RedirectView):
place=initial_grouped_order.place, place=initial_grouped_order.place,
description=initial_grouped_order.description, 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 # duplicate each item and add it to new_grouped_order
for item in initial_grouped_order.item_set.all(): for item in initial_grouped_order.item_set.all():
item.pk = None item.pk = None
@ -180,13 +194,13 @@ class GroupedOrderDuplicateView(UserPassesTestMixin, generic.RedirectView):
item.save() item.save()
new_grouped_order.item_set.add(item) 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) return super().get(request, *args, **kwargs)
def get_redirect_url(self, *args, **kwargs): def get_redirect_url(self, *args, **kwargs):
return reverse_lazy( 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" template_name = "order/grouped_order_confirm_delete.html"
context_object_name = "grouped_order" 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): def get_success_url(self):
return reverse_lazy("order:index") return reverse_lazy("order:index")
@ -221,18 +239,20 @@ class GroupedOrderAddItemsView(UserPassesTestMixin, generic.ListView):
def get_queryset(self): def get_queryset(self):
items = super().get_queryset() 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 return items
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(GroupedOrderAddItemsView, self).get_context_data(**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 return context
def test_func(self): def test_func(self):
"""Accessible only if the requesting user is the grouped order organizer""" """Accessible only if the requesting user is the grouped order organizer"""
grouped_order_id = self.kwargs.get("pk") grouped_order = get_object_or_404(GroupedOrder, code=self.kwargs.get("code"))
return GroupedOrder.objects.get(pk=grouped_order_id).orga == self.request.user return grouped_order.orga == self.request.user
class GroupedOrderExportView(UserPassesTestMixin, generic.DetailView): class GroupedOrderExportView(UserPassesTestMixin, generic.DetailView):
@ -243,6 +263,10 @@ class GroupedOrderExportView(UserPassesTestMixin, generic.DetailView):
template_name = "order/grouped_order_sheet.html" template_name = "order/grouped_order_sheet.html"
context_object_name = "grouped_order" 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): def test_func(self):
"""Accessible only if the requesting user is the grouped order organizer""" """Accessible only if the requesting user is the grouped order organizer"""
return self.get_object().orga == self.request.user return self.get_object().orga == self.request.user
@ -288,12 +312,13 @@ class ExportGroupedOrderEmailAddressesToCSVView(UserPassesTestMixin, generic.Vie
def test_func(self): def test_func(self):
"""Accessible only if the requesting user is the grouped order organizer""" """Accessible only if the requesting user is the grouped order organizer"""
grouped_order_id = self.kwargs.get("grouped_order_id") initial_grouped_order = get_object_or_404(
return GroupedOrder.objects.get(pk=grouped_order_id).orga == self.request.user GroupedOrder, code=self.kwargs.get("code")
)
return initial_grouped_order.orga == self.request.user
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
grouped_order_id = self.kwargs.get("grouped_order_id") grouped_order = get_object_or_404(GroupedOrder, code=self.kwargs.get("code"))
grouped_order = get_object_or_404(GroupedOrder, pk=grouped_order_id)
participants = OrderAuthor.objects.filter( participants = OrderAuthor.objects.filter(
order__in=grouped_order.order_set.all() order__in=grouped_order.order_set.all()
) )

View file

@ -1,4 +1,5 @@
from django.contrib.auth.mixins import UserPassesTestMixin from django.contrib.auth.mixins import UserPassesTestMixin
from django.shortcuts import get_object_or_404
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.views import generic from django.views import generic
@ -14,13 +15,13 @@ class ItemCreateView(UserPassesTestMixin, generic.CreateView):
def get_form_kwargs(self): def get_form_kwargs(self):
kwargs = super().get_form_kwargs() 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 return kwargs
def test_func(self): def test_func(self):
"""Accessible only if the requesting user is the grouped order organizer""" """Accessible only if the requesting user is the grouped order organizer"""
grouped_order_id = self.kwargs.get("pk") grouped_order = get_object_or_404(GroupedOrder, code=self.kwargs.get("code"))
return GroupedOrder.objects.get(pk=grouped_order_id).orga == self.request.user return grouped_order.orga == self.request.user
class ItemDeleteView(UserPassesTestMixin, generic.DeleteView): class ItemDeleteView(UserPassesTestMixin, generic.DeleteView):
@ -31,7 +32,7 @@ class ItemDeleteView(UserPassesTestMixin, generic.DeleteView):
model = Item model = Item
def get_success_url(self): 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): def test_func(self):
"""Accessible only if the requesting user is the grouped order organizer""" """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 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""" """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 # check if the grouped order is ongoing or if the user is allowed to order
user_is_orga = request.user == grouped_order.orga 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 # with POST data. This prevents data from being posted twice if a
# user hits the Back button. # user hits the Back button.
return http.HttpResponseRedirect( 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): def get_success_url(self):
return reverse_lazy( 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): def test_func(self):