From c020ec89fa3cbdb910ee64d84ca918a9485e2e23 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Tue, 16 Apr 2019 23:14:55 +0200 Subject: [PATCH] Display adjustement col on closed delivery if order has adjustements --- copanier/models.py | 7 +++++++ copanier/templates/place_order.html | 6 ++++-- tests/test_models.py | 9 +++++++++ tests/test_views.py | 18 +++++++++++++++++- 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/copanier/models.py b/copanier/models.py index 447ea78..6755de5 100644 --- a/copanier/models.py +++ b/copanier/models.py @@ -129,12 +129,19 @@ class Order(Base): ref = ref.ref self.products[ref] = value + def __iter__(self): + yield from self.products.items() + def total(self, products): products = {p.ref: p for p in products} return round( sum(p.quantity * products[ref].price for ref, p in self.products.items()), 2 ) + @property + def has_adjustments(self): + return any(choice.adjustment for email, choice in self) + @dataclass class Delivery(Base): diff --git a/copanier/templates/place_order.html b/copanier/templates/place_order.html index c5831f8..a15d6a0 100644 --- a/copanier/templates/place_order.html +++ b/copanier/templates/place_order.html @@ -14,7 +14,7 @@ Conditionnement {% endif %} Commande - {% if delivery.status != delivery.OPEN %}Ajustement +/−{% endif %} + {% if delivery.status == delivery.ADJUSTMENT or order.has_adjustments %}Ajustement +/−{% endif %} @@ -32,7 +32,7 @@ {{ product.packing or "—" }}{% if delivery.status == delivery.ADJUSTMENT and delivery.product_missing(product) %} (−{{ delivery.product_missing(product) }}){% endif %} {% endif %} - {% if delivery.status != delivery.OPEN %} + {% if delivery.status == delivery.ADJUSTMENT or order.has_adjustments %} {% endif %} @@ -44,7 +44,9 @@

Commande soldée:

{% endif %} + {% if delivery.status != delivery.CLOSED or request.user.is_staff %} + {% endif %} Envoyer par courriel diff --git a/tests/test_models.py b/tests/test_models.py index d34a5e1..edd6d40 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -87,6 +87,15 @@ def test_can_add_product_to_order(): assert order.products["123"].wanted == 2 +def test_order_has_adjustments(): + order = Order() + assert not order.has_adjustments + order.products["123"] = ProductOrder(wanted=2) + assert not order.has_adjustments + order.products["123"] = ProductOrder(wanted=2, adjustment=1) + assert order.has_adjustments + + def test_can_persist_delivery(delivery): delivery.persist() diff --git a/tests/test_views.py b/tests/test_views.py index d211bad..d0f45e0 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -98,7 +98,8 @@ async def test_change_paid_status_when_placing_order(client, delivery): assert delivery.orders["foo@bar.org"].paid is True -async def test_get_place_order_with_closed_subscription(client, delivery): +async def test_get_place_order_with_closed_delivery(client, delivery, monkeypatch): + monkeypatch.setattr("copanier.config.STAFF", ["someone@else.org"]) delivery.order_before = datetime.now() - timedelta(days=1) delivery.orders["foo@bar.org"] = Order(products={"123": ProductOrder(wanted=1)}) delivery.persist() @@ -107,6 +108,7 @@ async def test_get_place_order_with_closed_subscription(client, delivery): doc = pq(resp.body) assert doc('[name="wanted:123"]').attr("readonly") assert not doc('[name="adjustment:123"]') + assert not doc('input[type="submit"]') async def test_get_place_order_with_adjustment_status(client, delivery): @@ -135,6 +137,20 @@ async def test_get_place_order_with_adjustment_status(client, delivery): assert doc('[name="adjustment:789"]') # Needs no adjustment. assert doc('[name="adjustment:789"]').attr("readonly") + assert doc('input[type="submit"]') + + +async def test_get_place_order_with_closed_delivery_but_adjustments(client, delivery): + delivery.order_before = datetime.now() - timedelta(days=1) + delivery.orders["foo@bar.org"] = Order( + products={"123": ProductOrder(wanted=1, adjustment=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") + assert doc('[name="adjustment:123"]') async def test_cannot_place_order_on_closed_delivery(client, delivery, monkeypatch):