From b86d805cb57ad48163646bc4ad23ff257133ccf0 Mon Sep 17 00:00:00 2001 From: kdeterme Date: Wed, 30 Sep 2026 18:17:30 +0200 Subject: [PATCH] feat(contracts,home): include finished status in controller shortcuts and display assigned controller in order interventions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add 'finished' status to controller shortcuts widget filter and links - Add conditional 'Contrôleur assigné' column in order interventions table for contracts with auto_assign_control_team - Optimize order interventions query with select_related for controllers - Update and compile translations (fr, nl, en) - Add unit tests for order detail controller display and widget status inclusion --- .../contracts/locale/en/LC_MESSAGES/django.mo | Bin 34675 -> 34732 bytes .../contracts/locale/en/LC_MESSAGES/django.po | 4 + .../contracts/locale/fr/LC_MESSAGES/django.mo | Bin 41751 -> 41809 bytes .../contracts/locale/fr/LC_MESSAGES/django.po | 4 + .../contracts/locale/nl/LC_MESSAGES/django.mo | Bin 36032 -> 36091 bytes .../contracts/locale/nl/LC_MESSAGES/django.po | 4 + .../contracts/contracts_orders_detail.html | 37 ++++-- loko/contracts/tests.py | 116 ++++++++++++++++++ loko/contracts/views.py | 4 +- .../home/widgets/controller_shortcuts.html | 8 +- loko/home/tests.py | 13 +- loko/home/views.py | 32 ++--- 12 files changed, 186 insertions(+), 36 deletions(-) diff --git a/loko/contracts/locale/en/LC_MESSAGES/django.mo b/loko/contracts/locale/en/LC_MESSAGES/django.mo index bf73ab1eed503ea452e6fd302823f323d4515928..a0c431bc4ba35eed84518b12de60935cf699d639 100644 GIT binary patch delta 10254 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 delta 10200 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 diff --git a/loko/contracts/locale/en/LC_MESSAGES/django.po b/loko/contracts/locale/en/LC_MESSAGES/django.po index 29d547d..23cf9b3 100644 --- a/loko/contracts/locale/en/LC_MESSAGES/django.po +++ b/loko/contracts/locale/en/LC_MESSAGES/django.po @@ -2371,3 +2371,7 @@ msgstr "Automatically assign a control team" msgid "Si activé, une équipe de contrôle est automatiquement assignée aux interventions correctives de ce contrat." msgstr "If enabled, a control team is automatically assigned to corrective interventions for this contract." +#: contracts/templates/contracts/contracts_orders_detail.html:755 +msgid "Contrôleur assigné" +msgstr "Assigned controller" + diff --git a/loko/contracts/locale/fr/LC_MESSAGES/django.mo b/loko/contracts/locale/fr/LC_MESSAGES/django.mo index 0d49398096af46a5b89ce6117c0e9efc9e598fc3..fe4478f69f169baa5af57a836ca34b375a8b246e 100644 GIT binary patch delta 10655 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 trVlx??cLtPhJpB-Q5{{Z1gFh&3X delta 10586 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 A^Z)<= diff --git a/loko/contracts/locale/fr/LC_MESSAGES/django.po b/loko/contracts/locale/fr/LC_MESSAGES/django.po index ac0c7a3..4052f8e 100644 --- a/loko/contracts/locale/fr/LC_MESSAGES/django.po +++ b/loko/contracts/locale/fr/LC_MESSAGES/django.po @@ -2421,3 +2421,7 @@ msgstr "Assigner automatiquement une équipe de contrôle" msgid "Si activé, une équipe de contrôle est automatiquement assignée aux interventions correctives de ce contrat." msgstr "Si activé, une équipe de contrôle est automatiquement assignée aux interventions correctives de ce contrat." +#: contracts/templates/contracts/contracts_orders_detail.html:755 +msgid "Contrôleur assigné" +msgstr "Contrôleur assigné" + diff --git a/loko/contracts/locale/nl/LC_MESSAGES/django.mo b/loko/contracts/locale/nl/LC_MESSAGES/django.mo index 13b871d2e3a40e6c018491b9fb5079911bd274e9..a53d5cc5698faee1f840b3c24564e379797c0826 100644 GIT binary patch delta 10257 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 delta 10200 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 q&#H`lalN$HEU_kJpN{% translate "Titre" %} {% translate "Début" %} {% translate "Statut" %} + {% if order.contract.auto_assign_control_team %} + {% translate "Contrôleur assigné" %} + {% endif %} - - {% for intervention in interventions %} - - {{ intervention.code }} - {{ intervention.title }} - {{ intervention.begin_time|date:"d-m-Y H:i" }} - {{ intervention.get_status_display }} - - {% endfor %} - + + {% for intervention in interventions %} + + {{ intervention.code }} + {{ intervention.title }} + {{ intervention.begin_time|date:"d-m-Y H:i" }} + {{ intervention.get_status_display }} + {% if order.contract.auto_assign_control_team %} + + {% if intervention.assigned_controller %} + {{ intervention.assigned_controller.name }} + {% if intervention.assigned_control_team %} + ({{ intervention.assigned_control_team.name }}) + {% endif %} + {% elif intervention.assigned_control_team %} + {{ intervention.assigned_control_team.name }} + {% else %} + - + {% endif %} + + {% endif %} + + {% endfor %} + diff --git a/loko/contracts/tests.py b/loko/contracts/tests.py index 8bf0da5..9d21ca2 100644 --- a/loko/contracts/tests.py +++ b/loko/contracts/tests.py @@ -344,3 +344,119 @@ class GenerateClaimDeclarationTimelineTests(TestCase): self.assertEqual(timeline_event_2.event_type, "status_change") self.assertEqual(timeline_event_2.event_user, self.user) + +class ContractOrderDetailControllerDisplayTests(TestCase): + def setUp(self): + from datetime import date + from contracts.models import Contract, ContractOrder, Company, CompanyTeam, CompanyMember + from common.models import UserContractAccess + from interventions.models import Intervention + + self.client = Client() + self.user = User.objects.create_user(username="order_admin_user", password="password") + self.user_config = UserConfig.objects.create(user=self.user, is_intern=True) + self.admin_role, _ = Role.objects.get_or_create(name="admin") + self.user_config.roles.add(self.admin_role) + self.client.login(username="order_admin_user", password="password") + + self.company = Company.objects.create(name="Société Test Contrôle") + self.team_ctrl = CompanyTeam.objects.create( + name="Équipe Contrôle Nord", + company=self.company, + operation_types=[CompanyTeam.OPERATION_CONTROLS], + ) + ctrl_user = User.objects.create_user(username="ctrl_member_user", password="password") + self.controller_member = CompanyMember.objects.create( + user=ctrl_user, + name="Jean Contrôleur", + ) + self.controller_member.teams.add(self.team_ctrl) + + self.contract_with_ctrl = Contract.objects.create( + company=self.company, + contract_number="CTR-CTRL-001", + start_date=date(2025, 1, 1), + end_date=date(2026, 1, 1), + auto_assign_control_team=True, + ) + UserContractAccess.objects.create( + user_config=self.user_config, + contract=self.contract_with_ctrl, + can_view_interventions=True, + ) + self.order_with_ctrl = ContractOrder.objects.create( + contract=self.contract_with_ctrl, + order_code="ORD-CTRL-01", + order_status="pending", + order_date=date(2025, 1, 1), + delivery_date=date(2025, 1, 15), + description="Commande avec marché contrôlé", + ) + self.itv1 = Intervention.objects.create( + code="ITV-C01", + title="Intervention avec contrôleur", + contract=self.contract_with_ctrl, + order=self.order_with_ctrl, + assigned_control_team=self.team_ctrl, + assigned_controller=self.controller_member, + status="finished", + ) + self.itv2 = Intervention.objects.create( + code="ITV-C02", + title="Intervention équipe seule", + contract=self.contract_with_ctrl, + order=self.order_with_ctrl, + assigned_control_team=self.team_ctrl, + status="processed", + ) + + self.contract_without_ctrl = Contract.objects.create( + company=self.company, + contract_number="CTR-NO-CTRL-002", + start_date=date(2025, 1, 1), + end_date=date(2026, 1, 1), + auto_assign_control_team=False, + ) + UserContractAccess.objects.create( + user_config=self.user_config, + contract=self.contract_without_ctrl, + can_view_interventions=True, + ) + self.order_without_ctrl = ContractOrder.objects.create( + contract=self.contract_without_ctrl, + order_code="ORD-NO-CTRL-02", + order_status="pending", + order_date=date(2025, 1, 1), + delivery_date=date(2025, 1, 15), + description="Commande sans marché contrôlé", + ) + self.itv3 = Intervention.objects.create( + code="ITV-NC01", + title="Intervention classique", + contract=self.contract_without_ctrl, + order=self.order_without_ctrl, + status="finished", + ) + + def test_order_detail_shows_controller_when_contract_has_auto_assign_control_team(self): + url = reverse("contracts:contracts_orders_detail", kwargs={"order_id": self.order_with_ctrl.id}) + response = self.client.get(url, HTTP_ACCEPT_LANGUAGE='fr') + self.assertEqual(response.status_code, 200) + + # Check th exists + self.assertContains(response, 'data-field="assigned_controller"') + self.assertContains(response, 'Contrôleur assigné') + + # Check td contents + self.assertContains(response, 'Jean Contrôleur') + self.assertContains(response, 'Équipe Contrôle Nord') + + def test_order_detail_hides_controller_when_contract_does_not_have_auto_assign_control_team(self): + url = reverse("contracts:contracts_orders_detail", kwargs={"order_id": self.order_without_ctrl.id}) + response = self.client.get(url, HTTP_ACCEPT_LANGUAGE='fr') + self.assertEqual(response.status_code, 200) + + # Check th does not exist + self.assertNotContains(response, 'data-field="assigned_controller"') + self.assertNotContains(response, 'Contrôleur assigné') + diff --git a/loko/contracts/views.py b/loko/contracts/views.py index 78bfdde..27659fd 100644 --- a/loko/contracts/views.py +++ b/loko/contracts/views.py @@ -108,8 +108,8 @@ def contracts_detail(request, contract_id): @order_view_required def contracts_orders_detail(request, order_id): - order = ContractOrder.objects.get(id=order_id) - interventions = order.interventions.all() + order = ContractOrder.objects.select_related('contract').get(id=order_id) + interventions = order.interventions.all().select_related('assigned_controller', 'assigned_control_team') # Normalize numeric values to Decimal to avoid float/Decimal mixing errors total = order.total_amount diff --git a/loko/home/templates/home/widgets/controller_shortcuts.html b/loko/home/templates/home/widgets/controller_shortcuts.html index 974a5e3..7f4c537 100644 --- a/loko/home/templates/home/widgets/controller_shortcuts.html +++ b/loko/home/templates/home/widgets/controller_shortcuts.html @@ -3,7 +3,7 @@ {# ========== Widget raccourcis pour les contrôleurs ========== #}
- {% translate "Interventions à contrôler" %} @@ -15,7 +15,7 @@ {# --- Compteur principal et sous-raccourcis --- #} @@ -64,7 +64,7 @@