From bd2fb3958ea442c0e6557cea8859711b4511c3b9 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Sat, 25 May 2019 17:12:52 +0200 Subject: [PATCH] Allow to force ajustment on closed deliveries This is useful for deliveries with missing products to adjust totals before sending --- copanier/__init__.py | 6 +++++- copanier/static/app.css | 3 ++- copanier/templates/place_order.html | 9 ++++++--- tests/test_views.py | 15 +++++++++++++++ 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/copanier/__init__.py b/copanier/__init__.py index 990bc2b..1abb7d6 100644 --- a/copanier/__init__.py +++ b/copanier/__init__.py @@ -346,9 +346,13 @@ async def place_order(request, response, id): response.redirect = f"/livraison/{delivery.id}" else: order = delivery.orders.get(email) or Order() + force_adjustment = "adjust" in request.query and user and user.is_staff response.html( "place_order.html", - {"delivery": delivery, "person": Person(email=email), "order": order}, + delivery=delivery, + person=Person(email=email), + order=order, + force_adjustment=force_adjustment, ) diff --git a/copanier/static/app.css b/copanier/static/app.css index 4c86438..f6b2463 100644 --- a/copanier/static/app.css +++ b/copanier/static/app.css @@ -181,7 +181,8 @@ input[type=submit] { cursor: pointer; } input[type=submit], -input[type=submit] + a.button { +input[type=submit] + a.button, +a.button + a.button { margin-top: 5px; } diff --git a/copanier/templates/place_order.html b/copanier/templates/place_order.html index 8c0d84c..1f7dea7 100644 --- a/copanier/templates/place_order.html +++ b/copanier/templates/place_order.html @@ -14,7 +14,7 @@ Conditionnement {% endif %} Commande - {% if delivery.status == delivery.ADJUSTMENT or order.has_adjustments %}Ajustement +/−{% endif %} + {% if delivery.status == delivery.ADJUSTMENT or order.has_adjustments or force_adjustment %}Ajustement +/−{% endif %} @@ -32,8 +32,8 @@ {{ product.packing or "—" }}{% if delivery.status == delivery.ADJUSTMENT and delivery.product_missing(product) %} (−{{ delivery.product_missing(product) }}){% endif %} {% endif %} - {% if delivery.status == delivery.ADJUSTMENT or order.has_adjustments %} - + {% if delivery.status == delivery.ADJUSTMENT or order.has_adjustments or force_adjustment %} + {% endif %} {% endfor %} @@ -48,6 +48,9 @@ {% endif %} Envoyer par courriel + {% if request.user.is_staff and delivery.status == delivery.CLOSED %} + Ajuster + {% endif %} {% endblock body %} diff --git a/tests/test_views.py b/tests/test_views.py index 7604b33..d6c5f3b 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -154,6 +154,21 @@ async def test_get_place_order_with_closed_delivery_but_adjustments(client, deli assert doc('[name="adjustment:123"]') +async def test_get_place_order_with_closed_delivery_but_force(client, delivery): + delivery.order_before = datetime.now() - timedelta(days=1) + delivery.orders["foo@bar.org"] = Order(products={"123": ProductOrder(wanted=1)}) + delivery.persist() + assert delivery.status == delivery.CLOSED + resp = await client.get(f"/livraison/{delivery.id}/commander") + doc = pq(resp.body) + assert doc('[name="wanted:123"]').attr("readonly") is not None + assert not doc('[name="adjustment:123"]') + resp = await client.get(f"/livraison/{delivery.id}/commander?adjust") + doc = pq(resp.body) + assert doc('[name="wanted:123"]').attr("readonly") is not None + assert doc('[name="adjustment:123"]') + + async def test_cannot_place_order_on_closed_delivery(client, delivery, monkeypatch): monkeypatch.setattr("copanier.config.STAFF", ["someone@else.org"]) delivery.order_before = datetime.now() - timedelta(days=1)