diff --git a/TODO b/TODO index 52fd8b3..2ef347a 100644 --- a/TODO +++ b/TODO @@ -12,8 +12,11 @@ x Faciliter la duplication de distribution x Si un produit est en rupture de stock, alors il n'est pas compté dans les totaux x Permettre la supression des produits x Permettre la suppression de producteurs +x Ajouter une info « prix mis à jour » pour les référent⋅e⋅s + +Gérer le souci d'URL pour l'édition d'Apiluly +Rendre le formulaire d'édition producteur plus compact -Ajouter une info « prix mis à jour » pour les référent⋅e⋅s Gérer les frais de livraison Rendre plus visible l'action de modifier une commande diff --git a/copanier/models.py b/copanier/models.py index a86f2e2..6a2837c 100644 --- a/copanier/models.py +++ b/copanier/models.py @@ -1,7 +1,7 @@ import inspect import threading import uuid -from datetime import datetime +from datetime import datetime, timedelta from dataclasses import dataclass, field, asdict from pathlib import Path from typing import List, Dict @@ -174,6 +174,10 @@ class Producer(Base): products = delivery.get_products_by(self.id) return any([not p.rupture for p in products]) + def needs_price_update(self, delivery): + products = delivery.get_products_by(self.id) + return delivery.products_need_price_update(products) + @dataclass class Product(Base): @@ -258,9 +262,10 @@ class Delivery(PersistedBase): __lock__ = threading.Lock() EMPTY = -1 CLOSED = 0 - OPEN = 1 - ADJUSTMENT = 2 - ARCHIVED = 3 + NEED_PRICE_UPDATE = 1 + OPEN = 2 + ADJUSTMENT = 3 + ARCHIVED = 4 name: str from_date: datetime_field @@ -283,12 +288,19 @@ class Delivery(PersistedBase): return self.EMPTY if self.is_archived: return self.ARCHIVED + if self.products_need_price_update(): + return self.NEED_PRICE_UPDATE if self.is_open: return self.OPEN if self.needs_adjustment: return self.ADJUSTMENT return self.CLOSED + def products_need_price_update(self, products=None): + products = products or self.products + max_age = self.from_date.date() - timedelta(days=60) + return any([product.last_update.date() < max_age for product in products]) + @property def has_products(self): return len(self.products) > 0 diff --git a/copanier/templates/delivery/show.html b/copanier/templates/delivery/show.html index 2886e0d..afd7138 100644 --- a/copanier/templates/delivery/show.html +++ b/copanier/templates/delivery/show.html @@ -3,7 +3,13 @@

{{ delivery.name }}

-

{% if delivery.products %}{% if delivery.status == delivery.OPEN %}Commandes ouvertes jusqu'au {{ delivery.order_before|date }}{% elif delivery.status == delivery.ADJUSTMENT %}Ajustements en cours{% elif delivery.status == delivery.CLOSED %}Fermée{% else %}Archivée{% endif %}{% endif %}. +

{% if delivery.products %} + {% if delivery.status == delivery.OPEN %}Commandes ouvertes jusqu'au {{ delivery.order_before|date }} + {% elif delivery.status == delivery.ADJUSTMENT %}Ajustements en cours + {% elif delivery.status == delivery.CLOSED %}Fermée + {% elif delivery.status == delivery.ARCHIVED %}Archivée + {% elif delivery.status == delivery.NEED_PRICE_UPDATE %}Mise à jour des prix* + {% endif %}{% endif %} {% include "includes/order_button.html" %}

@@ -46,6 +52,11 @@
{% 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 }} ».

+ {% endif %} + {% endfor %} {% include "includes/delivery_table.html" %} {% else %}
diff --git a/copanier/templates/includes/delivery_table.html b/copanier/templates/includes/delivery_table.html index e0f26c3..099bc06 100644 --- a/copanier/templates/includes/delivery_table.html +++ b/copanier/templates/includes/delivery_table.html @@ -6,6 +6,7 @@ {% for producer in producers %} {% set producer_obj = delivery.producers[producer] %}

{{ producer_obj.name }} + {% if producer_obj.needs_price_update(delivery) %}*{% endif %} {% if edit_mode or request.user.is_staff or producer_obj.referent == request.user.email %}   Gérer ce⋅tte producteur⋅rice diff --git a/copanier/templates/products/edit_producer.html b/copanier/templates/products/edit_producer.html index 8ec57fb..8c4d31f 100644 --- a/copanier/templates/products/edit_producer.html +++ b/copanier/templates/products/edit_producer.html @@ -13,19 +13,27 @@
  • Supprimer
  • + {% if producer.needs_price_update(delivery) %} +
  • + Marquer les prix comme OK +
  • + {% endif %}

    {% else %}

    Ajouter un⋅e producteur⋅rice

    {% endif %}

    +{% if producer.needs_price_update(delivery) %} +

    Les prix pour {{ producer.name }} ont besoin d'être validés.

    +{% endif %}
    {% if producer.id %} {% else %} {% endif %}