diff --git a/README.md b/README.md index 502be39..87298a8 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ The main differences are : - A minimal interface to add / remove / update products from the website. - Support for out of stock products. - Automatically compute a settlement plan (using the [debts library](https://framagit.org/almet/debts)) +- Remove paiement tracking (as it conflicts with auto-settlement of debts) - A special page with tools to ease delivery management - Drop support for CSV files - Send emails to producers referents, with an order summary diff --git a/copanier/__init__.py b/copanier/__init__.py index c7bc628..cf06c5b 100644 --- a/copanier/__init__.py +++ b/copanier/__init__.py @@ -595,7 +595,6 @@ async def place_order(request, response, id): return if request.method == "POST": - # When the delivery is closed, only staff can access. if delivery.status == delivery.CLOSED and not (user and user.is_staff): response.message("La livraison est fermée", "error") @@ -603,7 +602,7 @@ async def place_order(request, response, id): return form = request.form - order = Order(paid=form.bool("paid", False)) + order = Order() for product in delivery.products: try: wanted = form.int(f"wanted:{product.ref}", 0) diff --git a/copanier/models.py b/copanier/models.py index 57818d5..1949464 100644 --- a/copanier/models.py +++ b/copanier/models.py @@ -221,7 +221,6 @@ class ProductOrder(Base): @dataclass class Order(Base): products: Dict[str, ProductOrder] = field(default_factory=dict) - paid: bool = False def __getitem__(self, ref): if isinstance(ref, Product): diff --git a/copanier/reports.py b/copanier/reports.py index 2d53318..7133fc8 100644 --- a/copanier/reports.py +++ b/copanier/reports.py @@ -92,15 +92,3 @@ def products(delivery): producer_sheet.append([getattr(producer, field) for field in producer_fields]) return save_virtual_workbook(wb) - - -def balance(delivery): - wb = Workbook() - ws = wb.active - ws.title = f"Solde {delivery.name}" - ws.append(["Adhérent", "Montant", "Payé"]) - for email, order in delivery.orders.items(): - ws.append( - [email, order.total(delivery.products), "oui" if order.paid else "non"] - ) - return save_virtual_workbook(wb) diff --git a/copanier/static/app.css b/copanier/static/app.css index 6402485..f6112d7 100644 --- a/copanier/static/app.css +++ b/copanier/static/app.css @@ -455,9 +455,6 @@ hr { .notification i { font-size: 2rem; } -.not-paid { - background-color: var(--warning-color); -} .toggle { display: none; } diff --git a/copanier/templates/includes/delivery_table.html b/copanier/templates/includes/delivery_table.html index 45422e1..8554492 100644 --- a/copanier/templates/includes/delivery_table.html +++ b/copanier/templates/includes/delivery_table.html @@ -30,7 +30,7 @@ {% if not list_only %} {% for orderer, order in delivery.orders.items() %} {% set orderer_name = request.groups.groups[orderer].name %} - + {% if request.user and (request.user.is_staff or request.user.is_referent(delivery)) %} {{ orderer_name }} {% else %} diff --git a/copanier/templates/includes/order_button.html b/copanier/templates/includes/order_button.html index a08b742..84828ec 100644 --- a/copanier/templates/includes/order_button.html +++ b/copanier/templates/includes/order_button.html @@ -9,7 +9,4 @@ {% endif %} {% if request.user.email in delivery.orders %}  {{ delivery.total_for(request.user) }} € - {% if delivery.status == delivery.CLOSED and delivery.is_passed and not delivery.orders[request.user.email].paid %} -  Commande à solder - {% endif %} {% endif %} diff --git a/copanier/templates/place_order.html b/copanier/templates/place_order.html index 2f3be47..4e5065e 100644 --- a/copanier/templates/place_order.html +++ b/copanier/templates/place_order.html @@ -46,9 +46,6 @@ {% endfor %}

Total: {{ order.total(delivery.products) if order else 0 }} €

- {% if delivery.is_passed %} -

Commande soldée:

- {% endif %} {% if delivery.status != delivery.CLOSED or request.user.is_staff %} diff --git a/tests/test_reports.py b/tests/test_reports.py index a21f6fe..f906354 100644 --- a/tests/test_reports.py +++ b/tests/test_reports.py @@ -23,26 +23,3 @@ def test_summary_report(delivery): ("456", "yaourt (pot 125ml)", 3.5, 4, "pot 125ml", 14), (None, None, None, None, "Total", 15.5), ] - - -def test_balance_report(delivery): - delivery.products = [ - Product(ref="123", name="lait", price="1.9", unit="1.5 litre"), - Product(ref="456", name="yaourt", price="3.5", unit="pot 125ml"), - ] - delivery.orders = { - "foo@bar.org": Order( - products={"123": ProductOrder(wanted=1), "456": ProductOrder(wanted=4)} - ), - "foo@foo.org": Order( - products={"123": ProductOrder(wanted=3), "456": ProductOrder(wanted=2)}, - paid=True, - ), - } - delivery.persist() - wb = load_workbook(filename=BytesIO(reports.balance(delivery))) - assert list(wb.active.values) == [ - ("Adhérent", "Montant", "Payé"), - ("foo@bar.org", 15.9, "non"), - ("foo@foo.org", 12.7, "oui"), - ] diff --git a/tests/test_views.py b/tests/test_views.py index 59c2aea..45f3876 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -88,17 +88,6 @@ async def test_place_order_with_empty_string(client, delivery): delivery = Delivery.load(id=delivery.id) assert not delivery.orders - -async def test_change_paid_status_when_placing_order(client, delivery): - delivery.persist() - body = {"wanted:123": "3", "paid": 1} - resp = await client.post(f"/livraison/{delivery.id}/commander", body=body) - assert resp.status == 302 - delivery = Delivery.load(id=delivery.id) - assert delivery.orders["foo@bar.org"] - assert delivery.orders["foo@bar.org"].paid is True - - 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) @@ -225,34 +214,6 @@ async def test_only_staff_can_adjust_product(client, delivery, monkeypatch): assert delivery.orders["foo@bar.org"].products["123"].adjustment == 0 -async def test_get_delivery_balance(client, delivery): - delivery.from_date = datetime.now() - timedelta(days=1) - delivery.orders["foo@bar.org"] = Order(products={"123": ProductOrder(wanted=2)}) - delivery.persist() - resp = await client.get(f"/livraison/{delivery.id}/solde") - doc = pq(resp.body) - assert doc('[name="foo@bar.org"]') - assert not doc('[name="foo@bar.org"]').attr("checked") - delivery.orders["foo@bar.org"] = Order( - products={"123": ProductOrder(wanted=2)}, paid=True - ) - delivery.persist() - resp = await client.get(f"/livraison/{delivery.id}/solde") - doc = pq(resp.body) - assert doc('[name="foo@bar.org"]').attr("checked") - - -async def test_post_delivery_balance(client, delivery): - delivery.order_before = datetime.now() - timedelta(days=1) - delivery.orders["foo@bar.org"] = Order(products={"123": ProductOrder(wanted=2)}) - delivery.persist() - body = {"foo@bar.org": "on"} - resp = await client.post(f"/livraison/{delivery.id}/solde", body=body) - assert resp.status == 302 - delivery = Delivery.load(id=delivery.id) - assert delivery.orders["foo@bar.org"].paid is True - - async def test_export_products(client, delivery): delivery.persist() resp = await client.get(f"/livraison/{delivery.id}/exporter")