Reorganize URLs and templates.

Reorganizing the URLs seems to fix an issue with namespace collision in the URLs.

- URLs for product related operations are now in the /produits/ namespace ;
- Templates are now using a formalism of action_subject.html, which makes it simpler to find find them.
This commit is contained in:
Alexis MÃtaireau 2020-04-07 16:41:07 +02:00
parent 8e3e31f98d
commit 80a61066a0
24 changed files with 92 additions and 133 deletions

View file

@ -12,7 +12,7 @@
</li> </li>
{% endif %} {% endif %}
<li class="pure-menu-item"> <li class="pure-menu-item">
<a class="pure-menu-link" href="/distribution/{{ delivery.id }}/produits"><i class="icon-pencil"></i> Gérer les produits / product⋅eur⋅rice⋅s</a> <a class="pure-menu-link" href="/produits/{{ delivery.id }}"><i class="icon-pencil"></i> Gérer les produits / product⋅eur⋅rice⋅s</a>
</li> </li>
</ul> </ul>
</div> </div>

View file

@ -21,7 +21,7 @@
<li class="pure-menu-item pure-menu-has-children pure-menu-allow-hover"> <li class="pure-menu-item pure-menu-has-children pure-menu-allow-hover">
<a href="#" class="pure-menu-link"><i class="icon-printer"></i>&nbsp;Imprimer…</a> <a href="#" class="pure-menu-link"><i class="icon-printer"></i>&nbsp;Imprimer…</a>
<ul class="pure-menu-children"> <ul class="pure-menu-children">
<li class="pure-menu-item"><a href="/distribution/{{ delivery.id }}/produits.pdf" class="pure-menu-link"><i class="icon-ribbon"></i>&nbsp;Commande producteurs⋅rices</a></li> <li class="pure-menu-item"><a href="/produits/{{ delivery.id }}/produits.pdf" class="pure-menu-link"><i class="icon-ribbon"></i>&nbsp;Commande producteurs⋅rices</a></li>
<li class="pure-menu-item"><a href="/distribution/{{ delivery.id }}/émargement" class="pure-menu-link"><i class="icon-grid"></i>&nbsp;Résumé de commande par groupe</a></li> <li class="pure-menu-item"><a href="/distribution/{{ delivery.id }}/émargement" class="pure-menu-link"><i class="icon-grid"></i>&nbsp;Résumé de commande par groupe</a></li>
<li class="pure-menu-item"><a href="/distribution/{{ delivery.id }}/solde" class="pure-menu-link"><i class="icon-wallet"></i>&nbsp;Répartition des paiements</a></li> <li class="pure-menu-item"><a href="/distribution/{{ delivery.id }}/solde" class="pure-menu-link"><i class="icon-wallet"></i>&nbsp;Répartition des paiements</a></li>
</ul> </ul>
@ -38,7 +38,7 @@
<a class="pure-menu-link" href="/distribution/{{ delivery.id }}/edit"><i class="icon-adjustments"></i>&nbsp;Modifier la distrib</a> <a class="pure-menu-link" href="/distribution/{{ delivery.id }}/edit"><i class="icon-adjustments"></i>&nbsp;Modifier la distrib</a>
</li> </li>
<li class="pure-menu-item"> <li class="pure-menu-item">
<a class="pure-menu-link" href="/distribution/{{ delivery.id }}/produits"><i class="icon-pricetags"></i>&nbsp;Produits</a> <a class="pure-menu-link" href="/produits/{{ delivery.id }}"><i class="icon-pricetags"></i>&nbsp;Produits</a>
</li> </li>
{% endif %} {% endif %}
</ul </ul
@ -54,7 +54,7 @@
{% if delivery.has_products %} {% if delivery.has_products %}
{% for (id, producer) in delivery.get_producers_for_referent(request.user.email).items() %} {% for (id, producer) in delivery.get_producers_for_referent(request.user.email).items() %}
{% if producer.needs_price_update(delivery) %} {% if producer.needs_price_update(delivery) %}
<p class="notification info">Merci de <a href="/distribution/{{ delivery.id}}/{{ producer.id}}/éditer">mettre à jour les prix pour « {{ producer.name }} ».</a></p> <p class="notification info">Merci de <a href="/produits/{{ delivery.id }}/producteurs/{{ producer.id}}">mettre à jour les prix pour « {{ producer.name }} ».</a></p>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% include "includes/delivery_table.html" %} {% include "includes/delivery_table.html" %}
@ -64,8 +64,8 @@
{% if request.user and request.user.is_staff %} {% if request.user and request.user.is_staff %}
Occupons-nous donc de ça ! Deux options : Occupons-nous donc de ça ! Deux options :
<ol> <ol>
<li><a href="/producteurices/créer/{{ delivery.id }}">Ajouter les product⋅eurs⋅rices</a> à la main ;</li> <li><a href="/produits/{{ delivery.id }}/producteurs/créer">Ajouter les product⋅eurs⋅rices</a> à la main ;</li>
<li>Ou bien <a href="/distribution/{{ delivery.id }}/copier">copier les produits d'une autre distribution</a>.</li> <li>Ou bien <a href="/produits/{{ delivery.id }}/copier">copier les produits d'une autre distribution</a>.</li>
</ol> </ol>
</div> </div>
{% endif %} {% endif %}

View file

@ -14,11 +14,11 @@
<h3>Avant et pendant la distribution</h3> <h3>Avant et pendant la distribution</h3>
<a class="button" href="/distribution/{{ delivery.id }}/edit"><i class="icon-pencil"></i>&nbsp; Modifier la commande (dates, lieu, référent⋅e, etc)</a> <a class="button" href="/distribution/{{ delivery.id }}/edit"><i class="icon-pencil"></i>&nbsp; Modifier la commande (dates, lieu, référent⋅e, etc)</a>
<a class="button" href="/distribution/{{ delivery.id }}/products"><i class="icon-pencil"></i>&nbsp; Modifier les produits, les product⋅rices⋅eurs</a> <a class="button" href="/produits/{{ delivery.id }}"><i class="icon-pencil"></i>&nbsp; Modifier les produits, les product⋅rices⋅eurs</a>
<a class="button" href="/groupes"><i class="icon-globe"></i>&nbsp; Gérer les groupes / colocs</a> <a class="button" href="/groupes"><i class="icon-globe"></i>&nbsp; Gérer les groupes / colocs</a>
<h3>Une fois les commandes passées (après le {{ delivery.order_before|date }})</h3> <h3>Une fois les commandes passées (après le {{ delivery.order_before|date }})</h3>
<a class="button" href="/distribution/{{ delivery.id }}/products.pdf"><i class="icon-download"></i>&nbsp; Télécharger les bons de distribution</a> <a class="button" href="/produits/{{ delivery.id }}/produits.pdf"><i class="icon-download"></i>&nbsp; Télécharger les bons de distribution</a>
<a class="button" href="/distribution/{{ delivery.id }}/rapport-complet.xlsx"><i class="icon-download"></i>&nbsp; Télécharger le tableau des commandes</a> <a class="button" href="/distribution/{{ delivery.id }}/rapport-complet.xlsx"><i class="icon-download"></i>&nbsp; Télécharger le tableau des commandes</a>
<a class="button" href="/distribution/{{ delivery.id }}/envoi-email-referentes"><i class="icon-envelope"></i>&nbsp; Envoyer les infos de commande aux référent⋅e⋅s</a> <a class="button" href="/distribution/{{ delivery.id }}/envoi-email-referentes"><i class="icon-envelope"></i>&nbsp; Envoyer les infos de commande aux référent⋅e⋅s</a>

View file

@ -9,13 +9,13 @@
{% if producer_obj.needs_price_update(delivery) %}*{% endif %} {% if producer_obj.needs_price_update(delivery) %}*{% endif %}
{% if edit_mode or request.user.is_staff or producer_obj.referent == request.user.email %} {% if edit_mode or request.user.is_staff or producer_obj.referent == request.user.email %}
<span class="edit"> <span class="edit">
<a class="button" href="/distribution/{{ delivery.id }}/{{ producer_obj.id }}/éditer"><i class="icon-ribbon"></i>&nbsp; Gérer ce⋅tte producteur⋅rice</a> <a class="button" href="/produits/{{ delivery.id }}/producteurs/{{ producer_obj.id }}"><i class="icon-ribbon"></i>&nbsp; Gérer ce⋅tte producteur⋅rice</a>
</span> </span>
{% endif %} {% endif %}
</h2> </h2>
<h5>{% if producer_obj.description %}{{ producer_obj.description }}{% endif %}. Référent⋅e : <a href="mailto:{{ producer_obj.referent }}">{{ producer_obj.referent_name }}</a> / {{ producer_obj.referent_tel }}</h5> <h5>{% if producer_obj.description %}{{ producer_obj.description }}{% endif %}. Référent⋅e : <a href="mailto:{{ producer_obj.referent }}">{{ producer_obj.referent_name }}</a> / {{ producer_obj.referent_tel }}</h5>
{% if not delivery.get_products_by(producer) %} {% if not delivery.get_products_by(producer) %}
😔 Ce⋅tte producteur⋅rice n'a pas encore de produits. Voulez vous <a href="/distribution/{{ delivery.id }}/{{ producer }}/ajouter-produit">en rajouter un ?</a> 😔 Ce⋅tte producteur⋅rice n'a pas encore de produits. Voulez vous <a href="/produits/{{ delivery.id }}/producteurs/{{ producer }}/produits/créer">en rajouter un ?</a>
{% else %} {% else %}
<table class="delivery pure-table"> <table class="delivery pure-table">
<thead> <thead>
@ -43,7 +43,7 @@
<tbody> <tbody>
{% for product in delivery.get_products_by(producer) %} {% for product in delivery.get_products_by(producer) %}
<tr> <tr>
<th class="product {% if product.rupture %}rupture{% endif %}">{% if edit_mode %}<a href="/distribution/{{ delivery.id }}/{{ product.producer }}/produit/{{ product.ref }}/éditer">{% endif %}{% if edit_mode %}<i class="icon-pencil"></i>&nbsp;{% endif %}{{ product }}{% if edit_mode %}</a>{% endif %}{% if product.rupture %} {{ product.rupture }}{% endif %} <th class="product {% if product.rupture %}rupture{% endif %}">{% if edit_mode %}<a href="/produits/{{ delivery.id }}/producteurs/{{ product.producer }}/produits/{{ product.ref }}">{% endif %}{% if edit_mode %}<i class="icon-pencil"></i>&nbsp;{% endif %}{{ product }}{% if edit_mode %}</a>{% endif %}{% if product.rupture %} {{ product.rupture }}{% endif %}
<td>{{ product.price | round(2) }} €</td> <td>{{ product.price | round(2) }} €</td>
{% if delivery.has_packing %} {% if delivery.has_packing %}
<td class="packing">{% if product.packing %}{{ product.packing }} x {% endif %} {{ product.unit }}</td> <td class="packing">{% if product.packing %}{{ product.packing }} x {% endif %} {{ product.unit }}</td>

View file

@ -1,5 +1,5 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block toplink %}<a href="/distribution/{{ delivery.id }}/{{producer.id}}/éditer">↶ Retourner a « {{producer.name}} »</a>{% endblock %} {% block toplink %}<a href="/produits/{{ delivery.id }}/producteurs/{{producer.id}}">↶ Retourner a « {{producer.name}} »</a>{% endblock %}
{% block body %} {% block body %}
<div class="header"> <div class="header">

View file

@ -51,13 +51,13 @@
</thead> </thead>
{% for product in products %} {% for product in products %}
<tr> <tr>
<td><a href="/distribution/{{ delivery.id }}/produit/{{ product.ref }}/éditer">{{ product.name }}</a></td> <td><a href="/produits/{{ delivery.id }}/producteurs/{{ producer.id }}/produits/{{ product.ref }}">{{ product.name }}</a></td>
<td>{{ product.price }}€</td> <td>{{ product.price }}€</td>
<td>{{ product.unit }}</td> <td>{{ product.unit }}</td>
<td>{{ product.description }}</td> <td>{{ product.description }}</td>
<td>{% if product.packing %}{{ product.packing }}{% endif %}</td> <td>{% if product.packing %}{{ product.packing }}{% endif %}</td>
<td>{% if product.rupture %}RUPTURE !!{% endif %}</td> <td>{% if product.rupture %}RUPTURE !!{% endif %}</td>
<td><a href="/distribution/{{ delivery.id }}/produit/{{ product.ref }}/éditer">éditer</a></td> <td><a href="/produits/{{ delivery.id }}/producteurs/{{ producer.id }}/produits/{{ product.ref }}">éditer</a></td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>

View file

@ -1,5 +1,5 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block toplink %}<a href="/distribution/{{ delivery.id }}/produits">↶ Retourner aux produits</a>{% endblock %} {% block toplink %}<a href="/produits/{{ delivery.id }}">↶ Retourner aux produits</a>{% endblock %}
{% block body %} {% block body %}
<div class="header"> <div class="header">
@ -8,17 +8,17 @@
<div class="pure-menu pure-menu-horizontal"> <div class="pure-menu pure-menu-horizontal">
<ul class="pure-menu-list"> <ul class="pure-menu-list">
<li class="pure-menu-item"> <li class="pure-menu-item">
<a class="pure-menu-link" href="/distribution/{{ delivery.id}}/{{ producer.id }}/ajouter-produit">Ajouter un produit</a> <a class="pure-menu-link" href="/produits/{{ delivery.id}}/producteurs/{{ producer.id }}/produits/créer">Ajouter un produit</a>
</li> </li>
<li class="pure-menu-item"> <li class="pure-menu-item">
<a class="pure-menu-link" href="/distribution/{{ delivery.id}}/{{ producer.id }}/supprimer">Supprimer</a> <a class="pure-menu-link" href="/produits/{{ delivery.id}}/producteurs/{{ producer.id }}/supprimer">Supprimer</a>
</li> </li>
<li class="pure-menu-list"> <li class="pure-menu-list">
<a class="pure-menu-link" href="/distribution/{{ delivery.id}}/{{ producer.id }}/frais-de-livraison">Gérer des frais de livraison</a> <a class="pure-menu-link" href="/produits/{{ delivery.id}}/producteurs/{{ producer.id }}/frais-de-livraison">Gérer des frais de livraison</a>
</li> </li>
{% if producer.needs_price_update(delivery) %} {% if producer.needs_price_update(delivery) %}
<li class="pure-menu-item"> <li class="pure-menu-item">
<a class="pure-menu-link" href="/distribution/{{ delivery.id}}/{{ producer.id }}/valider-prix">Marquer les prix comme OK</a> <a class="pure-menu-link" href="/produits/{{ delivery.id}}/producteurs/{{ producer.id }}/valider-prix">Marquer les prix comme OK</a>
</li> </li>
{% endif %} {% endif %}
</ul> </ul>
@ -67,14 +67,14 @@
{% if delivery.shipping.get(producer.id) %} {% if delivery.shipping.get(producer.id) %}
<h3>Frais de livraison</h3> <h3>Frais de livraison</h3>
Des frais de livraison de {{ delivery.shipping[producer.id] }}€ ont été enregistrés pour ce producteur. Des frais de livraison de {{ delivery.shipping[producer.id] }}€ ont été enregistrés pour ce producteur.
<a class="button" href="/distribution/{{ delivery.id}}/{{ producer.id }}/frais-de-livraison">Modifier</a> <a class="button" href="/produits/{{ delivery.id}}/producteurs/{{ producer.id }}/frais-de-livraison">Modifier</a>
{% endif %} {% endif %}
{% if products %} {% if products %}
<h3>Produits <h3>Produits
<a class="button" href="/distribution/{{ delivery.id}}/{{ producer.id }}/ajouter-produit">Ajouter un produit</a> <a class="button" href="/produits/{{ delivery.id}}/producteurs/{{ producer.id }}/produits/créer">Ajouter un produit</a>
{% if producer.needs_price_update(delivery) %} {% if producer.needs_price_update(delivery) %}
<a class="button" href="/distribution/{{ delivery.id}}/{{ producer.id }}/valider-prix">Marquer les prix comme OK</a> <a class="button" href="/produits/{{ delivery.id}}/producteurs/{{ producer.id }}/valider-prix">Marquer les prix comme OK</a>
{% endif %} {% endif %}
</h3> </h3>
<p>Vous pouvez éditer les produits en cliquant sur leur nom.</p> <p>Vous pouvez éditer les produits en cliquant sur leur nom.</p>
@ -92,13 +92,13 @@ Des frais de livraison de {{ delivery.shipping[producer.id] }}€ ont été enre
</thead> </thead>
{% for product in products %} {% for product in products %}
<tr> <tr>
<td><a href="/distribution/{{ delivery.id }}/{{ producer.id }}/produit/{{ product.ref }}/éditer">{{ product.name }}</a></td> <td><a href="/produits/{{ delivery.id }}/producteurs/{{ producer.id }}/produits/{{ product.ref }}">{{ product.name }}</a></td>
<td>{{ product.price }}€</td> <td>{{ product.price }}€</td>
<td>{{ product.unit }}</td> <td>{{ product.unit }}</td>
<td>{{ product.description }}</td> <td>{{ product.description }}</td>
<td>{% if product.packing %}{{ product.packing }}{% endif %}</td> <td>{% if product.packing %}{{ product.packing }}{% endif %}</td>
<td>{% if product.rupture %}RUPTURE !!{% endif %}</td> <td>{% if product.rupture %}RUPTURE !!{% endif %}</td>
<td><a href="/distribution/{{ delivery.id }}/{{ producer.id }}/{{ product.ref }}/supprimer">supprimer</a></td> <td><a href="/produits/{{ delivery.id }}/producteurs/{{ producer.id }}/produits/{{ product.ref }}/supprimer">supprimer</a></td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>

View file

@ -1,22 +1,22 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block toplink %}<a href="/distribution/{{ delivery.id }}/{{ producer.id }}/éditer">↶ Retourner aux produits de {{ producer.name }}</a>{% endblock %} {% block toplink %}<a href="/produits/{{ delivery.id }}/producteurs/{{ producer.id }}">↶ Retourner aux produits de {{ producer.name }}</a>{% endblock %}
{% block body %} {% block body %}
<div class="header"> <div class="header">
{% if product.ref %} {% if product.ref %}
<h1>Modifier le produit « {{ product.name }} »</h1> <h1>Modifier le produit « {{ product.name }} »</h1>
<div class="pure-menu pure-menu-horizontal">
<ul class="pure-menu-list">
<li class="pure-menu-item">
<a class="pure-menu-link" href="/produits/{{ delivery.id}}/producteurs/{{ producer.id }}/produits/{{ product.ref }}/supprimer">Supprimer ce produit</a>
</li>
</ul>
</div>
{% else %} {% else %}
<h1>{{ producer.name }} : Nouveau produit</h1> <h1>{{ producer.name }} : Nouveau produit</h1>
{% endif %} {% endif %}
<div class="pure-menu pure-menu-horizontal">
<ul class="pure-menu-list">
<li class="pure-menu-item">
<a class="pure-menu-link" href="/distribution/{{ delivery.id}}/{{ producer.id }}/{{ product.ref }}/supprimer">Supprimer ce produit</a>
</li>
</ul>
</div>
</div> </div>
<form method="post"> <form method="post">
@ -51,34 +51,5 @@
</div> </div>
</form> </form>
{% if products %}
<h3>Produits</h3>
<table>
<thead>
<tr>
<th>Produit</th>
<th>Prix</th>
<th>Unité</th>
<th>Description</th>
<th>Packaging</th>
<th>Rupture ?</th>
<th></th>
</tr>
</thead>
{% for product in products %}
<tr>
<td><a href="/distribution/{{ delivery.id }}/produit/{{ product.ref }}/éditer">{{ product.name }}</a></td>
<td>{{ product.price }}€</td>
<td>{{ product.unit }}</td>
<td>{{ product.description }}</td>
<td>{% if product.packing %}{{ product.packing }}{% endif %}</td>
<td>{% if product.rupture %}RUPTURE !!{% endif %}</td>
<td><a href="/distribution/{{ delivery.id }}/produit/{{ product.ref }}/éditer">éditer</a></td>
</tr>
{% endfor %}
</table>
{% endif %}
<hr> <hr>
{% endblock body %} {% endblock body %}

View file

@ -1,5 +1,5 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block toplink %}<a href="/distribution/{{ delivery.id }}/produits">↶ Retourner aux produits</a>{% endblock %} {% block toplink %}<a href="/produits/{{ delivery.id }}">↶ Retourner aux produits</a>{% endblock %}
{% block body %} {% block body %}
<div class="header"> <div class="header">

View file

@ -6,19 +6,19 @@
<div class="pure-menu pure-menu-horizontal"> <div class="pure-menu pure-menu-horizontal">
<ul class="pure-menu-list"> <ul class="pure-menu-list">
<li class="pure-menu-item"> <li class="pure-menu-item">
<a class="pure-menu-link" href="/producteurices/créer/{{ delivery.id }}"><i class="icon-heart"></i>&nbsp;Ajouter un⋅e producteur⋅rice</a> <a class="pure-menu-link" href="/produits/{{ delivery.id }}/producteurs/créer"><i class="icon-heart"></i>&nbsp;Ajouter un⋅e producteur⋅rice</a>
</li> </li>
<li class="pure-menu-item"> <li class="pure-menu-item">
<a class="pure-menu-link" href="/distribution/{{ delivery.id }}/copier"><i class="icon-hotairballoon"></i>&nbsp;Réutiliser les produits d'une autre distrib</a> <a class="pure-menu-link" href="/produits/{{ delivery.id }}/copier"><i class="icon-hotairballoon"></i>&nbsp;Réutiliser les produits d'une autre distrib</a>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
<p class="hide-on-print"> <p class="hide-on-print">
{% if producers %} {% if producers %}
<a href="/distribution/{{ delivery.id }}/producteurices.pdf{% if referent %}?referent={{ referent }}{% endif %}">Télécharger la liste des commandes en PDF</a> <a href="/produits/{{ delivery.id }}/produits.pdf{% if referent %}?referent={{ referent }}{% endif %}">Télécharger la liste des commandes en PDF</a>
{% endif %} {% endif %}
{% if referent %}Voici la liste des product⋅eurs⋅rices dont {{ referent }} est référent⋅e. <a class="button" href="/distribution/{{delivery.id}}/producteurices">voir tous les produits</a>{% endif %} {% if referent %}Voici la liste des product⋅eurs⋅rices dont {{ referent }} est référent⋅e. <a class="button" href="/produits/{{delivery.id}}">voir tous les produits</a>{% endif %}
</p> </p>
<article class="delivery"> <article class="delivery">

View file

@ -20,7 +20,7 @@ async def home(request, response):
response.redirect = "/groupes" response.redirect = "/groupes"
return return
response.html( response.html(
"delivery/list.html", "delivery/list_deliveries.html",
incoming=Delivery.incoming(), incoming=Delivery.incoming(),
former=Delivery.former(), former=Delivery.former(),
archives=list(Delivery.all(is_archived=True)), archives=list(Delivery.all(is_archived=True)),
@ -30,7 +30,7 @@ async def home(request, response):
@app.route("/archives", methods=["GET"]) @app.route("/archives", methods=["GET"])
async def view_archives(request, response): async def view_archives(request, response):
response.html( response.html(
"delivery/archives.html", {"deliveries": Delivery.all(is_archived=True)} "delivery/list_archives.html", {"deliveries": Delivery.all(is_archived=True)}
) )
@ -60,7 +60,7 @@ async def unarchive_delivery(request, response, id):
@app.route("/distribution", methods=["GET"]) @app.route("/distribution", methods=["GET"])
async def new_delivery(request, response): async def new_delivery(request, response):
response.html("delivery/edit.html", delivery={}) response.html("delivery/edit_delivery.html", delivery={})
@app.route("/distribution", methods=["POST"]) @app.route("/distribution", methods=["POST"])
@ -83,7 +83,7 @@ async def create_delivery(request, response):
async def pdf_for_producer(request, response, id, producer): async def pdf_for_producer(request, response, id, producer):
delivery = Delivery.load(id) delivery = Delivery.load(id)
response.pdf( response.pdf(
"product_list.html", "list_products.html",
{"list_only": True, "delivery": delivery, "producers": [producer]}, {"list_only": True, "delivery": delivery, "producers": [producer]},
filename=utils.prefix(f"bon-de-commande-{producer}.pdf", delivery), filename=utils.prefix(f"bon-de-commande-{producer}.pdf", delivery),
) )
@ -93,7 +93,7 @@ async def pdf_for_producer(request, response, id, producer):
async def delivery_toolbox(request, response, id): async def delivery_toolbox(request, response, id):
delivery = Delivery.load(id) delivery = Delivery.load(id)
response.html( response.html(
"delivery/toolbox.html", "delivery/show_toolbox.html",
{ {
"delivery": delivery, "delivery": delivery,
"referents": [p.referent for p in delivery.producers.values()], "referents": [p.referent for p in delivery.producers.values()],
@ -155,7 +155,7 @@ async def export_products(request, response, id):
@staff_only @staff_only
async def edit_delivery(request, response, id): async def edit_delivery(request, response, id):
delivery = Delivery.load(id) delivery = Delivery.load(id)
response.html("delivery/edit.html", {"delivery": delivery}) response.html("delivery/edit_delivery.html", {"delivery": delivery})
@app.route("/distribution/{id}/edit", methods=["POST"]) @app.route("/distribution/{id}/edit", methods=["POST"])
@ -176,7 +176,7 @@ async def post_delivery(request, response, id):
@app.route("/distribution/{id}", methods=["GET"]) @app.route("/distribution/{id}", methods=["GET"])
async def view_delivery(request, response, id): async def view_delivery(request, response, id):
delivery = Delivery.load(id) delivery = Delivery.load(id)
response.html("delivery/show.html", {"delivery": delivery}) response.html("delivery/show_delivery.html", {"delivery": delivery})
@app.route("/distribution/{id}/commander", methods=["POST", "GET"]) @app.route("/distribution/{id}/commander", methods=["POST", "GET"])
@ -276,7 +276,7 @@ async def place_order(request, response, id):
async def signing_sheet(request, response, id): async def signing_sheet(request, response, id):
delivery = Delivery.load(id) delivery = Delivery.load(id)
response.pdf( response.pdf(
"delivery/signing_sheet.html", "delivery/show_signing_sheet.html",
{"delivery": delivery}, {"delivery": delivery},
css="signing-sheet.css", css="signing-sheet.css",
filename=utils.prefix("commandes-par-groupe.pdf", delivery), filename=utils.prefix("commandes-par-groupe.pdf", delivery),
@ -316,7 +316,9 @@ async def adjust_product(request, response, id, ref):
response.message(f"Le produit «{product.ref}» a bien été ajusté!") response.message(f"Le produit «{product.ref}» a bien été ajusté!")
response.redirect = delivery_url response.redirect = delivery_url
else: else:
response.html("adjust_product.html", {"delivery": delivery, "product": product}) response.html(
"delivery/adjust_product.html", {"delivery": delivery, "product": product}
)
@app.route("/distribution/{id}/solde", methods=["GET"]) @app.route("/distribution/{id}/solde", methods=["GET"])
@ -364,7 +366,7 @@ async def delivery_balance(request, response, id):
for debiter, amount, crediter in results: for debiter, amount, crediter in results:
results_dict[debiter][crediter] = amount results_dict[debiter][crediter] = amount
template_name = "delivery/balance.html" template_name = "delivery/compute_balance.html"
template_args = { template_args = {
"delivery": delivery, "delivery": delivery,
"debiters": debiters, "debiters": debiters,

View file

@ -10,7 +10,7 @@ async def on_startup():
@app.route("/groupes", methods=["GET"]) @app.route("/groupes", methods=["GET"])
async def handle_groups(request, response): async def handle_groups(request, response):
response.html("groups/list.html", {"groups": request["groups"]}) response.html("groups/list_groups.html", {"groups": request["groups"]})
@app.route("/groupes/{id}/rejoindre", method=["GET"]) @app.route("/groupes/{id}/rejoindre", method=["GET"])
@ -43,7 +43,7 @@ async def create_group(request, response):
request["groups"].persist() request["groups"].persist()
response.message(f"Le groupe {group.name} à bien été créé") response.message(f"Le groupe {group.name} à bien été créé")
response.redirect = "/" response.redirect = "/"
response.html("groups/edit.html", group=group) response.html("groups/edit_group.html", group=group)
@app.route("/groupes/{id}/éditer", methods=["GET", "POST"]) @app.route("/groupes/{id}/éditer", methods=["GET", "POST"])
@ -60,7 +60,7 @@ async def edit_group(request, response, id):
request["groups"].groups[id] = group request["groups"].groups[id] = group
request["groups"].persist() request["groups"].persist()
response.redirect = "/groupes" response.redirect = "/groupes"
response.html("groups/edit.html", group=group) response.html("groups/edit_group.html", group=group)
@app.route("/groupes/{id}/supprimer", methods=["GET"]) @app.route("/groupes/{id}/supprimer", methods=["GET"])

View file

@ -18,7 +18,7 @@ async def auth_required(request, response):
decoded = utils.read_token(token) decoded = utils.read_token(token)
email = decoded.get("sub") email = decoded.get("sub")
if not email: if not email:
response.redirect = f"/sésame?next={request.path}" response.redirect = f"/connexion?next={request.path}"
return response return response
groups = Groups.load() groups = Groups.load()
@ -33,12 +33,12 @@ async def auth_required(request, response):
session.user.set(user) session.user.set(user)
@app.route("/sésame", methods=["GET"], unprotected=True) @app.route("/connexion", methods=["GET"], unprotected=True)
async def sesame(request, response): async def sesame(request, response):
response.html("sesame.html") response.html("login.html")
@app.route("/sésame", methods=["POST"], unprotected=True) @app.route("/connexion", methods=["POST"], unprotected=True)
async def send_sesame(request, response): async def send_sesame(request, response):
email = request.form.get("email").lower() email = request.form.get("email").lower()
token = utils.create_token(email) token = utils.create_token(email)
@ -61,7 +61,7 @@ async def send_sesame(request, response):
response.redirect = "/" response.redirect = "/"
@app.route("/sésame/{token}", methods=["GET"], unprotected=True) @app.route("/connexion/{token}", methods=["GET"], unprotected=True)
async def set_sesame(request, response, token): async def set_sesame(request, response, token):
decoded = utils.read_token(token) decoded = utils.read_token(token)
if not decoded: if not decoded:

View file

@ -6,11 +6,11 @@ from ..models import Delivery, Product, Producer
from .. import utils from .. import utils
@app.route("/distribution/{id}/produits") @app.route("/produits/{id}")
@app.route("/distribution/{id}/produits.pdf") @app.route("/produits/{id}/produits.pdf")
async def list_products(request, response, id): async def list_products(request, response, id):
delivery = Delivery.load(id) delivery = Delivery.load(id)
template_name = "products/list.html" template_name = "products/list_products.html"
template_params = { template_params = {
"edit_mode": True, "edit_mode": True,
"list_only": True, "list_only": True,
@ -29,7 +29,7 @@ async def list_products(request, response, id):
response.html(template_name, template_params) response.html(template_name, template_params)
@app.route("/distribution/{delivery_id}/{producer_id}/éditer", methods=["GET", "POST"]) @app.route("/produits/{delivery_id}/producteurs/{producer_id}", methods=["GET", "POST"])
async def edit_producer(request, response, delivery_id, producer_id): async def edit_producer(request, response, delivery_id, producer_id):
delivery = Delivery.load(delivery_id) delivery = Delivery.load(delivery_id)
producer = delivery.producers.get(producer_id) producer = delivery.producers.get(producer_id)
@ -48,13 +48,14 @@ async def edit_producer(request, response, delivery_id, producer_id):
{ {
"delivery": delivery, "delivery": delivery,
"producer": producer, "producer": producer,
"products": delivery.get_products_by(producer.id), "products": delivery.get_products_by(producer_id),
}, },
) )
@app.route( @app.route(
"/distribution/{delivery_id}/{producer_id}/supprimer", methods=["GET", "POST"] "/produits/{delivery_id}/producteurs/{producer_id}/supprimer",
methods=["GET", "POST"],
) )
async def delete_producer(request, response, delivery_id, producer_id): async def delete_producer(request, response, delivery_id, producer_id):
# Delete the producer and all the related products. # Delete the producer and all the related products.
@ -70,7 +71,7 @@ async def delete_producer(request, response, delivery_id, producer_id):
delivery.persist() delivery.persist()
response.message(f"{producer.name} à bien été supprimé !") response.message(f"{producer.name} à bien été supprimé !")
response.redirect = f"/distribution/{delivery.id}/produits" response.redirect = f"/produits/{delivery.id}"
response.html( response.html(
"products/delete_producer.html", "products/delete_producer.html",
@ -82,26 +83,7 @@ async def delete_producer(request, response, delivery_id, producer_id):
) )
@app.route("/distribution/{delivery_id}/{producer_id}/frais", methods=["GET", "POST"]) @app.route("/produits/{delivery_id}/producteurs/créer", methods=["GET", "POST"])
async def handle_shipping_fees(request, response, delivery_id, producer_id):
delivery = Delivery.load(delivery_id)
producer = delivery.producers.get(producer_id)
if request.method == "POST":
form = request.form
producer.referent = form.get("referent")
producer.referent_tel = form.get("referent_tel")
producer.referent_name = form.get("referent_name")
producer.description = form.get("description")
producer.contact = form.get("contact")
delivery.producers[producer_id] = producer
delivery.persist()
response.html(
"products/shipping_fees.html", {"delivery": delivery, "producer": producer}
)
@app.route("/producteurices/créer/{delivery_id}", methods=["GET", "POST"])
async def create_producer(request, response, delivery_id): async def create_producer(request, response, delivery_id):
delivery = Delivery.load(delivery_id) delivery = Delivery.load(delivery_id)
producer = None producer = None
@ -120,7 +102,7 @@ async def create_producer(request, response, delivery_id):
delivery.producers[producer_id] = producer delivery.producers[producer_id] = producer
delivery.persist() delivery.persist()
response.message(f"« {producer.name} » à bien été créé !") response.message(f"« {producer.name} » à bien été créé !")
response.redirect = f"/distribution/{delivery.id}/{producer.id}/éditer" response.redirect = f"/produits/{delivery.id}/producteurs/{producer.id}"
response.html( response.html(
"products/edit_producer.html", {"delivery": delivery, "producer": producer} "products/edit_producer.html", {"delivery": delivery, "producer": producer}
@ -128,7 +110,7 @@ async def create_producer(request, response, delivery_id):
@app.route( @app.route(
"/distribution/{delivery_id}/{producer_id}/produit/{product_ref}/éditer", "/produits/{delivery_id}/producteurs/{producer_id}/produits/{product_ref}",
methods=["GET", "POST"], methods=["GET", "POST"],
) )
async def edit_product(request, response, delivery_id, producer_id, product_ref): async def edit_product(request, response, delivery_id, producer_id, product_ref):
@ -153,16 +135,18 @@ async def edit_product(request, response, delivery_id, producer_id, product_ref)
product.rupture = None product.rupture = None
delivery.persist() delivery.persist()
response.message("Le produit à bien été modifié") response.message("Le produit à bien été modifié")
response.redirect = f"/distribution/{delivery_id}/{producer_id}/éditer" response.redirect = f"/produits/{delivery_id}/producteurs/{producer_id}"
return return
response.html( response.html(
"products/edit.html", "products/edit_product.html",
{"delivery": delivery, "product": product, "producer": producer}, {"delivery": delivery, "product": product, "producer": producer},
) )
@app.route("/distribution/{delivery_id}/{producer_id}/valider-prix", methods=["GET"]) @app.route(
"/produits/{delivery_id}/producteurs/{producer_id}/valider-prix", methods=["GET"]
)
async def mark_producer_prices_as_ok(request, response, delivery_id, producer_id): async def mark_producer_prices_as_ok(request, response, delivery_id, producer_id):
delivery = Delivery.load(delivery_id) delivery = Delivery.load(delivery_id)
producer = delivery.producers.get(producer_id) producer = delivery.producers.get(producer_id)
@ -175,10 +159,10 @@ async def mark_producer_prices_as_ok(request, response, delivery_id, producer_id
response.message( response.message(
f"Les prix ont été marqués comme OK pour « { producer.name } », merci !" f"Les prix ont été marqués comme OK pour « { producer.name } », merci !"
) )
response.redirect = f"/distribution/{delivery_id}/{producer_id}/éditer" response.redirect = f"/produits/{delivery_id}/producteurs/{producer_id}"
@app.route("/distribution/{delivery_id}/valider-prix", methods=["GET"]) @app.route("/produits/{delivery_id}/valider-prix", methods=["GET"])
async def mark_all_prices_as_ok(request, response, delivery_id): async def mark_all_prices_as_ok(request, response, delivery_id):
delivery = Delivery.load(delivery_id) delivery = Delivery.load(delivery_id)
@ -187,22 +171,24 @@ async def mark_all_prices_as_ok(request, response, delivery_id):
delivery.persist() delivery.persist()
response.message(f"Les prix ont été marqués comme OK pour toute la distribution !") response.message(f"Les prix ont été marqués comme OK pour toute la distribution !")
response.redirect = f"/distribution/{delivery_id}/produits" response.redirect = f"/produits/{delivery_id}"
@app.route( @app.route(
"/distribution/{delivery_id}/{producer_id}/{product_ref}/supprimer", methods=["GET"] "/produits/{delivery_id}/producteurs/{producer_id}/produits/{product_ref}/supprimer",
methods=["GET"],
) )
async def delete_product(request, response, delivery_id, producer_id, product_ref): async def delete_product(request, response, delivery_id, producer_id, product_ref):
delivery = Delivery.load(delivery_id) delivery = Delivery.load(delivery_id)
product = delivery.delete_product(product_ref) product = delivery.delete_product(product_ref)
delivery.persist() delivery.persist()
response.message(f"Le produit « { product.name } » à bien été supprimé.") response.message(f"Le produit « { product.name } » à bien été supprimé.")
response.redirect = f"/distribution/{delivery_id}/{producer_id}/éditer" response.redirect = f"/produits/{delivery_id}/producteurs/{producer_id}"
@app.route( @app.route(
"/distribution/{delivery_id}/{producer_id}/ajouter-produit", methods=["GET", "POST"] "/produits/{delivery_id}/producteurs/{producer_id}/produits/créer",
methods=["GET", "POST"],
) )
async def create_product(request, response, delivery_id, producer_id): async def create_product(request, response, delivery_id, producer_id):
delivery = Delivery.load(delivery_id) delivery = Delivery.load(delivery_id)
@ -218,17 +204,17 @@ async def create_product(request, response, delivery_id, producer_id):
delivery.products.append(product) delivery.products.append(product)
delivery.persist() delivery.persist()
response.message("Le produit à bien été créé") response.message("Le produit à bien été créé")
response.redirect = f"/distribution/{delivery_id}/{producer_id}/éditer" response.redirect = f"/produits/{delivery_id}/producteurs/{producer_id}"
return return
response.html( response.html(
"products/edit.html", "products/edit_product.html",
{"delivery": delivery, "producer": producer, "product": product}, {"delivery": delivery, "producer": producer, "product": product},
) )
@app.route( @app.route(
"/distribution/{delivery_id}/{producer_id}/frais-de-livraison", "/produits/{delivery_id}/producteurs/{producer_id}/frais-de-livraison",
methods=["GET", "POST"], methods=["GET", "POST"],
) )
async def set_shipping_price(request, response, delivery_id, producer_id): async def set_shipping_price(request, response, delivery_id, producer_id):
@ -242,11 +228,11 @@ async def set_shipping_price(request, response, delivery_id, producer_id):
delivery.shipping[producer_id] = shipping delivery.shipping[producer_id] = shipping
delivery.persist() delivery.persist()
response.message("Les frais de livraison ont bien été enregistrés, merci !") response.message("Les frais de livraison ont bien été enregistrés, merci !")
response.redirect = f"/distribution/{delivery_id}/produits" response.redirect = f"/produits/{delivery_id}"
return return
response.html( response.html(
"products/shipping_fees.html", "products/edit_shipping_fees.html",
{ {
"delivery": delivery, "delivery": delivery,
"producer": producer, "producer": producer,
@ -255,17 +241,17 @@ async def set_shipping_price(request, response, delivery_id, producer_id):
) )
@app.route("/distribution/{id}/copier", methods=["GET"]) @app.route("/produits/{id}/copier", methods=["GET"])
async def copy_products(request, response, id): async def copy_products_get(request, response, id):
deliveries = Delivery.all() deliveries = Delivery.all()
response.html("delivery/copy.html", {"deliveries": deliveries}) response.html("products/copy_products.html", {"deliveries": deliveries})
@app.route("/distribution/{id}/copier", methods=["POST"]) @app.route("/produits/{id}/copier", methods=["POST"])
async def copy_products(request, response, id): async def copy_products_post(request, response, id):
delivery = Delivery.load(id) delivery = Delivery.load(id)
to_copy = delivery.load(request.form.get("to_copy")) to_copy = delivery.load(request.form.get("to_copy"))
delivery.producers = to_copy.producers delivery.producers = to_copy.producers
delivery.products = to_copy.products delivery.products = to_copy.products
delivery.persist() delivery.persist()
response.redirect = f"/distribution/{id}" response.redirect = f"/produits/{id}"