From de73de7328dcb1f8e1064ba18b69e053ed9682a6 Mon Sep 17 00:00:00 2001 From: kdeterme Date: Mon, 28 Sep 2026 20:01:39 +0200 Subject: [PATCH] feat(interventions,stock): sync preparation orders and material status on intervention cancellation - Fix preparation status calculation by ignoring cancelled orders, preventing false green 'stock ready' icon - Update item prepared state when preparation order is marked as processed - Automatically cancel unprepared preparation orders when intervention is canceled - Send alert notification to stock managers when canceled intervention has already prepared orders - Add alert banner with direct restock/cancellation action on preparation order detail views - Prevent editing material switches or creating orders for canceled interventions - Add and compile translations for FR, EN and NL - Add comprehensive automated unit tests --- .../locale/en/LC_MESSAGES/django.mo | Bin 123206 -> 124951 bytes .../locale/en/LC_MESSAGES/django.po | 35 ++++ .../locale/fr/LC_MESSAGES/django.mo | Bin 138813 -> 140649 bytes .../locale/fr/LC_MESSAGES/django.po | 35 ++++ .../locale/nl/LC_MESSAGES/django.mo | Bin 128790 -> 130580 bytes .../locale/nl/LC_MESSAGES/django.po | 35 ++++ loko/interventions/models.py | 46 ++--- .../services/stock_sync_service.py | 170 +++++++++++++++++ .../_interventions_list_mobile.html | 44 ++--- .../interventions/detail/card_stock.html | 20 +- .../intervention_detail_mobile.html | 14 +- .../interventions/tests/test_material_used.py | 178 +++++++++++++++++- loko/interventions/views/detail.py | 28 ++- loko/interventions/views/helpers.py | 25 ++- loko/interventions/views/mobile.py | 2 +- loko/interventions/views/workflow.py | 11 ++ loko/stock/locale/en/LC_MESSAGES/django.mo | Bin 84891 -> 86467 bytes loko/stock/locale/en/LC_MESSAGES/django.po | 24 +++ loko/stock/locale/fr/LC_MESSAGES/django.mo | Bin 90249 -> 91945 bytes loko/stock/locale/fr/LC_MESSAGES/django.po | 24 +++ loko/stock/locale/nl/LC_MESSAGES/django.mo | Bin 88815 -> 90495 bytes loko/stock/locale/nl/LC_MESSAGES/django.po | 24 +++ loko/stock/models.py | 21 ++- ...stock_preparation_order_detail_mobile.html | 22 +++ .../stock/preparation_order_detail.html | 26 ++- loko/stock/views.py | 4 + 26 files changed, 715 insertions(+), 73 deletions(-) create mode 100644 loko/interventions/services/stock_sync_service.py diff --git a/loko/interventions/locale/en/LC_MESSAGES/django.mo b/loko/interventions/locale/en/LC_MESSAGES/django.mo index 1dcf27f493a573b823f5c7d41ba758a17b4c8d56..0b01a19f9e98979b7982b50fc29663c7524b48bf 100644 GIT binary patch delta 35565 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 diff --git a/loko/interventions/locale/en/LC_MESSAGES/django.po b/loko/interventions/locale/en/LC_MESSAGES/django.po index 46bdf93..60739d0 100644 --- a/loko/interventions/locale/en/LC_MESSAGES/django.po +++ b/loko/interventions/locale/en/LC_MESSAGES/django.po @@ -8372,5 +8372,40 @@ msgstr "%(count)d unlinked %(relation)ss: %(targets)s" msgid "%(relation)s déliée(s)" msgstr "Unlinked %(relation)s(s)" +msgid "Retour en stock requis : intervention %(code)s annulée" +msgstr "Return to stock required: intervention %(code)s canceled" + +msgid "" +"L'intervention %(code)s a été annulée alors que le bon de préparation %(order)s est déjà préparé. " +"Veuillez effectuer le retour en stock du matériel." +msgstr "" +"Intervention %(code)s was canceled while preparation order %(order)s is already prepared. " +"Please return the material to stock." + +msgid "Voir le bon de préparation" +msgstr "View preparation order" + +msgid "" +"ATTENTION : L'intervention %(code)s a été annulée. " +"Ce bon de préparation étant déjà préparé, un retour en stock du matériel doit être effectué par le magasinier." +msgstr "" +"WARNING: Intervention %(code)s has been canceled. " +"As this preparation order is already prepared, material must be returned to stock by the warehouse worker." + +msgid "Bon de préparation %(order)s déjà préparé : notification envoyée au magasinier pour retour en stock." +msgstr "Preparation order %(order)s already prepared: notification sent to warehouse worker for return to stock." + +msgid "Bon de préparation annulé automatiquement suite à l'annulation de l'intervention %(code)s." +msgstr "Preparation order automatically canceled following the cancellation of intervention %(code)s." + +msgid "Bon de préparation %(order)s annulé automatiquement suite à l'annulation de l'intervention." +msgstr "Preparation order %(order)s automatically canceled following the cancellation of the intervention." + +msgid "Impossible de modifier le matériel d'un bon de préparation annulé." +msgstr "Cannot modify material from a canceled preparation order." + +msgid "Bon annulé" +msgstr "Canceled order" + diff --git a/loko/interventions/locale/fr/LC_MESSAGES/django.mo b/loko/interventions/locale/fr/LC_MESSAGES/django.mo index 7d226c0b8309ef1f09ccd43572f978b7d560ed2e..fa58b7e4e533e412b202b49b7d07cc3963f2322b 100644 GIT binary patch delta 36088 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 delta 34846 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 aO&yPTB@5K^Pt)niCb2hVPT`%;_x}K!g~*Wr diff --git a/loko/interventions/locale/fr/LC_MESSAGES/django.po b/loko/interventions/locale/fr/LC_MESSAGES/django.po index e5c7136..de19591 100644 --- a/loko/interventions/locale/fr/LC_MESSAGES/django.po +++ b/loko/interventions/locale/fr/LC_MESSAGES/django.po @@ -8479,5 +8479,40 @@ msgstr "%(count)d %(relation)ss déliées : %(targets)s" msgid "%(relation)s déliée(s)" msgstr "%(relation)s déliée(s)" +msgid "Retour en stock requis : intervention %(code)s annulée" +msgstr "Retour en stock requis : intervention %(code)s annulée" + +msgid "" +"L'intervention %(code)s a été annulée alors que le bon de préparation %(order)s est déjà préparé. " +"Veuillez effectuer le retour en stock du matériel." +msgstr "" +"L'intervention %(code)s a été annulée alors que le bon de préparation %(order)s est déjà préparé. " +"Veuillez effectuer le retour en stock du matériel." + +msgid "Voir le bon de préparation" +msgstr "Voir le bon de préparation" + +msgid "" +"ATTENTION : L'intervention %(code)s a été annulée. " +"Ce bon de préparation étant déjà préparé, un retour en stock du matériel doit être effectué par le magasinier." +msgstr "" +"ATTENTION : L'intervention %(code)s a été annulée. " +"Ce bon de préparation étant déjà préparé, un retour en stock du matériel doit être effectué par le magasinier." + +msgid "Bon de préparation %(order)s déjà préparé : notification envoyée au magasinier pour retour en stock." +msgstr "Bon de préparation %(order)s déjà préparé : notification envoyée au magasinier pour retour en stock." + +msgid "Bon de préparation annulé automatiquement suite à l'annulation de l'intervention %(code)s." +msgstr "Bon de préparation annulé automatiquement suite à l'annulation de l'intervention %(code)s." + +msgid "Bon de préparation %(order)s annulé automatiquement suite à l'annulation de l'intervention." +msgstr "Bon de préparation %(order)s annulé automatiquement suite à l'annulation de l'intervention." + +msgid "Impossible de modifier le matériel d'un bon de préparation annulé." +msgstr "Impossible de modifier le matériel d'un bon de préparation annulé." + +msgid "Bon annulé" +msgstr "Bon annulé" + diff --git a/loko/interventions/locale/nl/LC_MESSAGES/django.mo b/loko/interventions/locale/nl/LC_MESSAGES/django.mo index 3f33f2eee291babe544a769b79afe51ca305d149..e7bf0abf216485d0c72218551d69d3c28bbeddfc 100644 GIT binary patch delta 35522 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 delta 34088 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 Zw%wWH@lWWsy9Yfg2W>0&%;Q+X{|5&WnBxEd diff --git a/loko/interventions/locale/nl/LC_MESSAGES/django.po b/loko/interventions/locale/nl/LC_MESSAGES/django.po index e52720a..bb35d8d 100644 --- a/loko/interventions/locale/nl/LC_MESSAGES/django.po +++ b/loko/interventions/locale/nl/LC_MESSAGES/django.po @@ -8413,4 +8413,39 @@ msgstr "%(count)d %(relation)ss ontkoppeld: %(targets)s" msgid "%(relation)s déliée(s)" msgstr "Ontkoppelde %(relation)s(s)" +msgid "Retour en stock requis : intervention %(code)s annulée" +msgstr "Terugname naar voorraad vereist: interventie %(code)s geannuleerd" + +msgid "" +"L'intervention %(code)s a été annulée alors que le bon de préparation %(order)s est déjà préparé. " +"Veuillez effectuer le retour en stock du matériel." +msgstr "" +"Interventie %(code)s is geannuleerd terwijl voorbereidingsbon %(order)s al voorbereid is. " +"Voer de terugname naar de voorraad van het materiaal uit." + +msgid "Voir le bon de préparation" +msgstr "Voorbereidingsbon bekijken" + +msgid "" +"ATTENTION : L'intervention %(code)s a été annulée. " +"Ce bon de préparation étant déjà préparé, un retour en stock du matériel doit être effectué par le magasinier." +msgstr "" +"OPGELET: Interventie %(code)s is geannuleerd. " +"Aangezien deze voorbereidingsbon al voorbereid is, moet het materiaal door de magazijnier worden teruggebracht naar de voorraad." + +msgid "Bon de préparation %(order)s déjà préparé : notification envoyée au magasinier pour retour en stock." +msgstr "Voorbereidingsbon %(order)s reeds voorbereid: melding verzonden naar magazijnier voor terugname naar voorraad." + +msgid "Bon de préparation annulé automatiquement suite à l'annulation de l'intervention %(code)s." +msgstr "Voorbereidingsbon automatisch geannuleerd na annulering van interventie %(code)s." + +msgid "Bon de préparation %(order)s annulé automatiquement suite à l'annulation de l'intervention." +msgstr "Voorbereidingsbon %(order)s automatisch geannuleerd na annulering van de interventie." + +msgid "Impossible de modifier le matériel d'un bon de préparation annulé." +msgstr "Kan materiaal van een geannuleerde voorbereidingsbon niet wijzigen." + +msgid "Bon annulé" +msgstr "Geannuleerde bon" + diff --git a/loko/interventions/models.py b/loko/interventions/models.py index fc36bfb..61ae7ca 100644 --- a/loko/interventions/models.py +++ b/loko/interventions/models.py @@ -995,55 +995,57 @@ class Intervention(models.Model): def get_preparation_orders_status(self): """ - Agrège les statuts des bons de préparation liés. - Retourne: 'processed' si tous les bons sont traités/annulés, - 'not_processed' si au moins un bon est à traiter/en attente, - 'none' si aucun bon n'existe. + Agrège les statuts des bons de préparation liés (hors bons annulés). + Retourne: 'processed' si au moins un bon est traité et aucun bon actif n'est non traité, + 'not_processed' si au moins un bon actif est à traiter/en attente, + 'none' si aucun bon actif n'existe (ou si tous sont annulés). """ - prep_orders = self.preparation_orders.all().values_list('status', flat=True) - if not prep_orders: + if not hasattr(self, 'preparation_orders'): + return 'none' + active_orders = list( + self.preparation_orders.exclude(status='cancelled').values_list('status', flat=True) + ) + if not active_orders: return 'none' - # Statuts considérés comme 'traité' - treated_statuses = {'processed', 'cancelled'} - # Statuts considérés comme 'non traité' - untreated_statuses = {'to_process', 'pending'} - - statuses = set(prep_orders) - has_untreated = bool(statuses & untreated_statuses) - - if has_untreated: + if any(s in ('to_process', 'pending') for s in active_orders): return 'not_processed' - return 'processed' + + if any(s == 'processed' for s in active_orders): + return 'processed' + + return 'none' @property def has_pending_preparation(self): """Retourne True si au moins un bon de préparation est à traiter ou en attente.""" + if not hasattr(self, 'preparation_orders'): + return False return self.preparation_orders.filter( status__in=['to_process', 'pending'] ).exists() @property def has_material(self): - """Indique si l'intervention dispose de matériel mentionné dans ses bons de préparation.""" + """Indique si l'intervention dispose de matériel mentionné dans ses bons de préparation actifs.""" if not hasattr(self, 'preparation_orders'): return False - return self.preparation_orders.filter( + return self.preparation_orders.exclude(status='cancelled').filter( Q(preparationorderitem__isnull=False) | Q(other_items__isnull=False) ).distinct().exists() def get_material_stats(self): """ - Retourne le statut d'utilisation du matériel pour cette intervention : - - total : nombre total d'articles (catalogue + autres) + Retourne le statut d'utilisation du matériel pour cette intervention (hors bons annulés) : + - total : nombre total d'articles (catalogue + autres) des bons actifs - used : nombre d'articles marqués comme utilisés - all_used : True si tous les articles sont utilisés (et total > 0) - - has_material : True si au moins un article existe + - has_material : True si au moins un article existe dans les bons actifs """ if not hasattr(self, 'preparation_orders'): return {'total': 0, 'used': 0, 'all_used': False, 'has_material': False} from stock.models import PreparationOrderItem, PreparationOrderOtherItem - order_ids = list(self.preparation_orders.values_list('id', flat=True)) + order_ids = list(self.preparation_orders.exclude(status='cancelled').values_list('id', flat=True)) if not order_ids: return {'total': 0, 'used': 0, 'all_used': False, 'has_material': False} std_items = PreparationOrderItem.objects.filter(preparation_order_id__in=order_ids) diff --git a/loko/interventions/services/stock_sync_service.py b/loko/interventions/services/stock_sync_service.py new file mode 100644 index 0000000..b0fbbfa --- /dev/null +++ b/loko/interventions/services/stock_sync_service.py @@ -0,0 +1,170 @@ +# interventions/services/stock_sync_service.py +import logging +from django.contrib.auth import get_user_model +from django.db.models import Q +from django.urls import reverse +from django.utils import timezone +from django.utils.translation import gettext as _ + +logger = logging.getLogger(__name__) + + +def get_stock_managers_for_notification(): + """ + Retourne la liste des utilisateurs à notifier lors d'un événement stock (magasiniers) : + - Utilisateurs ayant le rôle 'stock_manager' + - Utilisateurs ayant le droit 'can_manage_preparation_orders' sur au moins un entrepôt + - En repli, superutilisateurs ou administrateurs. + """ + User = get_user_model() + managers = User.objects.filter( + Q(config__roles__name='stock_manager') | + Q(config__userwarehouses__can_manage_preparation_orders=True), + is_active=True, + ).distinct() + + if not managers.exists(): + managers = User.objects.filter( + Q(is_superuser=True) | Q(config__roles__name='admin'), + is_active=True, + ).distinct() + + return list(managers) + + +def sync_preparation_orders_on_intervention_cancel(intervention, user=None): + """ + Synchronise les bons de préparation liés lors de l'annulation d'une intervention : + 1. Si le bon n'est pas encore préparé (statut 'to_process' ou 'pending', sans sorties ni articles préparés) : + -> Le bon est automatiquement annulé et les quantités réservées libérées. + -> Un message est posté dans la discussion du bon et un événement timeline est créé. + 2. Si le bon est déjà préparé (statut 'processed' ou sorties exécutées ou articles préparés) : + -> Le bon n'est pas annulé automatiquement. + -> Une alerte est envoyée au(x) magasinier(s) pour effectuer un retour en stock. + -> Un message d'avertissement est consigné dans la discussion du bon et sur la timeline. + """ + if not intervention or not hasattr(intervention, 'preparation_orders'): + return + + orders = intervention.preparation_orders.exclude(status='cancelled') + if not orders.exists(): + return + + from notifications.services import ( + notify_users, + get_or_create_preparation_order_discussion, + post_message, + ) + from interventions.models import InterventionTimeLine + + stock_managers = None + + for order in orders: + try: + is_prepared = getattr(order, 'is_already_prepared', False) + if not is_prepared: + # Vérification complémentaire + if order.status == 'processed': + is_prepared = True + elif order.stock_batches.filter(movement_type='out').exists(): + is_prepared = True + elif order.preparationorderitem_set.filter(is_prepared=True).exists(): + is_prepared = True + elif order.other_items.filter(is_prepared=True).exists(): + is_prepared = True + + if is_prepared: + # Le bon est déjà préparé : NE PAS l'annuler automatiquement, avertir le magasinier pour retour en stock + if stock_managers is None: + stock_managers = get_stock_managers_for_notification() + + if stock_managers: + title = _("Retour en stock requis : intervention %(code)s annulée") % {'code': intervention.code} + content = _( + "L'intervention %(code)s a été annulée alors que le bon de préparation %(order)s est déjà préparé. " + "Veuillez effectuer le retour en stock du matériel." + ) % { + 'code': intervention.code, + 'order': order.order_number, + } + try: + action_url = reverse('stock:preparation_order_detail', args=[order.pk]) + except Exception: + action_url = '' + + notify_users( + recipients=stock_managers, + title=title, + content=content, + notification_type='alert', + action_url=action_url, + action_label=str(_("Voir le bon de préparation")), + source_app='stock', + sender=user if (user and user.is_authenticated) else None, + ) + + # Message dans la discussion du bon de préparation + try: + discussion, _created = get_or_create_preparation_order_discussion(order) + post_message( + discussion=discussion, + author=user if (user and user.is_authenticated) else None, + content=_( + "ATTENTION : L'intervention %(code)s a été annulée. " + "Ce bon de préparation étant déjà préparé, un retour en stock du matériel doit être effectué par le magasinier." + ) % {'code': intervention.code}, + ) + except Exception: + logger.exception("Erreur lors de l'ajout du message de discussion sur le bon #%s", order.pk) + + # Événement timeline sur l'intervention + try: + InterventionTimeLine.objects.create( + intervention=intervention, + event_user=user if (user and user.is_authenticated) else None, + event_time=timezone.now(), + event_type='note', + event_description=_( + "Bon de préparation %(order)s déjà préparé : notification envoyée au magasinier pour retour en stock." + ) % {'order': order.order_number}, + ) + except Exception: + logger.exception("Erreur lors de la création de la timeline pour le bon #%s", order.pk) + + else: + # Le bon n'est pas préparé : annulation automatique + order.cancel() + + # Message dans la discussion du bon + try: + discussion, _created = get_or_create_preparation_order_discussion(order) + post_message( + discussion=discussion, + author=user if (user and user.is_authenticated) else None, + content=_( + "Bon de préparation annulé automatiquement suite à l'annulation de l'intervention %(code)s." + ) % {'code': intervention.code}, + ) + except Exception: + logger.exception("Erreur lors de l'ajout du message de discussion sur le bon #%s", order.pk) + + # Événement timeline sur l'intervention + try: + InterventionTimeLine.objects.create( + intervention=intervention, + event_user=user if (user and user.is_authenticated) else None, + event_time=timezone.now(), + event_type='note', + event_description=_( + "Bon de préparation %(order)s annulé automatiquement suite à l'annulation de l'intervention." + ) % {'order': order.order_number}, + ) + except Exception: + logger.exception("Erreur lors de la création de la timeline pour le bon #%s", order.pk) + + except Exception: + logger.exception( + "Erreur lors de la synchronisation du bon de préparation #%s suite à l'annulation de l'intervention #%s", + order.pk, + intervention.pk, + ) diff --git a/loko/interventions/templates/interventions/_interventions_list_mobile.html b/loko/interventions/templates/interventions/_interventions_list_mobile.html index d0f53ce..014ca56 100644 --- a/loko/interventions/templates/interventions/_interventions_list_mobile.html +++ b/loko/interventions/templates/interventions/_interventions_list_mobile.html @@ -94,32 +94,34 @@ - {% if intervention.preparation_orders.all %} + {% if intervention.has_material %}
{% for order in intervention.preparation_orders.all %} - {% if order.is_loan %} - - {% translate "Prêt" %} - - {% endif %} - {% for item in order.preparationorderitem_set.all|slice:":3" %} - - {{ item.product.name }} × {{ item.quantity }} - - {% endfor %} - {% for item in order.other_items.all|slice:":2" %} - - {{ item.name }} × {{ item.quantity }} - - {% endfor %} - {% with total_count=order.preparationorderitem_set.all|length|add:order.other_items.all|length %} - {% if total_count > 3 %} - - +{{ total_count|add:"-3" }} + {% if order.status != 'cancelled' %} + {% if order.is_loan %} + + {% translate "Prêt" %} {% endif %} - {% endwith %} + {% for item in order.preparationorderitem_set.all|slice:":3" %} + + {{ item.product.name }} × {{ item.quantity }} + + {% endfor %} + {% for item in order.other_items.all|slice:":2" %} + + {{ item.name }} × {{ item.quantity }} + + {% endfor %} + {% with total_count=order.preparationorderitem_set.all|length|add:order.other_items.all|length %} + {% if total_count > 3 %} + + +{{ total_count|add:"-3" }} + + {% endif %} + {% endwith %} + {% endif %} {% endfor %}
{% endif %} diff --git a/loko/interventions/templates/interventions/detail/card_stock.html b/loko/interventions/templates/interventions/detail/card_stock.html index 4389b17..274771b 100644 --- a/loko/interventions/templates/interventions/detail/card_stock.html +++ b/loko/interventions/templates/interventions/detail/card_stock.html @@ -78,7 +78,7 @@ class="btn btn-sm btn-outline-success d-inline-flex align-items-center gap-1 py-1 px-2 btn-order-toggle-all" id="btn-order-toggle-all-{{ order.id }}" onclick="toggleAllMaterialUsed('{{ intervention.id }}', '{{ order.id }}')" - {% if not can_edit_intervention %}disabled title="{% translate 'Permissions insuffisantes' %}"{% else %}title="{% translate 'Tout cocher ou tout décocher pour ce bon' %}"{% endif %} + {% if order.status == 'cancelled' or not can_edit_intervention %}disabled title="{% if order.status == 'cancelled' %}{% translate 'Bon annulé' %}{% else %}{% translate 'Permissions insuffisantes' %}{% endif %}"{% else %}title="{% translate 'Tout cocher ou tout décocher pour ce bon' %}"{% endif %} style="font-size: 0.75rem;"> @@ -107,14 +107,14 @@ data-is-other="false" data-order-id="{{ order.id }}" {% if item.is_used %}checked{% endif %} - {% if not can_edit_intervention %}disabled title="{% translate 'Permissions insuffisantes' %}"{% endif %} + {% if order.status == 'cancelled' or not can_edit_intervention %}disabled title="{% if order.status == 'cancelled' %}{% translate 'Bon annulé' %}{% else %}{% translate 'Permissions insuffisantes' %}{% endif %}"{% endif %} onchange="toggleMaterialItemUsed('{{ intervention.id }}', '{{ item.id }}', false, this)"> {{ item.product.name }} {% if item.product.category %} - {{ item.product.category.name_fr }} + {{ item.product.category.name_fr }} {% endif %} @@ -130,7 +130,11 @@ - {% if item.is_prepared %} + {% if order.status == 'cancelled' %} + + {% translate "Annulé" %} + + {% elif item.is_prepared or order.status == 'processed' %} {% translate "Préparé" %} @@ -164,7 +168,7 @@ data-is-other="true" data-order-id="{{ order.id }}" {% if item.is_used %}checked{% endif %} - {% if not can_edit_intervention %}disabled title="{% translate 'Permissions insuffisantes' %}"{% endif %} + {% if order.status == 'cancelled' or not can_edit_intervention %}disabled title="{% if order.status == 'cancelled' %}{% translate 'Bon annulé' %}{% else %}{% translate 'Permissions insuffisantes' %}{% endif %}"{% endif %} onchange="toggleMaterialItemUsed('{{ intervention.id }}', '{{ item.id }}', true, this)"> @@ -184,7 +188,11 @@ - {% if item.is_prepared %} + {% if order.status == 'cancelled' %} + + {% translate "Annulé" %} + + {% elif item.is_prepared or order.status == 'processed' %} {% translate "Préparé" %} diff --git a/loko/interventions/templates/interventions/intervention_detail_mobile.html b/loko/interventions/templates/interventions/intervention_detail_mobile.html index 001d712..206b25d 100644 --- a/loko/interventions/templates/interventions/intervention_detail_mobile.html +++ b/loko/interventions/templates/interventions/intervention_detail_mobile.html @@ -1178,7 +1178,7 @@ class="btn btn-sm btn-outline-success d-inline-flex align-items-center gap-1 py-1 px-2 btn-order-toggle-all" id="btn-mobile-order-toggle-all-{{ order.id }}" onclick="toggleAllMaterialUsed('{{ intervention.id }}', '{{ order.id }}')" - {% if not can_edit_intervention %}disabled{% endif %} + {% if order.status == 'cancelled' or not can_edit_intervention %}disabled title="{% if order.status == 'cancelled' %}{% translate 'Bon annulé' %}{% else %}{% translate 'Permissions insuffisantes' %}{% endif %}"{% endif %} style="font-size: 0.75rem;"> @@ -1201,14 +1201,16 @@ data-is-other="false" data-order-id="{{ order.id }}" {% if item.is_used %}checked{% endif %} - {% if not can_edit_intervention %}disabled title="{% translate 'Permissions insuffisantes' %}"{% endif %} + {% if order.status == 'cancelled' or not can_edit_intervention %}disabled title="{% if order.status == 'cancelled' %}{% translate 'Bon annulé' %}{% else %}{% translate 'Permissions insuffisantes' %}{% endif %}"{% endif %} onchange="toggleMaterialItemUsed('{{ intervention.id }}', '{{ item.id }}', false, this)">
{{ item.product.name }}
{% if item.product.code %}{{ item.product.code }}{% endif %} - {% if item.is_prepared %} + {% if order.status == 'cancelled' %} + {% translate "Annulé" %} + {% elif item.is_prepared or order.status == 'processed' %} {% translate "Préparé" %} {% else %} {% translate "En attente" %} @@ -1244,7 +1246,7 @@ data-is-other="true" data-order-id="{{ order.id }}" {% if item.is_used %}checked{% endif %} - {% if not can_edit_intervention %}disabled title="{% translate 'Permissions insuffisantes' %}"{% endif %} + {% if order.status == 'cancelled' or not can_edit_intervention %}disabled title="{% if order.status == 'cancelled' %}{% translate 'Bon annulé' %}{% else %}{% translate 'Permissions insuffisantes' %}{% endif %}"{% endif %} onchange="toggleMaterialItemUsed('{{ intervention.id }}', '{{ item.id }}', true, this)">
@@ -1253,7 +1255,9 @@ {% translate "Hors cat." %}
- {% if item.is_prepared %} + {% if order.status == 'cancelled' %} + {% translate "Annulé" %} + {% elif item.is_prepared or order.status == 'processed' %} {% translate "Préparé" %} {% else %} {% translate "En attente" %} diff --git a/loko/interventions/tests/test_material_used.py b/loko/interventions/tests/test_material_used.py index 4c89766..70eb254 100644 --- a/loko/interventions/tests/test_material_used.py +++ b/loko/interventions/tests/test_material_used.py @@ -55,7 +55,7 @@ class MaterialUsedTests(TestCase): contract=self.contract, can_view_interventions=True, ) - for status in ['assigned', 'in_progress', 'finished']: + for status in ['to_be_processed', 'assigned', 'in_progress', 'finished', 'canceled']: UserContractStatusPermission.objects.create( user_contract=uca, status=status, @@ -343,3 +343,179 @@ class MaterialUsedTests(TestCase): self.assertEqual(_("utilisé(s)"), "used") self.assertEqual(_("Hors catalogue"), "Out of catalog") + def test_preparation_orders_status_and_annotation_excluding_cancelled(self): + """Vérifie que get_preparation_orders_status et annotate_preparation_status ignorent les bons annulés.""" + from interventions.views.helpers import annotate_preparation_status + + # 1. Avec order1 au statut to_process -> 'not_processed' + self.assertEqual(self.intervention.get_preparation_orders_status(), 'not_processed') + annotated_itv = annotate_preparation_status(Intervention.objects.filter(pk=self.intervention.pk)).first() + self.assertEqual(annotated_itv.prep_state, 'not_processed') + + # 2. Annulation du bon -> statut devient 'none' (et NON 'processed' comme avant le bug !) + self.order1.status = 'cancelled' + self.order1.save() + self.assertEqual(self.intervention.get_preparation_orders_status(), 'none') + annotated_itv = annotate_preparation_status(Intervention.objects.filter(pk=self.intervention.pk)).first() + self.assertEqual(annotated_itv.prep_state, 'none') + + # 3. Ajout d'un bon traité à côté du bon annulé -> statut devient 'processed' + order2 = PreparationOrder.objects.create( + order_number='BP-002', + intervention=self.intervention, + status='processed', + ) + self.assertEqual(self.intervention.get_preparation_orders_status(), 'processed') + annotated_itv = annotate_preparation_status(Intervention.objects.filter(pk=self.intervention.pk)).first() + self.assertEqual(annotated_itv.prep_state, 'processed') + + # 4. Ajout d'un bon en attente -> statut redevient 'not_processed' + order3 = PreparationOrder.objects.create( + order_number='BP-003', + intervention=self.intervention, + status='pending', + ) + self.assertEqual(self.intervention.get_preparation_orders_status(), 'not_processed') + annotated_itv = annotate_preparation_status(Intervention.objects.filter(pk=self.intervention.pk)).first() + self.assertEqual(annotated_itv.prep_state, 'not_processed') + + def test_has_material_and_stats_exclude_cancelled_orders(self): + """Vérifie que has_material et get_material_stats excluent les bons annulés.""" + # Actif : a du matériel + self.assertTrue(self.intervention.has_material) + stats = self.intervention.get_material_stats() + self.assertEqual(stats['total'], 3) + self.assertEqual(stats['used'], 0) + self.assertFalse(stats['all_used']) + + # Annulé : n'a plus de matériel actif + self.order1.status = 'cancelled' + self.order1.save() + self.assertFalse(self.intervention.has_material) + stats = self.intervention.get_material_stats() + self.assertEqual(stats['total'], 0) + self.assertEqual(stats['used'], 0) + self.assertFalse(stats['all_used']) + + def test_toggle_material_used_on_cancelled_order_rejected(self): + """Vérifie qu'il est impossible de cocher/décocher un article d'un bon annulé.""" + self.order1.status = 'cancelled' + self.order1.save() + + url = reverse('interventions:toggle_material_used', kwargs={'intervention_id': self.intervention.id, 'item_id': self.item1.id}) + response = self.client_editor.post( + url, + data=json.dumps({'item_id': self.item1.id, 'is_other': False, 'is_used': True}), + content_type='application/json', + ) + self.assertEqual(response.status_code, 400) + data = response.json() + self.assertFalse(data['success']) + self.assertTrue("annulé" in data['error'].lower() or "cancel" in data['error'].lower()) + + self.item1.refresh_from_db() + self.assertFalse(self.item1.is_used) + + def test_toggle_all_material_used_ignores_cancelled_order(self): + """Vérifie que 'Tout cocher' rejette un bon annulé.""" + self.order1.status = 'cancelled' + self.order1.save() + + url = reverse('interventions:toggle_all_material_used', kwargs={'intervention_id': self.intervention.id}) + response = self.client_editor.post( + url, + data=json.dumps({'order_id': self.order1.id}), + content_type='application/json', + ) + self.assertEqual(response.status_code, 400) + data = response.json() + self.assertFalse(data['success']) + + def test_sync_cancel_unprepared_order_when_intervention_canceled(self): + """Une intervention annulée annule automatiquement les bons de préparation non préparés.""" + from interventions.views.workflow import attempt_status_update + from interventions.models import InterventionTimeLine + + self.intervention.status = 'to_be_processed' + self.intervention.save() + self.assertEqual(self.order1.status, 'to_process') + + success, msg, _ = attempt_status_update( + None, self.intervention, self.user_editor, 'canceled', + cancellation_type='other', cancellation_reason='Annulation test' + ) + self.assertTrue(success, msg) + + self.order1.refresh_from_db() + self.assertEqual(self.order1.status, 'cancelled') + self.assertEqual(self.intervention.get_preparation_orders_status(), 'none') + + # Vérifier l'événement timeline + timeline_events = InterventionTimeLine.objects.filter( + intervention=self.intervention, + event_description__icontains=self.order1.order_number, + ) + self.assertTrue(timeline_events.exists()) + + def test_sync_does_not_cancel_prepared_order_and_notifies_stock_managers(self): + """Une intervention annulée n'annule PAS un bon déjà préparé et alerte les magasiniers.""" + from interventions.views.workflow import attempt_status_update + from notifications.models import Notification + + self.intervention.status = 'to_be_processed' + self.intervention.save() + + # Rendre le bon "préparé" + self.order1.status = 'processed' + self.order1.save() + + # Créer un magasinier + role_sm, _ = Role.objects.get_or_create(name='stock_manager') + sm_user = self.User.objects.create_user(username='stock_mgr', password='password123') + sm_config = UserConfig.objects.create(user=sm_user) + sm_config.roles.add(role_sm) + + success, msg, _ = attempt_status_update( + None, self.intervention, self.user_editor, 'canceled', + cancellation_type='other', cancellation_reason='Annulation test' + ) + self.assertTrue(success, msg) + + self.order1.refresh_from_db() + # Le bon n'est PAS annulé car déjà préparé + self.assertEqual(self.order1.status, 'processed') + + # Magasinier prévenu + notif = Notification.objects.filter(recipients__user=sm_user).first() + self.assertIsNotNone(notif) + self.assertTrue("retour en stock" in notif.title.lower() or "return to stock" in notif.title.lower()) + + def test_cannot_create_preparation_order_when_intervention_canceled(self): + """Empêche la création d'un bon de préparation pour une intervention annulée.""" + self.intervention.status = 'canceled' + self.intervention.save() + + # Test permission dans le contexte de détail + desktop_url = reverse('interventions:intervention_detail', kwargs={'intervention_id': self.intervention.id}) + response = self.client_editor.get(desktop_url) + self.assertEqual(response.status_code, 200) + self.assertFalse(response.context['can_create_preparation_order']) + + # Test vue stock + stock_url = reverse('stock:new_preparation_order_from_intervention', kwargs={'intervention_id': self.intervention.id}) + post_response = self.client_editor.post(stock_url, data={'date': timezone.now().strftime('%Y-%m-%d %H:%M')}) + self.assertEqual(post_response.status_code, 302) + + def test_mark_as_processed_updates_items_is_prepared(self): + """Vérifie que marquer un bon comme traité met à jour is_prepared sur ses articles.""" + self.assertFalse(self.item1.is_prepared) + self.assertFalse(self.other_item1.is_prepared) + + self.order1.mark_as_processed() + + self.item1.refresh_from_db() + self.other_item1.refresh_from_db() + self.assertTrue(self.item1.is_prepared) + self.assertTrue(self.other_item1.is_prepared) + + diff --git a/loko/interventions/views/detail.py b/loko/interventions/views/detail.py index 7a0adfe..c9a4a1f 100644 --- a/loko/interventions/views/detail.py +++ b/loko/interventions/views/detail.py @@ -514,7 +514,7 @@ def intervention_detail(request, intervention_id): # - admin # - ou droit d'édition sur l'intervention + droit de gérer les bons de préparation sur au moins un entrepôt can_create_preparation_order = bool( - user_config and ( + user_config and intervention.status != 'canceled' and ( user_config.has_role('admin') or (can_manage_links and user_config.can_manage_preparation_orders_any()) ) @@ -3937,15 +3937,18 @@ def toggle_material_used(request, intervention_id, item_id): if is_other: try: - item = PreparationOrderOtherItem.objects.get(pk=item_id, preparation_order_id__in=order_ids) + item = PreparationOrderOtherItem.objects.select_related('preparation_order').get(pk=item_id, preparation_order_id__in=order_ids) except PreparationOrderOtherItem.DoesNotExist: return JsonResponse({'success': False, 'error': _("Article introuvable pour cette intervention.")}, status=404) else: try: - item = PreparationOrderItem.objects.get(pk=item_id, preparation_order_id__in=order_ids) + item = PreparationOrderItem.objects.select_related('preparation_order').get(pk=item_id, preparation_order_id__in=order_ids) except PreparationOrderItem.DoesNotExist: return JsonResponse({'success': False, 'error': _("Article introuvable pour cette intervention.")}, status=404) + if item.preparation_order.status == 'cancelled': + return JsonResponse({'success': False, 'error': _("Impossible de modifier le matériel d'un bon de préparation annulé.")}, status=400) + if set_value is not None: item.is_used = (set_value in ('true', '1', True)) else: @@ -3989,12 +3992,27 @@ def toggle_all_material_used(request, intervention_id): if not can_edit_intervention(request.user, intervention): return JsonResponse({'success': False, 'error': _("Vous n'avez pas la permission de modifier cette intervention.")}, status=403) - order_id = request.POST.get('order_id') + if request.content_type == 'application/json' and request.body: + try: + payload = json.loads(request.body) + order_id = payload.get('order_id') + used_param = payload.get('used') + except Exception: + order_id = request.POST.get('order_id') + used_param = request.POST.get('used') + else: + order_id = request.POST.get('order_id') + used_param = request.POST.get('used') + orders = intervention.preparation_orders.all() if order_id: orders = orders.filter(pk=order_id) if not orders.exists(): return JsonResponse({'success': False, 'error': _("Bon de préparation introuvable.")}, status=404) + if orders.first().status == 'cancelled': + return JsonResponse({'success': False, 'error': _("Impossible de modifier le matériel d'un bon de préparation annulé.")}, status=400) + else: + orders = orders.exclude(status='cancelled') order_ids = list(orders.values_list('id', flat=True)) std_items = PreparationOrderItem.objects.filter(preparation_order_id__in=order_ids) @@ -4003,8 +4021,6 @@ def toggle_all_material_used(request, intervention_id): total_target = std_items.count() + other_items.count() if total_target == 0: return JsonResponse({'success': True, 'all_used': False, 'used_count': 0, 'total_count': 0}) - - used_param = request.POST.get('used') if used_param is not None: target_state = (used_param in ('true', '1', True)) else: diff --git a/loko/interventions/views/helpers.py b/loko/interventions/views/helpers.py index 0c38e89..55caea9 100644 --- a/loko/interventions/views/helpers.py +++ b/loko/interventions/views/helpers.py @@ -1701,8 +1701,8 @@ def _expand_csv_params(param_list): def annotate_preparation_status(qs): """ - Annote le queryset avec un champ 'prep_state' indiquant l'état du bon de préparation. - Valeurs: 'processed' (tous traités/annulés), 'not_processed' (au moins un non traité), 'none' (pas de bon). + Annote le queryset avec un champ 'prep_state' indiquant l'état du bon de préparation (hors bons annulés). + Valeurs: 'processed' (tous les bons actifs traités), 'not_processed' (au moins un bon actif non traité), 'none' (pas de bon actif). """ from stock.models import PreparationOrder @@ -1712,21 +1712,32 @@ def annotate_preparation_status(qs): filter=Q(preparation_orders__status__in=['to_process', 'pending']) ) - # Compte le total des bons - total_count = Count('preparation_orders') + # Compte les bons traités + processed_count = Count( + 'preparation_orders', + filter=Q(preparation_orders__status='processed') + ) + + # Compte le total des bons actifs (hors annulés) + active_count = Count( + 'preparation_orders', + filter=~Q(preparation_orders__status='cancelled') + ) # Annote le queryset qs = qs.annotate( _prep_untreated_count=untreated_count, - _prep_total_count=total_count + _prep_processed_count=processed_count, + _prep_active_count=active_count ) # Ajoute le champ 'prep_state' basé sur les annotations qs = qs.annotate( prep_state=Case( - When(_prep_total_count=0, then=Value('none')), + When(_prep_active_count=0, then=Value('none')), When(_prep_untreated_count__gt=0, then=Value('not_processed')), - default=Value('processed'), + When(_prep_processed_count__gt=0, then=Value('processed')), + default=Value('none'), output_field=CharField() ) ) diff --git a/loko/interventions/views/mobile.py b/loko/interventions/views/mobile.py index 9c52dad..0742e35 100644 --- a/loko/interventions/views/mobile.py +++ b/loko/interventions/views/mobile.py @@ -1112,7 +1112,7 @@ def intervention_detail_mobile(request, intervention_id): pass can_create_preparation_order = bool( - user_config and ( + user_config and intervention.status != 'canceled' and ( user_config.has_role('admin') or (can_edit_mobile and user_config.can_manage_preparation_orders_any()) ) diff --git a/loko/interventions/views/workflow.py b/loko/interventions/views/workflow.py index 2b9a74c..ac23ff9 100644 --- a/loko/interventions/views/workflow.py +++ b/loko/interventions/views/workflow.py @@ -672,6 +672,17 @@ def attempt_status_update(request, intervention, user, new_status, pause_reason= # Déclencher les règles de notification configurées par l'administrateur if new_status == 'canceled': + # Synchronisation des bons de préparation liés + try: + from interventions.services.stock_sync_service import sync_preparation_orders_on_intervention_cancel + sync_preparation_orders_on_intervention_cancel(intervention, user=user) + except Exception: + import logging + logging.getLogger(__name__).exception( + "Erreur lors de la synchronisation des bons de préparation suite à l'annulation de l'intervention %s", + intervention.pk, + ) + try: from notifications.services import process_notification_rules from interventions.models import CANCELLATION_TYPE_CHOICES diff --git a/loko/stock/locale/en/LC_MESSAGES/django.mo b/loko/stock/locale/en/LC_MESSAGES/django.mo index ea33d10e7743db3a170a6dbf6066373c95a6c15e..6158c5a5bbf99cad19bb76ea04ec2e3d561b80c2 100644 GIT binary patch delta 24740 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 delta 23509 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 delta 23522 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 diff --git a/loko/stock/locale/fr/LC_MESSAGES/django.po b/loko/stock/locale/fr/LC_MESSAGES/django.po index 88cf9b3..4560dfd 100644 --- a/loko/stock/locale/fr/LC_MESSAGES/django.po +++ b/loko/stock/locale/fr/LC_MESSAGES/django.po @@ -5689,6 +5689,30 @@ msgstr "Statut de retour mis à jour." msgid "Informations de prêt enregistrées." msgstr "Informations de prêt enregistrées." +msgid "Impossible de créer un bon de préparation pour une intervention annulée." +msgstr "Impossible de créer un bon de préparation pour une intervention annulée." + +msgid "Attention : Intervention liée annulée !" +msgstr "Attention : Intervention liée annulée !" + +msgid "Intervention liée annulée !" +msgstr "Intervention liée annulée !" + +msgid "L'intervention associée à ce bon a été annulée. Si le matériel a déjà été préparé ou sorti du stock, veuillez effectuer une remise en stock du matériel ou annuler ce bon pour réintégrer automatiquement les articles." +msgstr "L'intervention associée à ce bon a été annulée. Si le matériel a déjà été préparé ou sorti du stock, veuillez effectuer une remise en stock du matériel ou annuler ce bon pour réintégrer automatiquement les articles." + +msgid "L'intervention associée à ce bon a été annulée. Si le matériel a déjà été préparé ou sorti, veuillez effectuer un retour en stock ou annuler ce bon pour réintégrer les articles." +msgstr "L'intervention associée à ce bon a été annulée. Si le matériel a déjà été préparé ou sorti, veuillez effectuer un retour en stock ou annuler ce bon pour réintégrer les articles." + +msgid "Êtes-vous sûr de vouloir annuler ce bon ? Les produits sortis seront automatiquement réintégrés en stock." +msgstr "Êtes-vous sûr de vouloir annuler ce bon ? Les produits sortis seront automatiquement réintégrés en stock." + +msgid "Annuler le bon et réintégrer en stock" +msgstr "Annuler le bon et réintégrer en stock" + +msgid "Intervention annulée" +msgstr "Intervention annulée" + #~ msgid "Discussion liée à ce bon" #~ msgstr "Discussion liée à ce bon" diff --git a/loko/stock/locale/nl/LC_MESSAGES/django.mo b/loko/stock/locale/nl/LC_MESSAGES/django.mo index 77d5e1310be2ebf3f93818174e3e9acae64be851..4b56376c9cc0c831b7e47b5671b0475cffa9ae8b 100644 GIT binary patch delta 24878 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
nw3 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 z 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 YW(8#PNxSt(R-aduww7+`Q^oiH0D;@%*#H0l diff --git a/loko/stock/locale/nl/LC_MESSAGES/django.po b/loko/stock/locale/nl/LC_MESSAGES/django.po index b143470..87c1a42 100644 --- a/loko/stock/locale/nl/LC_MESSAGES/django.po +++ b/loko/stock/locale/nl/LC_MESSAGES/django.po @@ -5689,6 +5689,30 @@ msgstr "Status bijgewerkt." msgid "Informations de prêt enregistrées." msgstr "Voorbereidingsbestelling geregistreerd." +msgid "Impossible de créer un bon de préparation pour une intervention annulée." +msgstr "Kan geen voorbereidingsbon aanmaken voor een geannuleerde interventie." + +msgid "Attention : Intervention liée annulée !" +msgstr "Opgelet: Gekoppelde interventie geannuleerd!" + +msgid "Intervention liée annulée !" +msgstr "Gekoppelde interventie geannuleerd!" + +msgid "L'intervention associée à ce bon a été annulée. Si le matériel a déjà été préparé ou sorti du stock, veuillez effectuer une remise en stock du matériel ou annuler ce bon pour réintégrer automatiquement les articles." +msgstr "De aan deze bon gekoppelde interventie is geannuleerd. Als het materiaal reeds is voorbereid of uit voorraad is gehaald, voer dan een terugname naar de voorraad uit of annuleer deze bon om de artikelen automatisch terug te boeken." + +msgid "L'intervention associée à ce bon a été annulée. Si le matériel a déjà été préparé ou sorti, veuillez effectuer un retour en stock ou annuler ce bon pour réintégrer les articles." +msgstr "De aan deze bon gekoppelde interventie is geannuleerd. Als het materiaal reeds is voorbereid of uitgegeven, voer dan een terugname naar de voorraad uit of annuleer deze bon om de artikelen terug te boeken." + +msgid "Êtes-vous sûr de vouloir annuler ce bon ? Les produits sortis seront automatiquement réintégrés en stock." +msgstr "Weet u zeker dat u deze bon wilt annuleren? De uitgegeven producten worden automatisch weer aan de voorraad toegevoegd." + +msgid "Annuler le bon et réintégrer en stock" +msgstr "Bon annuleren en terugboeken naar voorraad" + +msgid "Intervention annulée" +msgstr "Interventie geannuleerd" + #~ msgid "Discussion liée à ce bon" #~ msgstr "Discussie gekoppeld aan deze bon" diff --git a/loko/stock/models.py b/loko/stock/models.py index 9e3702f..5b95a06 100644 --- a/loko/stock/models.py +++ b/loko/stock/models.py @@ -1423,13 +1423,13 @@ class PreparationOrder(models.Model): qr_code = models.ImageField(upload_to='stock/qrcodes/preparation_orders/', blank=True, null=True, verbose_name=_('QR Code')) STATUS_BADGE_CLASSES = { - 'to_process': 'bg-danger', + 'to_process': 'bg-warning text-dark', 'pending': 'bg-info', 'processed': 'bg-success', 'cancelled': 'bg-secondary', } STATUS_ICONS = { - 'to_process': 'bi-hourglass', + 'to_process': 'bi-hourglass-split', 'pending': 'bi-clock', 'processed': 'bi-check-circle', 'cancelled': 'bi-x-circle', @@ -1456,6 +1456,19 @@ class PreparationOrder(models.Model): def status_icon(self): return self.STATUS_ICONS.get(self.status, 'bi-circle') + @property + def is_already_prepared(self): + """Retourne True si le bon est traité, ou si des sorties de stock ont été exécutées, ou si des articles sont marqués préparés.""" + if self.status == 'processed': + return True + if self.stock_batches.filter(movement_type='out').exists(): + return True + if self.preparationorderitem_set.filter(is_prepared=True).exists(): + return True + if self.other_items.filter(is_prepared=True).exists(): + return True + return False + def generate_qr_code(self): """Génère un QR code basé sur le numéro de bon de préparation et le sauvegarde dans le champ qr_code.""" qr = qrcode.QRCode( @@ -1520,9 +1533,11 @@ class PreparationOrder(models.Model): item.update_reserved_quantity() def mark_as_processed(self): - """Marque le bon comme traité et libère les quantités réservées""" + """Marque le bon comme traité, marque ses articles comme préparés et libère les quantités réservées""" self.status = "processed" self.save() + self.preparationorderitem_set.all().update(is_prepared=True) + self.other_items.all().update(is_prepared=True) self.update_reserved_quantities() def reopen(self): diff --git a/loko/stock/templates/stock/mobile/stock_preparation_order_detail_mobile.html b/loko/stock/templates/stock/mobile/stock_preparation_order_detail_mobile.html index 52d8fb3..32ea3ca 100644 --- a/loko/stock/templates/stock/mobile/stock_preparation_order_detail_mobile.html +++ b/loko/stock/templates/stock/mobile/stock_preparation_order_detail_mobile.html @@ -97,6 +97,25 @@
{% endif %} +{% if preparation_order.intervention and preparation_order.intervention.status == 'canceled' and preparation_order.status != 'cancelled' %} + +{% endif %} + {% if preparation_order.intervention %}
@@ -107,6 +126,9 @@ #{{ preparation_order.intervention.id }} + {% if preparation_order.intervention.status == 'canceled' %} + {% translate "Annulée" %} + {% endif %}
{% if preparation_order.intervention.title or preparation_order.intervention.description %} diff --git a/loko/stock/templates/stock/preparation_order_detail.html b/loko/stock/templates/stock/preparation_order_detail.html index 8b69228..db4d42a 100644 --- a/loko/stock/templates/stock/preparation_order_detail.html +++ b/loko/stock/templates/stock/preparation_order_detail.html @@ -39,7 +39,7 @@ {{ preparation_order.get_status_display }} {% elif preparation_order.status == 'cancelled' %} - + {{ preparation_order.get_status_display }} {% endif %} @@ -77,6 +77,27 @@
{% endif %} + {% if preparation_order.intervention and preparation_order.intervention.status == 'canceled' and preparation_order.status != 'cancelled' %} + + {% endif %} + {% if preparation_order.intervention %}
@@ -90,6 +111,9 @@ {{ preparation_order.intervention.code }} + {% if preparation_order.intervention.status == 'canceled' %} + {% translate "Intervention annulée" %} + {% endif %}
{% translate "Titre" %}: diff --git a/loko/stock/views.py b/loko/stock/views.py index 534f058..b05d269 100644 --- a/loko/stock/views.py +++ b/loko/stock/views.py @@ -3608,6 +3608,10 @@ def new_preparation_order_from_intervention(request, intervention_id): intervention = get_object_or_404(Intervention, pk=intervention_id) + if intervention.status == 'canceled': + messages.error(request, _("Impossible de créer un bon de préparation pour une intervention annulée.")) + return redirect(redirect_target, intervention_id=intervention_id) + can_create_from_intervention = bool( user_config.has_role('admin') or (