From 74c1bf2447be5b8d792cc695b17eaf1a672ee92a Mon Sep 17 00:00:00 2001 From: kdeterme Date: Sat, 19 Sep 2026 14:25:52 +0200 Subject: [PATCH] feat: add intervention control team assignment, contract auto-assignment, and controller shortcuts dashboard widget --- loko/contracts/admin.py | 6 +- .../contracts/locale/en/LC_MESSAGES/django.mo | Bin 34345 -> 34675 bytes .../contracts/locale/en/LC_MESSAGES/django.po | 9 + .../contracts/locale/fr/LC_MESSAGES/django.mo | Bin 41387 -> 41751 bytes .../contracts/locale/fr/LC_MESSAGES/django.po | 9 + .../contracts/locale/nl/LC_MESSAGES/django.mo | Bin 35684 -> 36032 bytes .../contracts/locale/nl/LC_MESSAGES/django.po | 9 + .../0009_contract_auto_assign_control_team.py | 18 ++ loko/contracts/models.py | 5 + loko/home/locale/en/LC_MESSAGES/django.mo | Bin 17072 -> 17589 bytes loko/home/locale/en/LC_MESSAGES/django.po | 28 ++- loko/home/locale/fr/LC_MESSAGES/django.mo | Bin 18139 -> 18681 bytes loko/home/locale/fr/LC_MESSAGES/django.po | 28 ++- loko/home/locale/nl/LC_MESSAGES/django.mo | Bin 17713 -> 18263 bytes loko/home/locale/nl/LC_MESSAGES/django.po | 28 ++- .../0007_alter_homewidget_widget_code.py | 18 ++ ...0008_create_controller_shortcuts_widget.py | 49 +++++ loko/home/models.py | 1 + .../home/widgets/controller_shortcuts.html | 72 ++++++ loko/home/tests.py | 72 +++++- loko/home/views.py | 40 ++++ loko/interventions/admin.py | 4 +- .../locale/en/LC_MESSAGES/django.mo | Bin 118827 -> 119369 bytes .../locale/en/LC_MESSAGES/django.po | 25 +++ .../locale/fr/LC_MESSAGES/django.mo | Bin 134235 -> 134813 bytes .../locale/fr/LC_MESSAGES/django.po | 25 +++ .../locale/nl/LC_MESSAGES/django.mo | Bin 124172 -> 124738 bytes .../locale/nl/LC_MESSAGES/django.po | 25 +++ ...rvention_assigned_control_team_and_more.py | 25 +++ loko/interventions/models.py | 38 ++++ loko/interventions/permissions.py | 42 +++- .../services_control_assignment.py | 154 +++++++++++++ .../interventions/detail/card_info.html | 14 ++ .../tests/test_control_assignment.py | 208 ++++++++++++++++++ loko/interventions/views/detail.py | 9 +- loko/interventions/views/general.py | 10 + 36 files changed, 955 insertions(+), 16 deletions(-) create mode 100644 loko/contracts/migrations/0009_contract_auto_assign_control_team.py create mode 100644 loko/home/migrations/0007_alter_homewidget_widget_code.py create mode 100644 loko/home/migrations/0008_create_controller_shortcuts_widget.py create mode 100644 loko/home/templates/home/widgets/controller_shortcuts.html create mode 100644 loko/interventions/migrations/0013_intervention_assigned_control_team_and_more.py create mode 100644 loko/interventions/services_control_assignment.py create mode 100644 loko/interventions/tests/test_control_assignment.py diff --git a/loko/contracts/admin.py b/loko/contracts/admin.py index f91b7c2..a0c641f 100644 --- a/loko/contracts/admin.py +++ b/loko/contracts/admin.py @@ -126,9 +126,9 @@ class CompanyAdmin(admin.ModelAdmin): @admin.register(Contract) class ContractAdmin(admin.ModelAdmin): - list_display = ('contract_number', 'description', 'company', 'is_blocked', 'is_active', 'start_date', 'end_date', 'contact_phone', 'send_email_notifications', 'send_daily_summary', 'uses_occupations', 'occupations_required', 'uses_intervention_manager', 'allow_team_members_edit', 'thematics_list') + list_display = ('contract_number', 'description', 'company', 'is_blocked', 'is_active', 'start_date', 'end_date', 'contact_phone', 'send_email_notifications', 'send_daily_summary', 'uses_occupations', 'occupations_required', 'uses_intervention_manager', 'allow_team_members_edit', 'auto_assign_control_team', 'thematics_list') search_fields = ('contract_number', 'company__name', 'description', 'contact_phone') - list_filter = ('is_blocked', 'is_active', 'thematics', 'uses_occupations', 'occupations_required', 'uses_intervention_manager', 'allow_team_members_edit', 'send_daily_summary') + list_filter = ('is_blocked', 'is_active', 'thematics', 'uses_occupations', 'occupations_required', 'uses_intervention_manager', 'allow_team_members_edit', 'auto_assign_control_team', 'send_daily_summary') filter_horizontal = ('thematics',) def get_inlines(self, request, obj=None): @@ -154,7 +154,7 @@ class ContractAdmin(admin.ModelAdmin): ), }), ('Options de workflow', { - 'fields': ('needs_approval', 'approval_except_urgent', 'needs_checking', 'uses_occupations', 'occupations_required', 'uses_intervention_manager', 'warn_if_no_prestation_on_processed', 'allow_team_members_edit'), + 'fields': ('needs_approval', 'approval_except_urgent', 'needs_checking', 'uses_occupations', 'occupations_required', 'uses_intervention_manager', 'warn_if_no_prestation_on_processed', 'allow_team_members_edit', 'auto_assign_control_team'), }), ) diff --git a/loko/contracts/locale/en/LC_MESSAGES/django.mo b/loko/contracts/locale/en/LC_MESSAGES/django.mo index c8314f5d68833ea4f768d47ae5364093eb0b34c4..bf73ab1eed503ea452e6fd302823f323d4515928 100644 GIT binary patch delta 10557 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 delta 10236 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 V==@9HdjCJPt-f#3cdL(j{uk|5jluu` delta 10643 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 diff --git a/loko/contracts/locale/fr/LC_MESSAGES/django.po b/loko/contracts/locale/fr/LC_MESSAGES/django.po index a8f0ad4..ac0c7a3 100644 --- a/loko/contracts/locale/fr/LC_MESSAGES/django.po +++ b/loko/contracts/locale/fr/LC_MESSAGES/django.po @@ -2412,3 +2412,12 @@ msgstr "La date cible ne peut pas être dans le passé." #~ msgid "Confirmer le changement immédiat" #~ msgstr "Confirmer le changement immédiat" + +#: contracts/models.py:435 +msgid "Assigner automatiquement une équipe de contrôle" +msgstr "Assigner automatiquement une équipe de contrôle" + +#: contracts/models.py:436 +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." + diff --git a/loko/contracts/locale/nl/LC_MESSAGES/django.mo b/loko/contracts/locale/nl/LC_MESSAGES/django.mo index d84dfcae56e565ebc8dda70dad51252d194a5f59..13b871d2e3a40e6c018491b9fb5079911bd274e9 100644 GIT binary patch delta 10603 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 diff --git a/loko/contracts/locale/nl/LC_MESSAGES/django.po b/loko/contracts/locale/nl/LC_MESSAGES/django.po index c6d018e..d97110e 100644 --- a/loko/contracts/locale/nl/LC_MESSAGES/django.po +++ b/loko/contracts/locale/nl/LC_MESSAGES/django.po @@ -2368,3 +2368,12 @@ msgstr "De doeldatum kan niet in het verleden liggen." #~ msgid "Confirmer le changement immédiat" #~ msgstr "Onmiddellijke wijziging bevestigen" + +#: contracts/models.py:435 +msgid "Assigner automatiquement une équipe de contrôle" +msgstr "Automatisch een controleteam toewijzen" + +#: contracts/models.py:436 +msgid "Si activé, une équipe de contrôle est automatiquement assignée aux interventions correctives de ce contrat." +msgstr "Indien geactiveerd wordt automatisch een controleteam toegewezen aan de correctieve interventies van dit contract." + diff --git a/loko/contracts/migrations/0009_contract_auto_assign_control_team.py b/loko/contracts/migrations/0009_contract_auto_assign_control_team.py new file mode 100644 index 0000000..c2f2a32 --- /dev/null +++ b/loko/contracts/migrations/0009_contract_auto_assign_control_team.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0.7 on 2026-09-19 11:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contracts', '0008_companyteam_geom_companyteam_operation_types'), + ] + + operations = [ + migrations.AddField( + model_name='contract', + name='auto_assign_control_team', + field=models.BooleanField(default=False, help_text='Si activé, une équipe de contrôle est automatiquement assignée aux interventions correctives de ce contrat.', verbose_name='Assigner automatiquement une équipe de contrôle'), + ), + ] diff --git a/loko/contracts/models.py b/loko/contracts/models.py index c22c95f..ec5aa11 100644 --- a/loko/contracts/models.py +++ b/loko/contracts/models.py @@ -432,6 +432,11 @@ class Contract(models.Model): verbose_name=_("Modification inter-membres d'équipe autorisée"), help_text=_("Si activé, les membres d'une même équipe peuvent modifier les interventions assignées à d'autres membres de leur équipe, y compris à partir du statut 'Pris en charge' ou au-delà."), ) + auto_assign_control_team = models.BooleanField( + default=False, + verbose_name=_("Assigner automatiquement une équipe de contrôle"), + help_text=_("Si activé, une équipe de contrôle est automatiquement assignée aux interventions correctives de ce contrat."), + ) is_blocked = models.BooleanField( default=False, verbose_name=_("Marché bloqué / gelé"), diff --git a/loko/home/locale/en/LC_MESSAGES/django.mo b/loko/home/locale/en/LC_MESSAGES/django.mo index d9b796429513decd73abc660510f03121c541e7f..54a2c1d24c338827b0e17db53a972ffd245ece2f 100644 GIT binary patch delta 5485 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 delta 5087 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 jjuespH_|2gA7$SxQ~ diff --git a/loko/home/locale/fr/LC_MESSAGES/django.po b/loko/home/locale/fr/LC_MESSAGES/django.po index 4e171e3..62d8407 100644 --- a/loko/home/locale/fr/LC_MESSAGES/django.po +++ b/loko/home/locale/fr/LC_MESSAGES/django.po @@ -665,10 +665,11 @@ msgstr "" msgid "En pause" msgstr "" +#: home/templates/home/widgets/controller_shortcuts.html:36 #: home/templates/home/widgets/external_interventions.html:84 #: home/templates/home/widgets/external_interventions.html:85 msgid "À corriger" -msgstr "" +msgstr "À corriger" #: home/templates/home/widgets/external_interventions.html:94 msgid "10 dernières interventions" @@ -1120,3 +1121,28 @@ msgstr "Articles en prêt" #: home/templates/home/widgets/stock_summary.html:235 msgid "Aucun article en prêt en cours" msgstr "Aucun article en prêt en cours" + +#: home/models.py:38 +#: home/templates/home/widgets/controller_shortcuts.html:11 +msgid "Raccourcis contrôleur" +msgstr "Raccourcis contrôleur" + +#: home/templates/home/widgets/controller_shortcuts.html:15 +msgid "Interventions à contrôler" +msgstr "Interventions à contrôler" + +#: home/templates/home/widgets/controller_shortcuts.html:18 +msgid "en attente de contrôle" +msgstr "en attente de contrôle" + +#: home/templates/home/widgets/controller_shortcuts.html:43 +msgid "Validées" +msgstr "Validées" + +#: home/templates/home/widgets/controller_shortcuts.html:64 +msgid "Aucune intervention à contrôler" +msgstr "Aucune intervention à contrôler" + +#: home/templates/home/widgets/controller_shortcuts.html:72 +msgid "Voir toutes les interventions à contrôler" +msgstr "Voir toutes les interventions à contrôler" diff --git a/loko/home/locale/nl/LC_MESSAGES/django.mo b/loko/home/locale/nl/LC_MESSAGES/django.mo index 4489a08240e9c2623656bec002bab92deb0cbe88..24b7e4eda94bd12877ee7ae6a13fc44227dd62e3 100644 GIT binary patch delta 5498 zcmY+`34Bdg0>|+al31gO*b>`I8cPFjhq(;Qr zQEkPDP6rd~3|iZaS_U1hE^3(8R@;m&Gav0o=l9P&&*=U5=X=h%_uYH8`<`u!0?w5M z_%1XKtS}sRNGr0ujxiYl#x#6Ht;VD@F(v_fU?NV&9$0~?cnZ@otf?_wa4e?aV$|o3 zU>x4XWNh8cn9(>Aha2NF8z^+9;oqnmMKw336Xs(hT!}4lBhoi>5QFd-hTv&zh!^bn z8`zWj*BFM0EsP1q{@51Nkv^L|%;fpzISTwU$N3Y1U*e;9A2kWlG}2Sk1@%E6M&feR zjBP=6@C3HTYZ#BgT;#$o7=>B3KEt{K>+yWEi-LM~05#%EI)VSf#&{3);1Hgo5l7<` zOv3uO8g+gHs^fbw4L`>=7)>u-n2NgpB-H(t-fuDVHLXW~z{FU=E{Z?mV*1%vaWcw#>gSY{BsL!LHaIhojo3 zBeQ7AY<;u!2sWVoB6h=@sHu&1Ia8jD{4=BY!z7w%s1BB4CT_yI_#YpIUKBL%+Qq%C zLot;4lNgS9s1cW`G^djF#- z=mDvy3o|eX$D?kPi~3@kgPO{Ns1Bb+UH1iQ#MeRWeoM%V?l8M9EIpJ3~5dwv=Q(!LCJ z-<8NMOcnYxb!Y5}YpAukXX}k(ogTYTZ%2RB)Q?5pATtZKt5;aJ+VjV-9_`mq1G|fw znSeOwH=!}AyHPRwmUxIo-C2HjFTCbosQwZO)^wo^S?)WTn%4|XY znNMv!IKjDZGHR(ZF&LjoVE!9Wm}F0QQ6nrxwXeqdSc&T3R;-IhQEPezHGoT~y>bI} zT>!se`dkDy#2D25l5M?@JwMDxL2EJw>tG)0!a{pNDW(SSo?}beQ287aUXI0H2^TTs^@LB2xF31n$~<_?9?G}PnidM(DImS8rv!52I^H7`d z71YSfQ6qlKx*Z!+KZ3RKW7GrAqegfYn_>XHZ-LFRIVPdrh9S0nOb_N?J@V2Z=i3vj ztlLm)cMSD2eA%`K^mJ|B;N?*1i|&LE}&zEJB@s9@U|xw!YCv zK@ZrCy6}B_!8zN03-#dpsIT0xK8{J)iuy>@jXl^5pGQ5o0yU5-jKCe3iKlP?wqa-L zxxQ>$C`Nr?KB|YWqHbJ?9^8dm;~1t%59*AqaWJYq7bCIIx(K!Qm8h@i{iy4%B9mqA zB1`TwiT#}(4@7m~DOAsLP)k#S8qplo`(I}3AEG*V9kmI+N6p}msOv*goy`_yO+;Pa z3!`uZHrM-KNI|>&Wz^Vh5gYc2dxkUqE%_8+$?EK&L}ZQEMH8n&MP!gX6F*mZH{ptv$cPoH`I+8JLYhxEwW=YfxXo zZ=*WC1GPjaZTof9(teG)Pc42r^?HY4&)=EW4D9(y!=2|xbFzH z8Dt_^O>|r(daHj=`jca1GtqX{p~clPmaHLOa-IZ}YVr!vd}?mKB>v+Ge*sg;1ih#_ zULftrugGztLtFM^vWR>_{KwBIEVGs0_#5#tGR4+kvwmPr!9zsf5ISCWFdOvzK~xTs ze&ihaj9ey~L)NF}$guk9WDD!DW+8DM*-v(ohmRIi-Xd?<##;}a9HNK(g%m&3$a`x3 zM%t1*a+ zwvEy_q9e?~{25!4=SVhrhq#H}$LC2XnL~6ecc}R`t3&yhw!XkB_K`$y)L(nMZW|mfRsZWFg5V?~|9w7}A&M=^xl_~j^rPt z3E4&dq&>KWLM^hC93VQLB55@x{`YC^jRoWj!pF=eGMM;}krZx|LVtrb7XL~-wtfw- zlLQi_8@)>2BRZesvO3~V&|r|lC{I#hd8#so!XdEK6Z!lEL#C*Par_CEM9 zT{_rja$tjW_e}N5?Jmx(?l53qKy0eV<97Y@DXx5aRXmfv<-4c5Cb6r%LF29nN@jp|Le&hfE delta 5087 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 +
+ + + {% translate "Interventions à contrôler" %} + + + {{ controller_interventions_count }} + +
+ + {# --- Compteur principal et sous-raccourcis --- #} + + + {# --- Liste des 5 premières interventions --- #} + + + + diff --git a/loko/home/tests.py b/loko/home/tests.py index d95cc61..d859414 100644 --- a/loko/home/tests.py +++ b/loko/home/tests.py @@ -3,7 +3,7 @@ from django.test import TestCase from datetime import date from common.models import Role, Thematic, UserConfig, UserThematics -from contracts.models import Company, CompanyTeam, Contract +from contracts.models import Company, CompanyTeam, Contract, CompanyMember from home.models import HomeWidget, HomeWidgetConditionGroup, HomeWidgetCondition @@ -370,5 +370,75 @@ class HomeWidgetAdminTests(TestCase): self.assertIn('Group 1', html) +class ControllerShortcutsWidgetTests(TestCase): + def setUp(self): + User = get_user_model() + self.user = User.objects.create_user('ctrl_user', password='pwd') + self.user_config = UserConfig.objects.create( + user=self.user, + is_intern=True, + limit_interventions_to_contracts=False + ) + self.role_ctrl, _ = Role.objects.get_or_create(name='controller') + self.user_config.roles.add(self.role_ctrl) + + self.thematic, _ = Thematic.objects.get_or_create(code='structures', defaults={'name_fr': 'Structures'}) + self.company = Company.objects.create(name='Société Contrôle') + self.team = CompanyTeam.objects.create( + name='Équipe Contrôle Test', + company=self.company, + operation_types=[CompanyTeam.OPERATION_CONTROLS] + ) + self.member = CompanyMember.objects.create(user=self.user, name='Membre Contrôleur') + self.member.teams.add(self.team) + + from django.urls import reverse + self.reverse = reverse + + def test_controller_shortcuts_widget_context_and_rendering(self): + from interventions.models import Intervention + itv_processed = Intervention.objects.create( + code='ITV-CTRL-001', + maintain_type='corrective', + thematic=self.thematic, + status='processed', + assigned_control_team=self.team, + assigned_controller=self.member, + ) + itv_corrected = Intervention.objects.create( + code='ITV-CTRL-002', + maintain_type='corrective', + thematic=self.thematic, + status='corrected', + assigned_control_team=self.team, + assigned_controller=self.member, + ) + itv_in_progress = Intervention.objects.create( + code='ITV-CTRL-003', + maintain_type='corrective', + thematic=self.thematic, + status='in_progress', + assigned_control_team=self.team, + assigned_controller=self.member, + ) + + self.client.force_login(self.user) + response = self.client.get(self.reverse('home:index'), HTTP_ACCEPT_LANGUAGE='fr') + self.assertEqual(response.status_code, 200) + + # Context counts + self.assertEqual(response.context['controller_interventions_count'], 2) + ctrl_codes = [itv.code for itv in response.context['controller_interventions_list']] + self.assertIn('ITV-CTRL-001', ctrl_codes) + self.assertIn('ITV-CTRL-002', ctrl_codes) + self.assertNotIn('ITV-CTRL-003', ctrl_codes) + + # Content rendered in HTML + self.assertContains(response, 'Interventions à contrôler') + self.assertContains(response, 'ITV-CTRL-001') + self.assertContains(response, 'ITV-CTRL-002') + + + diff --git a/loko/home/views.py b/loko/home/views.py index fd1b5ba..2a6a4c3 100644 --- a/loko/home/views.py +++ b/loko/home/views.py @@ -654,6 +654,42 @@ def index(request): total_finished_count = interventions.filter(status='finished').count() total_on_pause_count = interventions.filter(status='on_pause').count() + # ========== Données widget controller_shortcuts ========== + user_role_names = set(user_config.roles.values_list('name', flat=True)) if user_config else set() + controller_filter = Q(status__in=['processed', 'corrected']) + if user_teams and user_teams.exists(): + control_team_ids = list(user_teams.values_list('id', flat=True)) + controller_q = ( + Q(assigned_control_team_id__in=control_team_ids) | + Q(assigned_controller__user=request.user) + ) + if not (user_role_names & {'admin', 'top_manager', 'manager'}): + controller_filter &= controller_q + + controller_interventions_qs = interventions.filter(controller_filter) + controller_interventions_count = controller_interventions_qs.count() + controller_interventions_list = list( + controller_interventions_qs + .select_related('thematic', 'contract', 'assigned_control_team', 'assigned_team') + .order_by('-code')[:5] + ) + + controller_to_correct_qs = interventions.filter(status='to_be_corrected') + if user_teams and user_teams.exists() and not (user_role_names & {'admin', 'top_manager', 'manager'}): + controller_to_correct_qs = controller_to_correct_qs.filter( + Q(assigned_control_team_id__in=control_team_ids) | + Q(assigned_controller__user=request.user) + ) + controller_to_correct_count = controller_to_correct_qs.count() + + controller_validated_qs = interventions.filter(status='validated') + if user_teams and user_teams.exists() and not (user_role_names & {'admin', 'top_manager', 'manager'}): + controller_validated_qs = controller_validated_qs.filter( + Q(assigned_control_team_id__in=control_team_ids) | + Q(assigned_controller__user=request.user) + ) + controller_validated_count = controller_validated_qs.count() + # ========== Données widget external_interventions ========== user_company_ids = set() if user_config.company_id: @@ -801,6 +837,10 @@ def index(request): 'external_interventions_unfinished_count': external_interventions_unfinished_count, 'external_status_counts': external_status_counts, 'external_interventions_list': external_interventions_list, + 'controller_interventions_count': controller_interventions_count, + 'controller_interventions_list': controller_interventions_list, + 'controller_to_correct_count': controller_to_correct_count, + 'controller_validated_count': controller_validated_count, } # ── Logging de performance (désactivé) ──────────────────────────────── diff --git a/loko/interventions/admin.py b/loko/interventions/admin.py index 234932b..1d4401b 100644 --- a/loko/interventions/admin.py +++ b/loko/interventions/admin.py @@ -152,8 +152,8 @@ class InterventionSubTypeAdmin(admin.ModelAdmin): @admin.register(Intervention) class InterventionAdmin(admin.ModelAdmin): search_fields = ("code", "title") - list_filter = ("thematic", "type", "sub_type", "status", "maintain_type") - raw_id_fields = ("intervention_manager", "sub_type") + list_filter = ("thematic", "type", "sub_type", "status", "maintain_type", "assigned_control_team") + raw_id_fields = ("intervention_manager", "sub_type", "assigned_team", "assigned_member", "assigned_control_team", "assigned_controller") change_list_template = "admin/interventions/intervention_changelist.html" diff --git a/loko/interventions/locale/en/LC_MESSAGES/django.mo b/loko/interventions/locale/en/LC_MESSAGES/django.mo index 61d8a789afcfec5e8e68c1534b812bb0f0565035..e14ba9a5a27b6d34733691fc25fc279a6fb10464 100644 GIT binary patch delta 33189 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 Zw7p>izmqw)^S>gCEVsSmX}{Z1{s*@3Q}F-* diff --git a/loko/interventions/locale/en/LC_MESSAGES/django.po b/loko/interventions/locale/en/LC_MESSAGES/django.po index 4cc5a4d..75297c6 100644 --- a/loko/interventions/locale/en/LC_MESSAGES/django.po +++ b/loko/interventions/locale/en/LC_MESSAGES/django.po @@ -8112,3 +8112,28 @@ msgstr "You cannot modify this intervention." #~ msgid "Interventions suivies uniquement" #~ msgstr "Followed interventions only" + +#: interventions/models.py:522 +msgid "Équipe de contrôle assignée" +msgstr "Assigned control team" + +#: interventions/models.py:523 +msgid "Équipe chargée du contrôle et de la validation des postes de l'intervention." +msgstr "Team in charge of checking and validating the intervention posts." + +#: interventions/models.py:531 +msgid "Contrôleur assigné" +msgstr "Assigned controller" + +#: interventions/models.py:532 +msgid "Membre de l'équipe de contrôle en charge de la vérification." +msgstr "Control team member in charge of verification." + +#: interventions/templates/interventions/detail/card_info.html:952 +msgid "Contrôle :" +msgstr "Control:" + +#: interventions/views/general.py:1007 +msgid "Équipe de contrôle" +msgstr "Control team" + diff --git a/loko/interventions/locale/fr/LC_MESSAGES/django.mo b/loko/interventions/locale/fr/LC_MESSAGES/django.mo index 3901836f6b34caef0f2be54cd8c4da2ad3dfb3bf..8ece14c6d976580ae63c1059ae1574ff6848c32c 100644 GIT binary patch delta 34099 zcmd7bWpq_n1Md5k-~j>zC&)%ZAV>%roKUQ|LvVL@XvxBhQ>?fYcXx`rySoH zfg&WV#V+^)Q()s^j^mGgP!)bd56;0*+>LSZ75d?48;|vyNl$D|hjGZyhS4w|rp1Do zhUYtV38;Zy7!wB~6W|QTSU4UvqG^~JS7B1TfC=#_{*0ed^~(%*oE%sQW8p8T@`F(` zG!0APF)YUOorEJy!7A1|Scvq-s0U8RG`PpcZ(&B_F-JO1Rt!Nss3z(`4Nx=K4FhqM zjW5Ok;=3_EocPIF z%?zbQJtq`{unekPhtbS`3<6Ok6vQE@p6x_GJdPUKCDb0cg?iw7o1SotnW+@04%R^B zw?YlX#RNDBOQsfe->~Q9ZwI3;ctck#FdW1%EdU7D1J7giUY+ z_QEHqP1SU~>F^>{M^>O7coEg!ZOn(MCUBI|tx6yrfgu=y3otJ}M1KsNXpUP5<|1AX z-{&P8q7b(jN>+xREUPdv#VWsVss5jvu zbhS3eY{FI42yS8^zCjQA&oT{#qDEW_)zM~{8vA1noQ^t0FHpPtUsOlFVRDQy+q@6b zpday^vzdSOtRM+`a7EOnYJ$nIFKVrS$GA8T)zB&|j0aIu>^sLiI1KXsElG@IreYM1-XGrPDjs=;zt5~Hv(?m;a)QpwE+Smwn8a84Dbng*RgQ1JfIWCEM^VLPpr!y2a^^-9M{)yT%i!mu~ zLJuCd`Oi^H_SPC>iCOdH7@hPisJ)c~>8R`cOh6-Rgq5%Z>cz3m6mT9`KVeML6D&0i zB*WOmbE7&~7&WzJZGIEfO#F(Pf$`R*s1EMIR676X2&m!p@ z+VxQwg41mJe(O^VCOu%et%rIO*1>RWfpKsaYRML3BA)N;B%mIiMosA>EQ()IQ&nVz z+1+(f9cqGVxIe1Fk*EeIVJuvZ8o+wg(q6XdPtm(HsCqG0GXHT2Bp{$o7Kj>IAyh|N z+Vo#gQ#l>A1glXqu?e-NXV4EXqL$>2^$B_(h#t~otTGSIj6uY6tz!PwU~QYw5cS}} zs0U6%jcgTai4NHKO-w`lAJmK_UTw~MF4V|Np=Pu#YUu`IIb4Ee@il6O3$9`Q^AqU3 z#*APUYGhk651z*y7<(-z0`sFrJPtLrlQ2Fm#zeRg{qYcLW-p>%M0Zi`{)>q)(K<80 zj4lB+5RMvQ8B_y}QB&E;+S{fNKs7kd#^ z*FQq-xi^?V=l>%CH5g};d2k?VB-v377qIcNsEXB59gIY6u6C%AjYrMIB20!GP#rpk z9=wcNqK}v!lWpb{==_HhP{l@=6g!|c&mh!Z7>gBg7V6kML5)1&7W2YMf$DGx)F!Kd zdQdCWhzDZ|9Ao2)Q03R4tA@4{&$DyWdiH#pc?Tve= zUHuHTRNv71LfdY3eITm6P}EEm!f-5wTDtz*nSYI70SSq51!^zsMx~#{~< z`d_AlX;As$)~cxbZBXUJFnCxPcncOU!`ZFdJsr zVWz$^W+y%bJ-8P0<5|>$#+BlRxx8Bhk(lHL{b z;P0r4`_Y3hP#sLL+muUZErwdEhBoe^mSi@j!eyud9zbT!buJO`knj?4=X(9kZ3F2W`VJJc!yOA222Q>^1EKVrt@LFt*Nrb8moShib5= zEil=puR|@-cGQUXqB?RGwYGnw>b=Aam|&kNpBweyf~bMjK+Ql~?1)1!0nc~d5Ku$D z`%MKu)UM8i$*=%wCMu)KMWRN~6xDDPYI9A(Xt>a(FGU^aU6=_^qBi+k)J(-X!2Bza zn1J>`I*fxwtz}W?x*BT4jZu4`2kODIQJZZ8=Ef7Ka?U~XT`?)DLxHG{q{BeWi9uNY zAoH&&=|X}=Jjyy7GZJ5mTH6b#hVP;t{2pUq{6l6$iBatYqw-6l9#9u`Jfl$c|3D3N zIclIs4l)1g**Ow?@h)n_4^TaSi`uR4F*C+FY}Pmz)+b&AE8%LafL~Bc_VW=_t_kKO zJ{W^>9creoVkpLUkDA?I6gA>TSQrOkB<{rWnBtges5urTJ^?kN)2IhNK#lA(YDrQZ zHzUu3afw$zKdgf)-wflS+n0cL=`c)>b8W_6REJKXruHprD*aFJL4%o59chi4nT4na zA4j$K05#%os0Rk0H0j0AL%c4sRIbyPKmiiQVM9EG+9W}z%u+<48mNN$tY~GOf}z9@ zqjvWP)QqG#ZT3KJRL9FMHZ^ zA#j!iZN9gtc+zX;dwPB>MLY`C&_2`%Utl3De%<_3+Yhr5KZCLH3#ubAZ}3GFb74U| zjfK(grr8^1ZZiDTBs3*Kn=A^`;bg3Z8?ge$y=9i94(c600*m4bEQ3!l62oqr@}sag z@k^Krli%SRFy=-r-7_qP`P{o^v-Q9*62@Y7+>H_V9CeIB@0mAR9n49*Kc>YMm;sMr zdVGQPFyVc^)L?tm+9!NqHengm47ETVXSbsb3`M;tW?^((ivG9?)8P(`k2g>=^%OO8 zz7NeQNQa7tqw;H^*17}c#hDln&!EcP!~mWD{|IP`{Qou&$clPk0ZfW@Fb;Oal-S$G z$6IHhMzYZ6??83nl1+bsJjjXp$aFL%ssp*bahDehf&3)2L2arzm;kS$I`9NDq4U^m zsvy+4u7YZ~De8eeP~}HqEc_Ew;8Kiz7U%iSTLSuA&hx}^24Gp#S{_C{ z=n1NU&!`5XJv9v{MlDfxRC;05%vHc(Y>#SpB5Fw&V?tbk8F2@?nuu38HxVfY{Gb`frUJ0{nHRALP9*O zhw5o-8}EP`L0{BVj=>;Ygc|vAEREMt?WBKUPDOEyM!XT~bTq@vI21LLE6^X;zhM5g zc6&+C+Filo_|g^#eQ6phhMJj@)(Yq$UK2G#JyA0`4AtTJsF~V~>c}b71J7Z6yo+)1 zm1{FTqoz3SD>D;8sDims6-(IkDyR`Our^1{SUc2|cE&&)h%s;$YH8-99=HkB-d>yT zo*|$f-$%VrKA>hI`D?RwIna-IbyUTMsD?VA8t#LtKMJ)3b1)I^zyx>-6XGrOj@bGc zeRck0zcF9E;-U)pqehSl3t)b1ik+}3o<=<|{aaH$AL_J3V0mngxp5Vi!#k(}guF8y z%!gTs*T7^v-}#k*rhX!Z;!0FUZlI3IW7Jy4|HpnYu|}X~tRZTozhY7xjoR(=Q1zFg z_P|M0xwEL5yeoOW^O}Ix+WFV4y+5jfKvc&vVqz?cTI*`425X~USoKhwb~38m1yqM0 zqmHM~dlOHMNr>mgWcV|>+SN@6Xv*4R9-N8l>1kBK+gK3aqc&gI2eY}tF*)&KsB>N$ z)y^+AeHE%h2T}E}VgXF@(R?OU{K))=kuZ=1^=v(+#KV{r@1l0`2h^VUiUFAFlUd6g zs18-I@#?5{x}Z8X6xD%Qm=f2b27CJ=S{8c8eEgXf@TWGUvvov5jOj+&up-%N)BF)i_;SQHx|19P3}1oUaO7FF>I zs^Uw`im@CY?*qe7@ph>ENvLzY0yPsCP#t-MY48h%VxW(Ycg-uHW~3&n2Fn#&ozF)q&fn2Yov~UP)oG}J$MdP{~hXq z>0+4&2BSI>f!ZV0Q0=s^@n2)ProuQ9G__MuGx8Ve9G^xl%^g(5PpF0hVw;Wzq1L(t zY7@6Zy$>d!Mm!bO;dQ9@z$wg+G2)m37I6va!9Sx$)Co1^lTlMN7qym4Q61Qb>d*<) zOg%(($j8sed;XK4%4bA9Fch^%TB7O=#IiWu#@)LF^n&>hHH86jeY`(_6h%Ft9co5~ zqV~izo4ys*;Ca-pevX4MaXd4!KTz+H`KS)9MU~%y8rVf-CS2zhfp8L%#Wzz{1*;Hm zi<+vfSO#CAW}tw-S+Xjqk=4PD*d43m9gM`h34FXiJB~%QcMf&hGA8u#{&SuA*iH!C|N+ zTaEfm*k?V9IvsaVoAfcds`!$CcDqkd(cQxD`8K?X;%eK2!&_+X8i>N8~^_co`Q3J|=di9n>b*wsS0PWF(gOPf!v%qGoGzrcD zR7Xyt8hU_wfy78}UMz`Fn=dUYJ(D$;wFv4#tmdZX6jpF z8lLYAB%p@ppen9H9kcT`{W_|Fr>M>9pUFHh1!@L@P-`1zt%&MyYxEvZRJ{eLC0&JD z;`Qii1P2Icjjo~A_?;~fJIHh_l{G7>BjKoq>svda>J7x|I2pABk5B`1GMf%3K*dvA zvt{P|>jhJYgivgQn%b$TXK~FJjB_NYV1leBUJNxO{m_FGu^Mhby`W--nEWiLH(vy5DaxT{ zpeE{6EJmH4HK1 z0pjyfOL+}TVL&0yzt*@80Uej|SROB78O%`FJfJP=fs0Y)KVTT+a>t-LG67@ZGSvHFolC%nz;;xH9jKA*K~+47G4LE} z1XobI{3U8P`<65f#zU1)g33>c%Fm9PiTtQj5`mi0dZ-tcJCuMPINmxNRbe^m&9(`3 zTy~&(ejU}&eH;IRI)*WRGM{S6QSm%j1xuq|<&#nEEJHo`2=Za)Iu{7&eE)}J(%xFrT7bRD$` z|3Q_HUdhMtU~1InEs9!#j_7Kw``Uyd*59o&QJZK9YICkbt>Grr%v?a#e~a2HUs1a{ zMrE^C{80l+hM6&&jaNr4S?kK2|DOr;Awdo7MZGeQpf=lk)UN-AI(|v3m^W8h)EjOz zs@yT_In*2Q8tQ?`s+x`#MaAo5MjV7$aZy#yzZy7Af*y1kHH9xwYaFYZiDyJ@wj!t( zP8HM(ry*)@^gxYtENU~)N6pk`RK1Jn!N*p=>ZaXnE`eY&N}-NT2h@Y3P*XG=^`Pa* zadGyd$~{887e1jjuT#TxtPpBR%Ap2U1GNY0qXyR9rjJI=lsk!ldU(nfxQiOef2iG@ zu%_7q9%~4yd|uQ@%c34sAJx(3sMF97)xpI!eI;s%_oLo7$FPCU|78MNn|!s*nl!-l z#D`%ET!N|)zqT>kBM$AjRCF=N1M;*7NmpwRh4rFq<|ET^+XyHlZ)(Cq5A)@F*%jUPH5c3!yqtA9aj|VjEnF^)aB4`EJ+= z+Y!Hm?XhBGa}2kjPRm6bf7O`tUz!B}CT26$M6FdD%!wmWFPg2WQ*sG)tiGY9Hf>Wg zbCod_@#feUqfkrw0mHFqGxM#u7b<-Y>J50m8RuWS@)Zf{*?ZI;NYvakoE){=v!lut zN4*Klpq8e*jYpzRLqpW@?TQ{8gId~EsDbQ5b@UGE!|t<7pay}IEzB|Mh}zvfQ5}gw zt>qBZ`(P&e;Yw7;wxAw-40Q@_p^o7P)LJKKX-1kJ)lLr7UMP*4VRs+_o!>R6-Mt0X z;0v4X+seoL&vN|mGU;vbK1Q@Qn=W%3vuCQKcKHa@Cf?+}*6FIX8%v^7gG&geSl z38-MocBX+UsI?w|ddDw8ZN|S*Bh1>~Ole8flGQk9|h(zyFKT#Y}A?RDlpw17%P%P~X}e)xlAyT|5i5BwJ8ZdszKQLp0GsI~2i>d0_Z z2dAT^bR8DO!>ED8>~1!922{HtsLfdx)n3i+oPRag$QJC08bN>5+Rn4-8_~NosEVgh zYkLK?S01277QKh*NGK}3G-@VWpq8L7Y9cOv2 zyZjTXK~GN;4@S*ECDa3(qXyOowM64=d-kqyQ?I2(0Z&SG73`j`<%qGq-cvS(bUD*=tvMIDdvsHvTc z>evcY!@E)CuAxTw9JT3u` zP;1y0^&#V;Mlu*xVKnMNf1>unF;vGcpw{#e>U|OOS5q%J>cJjNhvBFhtcx08J9PD? z>PA4vVvx-khx+O?1--`$^}uzgP4^e7-ab@==THxRfEviZHs7bei6=tUON}a*5w*AS z_UHU-Wc5kVT6RJ0+9*_qCZh-Ep_XVLrpMc;Q{WqA>SaOATz=G)S48cFx>ylgqsnhU zjr=MGO<-_ z>V@#-zdcd#|EK z_6~JA(v2|rMXaS!4OT|wce3fDP)jrkHR2hljx0wl?d}nre^oq8g4XI0szTh6=D`7| zk!45CKuPR~4N(mqLp5{_)zN#XUHt{Mc@vH@BMwHD%Z=(_Aym6{MsXfBWgSV-D>uq! z3__jfsi;rI#i(6=95qw7tuE_sSOy4f1?MJk2fO@$HK%LU?fh(^7sbT zPSFYGi%SR8j4VU%=l?DO8renEn!H1eJpM$p)&Dt^qHt7 zSc;n26R7qcVF`35nT|wYW}SbRfF8UE)!;7Fh_9d?=rh@*r$7(!+^Dszfd#NFHpD+s zd*mBxDFXj6^|PWrD@s_qqGoU&y4u}m31~{*qZ*Dk#q>M_79w8M+6M~~Uyqv7=a?5$ zPc>^@4K;w~sP_7!Hs=J?DO-p-1)ERjrrIG_n`)oce;6jMPg;*qc96z#nKpUhWRr4GqU-d2{Y{H@of^Sl8|hskM}>F zXpQ}eU%`A>XO^ir25S<(h+4XAv(2aCa?~60K5A+c%rXB)q&P+pUxXUKBh<{rnrk*| zewRQF61t(LW-e;;97Q$w0*hhFKTX4RQTfBsgDX&*?}UxN#InQ_&NDw|*G0863pK#Q zs3lD~-~3SP)+CUPgypDr{v}jLZsQ#ETVU3F8R~f5N9}6QLh~vujM}7iQA^SpYvDN5 zv3`L1ObJ_Lj&*Y^N_-fW(fQv`Ad-Z*i%o@=Se*D;)Pr8*R*bjAEWtt4j3iiUHd|%X z1KMDAoQ|6EL#R^}XPJGWp{BkLYAJ?c1})-30-D0ZSP!4z0xZ4Uto;+zCiJW@GgJ(9 zp37PrqdpUQV{{yh{x}>pBU4bvaWiVB4xm1Su44+G?|ifg0V_>`P}C+WgF0TlP%oV2 zsES)q$La!Vh903F5N(xtU?S8p4nw`F%c72DH5+el?TM~N;@SdJP(56WNiG{E)>Nsyebznd0SYAc#sc)!bopp_Ax9}RyzaChb1XXB>vG5nv z0|%qN56nb0JRdcZ^{72^0`(~tf31%*0MnzEavthI`%(2TqUzs3wfh{kL^0R7CL`%O zGj&0zO;Z}xa7Wad4n)1dhM|t%6x2*?M=i}|)aiME8psP&`RMCShm)daG!&Iy7PWMB zT>_fo?$%+bO*0KObz4z0auc-)A6lbtF!2ni4wOK3w33ZiM-8AcYQ)`9AM2x0BVUJl zBf5JCsNq-}&9Ml=Xv9mQKCjE6KEK;iO?@8> z#R;g6?nRxFlc=S9gX);yU&hR+87ujh{rqoAf~Kx3YPbJ}YG52{53EPc$Y#`39Z3SY^zE15q8_h$?pg3*vRu=1aEA?5#AY=VWvVXtNYXHPpmrOhom3IjVtO zs5SkF`b-GhZ9er{p~_7~EyW7dOddpS;_IlXzl+**Ur~E4(H_$wHw_M!XvJfGw!0KZ)8y*HJU}6}1Oa?lqe?2=zkCk7~a*s{Qsz2VG|{0j>22 z)NWsinvtED5AR_(rrc-NwmRy8^-!nfSJeAsEb76_QSEI;Ex|R+jBjjy%Kc_0f-sIg z|HBD*&nK$kYN%b`9W}xz)S8Y)J#Z#!EmxstXd~vpBdGH4F&oA>U^*0r+MGpE11XRC zSRRZ?bpFQ>$cgh%Q+ozAMSr6@^bK`f(jPQmol2la7KQq-nvANq16A)F>f`n)>VZiQ znRsPXejn5^{vBOyime2+HpfwW;STCNe?zT#=wUM>;i#VfgxXw{YTrf6x8vXW8+&KJl6h-ZkN~ngK z*mxgQ`BA8;orpROTTsXNIBIEbpz8gLYRCVS>1cXnle$h30@}r`P@8HjYQ&RJJzj-+ z4;;h%=yTePFdX&Z(x?%&LrwX3)C|o;E#*Q~2iBrGbObe1cQHWc{|f<~|Ac2ug>;}JH>epXc)=`LHPpZ& z(d|f}CxPmC4YM0G_Ik5xl5MOr149NGY z`7bAiq6YW~TVeZa=HvM6HO{|AbcuwRc-#6nY7e|Xy#ZriH=8j8_2MXm9;}P1*B7-{ z2B6*>v#qiuSBiYA#9DeP;bVvx6Ed% zh8k%bR0oElMmz;IQ!8!yDfAG(gBpPUA~!y~W_E=0Xa{qLG%nh~`msb9q zKn+Cy+l(j>_3AB*>R1KT2wI>Ae?=|LEStW_#&@FHIfR;-o2d84SJW2}zei^CB}b*F zLGR!HXSE6WP!EbgO=TqNxU@s<+TT$f`vWz?MW`iPj(Sg=wCQOdn+Ie>-tkT->NG{7 z*1ipDCVD;Q{Htf9Nzf*mhI-%%RQg%e18!k`^nGHcz7gs@&=1w{R8+misAG1*re8qS zzmM9iv7VZC6QO1x?NisRZ3qckJxN@u=fA z2RUBO2K0W_LVYX#gnH4XePKT2+_D7ps_c(CHruc?-ocz0{L*}bsg2sT!%-dFfQ9im zs$A?>_6rAUM!KU1M`JZyiF!eOv-#;?dtZF6Q;2}pA_6r7l~B8TF6#I!MQyqbm<#t~ zZv4lZ<&9aA`lwCY5!Hbx)Lxi^n&CO9H|%u{x1;F$eg!kYO-TqqO~wPjzmrM zW(>y%m?ud$}if2My;fxf7U|cqfonhwe>9OtJyyofvG;3&D#LG6K{_iz^zZ5 z|C$8+|1Nv)U?&}>v8Pqu*i$!r0 zYKGpS_Z-LY_3oLnsB*ng_2*y+UdLz{E2gjay$~1mKJlRTgqwqaJ~Rs3jOwV((-?Km z+oATtAe%lF^`QBvH9ltJuTX26B9^cB)Re`1#CxDdybQIuucP)@yx6`vb*>XaAT-SOP~|tFMz#%A?-0hoC^dkYYV-+lhdY6wyH8daf;Jv6%yOXH%{SGyQvE!PV3bGbOz42|C$&Vua8D`{W(9Ut<+wpJWx{C3j;@nS(@8(`vmXQV$M z{{Xjk=T`C$lkQ$n!Vgy>;xTL^xsV@loO;|>Dbot|iFj8XL=n6j?(t4&bidK%&Tf%n>kiwKRTl6JqYzsOIiv&D6py9aeoBkvyX zRgpih5Kc;+B=(_?8BkZ!%G2IT%AX)Uh;Se7w>tkDY{5BH);WFqf6Pct@_(^ur3oLS z%xbLnL%EMMoQ1Tq+%ahQ$7?Kkm+3$@^3qZ#T=j?#z%ed~x~fyCfNgLw&g5Roy@GUI zUk%J7I>#wHo^V~8xtn@3?BJ9XPF^J&uS?kmc~IPWKCnr-YJ@f?(!%w3y1G55cwaVLuK5pG?R zsq+pW;A(74{Ty2V$|TI+1w*3JKx5Yc8-TMu=RIP zwu=(E*4Q#@$=m!x`6%0d9i4w&pD6I&_Bt+&=_A?4?)1r|A0R&ouCo<`2_K}~7aUF5 zaQpDjYK-d)dEcMcpS`7iR3O2AMirI%Ndh&0fEr6h z*}mK-DPNjfAJbLwFYJgJxc8CYje7uTx{BNSDag~c8l#i{hH!eV{|FMsQ)m(o=KG{m z$yQi^ZMolbujcMWhZft;^|Ot6TjY;-~rb z_>Wg29&nvo*K_LdGl$cOGE0cxu<6Px&ppM)r&8uW%JhrQ{D+cJmOD2Oak>4-{KFOu zA>4*WdsDdT4~wyA<@6P;n~f{28TDp!U#G3_*DCT`QeXSe8EzZ? z%N98D!-MYHw0tVem7Kidgim1y9`=Ut6&hjGuHaNXWTWA};N13K{us!jnHq91u_K>G5oO>T- z?(xvhw#*2^rAXVQ|NX6WHnA!XEkWT3;#)A70v+)+@yS%sb%``xO)xGG=t!OTbpE_; zV<&kJ$a_!uICfCp3j9%)^rMtZY|93DJIMS;+MdRu(nK2ke)-z)ZJTh1il=BKHsvaj z*3foJ*~5PbE54962XVjpp}na#yqvNnZ6^Zt`G3xKKtJW2CgX^WtD&dl$0BV6mHFA! zc}m_L{0l3R7fhK|CO zG*FVfYQ(2-C#LWtDxN0qGWSa2=dlCj_^I02O5S7JR$S6sD~vVBYfeztaD)B4}%z(`hsmW|b#j}{{hxDO5Kvx$UKFocL{Jz|?D0_zZNj!zUD0d5Wm8O$Jxi^q@ zmv|6mbosG2_@#;SQ#96pD20FKE@CV3)0Fr6&w9s1on=%QPdI=E7g4qb`FRPynpsSvhi&CF5>_2;8?`B+q5)TfwW{U1)r-1*Jm1-fwxFIKzOiia2OBjM|x!{O~QUu z+{FEk^jXB?GMa&uCCPjJ!=Ke?L)SFY2Vz&^h3&(qTj!wLj6bT_nga<(qp^9!_1ln# zJm3Q1DpcNRE2+^i?tG*d;U2)P>jnA0*)oHOhf}BL4|Q4)A47XvNULh=9FNBN|C>Zz zuMFNlOVR5gHhmfu6BAFyeUxw-?#mh#=BJ?tg!PMue=#lbDBJh~9@K~Qw3G|AX%`4j zvEkO_ozwcyC9xa#8Y*1me#qT}hyP1~Zrr)a3*uf*xFUJF&XWI)2R5^fDeW6+1u6HB zEfb%-WOfiq?aL@W`T7Yr9(PRAUh4e+N`&8>^S|TAnsW!zu&%5$G=K(L-~{5CZF(d& zA)br8Io#>F&l7)3dZ2xHH`1n(Hkx)D6E4X8(AGam`c2}x+{;w>#+{9V4@qcF2jWn$ zDDf=B$J+)~_!{YjxZhD`ANNqolp{VKU(jHC%J6Gr@0E@}Z<6}*~msJ9;WfKRH#51UD0s#4~0{a zf1UJd_yv8)t4_TI+y(4|ij%gK{AM=ZfpV>B=O4;+MaIuM+eY`>2jy0xy=vIB&em*{ z-Du0lq2c+IYxlh{rsY9nu@B{6{E&X0^m5eei@$S^p#!gU{@arHf&^Vj3FjpogzYGh zkRx&h)6>{p?)s#^!3NK*AB_=$iPtcVagwRli@IsO}-siL~i>mnQpim!Y}o_EF!sn*wFAAM)+?z;yN?HPTP$$B#sNaS3QG_e0jBUf8GQZloWI5L; z=Z+z>H1|R7OC&Dhq1VaqQ1Sc4U+#E+U9ETy@+(tzD)#2yOIX)O?%On;g0xkHTig1_ zG#JtwaM$GCMgC{*l+>%OGx3Fj!$??0!R{1@Afr3sK7@6}=8j33L6p%olKdUq>nWq_ z73H>ZM-FzydFvo8g2^1#D3-kLmJXNkY2 zVs>=~b8$Zez;| zQfWQ6uCAnQ<83!fjb^|^B?LdeGzq*QKm3vwjETuuEo^v zuiuH}A~TH4FC^3=JQL%wlXsKWga)q@Pi!myNn`b>ybt@?hrh&Zlu2Ua?Ff&j{89Aa zaN4+wCAjaCHkfDVT1xph(JJuI%g9JbhOSgRSXU(~UBMLG{OywyjWW+k+fTS4Wv|jm zL-LXkE>B(t^8WO`PY)5(m4%!S*n%2M2|uAmB=>(RNnBTH@*;2v>WabBH&7;&_%M8I z)3r!#sh5nl-*OisFMu``kS1>qrBj=b!)VU;;Y zI0ucNB77QkwIMAN<^Q1k63RcZ<+qYQnY3T=SITXs%x?01h|l6KtiNOUiGZ${Wag&u zN(vmOfpjX2)kxDdob=t;*p^q?e8Q!$0eLIzLkm)`sWR;~fV`%pW#n#1cqI2{>czr~ z`i_~MNHV5!6AwB=_%<2Aq`xMtD}=k04SN&#BNcaj(iY<$%6BCEkL`fUe51ZUZTgWO zn>!wDZzL^0?pFb>5aR9{{`h{4qMdx^A?6tX9sCx$bU)NFNA;5cgzGNR3PCXmABwnGHT)9 zR47hZS3>S--jMkt59xWxUq*B#^%`;Ox{sZ>Lu}lnvfBw9rA}tjyU}(5>L$Vo`aDf- zd#u9IiGQGA64vg=D-rS2R4Pc>Ei@9Fa#wA=Wt8_PuLSXnw$gm!y|}YePFIm1I#i!@ zT`5Ro{Qv9fP4GI6WhLVp;h$-+iLF?~RvJNkF=bNGu%4fe^t!~ebL%=l{w?l4#EViO zBjN8~8kC>UwzI=%o_~je9vZAp;dF%O5&lG2R}TudB>crbAU%E{|Dc}EwGFS?MiuWz zo~|2sh5IA<-%OJC&+eo(Bh-O**6RDzOd1cMfrBJYrEnG7Kp<28GkLQ~d&I44E#=Nq zaR~A0n1V8UNiR(J;t!or+05K$xc6|Mqs`frdBDAvHn)>DiE!5M^FNKmze&h}6V*74 zwV==z(xRyRGx5R1zY-54KRI_!(&tfr5BDd+6Uo!noOn-6PUm#hp{@`2_v;q|!ztgJ zHoVWT{6l63Dkq`9BMQ`~!90XR2=_;SDnwI0<>zpBxAmgPYed<^Jg_t2UkQ(;Y+>r9 zr%XA*d#RV#majqnBI1qoJLXPg#v$Vm)U}>WU)%HJ!~-d)>jwF`$tz^bnN*G@`Ri@N zS;_y6Th{{o6IYQROhy6JPSqp5iQfNv$f!+15eoaF(yH4B zf1uDaDzCv3Zl5*=>P2Oe7M4G5`k@VPfb`fN7@l8CnfxX^whS|+BEc)v`4rL{cL(n!n>&RFJ&K- z_mX=D|Bpfg*N6BNn(|9GpFshgdUV^jp+n1_-8@aZcW>Le)4rvfKXvmN6@UHQZF_PS zXwlNsA$Z@?u07j!Y3U)-yt6IuY1zrsyiL>KfacjNyt@qdn_CE1(#H#%3MZ7y5Jr+D`N_c1pp^8aPHg(Cm|G1C75Sq%5i delta 33617 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 BHIo1U diff --git a/loko/interventions/locale/fr/LC_MESSAGES/django.po b/loko/interventions/locale/fr/LC_MESSAGES/django.po index f4b9333..365e51d 100644 --- a/loko/interventions/locale/fr/LC_MESSAGES/django.po +++ b/loko/interventions/locale/fr/LC_MESSAGES/django.po @@ -8219,3 +8219,28 @@ msgstr "Vous suivez maintenant cette intervention." #~ msgid "Interventions suivies uniquement" #~ msgstr "Interventions suivies uniquement" + +#: interventions/models.py:522 +msgid "Équipe de contrôle assignée" +msgstr "Équipe de contrôle assignée" + +#: interventions/models.py:523 +msgid "Équipe chargée du contrôle et de la validation des postes de l'intervention." +msgstr "Équipe chargée du contrôle et de la validation des postes de l'intervention." + +#: interventions/models.py:531 +msgid "Contrôleur assigné" +msgstr "Contrôleur assigné" + +#: interventions/models.py:532 +msgid "Membre de l'équipe de contrôle en charge de la vérification." +msgstr "Membre de l'équipe de contrôle en charge de la vérification." + +#: interventions/templates/interventions/detail/card_info.html:952 +msgid "Contrôle :" +msgstr "Contrôle :" + +#: interventions/views/general.py:1007 +msgid "Équipe de contrôle" +msgstr "Équipe de contrôle" + diff --git a/loko/interventions/locale/nl/LC_MESSAGES/django.mo b/loko/interventions/locale/nl/LC_MESSAGES/django.mo index 72f4f90b89785fb2a9234bbd2c9c95aa821f0ca3..7a7f1a940b49b4e7c38f7d8a1dbe342f7d576603 100644 GIT binary patch delta 33223 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 bgJZptXU*%1?wX$C`X3$Jaqv&CDlz{LWtCLB delta 32704 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�O4 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 MzU9k3uX5i153$v>>i_@% diff --git a/loko/interventions/locale/nl/LC_MESSAGES/django.po b/loko/interventions/locale/nl/LC_MESSAGES/django.po index 1a7ac81..9e26ef7 100644 --- a/loko/interventions/locale/nl/LC_MESSAGES/django.po +++ b/loko/interventions/locale/nl/LC_MESSAGES/django.po @@ -8153,3 +8153,28 @@ msgstr "U hebt geen toestemming om deze interventie te wijzigen." #~ msgid "Interventions suivies uniquement" #~ msgstr "Enkel gevolgde interventies" + +#: interventions/models.py:522 +msgid "Équipe de contrôle assignée" +msgstr "Toegewezen controleteam" + +#: interventions/models.py:523 +msgid "Équipe chargée du contrôle et de la validation des postes de l'intervention." +msgstr "Team belast met de controle en validatie van de posten van de interventie." + +#: interventions/models.py:531 +msgid "Contrôleur assigné" +msgstr "Toegewezen controleur" + +#: interventions/models.py:532 +msgid "Membre de l'équipe de contrôle en charge de la vérification." +msgstr "Lid van het controleteam belast met de controle." + +#: interventions/templates/interventions/detail/card_info.html:952 +msgid "Contrôle :" +msgstr "Controle:" + +#: interventions/views/general.py:1007 +msgid "Équipe de contrôle" +msgstr "Controleteam" + diff --git a/loko/interventions/migrations/0013_intervention_assigned_control_team_and_more.py b/loko/interventions/migrations/0013_intervention_assigned_control_team_and_more.py new file mode 100644 index 0000000..a1d6753 --- /dev/null +++ b/loko/interventions/migrations/0013_intervention_assigned_control_team_and_more.py @@ -0,0 +1,25 @@ +# Generated by Django 6.0.7 on 2026-09-19 11:56 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contracts', '0009_contract_auto_assign_control_team'), + ('interventions', '0012_interventionsubtype_concerned_categories_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='intervention', + name='assigned_control_team', + field=models.ForeignKey(blank=True, help_text="Équipe chargée du contrôle et de la validation des postes de l'intervention.", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='controlled_interventions', to='contracts.companyteam', verbose_name='Équipe de contrôle assignée'), + ), + migrations.AddField( + model_name='intervention', + name='assigned_controller', + field=models.ForeignKey(blank=True, help_text="Membre de l'équipe de contrôle en charge de la vérification.", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='controlled_interventions', to='contracts.companymember', verbose_name='Contrôleur assigné'), + ), + ] diff --git a/loko/interventions/models.py b/loko/interventions/models.py index 7e21850..e4bd436 100644 --- a/loko/interventions/models.py +++ b/loko/interventions/models.py @@ -514,6 +514,24 @@ class Intervention(models.Model): assigned_provider = models.ForeignKey(Company, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_interventions") assigned_team = models.ForeignKey(CompanyTeam, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_interventions") assigned_member = models.ForeignKey(CompanyMember, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_interventions") + assigned_control_team = models.ForeignKey( + CompanyTeam, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="controlled_interventions", + verbose_name=_("Équipe de contrôle assignée"), + help_text=_("Équipe chargée du contrôle et de la validation des postes de l'intervention.") + ) + assigned_controller = models.ForeignKey( + CompanyMember, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="controlled_interventions", + verbose_name=_("Contrôleur assigné"), + help_text=_("Membre de l'équipe de contrôle en charge de la vérification.") + ) osiris = models.IntegerField(null=True, blank=True) linked_folder = models.CharField(max_length=1024, null=True, blank=True) intervention_sheet = models.FileField(upload_to=intervention_sheet_upload_path, storage=private_storage, null=True, blank=True) @@ -634,6 +652,26 @@ class Intervention(models.Model): user_config = UserConfig.objects.filter(user_id=self.created_by_id).first() if user_config and not user_config.is_intern: self.created_by_provider = True + + # Attribution automatique de l'équipe de contrôle pour les interventions correctives Structures + if ( + self.maintain_type == 'corrective' + and self.thematic and getattr(self.thematic, 'code', None) == 'structures' + and self.contract and getattr(self.contract, 'auto_assign_control_team', False) + and not self.assigned_control_team_id + ): + try: + from interventions.services_control_assignment import resolve_control_team_and_member_for_intervention + ctrl_team, ctrl_member = resolve_control_team_and_member_for_intervention(self) + if ctrl_team: + self.assigned_control_team = ctrl_team + self.assigned_controller = ctrl_member + except Exception: + import logging + logging.getLogger(__name__).exception( + f"Error auto-assigning control team for intervention {self.code}" + ) + super().save(*args, **kwargs) # Sync daily assignments history diff --git a/loko/interventions/permissions.py b/loko/interventions/permissions.py index 2036e30..2ca7b03 100644 --- a/loko/interventions/permissions.py +++ b/loko/interventions/permissions.py @@ -312,8 +312,13 @@ def can_view_intervention(user, intervention): and intervention.assigned_member and intervention.assigned_member.teams.filter(id__in=company_member.teams.all()).exists() ) + is_assigned_to_control_team = bool( + intervention.assigned_control_team + and intervention.assigned_control_team in company_member.teams.all() + ) + is_assigned_controller = (intervention.assigned_controller == company_member) - if not (is_assigned_to_user or is_assigned_to_user_team or is_unrestricted_company or is_team_member_edit_allowed): + if not (is_assigned_to_user or is_assigned_to_user_team or is_unrestricted_company or is_team_member_edit_allowed or is_assigned_to_control_team or is_assigned_controller): return False contract = intervention.contract @@ -352,10 +357,16 @@ def can_view_intervention(user, intervention): can_view=True, ).exists() + # -- Accès contrôleur assigné / équipe de contrôle assignée -- + if company_member and ( + intervention.assigned_controller == company_member + or bool(intervention.assigned_control_team and intervention.assigned_control_team in company_member.teams.all()) + ): + return True + # -- Fallback prestataire assigné -- assigned_provider = intervention.assigned_provider if assigned_provider: - company_member = CompanyMember.objects.filter(user=user).prefetch_related('teams__company').first() if company_member: return company_member.teams.filter(company=assigned_provider).exists() @@ -405,7 +416,8 @@ def intervention_permission_required(view_func): def can_control_intervention(user, intervention): """ Vérifie si l'utilisateur peut contrôler (valider/corriger) l'intervention. - Réservé aux utilisateurs internes ayant le droit d'édition sur le statut courant. + Réservé aux utilisateurs internes ayant le droit d'édition sur le statut courant + ou membres de l'équipe de contrôle assignée / contrôleur assigné. """ if intervention.status not in ('processed', 'corrected'): return False @@ -418,6 +430,16 @@ def can_control_intervention(user, intervention): if not user_config.is_intern: return False + # Si l'utilisateur est le contrôleur assigné ou fait partie de l'équipe de contrôle assignée + from contracts.models import CompanyMember + company_member = CompanyMember.objects.filter(user=user).prefetch_related('teams').first() + if company_member: + if ( + intervention.assigned_controller == company_member + or (intervention.assigned_control_team and intervention.assigned_control_team in company_member.teams.all()) + ): + return True + return can_edit_intervention(user, intervention, user_config=user_config) @@ -716,13 +738,19 @@ def filter_viewable_interventions_for_user(user, limit_to_default_thematic=False company_q = ( Q(assigned_member=company_member) | Q(assigned_team__in=list(company_member.teams.all())) | - Q(contract__allow_team_members_edit=True, assigned_member__teams__in=list(company_member.teams.all())) + Q(contract__allow_team_members_edit=True, assigned_member__teams__in=list(company_member.teams.all())) | + Q(assigned_control_team__in=list(company_member.teams.all())) | + Q(assigned_controller=company_member) ) if unrestricted_companies: company_q |= Q(assigned_member__isnull=True, assigned_team__isnull=True, assigned_provider_id__in=unrestricted_companies) else: user_companies = company_member.teams.values_list('company_id', flat=True).distinct() - company_q = Q(assigned_provider_id__in=user_companies) + company_q = ( + Q(assigned_provider_id__in=user_companies) | + Q(assigned_control_team__in=list(company_member.teams.all())) | + Q(assigned_controller=company_member) + ) if user_config.limit_interventions_to_contracts: # Limiter aux contrats configurés pour cet utilisateur afin d'exclure @@ -761,7 +789,9 @@ def filter_viewable_interventions_for_user(user, limit_to_default_thematic=False assign_filter = ( Q(assigned_member=company_member) | Q(assigned_team__in=list(company_member.teams.all())) | - Q(contract__allow_team_members_edit=True, assigned_member__teams__in=list(company_member.teams.all())) + Q(contract__allow_team_members_edit=True, assigned_member__teams__in=list(company_member.teams.all())) | + Q(assigned_control_team__in=list(company_member.teams.all())) | + Q(assigned_controller=company_member) ) if unrestricted_companies: assign_filter |= Q(assigned_provider_id__in=unrestricted_companies) diff --git a/loko/interventions/services_control_assignment.py b/loko/interventions/services_control_assignment.py new file mode 100644 index 0000000..e81392f --- /dev/null +++ b/loko/interventions/services_control_assignment.py @@ -0,0 +1,154 @@ +import logging +from django.utils import timezone +from django.contrib.gis.geos import Point + +logger = logging.getLogger(__name__) + + +def resolve_control_team_and_member( + target_geom=None, + point=None, + scheduled_date=None, + thematic=None, + locations=None, +): + """ + Détermine l'équipe de contrôle (CompanyTeam) et le contrôleur (CompanyMember) : + 1. Équipes candidates gérant l'opération 'controls' (OPERATION_CONTROLS). + 2. Filtrage thématique si l'équipe restreint ses thématiques. + 3. Résolution spatiale si une géométrie est définie (cible et équipes) : + - team.geom.intersects(target_geom) ou team.geom.contains(point). + - Fallback sur toutes les équipes candidates si aucune géométrie n'est définie. + 4. Calendrier d'assignation à la date scheduled_date : + - Évalue le nombre d'agents planifiés et non absents. + - Si aucun agent n'est disponible ou aucune date : retourne (None, None). + - Sélectionne l'équipe ayant le plus d'agents disponibles. + - Sélectionne le premier membre disponible de cette équipe. + """ + from contracts.models import CompanyTeam, CompanyMember + from contracts.services_teams import get_teams_composition_for_period, get_member_absences_for_period + + teams_qs = CompanyTeam.objects.all().select_related('company') + candidate_teams = [t for t in teams_qs if t.handles_operation(CompanyTeam.OPERATION_CONTROLS)] + + if not candidate_teams: + return None, None + + # 1. Filtrage thématique + if thematic: + filtered_thematic = [ + t for t in candidate_teams + if not t.thematics.exists() or t.thematics.filter(id=thematic.id).exists() + ] + if filtered_thematic: + candidate_teams = filtered_thematic + + # 2. Résolution spatiale si géométrie définie + has_target_geom = bool(target_geom or point or locations) + teams_with_geom = [t for t in candidate_teams if t.geom is not None] + + if has_target_geom and teams_with_geom: + spatial_matches = [] + for team in teams_with_geom: + matched = False + if target_geom and team.geom: + try: + matched = team.geom.intersects(target_geom) + except Exception as e: + logger.debug(f"Error checking team {team.id} geom intersects: {e}") + + if not matched and point and team.geom: + try: + matched = team.geom.contains(point) + except Exception as e: + logger.debug(f"Error checking team {team.id} geom contains point: {e}") + + if not matched and locations and team.geom: + for loc in locations: + loc_geom = getattr(loc, 'geom', None) + if loc_geom: + try: + if team.geom.intersects(loc_geom): + matched = True + break + except Exception: + pass + + if matched: + spatial_matches.append(team) + + eligible_teams = spatial_matches + else: + # Fallback sans géométrie : toutes les équipes candidates + eligible_teams = candidate_teams + + if not eligible_teams: + return None, None + + # 3. Calendrier d'assignation + if not scheduled_date: + return None, None + + if hasattr(scheduled_date, 'date'): + target_d = scheduled_date.date() + else: + target_d = scheduled_date + + team_ids = {t.id for t in eligible_teams} + compositions = get_teams_composition_for_period(team_ids, target_d, target_d) + + all_member_ids = {m['id'] for m_list in compositions.values() for m in m_list} + absences = get_member_absences_for_period(all_member_ids, target_d, target_d) if all_member_ids else {} + + scored_teams = [] + for team in eligible_teams: + day_members = compositions.get((team.id, target_d), []) + available_members = [ + m for m in day_members + if (m['id'], target_d) not in absences + ] + scored_teams.append((len(available_members), team, available_members)) + + scored_teams.sort(key=lambda item: (-item[0], item[1].name)) + best_len, best_team, best_members = scored_teams[0] + + # Règle stricte : si aucun agent disponible ce jour-là, ne pas assigner + if best_len == 0 or not best_members: + return None, None + + best_member_id = best_members[0]['id'] + best_member = CompanyMember.objects.filter(id=best_member_id).first() + + return best_team, best_member + + +def resolve_control_team_and_member_for_intervention(intervention): + """ + Extrait la géométrie, la localisation et la date de l'intervention + puis appelle resolve_control_team_and_member. + """ + point = None + if intervention.lon and intervention.lat: + try: + p = Point(float(intervention.lon), float(intervention.lat), srid=4326) + p.transform(3812) + point = p + except Exception as e: + logger.debug(f"Error transforming intervention coordinates to 3812: {e}") + + target_date = ( + intervention.planned_begin_time + or intervention.begin_time + or intervention.creation_time + or timezone.now().date() + ) + + locs = list(intervention.locations.all()) if (intervention.pk and hasattr(intervention, 'locations')) else [] + + return resolve_control_team_and_member( + target_geom=intervention.geom, + point=point, + scheduled_date=target_date, + thematic=intervention.thematic, + locations=locs, + ) diff --git a/loko/interventions/templates/interventions/detail/card_info.html b/loko/interventions/templates/interventions/detail/card_info.html index 85a009e..b589146 100644 --- a/loko/interventions/templates/interventions/detail/card_info.html +++ b/loko/interventions/templates/interventions/detail/card_info.html @@ -946,6 +946,20 @@ ✓ + {% if intervention.assigned_control_team or intervention.assigned_controller %} +
+ + {% translate "Contrôle :" %} + + {% 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 }} + {% endif %} + +
+ {% endif %}