diff --git a/TODO b/TODO
index d07455a..bd669d2 100644
--- a/TODO
+++ b/TODO
@@ -22,5 +22,4 @@ x Repasser sur les tests
x Changer les liens d'emergement, de paiements et ???, trouver de meilleurs dénominations
Faire un refactoring des modèles
-
Create an "url_for" utility to simplify URL management.
\ No newline at end of file
diff --git a/copanier/templates/base.html b/copanier/templates/base.html
index 78032f9..1e7f18a 100644
--- a/copanier/templates/base.html
+++ b/copanier/templates/base.html
@@ -27,18 +27,18 @@
{{ config.SITE_NAME }}
diff --git a/copanier/templates/delivery/adjust_product.html b/copanier/templates/delivery/adjust_product.html
index 63e0fcf..251866a 100644
--- a/copanier/templates/delivery/adjust_product.html
+++ b/copanier/templates/delivery/adjust_product.html
@@ -2,7 +2,7 @@
{% block body %}
-
+
Conditionnement {{ product.packing }} x {{ product.unit }}
Total commandé {{ delivery.product_wanted(product) }}
Manquant {{ delivery.product_missing(product) }}
diff --git a/copanier/templates/delivery/compute_balance.html b/copanier/templates/delivery/compute_balance.html
index 398e2d4..3edd02d 100644
--- a/copanier/templates/delivery/compute_balance.html
+++ b/copanier/templates/delivery/compute_balance.html
@@ -5,7 +5,7 @@
diff --git a/copanier/templates/delivery/edit_delivery.html b/copanier/templates/delivery/edit_delivery.html
index 7029f56..e2636c4 100644
--- a/copanier/templates/delivery/edit_delivery.html
+++ b/copanier/templates/delivery/edit_delivery.html
@@ -1,5 +1,5 @@
{% extends "base.html" %}
-{% block toplink %}{% if delivery.id %}↶ Retourner à la distribution {% endif %}{% endblock %}
+{% block toplink %}{% if delivery.id %}↶ Retourner à la distribution {% endif %}{% endblock %}
{% block body %}
diff --git a/copanier/templates/delivery/list_deliveries.html b/copanier/templates/delivery/list_deliveries.html
index fb2bdc4..22a2185 100644
--- a/copanier/templates/delivery/list_deliveries.html
+++ b/copanier/templates/delivery/list_deliveries.html
@@ -6,10 +6,10 @@
diff --git a/copanier/templates/delivery/place_order.html b/copanier/templates/delivery/place_order.html
index bd7f6ce..d6e0770 100644
--- a/copanier/templates/delivery/place_order.html
+++ b/copanier/templates/delivery/place_order.html
@@ -57,7 +57,7 @@
{% endif %}
{% if request.user.is_staff and delivery.status == delivery.CLOSED %}
- Ajuster
+ Ajuster
{% endif %}
diff --git a/copanier/templates/delivery/prepare_referent_email.html b/copanier/templates/delivery/prepare_referent_email.html
index 4c61137..ba79004 100644
--- a/copanier/templates/delivery/prepare_referent_email.html
+++ b/copanier/templates/delivery/prepare_referent_email.html
@@ -1,5 +1,5 @@
{% extends "base.html" %}
-{% block toplink %}↶ Retourner à la boîte à outils {% endblock %}
+{% block toplink %}↶ Retourner à la boîte à outils {% endblock %}
{% block body %}
Envoi d'un mail aux référent⋅e⋅s
@@ -13,7 +13,7 @@ Bonjour,
Et voilà, les commandes maintenant terminées, il est maintenant temps de passer à l'action !
En pièce-jointe, les informations pour les producteurs⋅rices dont tu est référent⋅e.
-Tu peux aussi retrouver le doc à cette URL : https://{{ request.host }}/produits/{{ delivery.id }}
+Tu peux aussi retrouver le doc à cette URL : https://{{ request.host }}{{ url_for('list_products', id=delivery.id) }}
Rendez-vous pour la distribution, le {{ delivery.from_date|date }} de {{ delivery.from_date|time }} à {{ delivery.to_date|time }} à {{ delivery.where }}.
diff --git a/copanier/templates/delivery/show_delivery.html b/copanier/templates/delivery/show_delivery.html
index 3cb23d8..bd0665e 100644
--- a/copanier/templates/delivery/show_delivery.html
+++ b/copanier/templates/delivery/show_delivery.html
@@ -21,26 +21,26 @@
- {% if request['user'].email == delivery.contact and delivery.status > delivery.EMPTY %}
- {% endif %}
- {% if request.user and request.user.is_staff %}
- {% if delivery.is_archived %}
+ {% if request['user'].email == delivery.contact and delivery.status > delivery.EMPTY %}
+ {% endif %}
+ {% if request.user and request.user.is_staff %}
+ {% if delivery.is_archived %}
- {% endif %}
+ {% endif %}
- {% endif %}
+ {% endif %}
@@ -54,7 +54,7 @@
{% if delivery.has_products %}
{% for (id, producer) in delivery.get_producers_for_referent(request.user.email).items() %}
{% if producer.needs_price_update(delivery) %}
- Merci de mettre à jour les prix pour « {{ producer.name }} ».
+ Merci de mettre à jour les prix pour « {{ producer.name }} ».
{% endif %}
{% endfor %}
{% include "includes/delivery_table.html" %}
@@ -64,8 +64,8 @@
{% if request.user and request.user.is_staff %}
Occupons-nous donc de ça ! Deux options :
- Ajouter les product⋅eurs⋅rices à la main ;
- Ou bien copier les produits d'une autre distribution .
+ Ajouter les product⋅eurs⋅rices à la main ;
+ Ou bien copier les produits d'une autre distribution .
{% endif %}
diff --git a/copanier/templates/delivery/show_toolbox.html b/copanier/templates/delivery/show_toolbox.html
index 871367c..a4d4e01 100644
--- a/copanier/templates/delivery/show_toolbox.html
+++ b/copanier/templates/delivery/show_toolbox.html
@@ -1,6 +1,6 @@
{% extends "base.html" %}
-{% block toplink %}↶ Retourner à la distribution {% endblock %}
+{% block toplink %}↶ Retourner à la distribution {% endblock %}
{% block body %}
@@ -46,19 +46,19 @@
Approvisionnements
Du {{ delivery.dates.adjustment_deadline | date }} au {{ delivery.dates.delivery_date | date }}
- Envoyer les infos de commande aux référent⋅e⋅s
+ Envoyer les infos de commande aux référent⋅e⋅s
Faire les commandes aux producteurs⋅rices, récupérer les produits
Préparation de la distribution
La veille du {{ delivery.dates.delivery_date | date }}
- Imprimer les bons de commandes par colocation
+ Imprimer les bons de commandes par colocation
—
Distribution
{{ delivery.dates.delivery_date | date }}
- Coordoner la distribution, faire la répartition des chèques
+ Coordoner la distribution, faire la répartition des chèques
Arriver 30mn avant le début de la distribution, répartir les produits par coloc
diff --git a/copanier/templates/includes/delivery_list.html b/copanier/templates/includes/delivery_list.html
index 869900b..b5382c5 100644
--- a/copanier/templates/includes/delivery_list.html
+++ b/copanier/templates/includes/delivery_list.html
@@ -2,7 +2,7 @@
{% for delivery in deliveries %}
-
+
{% include "includes/delivery_head.html" %}
diff --git a/copanier/views/core.py b/copanier/views/core.py
index 1d74400..30b7682 100644
--- a/copanier/views/core.py
+++ b/copanier/views/core.py
@@ -18,6 +18,7 @@ class Response(RollResponse):
context["request"] = self.request
context["config"] = config
context["request"] = self.request
+ context["url_for"] = app.url_for
if self.request.cookies.get("message"):
context["message"] = json.loads(self.request.cookies["message"])
self.cookies.set("message", "")
@@ -64,6 +65,17 @@ class Response(RollResponse):
self.cookies.set("message", json.dumps((text, status)))
+def get_function_name(node):
+ if not node.payload:
+ return False
+
+ func = node.payload["GET"]
+ if hasattr(func, "decorates"):
+ return func.decorates.__name__
+ else:
+ return func.__name__
+
+
class Roll(BaseRoll):
Response = Response
@@ -78,10 +90,29 @@ class Roll(BaseRoll):
def register_context(self, func):
self._context_func.append(func)
- def url_for(self, view_name):
- from pdb import set_trace
+ def _find_route_by_name(self, name, node=None):
+ node = node or self.routes.root
+ if get_function_name(node) == name:
+ return node
- set_trace()
+ if node.edges:
+ for edge in node.edges:
+ if edge.child:
+ route = self._find_route_by_name(name, edge.child)
+ if route:
+ return route
+
+ def url_for(self, name, *args, **kwargs):
+ route = self._find_route_by_name(name)
+ if not route:
+ from pdb import set_trace
+
+ set_trace()
+ raise Exception(f"Route for '{name}' wasn't found")
+ try:
+ return route.path.format(*args, **kwargs)
+ except KeyError as e:
+ raise Exception(f"Unable to build URL for {name} : '{e}' is missing")
def staff_only(view):
@@ -93,6 +124,7 @@ def staff_only(view):
return
return await view(request, response, *args, **kwargs)
+ decorator.decorates = view
return decorator
diff --git a/copanier/views/delivery.py b/copanier/views/delivery.py
index 2fc8bee..ce54656 100644
--- a/copanier/views/delivery.py
+++ b/copanier/views/delivery.py
@@ -28,7 +28,7 @@ async def home(request, response):
@app.route("/archives", methods=["GET"])
-async def view_archives(request, response):
+async def list_archives(request, response):
response.html(
"delivery/list_archives.html", {"deliveries": Delivery.all(is_archived=True)}
)
@@ -90,7 +90,7 @@ async def pdf_for_producer(request, response, id, producer):
@app.route("/distribution/{id}/gérer", methods=["GET"])
-async def delivery_toolbox(request, response, id):
+async def show_delivery_toolbox(request, response, id):
delivery = Delivery.load(id)
response.html(
"delivery/show_toolbox.html",
@@ -174,7 +174,7 @@ async def post_delivery(request, response, id):
@app.route("/distribution/{id}", methods=["GET"])
-async def view_delivery(request, response, id):
+async def show_delivery(request, response, id):
delivery = Delivery.load(id)
response.html("delivery/show_delivery.html", {"delivery": delivery})
@@ -273,7 +273,7 @@ async def place_order(request, response, id):
@app.route("/distribution/{id}/résumé-de-commandes", methods=["GET"])
-async def orders_summary(request, response, id):
+async def show_orders_summary(request, response, id):
delivery = Delivery.load(id)
response.pdf(
"delivery/show_orders_summary.html",
@@ -324,7 +324,7 @@ async def adjust_product(request, response, id, ref):
@app.route("/distribution/{id}/paiements", methods=["GET"])
@app.route("/distribution/{id}/paiements.pdf", methods=["GET"])
@staff_only
-async def delivery_balance(request, response, id):
+async def compute_payments(request, response, id):
delivery = Delivery.load(id)
groups = request["groups"]
diff --git a/copanier/views/groups.py b/copanier/views/groups.py
index 6375bd3..807de5d 100644
--- a/copanier/views/groups.py
+++ b/copanier/views/groups.py
@@ -9,7 +9,7 @@ async def on_startup():
@app.route("/groupes", methods=["GET"])
-async def handle_groups(request, response):
+async def groups(request, response):
response.html("groups/list_groups.html", {"groups": request["groups"]})
diff --git a/copanier/views/login.py b/copanier/views/login.py
index 59db27d..66d0856 100644
--- a/copanier/views/login.py
+++ b/copanier/views/login.py
@@ -34,7 +34,7 @@ async def auth_required(request, response):
@app.route("/connexion", methods=["GET"], unprotected=True)
-async def sesame(request, response):
+async def connexion(request, response):
response.html("login.html")
diff --git a/copanier/views/products.py b/copanier/views/products.py
index 0fb4927..79e56b7 100644
--- a/copanier/views/products.py
+++ b/copanier/views/products.py
@@ -242,7 +242,7 @@ async def set_shipping_price(request, response, delivery_id, producer_id):
@app.route("/produits/{id}/copier", methods=["GET"])
-async def copy_products_get(request, response, id):
+async def copy_products(request, response, id):
deliveries = Delivery.all()
response.html("products/copy_products.html", {"deliveries": deliveries})