From 3d9e7c320213488e9a506da5d83f8362a051d24b Mon Sep 17 00:00:00 2001 From: kdeterme Date: Wed, 30 Sep 2026 18:49:19 +0200 Subject: [PATCH] feat(interventions): add combined filter for manager, controller and inspector with shortnames and teams --- .../locale/en/LC_MESSAGES/django.mo | Bin 124951 -> 125334 bytes .../locale/en/LC_MESSAGES/django.po | 24 +++ .../locale/fr/LC_MESSAGES/django.mo | Bin 140649 -> 141059 bytes .../locale/fr/LC_MESSAGES/django.po | 24 +++ .../locale/nl/LC_MESSAGES/django.mo | Bin 130580 -> 130972 bytes .../locale/nl/LC_MESSAGES/django.po | 24 +++ .../interventions/interventions_index.js | 203 +++++++++++++----- .../interventions/interventions_index.html | 55 +++-- loko/interventions/tests/test_general.py | 192 +++++++++++++++++ loko/interventions/views/general.py | 122 ++++++++++- loko/interventions/views/helpers.py | 72 +++++++ 11 files changed, 647 insertions(+), 69 deletions(-) diff --git a/loko/interventions/locale/en/LC_MESSAGES/django.mo b/loko/interventions/locale/en/LC_MESSAGES/django.mo index 0b01a19f9e98979b7982b50fc29663c7524b48bf..f52a5cf6589617d3a768f45dbc5a0fc5216f1cca 100644 GIT binary patch delta 34529 zcmZAA1)Nr8|L5_0sG+-ah#43fh8ViLyIVRXB@Zc$bazO%bV#RkNrxa30wRc%?B{!5 zzj>D3^V;M4>b}klJo?{R=L2V63iR$Ij55Q=Q#6{-ml{9i@%d^+_xWzMQL4`uG|J~Y ziRm#TKEq&)_r1@T3-e=kY>QcNDrUt!I2C`#R@i^E&zB8vqRIu1@%iY=^W`Rxn1t4t z8T+9ME<%mrG$zAbV_kj)EK0mP_P}+R0n?20`I2KvOoxpy3HG=2A22TQRjBrMU>f@O zog<(Me_{~E8SiG66Jrr?jxn*5#rv4U%!wF-{5cpIm*IL`iD|Lk1a;)|^+vTb6{Fz- zj86Z)BgoTPWhP+W*n@dRoBXHf&VirR|jmka%H?gViRp{z(ZmAt43!M6JLCOoU5NOSlbH@iGSCV>9{`*KjE6?3Bg?*a_9~ zAdHW*QT?n&9o_?&0Dqst`fCRNl28c$Lyat)qpQ6tkD6I6)S+pFn%TFOJ`S~lQ!yc) zLFL~=P2@es!?@Gj8A)qqL6y(z5lBR!9IB&6sFAk9?D!pOfGaG0Eo$!%VQf5!P4Ozm z!m#OX03}dc+7Pu>9;V0Ds1-ep*_8g2fEr3V!;LT_Mkk&Fvtj|%j9OX#0Mts2#6-9s zBjH6<2Uk$_-k}a(hM8^x?NI~iiZO5&(vIg_LLfg0H!%zo%yQSU9F`*97W3gsjElE0 z7e2$>m}<7$vZ|kd;Z)PQGA(dh5RSU0jZxQmEb4ZwMD6`K)C#^pPfL_`q0g5R z!%%xx9m8=N>O1g@rN2cTvcikpAuNv?P&KnX>aY$&wL2Ph%IBjF?MBoWayx1Zb}wT6 zm2i>-HGBp&lk3Z7Ou zo<(it=F2tz)pOKQN@Ha$NbSXm<&r3uZGoeGHUDY znweI*avf3i7hz^RkHzs{EQMadRc`6}qh>k_wRf9PdwUc!;#~~J$gAB-gkoCaB~f3@ z7O0i$isf-AYQ>IY5Z*zx`vp}m@f!cidA=|L^+~9Lx-Ltx3Z6$bn0l?d&$%!=@p7n7 zYEO)X!%+jBgi&!7>Tqp9eFyeo5MHwUH>fTA;FtZ6z0RG1v>1hqT$l>;p+;O2HN&=8 z4SQi$JZSmP&4BgplqW^iPlM615XQpNs1>em`Ry?={rg4`&>@;_ZbFUl1nM;3KvjH; zaWL)%?mDJMo$^u`g3Zx?`cVU1Z0V=X*Qhg)Vx!eVFSaTY2*=JC1DB)rZUbr{M^OX3 zhFa2>SPY|Xax*Q1fy7&&2Gkza?nqR7Q&8>ALzUZtn!xT&+<)!yUCVfl{=Gp}jJ??{ zT~gGc$$*+!Dbzr^So(0(5-&k**?NqIhfphW61BAtF(y7iZOxm_tiJ-ENl1Xvwz$KR z95sMKs8e4C)nG@9_dpF`CaS}As2LtaZPl+9{|ohDioVsYObF^bPzJRE4Lkx`+Civ2 zoQ@T74_3e^Ke?r@iUo*|L(SkIYG%J+7(T`vm};AwX(dcZygKU4v_eg=JI2Lfs1@@j z6G%j0KB~b@sDh_4G2TWs@ESEU-*(qP3e?JFG4oh@VN`pSEZz*067PaK8zWHPlf}qc z@O(!IsKPI(5#KZa#yrHM?QmbRa115h4Rhga48jwrnLNQ{_!hO~adx^6v!NzZ5jBx! zs1@vtN$B6#mq26^CZJ|C*`LAh^Qe2g5!JwHRKxc$DgK8VP?BA4WlEsVOheQ}TBFMM z!T2~0)&6qSK-XhB-T$KmwB(Oa*W(?=!!M|76mPdnPmPg?XF@fQ8P#D4)Zwgzs#g=$ zUQ1NRJyA0rVfm9Rz7RcCTund)H=z#ULDY=@KrPv4)Qn^8aRbVLLBw;R_OvFZ$F8W` z@&l^gHcWztQCoB!b@(2k%Dvgc`fJ81_qs1r2GmF^V@j-tsj&xYrV}wa&a(I>RQcVQ z0gs~E`vWzBSEvr7?sMf5qYhs>Oo3(gvHqzDG$SED_D40a5jBGysD_TBW^x15;49S1 z#og~#A_=OU0+<_Xqt3tx)BtCqCbR@KfxV~|yW&~GJJjKb|Ff%@0=1XfQA<}8bxSIu z8f=PMk@gsl-=el|4Qc`xQ01?q&cdIT{snb*0uQ)!FC77mC=Y6cl~D!SnuAdd%s`b} ziR$10>dc%#4d^;*Ko3zX^8&SUZ&CGQ9&{5*joPa0m`(S;1_3SoK+KMtF$nKq0sMmM zxWFOzn^6rcM0_Bo!)+LfS1kVvYKyWRcIlNcEAd{K78ha|?(^q+{PCJV5DBS{xDggb z6|8D@#`MI;S$rL8OHQL!>>6r@uTd)(<)~{fHR{Y1L#bE z+KsyRH&7it#yt2p>Wl;*bEh{as-cRQ8hfGgC!2Fn?Jc$ZLzaFQqmljxdOBn;323jr zp!PQLaaS=lW*}Y^RiOpy+O$K>Y$$34W}@2JjDdI%)!s=|`8%lF@GttmBPZNSWH@2> zKL-h#L4H)jwNXpf0V897OCOB7&(kmyE=8U4NvqpdtzCxF_ncjlsOQ1Xb`dM#U$n0lh?R(ch>6`A)g}9}k0xW<#w^E!51rm>y;% zJ{8sOb|t9e)2I&aqh|CNRq-RLp}41AxlmLGCD4COQ4I}7&3G!tz)h%u?Z!xW5;gN* zP!qU;I<(#$0wDxmq4ql2FYedx!l=Fa9+kcTbK(Kaj4x3ulzfmmUK2I2W|)%xeZvT-;rUn+e?krDEox=LF1UsoqXyF3;uBFTu@cqs zIZOW?gNXYsx-CnOx&;NXAlAZWI2KdUzwa@DI2ieoYbXKcCZ5G?gt>^1L!J8Fs6D@n zIy-MrXC&rj_ZJhvW=kwY`aEQ*eOE9aM!Dklz7TpESrr0_u`MRV0T>@AVkj;|&HMz$ z!~3Xme_<4ia@92$1GQzTP+!nOm=_zOK1AbD6IhFR@cdQQzdC_P*W6z;)I$Fu!Ud!s zz>3)XSNBJ+m6)ISTdaxMuJe-*2jO6Rfy(c4!_`}gb%{Sit#rwo?x*De%u4+IO;WYA znQrk_!@5`s_n>C*8MSn&Z@W`m1#=J|jar#)sKay@)nMd1?vK|wQSEj`Jcv4s z4=f(VyX$_>55}@&bVW6^1qxu1UBF*@;ir~xd;MR*nqVYmBkpsO$?@rRfi zzhF{K{lINS7}g{1)ge%Yz-rWAr$52~YWSRBt| z3XJ#2wHJ!ni8sMgI0kiVPGPWia>4j@xhiq7qzFGQP=1` z>VuN>iK~|pbt_7uR-_KZMtV}0J$&|@p9;e66i!A0ZvCX{3B{bcA-Xm9s}`r zREIAx8U{Xh4aY?dAT4UZMX&_c!$dd(Q{igVmL5g*_xL&MuZG@}pb`51bREP;?Nul$ zJsh=!6)`q;z%E&tgPOo_)IfjmEMYoo21`&& zybZY?zOxt?-(We6{K_?43DXj9kCE|v)U6qZA-Ep3vX@cyZ=$yJDQdz2f4MF4k`YjW z2B?PGp_ZnT*$ab+55oAk0JW4GPy;@VTB*CJ`tMNfeZ)8z^R>H%$x-QMI zT;2c5meB|kkkx+<$M${2?UHYK*bPj3&o6R$*m3e}iQS^6ig_5Jb4>?iw3!u(IV^q23 zs1@sG4n}SHgmOh&v9YR@NH zd=(}pegKo=71ZH=j#{a=|FZsJ1hTw$BW;Q**aZvW2-G3mhf(nes-sh=Gw}e`P~Zob zUKlm-+E@tNVL@Ds`S4fFgK<8(ftBzGq#&U#YGmCo3HC#EI1y9fG}Iy6h}zRbsDa(H z_+!*eqkeJ&Nr@UrUR3+#QSG-xwcio71)fJh-{gsy5;vmG!YR~gy^87ZF{*>W&#r^i zr~&3f?RjBT`R1sV>5lnvI)>vZ)D}nn&-E7zxgDM_2Z7XNlt6Xd6g7|zsD?+NwqzxS z;C@uON2nF~3u9oEFYb`VMNKFT>K2qh&9pM=Fg8S8%MKV#_kREZE!8m0fiqAQ4r4aF zfa>rw>afP}1^8!_6xDGJ)XFr%oY)Pu#0yYoWh-hxr!g)5iN!E>K!7i)N1!qR{S<43 zsyG%^aS`gr^A6M!-nV$lNG`uD>RvZRt;8tQKxShaT#vfmr%`+V5w#*wBD;adLr;5{ zf`Bs8p_Vu+D!mqJ$r_*F#is4Y5)8ps1w10PTWjuX@E zc^1@Ru8lfF15g7Qidwn3sPDoKETH@UCjregQ!F=tJgAw~M=kwe)KZN>?dcTM02ZJI zv<)?Yv#0?*LH)4#geo5^w(Bq%>a0{l)$52AbpMB2!YS0@_zks`A22%x$8jChMy*U& z)XavV8XS!}E6dQob*K*RpicWc)CAMS4e)+lYSC)Wg*bG?`UpoxP1*oOF ziZ$?+<(G^X;Qu38Kh#R>M{VI%)PU|_SNwpru|xa-{~z7Y9E)9k$eo-FG271`)4}s@EBH2702t z3qK_0{ud>%f&_hXA7Ckbh5ipk64ziu^nbH43;6?3Td@qa*E`H(sFk>a+REFgt$Ks1 z{{eNVV<&Z6kR~bjKN|_5B#>usyy( zeUO?aa|3CIn)zVVK<1)WV4X)mOLxdJ9%2yje^4__mOQ}!n@%C|%d@j3qom4dex?p{POb za0R12AbC)SvACs|HEWtpQ5|(a|EC*ui>9FJ?LZA|A8LYU(9@n>B%lw>Tgxby-gR6V zLrJfXx@JRBd;bG!B^ICtwiR_d4xl=`Wa;lw?MKTH;A?`Rs53SS^?SpT4BUS;{4)uv zcouc--k|>*j%pxQMt5p+qB;ymUAuCqy{%<-K@E5`YCxM&r~L?O#%EDmdbIps-m9HIRm=h6kFHQ1zBzZQO?1g6P4neh_NFxh!7Ptb+R9H1-JO zA}|KEv^!D1fE+_zubZf)iX0N)|7|!uW+7e<^J6#E7j!x5*4)Q(7(KK5O{zNPAwC#& zXg8t;coU1D_cwu@1af6@3C&Tbb}k0tR;-1WQ6H+1P?uj3^(AbD+KLXSQ{5Z=Kekba zZ4Bnd*_anknxBxZ@O-(ly3<+;)p2dq8R(2!+Fqzn?PyD1g8K2i8a1QKs1@;L3-JFD zD-^R6ZH`*v@feP~FbrR#Rw^XBc{XC)Y1jz2=Mj9+Nc>E#k%+} zD!*Dzw}l?6!;M%GZ=-HiNG`W>eNiht8%yGG4AcFOp4;8eqNt@SjhcBi)R}07x;EWW z_j)|CbiVnh72ALb@i^*K-?02wsM8-QkNa}QMh!R{>Q7e9(0~7j5zy&gj+yW{mcr+# zTaYua8+kF*%)4MiJczn(DZ|{%%VK-tJ+T7bKrMZSd;z{P*aU0hBGjRMm5=*hk3f$6 zuEGdxLHso8r(L!Ju0kg)Mtl$I)V@b;S^k2qTo0^Fd?Oab52!878}5EqbVP0K2Gs5N z164j}A?|;90{siQ4i2D3_#di5jlyop#-a|*9@O4GKn)~Y5jT_es2MNE%=jEN;KW7U z3e`p((m|-}z5-S5ibp_8@fmfh3l|IU|4m0*)OVmG>H{(abr!~>en!l(^i8NUvk!Hz zPoU1gJxl)w)lookx3!_Dcy-ia^!gIeby

pj<>9lISJeNDHGrK%G$6Z49QypHOGx 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 delta 34201 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 delta 35071 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

@XzLsvuOfW`@eJgB zg75Kn(#jH^Lb=Ptdyp@YEwfD1l%C$KCZRkJGZ1b-I2H}%;#p;zF+YW4^6WSA1dy)l zAM&guuB#Gv9O8$Gzqe()D5L8-cPblJ++TliC8IvK51GB_;Vcp!6F$Q|&GVSgZz^lX zvt^`3;nvliMlzE=mJ(4oVNb5s*FnI!bw%c|<45HqD zNZ(61A$67Dd2>&l%zrT=?a8p3dp3!+ZDVz*v=V8$x{wxO(=SrdX2RWgcAq?{iThK> zQNp@*aZj`1n&cTkd^+(K+*gSg;x0-4Z*+FDOX6NCD@>xU@g!CxtvngBa7Q8jlJrJA z4B>X7;dW;H2*)H}Jf7d=zQ$dFv?t^%WAmttANARb ze}c<{Y-H4x50}~S5d4d0si;s_N!!7egd0*pS>jP`r8&rZoV22(9U=d4TjmpKcS!q= zf7|k&%J`!bWrCtH{`^!@kc2DfOU8|4j79|mh=Z54c`o6b+`4*EX${g65&qqdC25gSZP2{z9cka0&N4 zp6jYfnyw7oD@jj*7j1_|VkR5zN&e?F7|k}C(Uz-XX2W$_+6RxRMAsGlYeg5l; z#r>7aC)o<36aGSmiNtSlPa%BW_BRRYyV?gz_{_tj*oMLj2-l;5j8qbZa1PRR&B89+Q7LzaXJdG_ z3VU!r=XrD*TtT_W>lNXcG#=I`+J@v~$^~v2In1j@{0;vciVwD|z}2L%zg}x8>wzul=#N z)b;Ty6=Tc36kbnCY Def-Zx diff --git a/loko/interventions/locale/fr/LC_MESSAGES/django.po b/loko/interventions/locale/fr/LC_MESSAGES/django.po index de19591..afd6c54 100644 --- a/loko/interventions/locale/fr/LC_MESSAGES/django.po +++ b/loko/interventions/locale/fr/LC_MESSAGES/django.po @@ -8514,5 +8514,29 @@ msgstr "Impossible de modifier le matériel d'un bon de préparation annulé." msgid "Bon annulé" msgstr "Bon annulé" +msgid "Rôle et personne assignée" +msgstr "Rôle et personne assignée" + +msgid "Rôle" +msgstr "Rôle" + +msgid "Personne" +msgstr "Personne" + +msgid "Gestionnaire" +msgstr "Gestionnaire" + +msgid "Contrôleur" +msgstr "Contrôleur" + +msgid "Inspecteur" +msgstr "Inspecteur" + +msgid "-- Sélectionner un rôle… --" +msgstr "-- Sélectionner un rôle… --" + +msgid "-- Choisir une personne… --" +msgstr "-- Choisir une personne… --" + diff --git a/loko/interventions/locale/nl/LC_MESSAGES/django.mo b/loko/interventions/locale/nl/LC_MESSAGES/django.mo index e7bf0abf216485d0c72218551d69d3c28bbeddfc..30f0851ac4386ac9e82370b0965cb3174dc25ec9 100644 GIT binary patch delta 34518 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 delta 34179 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 P-;|EK?cFi26`}tFAvmVP diff --git a/loko/interventions/locale/nl/LC_MESSAGES/django.po b/loko/interventions/locale/nl/LC_MESSAGES/django.po index bb35d8d..fb4b5b1 100644 --- a/loko/interventions/locale/nl/LC_MESSAGES/django.po +++ b/loko/interventions/locale/nl/LC_MESSAGES/django.po @@ -8448,4 +8448,28 @@ msgstr "Kan materiaal van een geannuleerde voorbereidingsbon niet wijzigen." msgid "Bon annulé" msgstr "Geannuleerde bon" +msgid "Rôle et personne assignée" +msgstr "Rol en toegewezen persoon" + +msgid "Rôle" +msgstr "Rol" + +msgid "Personne" +msgstr "Persoon" + +msgid "Gestionnaire" +msgstr "Beheerder" + +msgid "Contrôleur" +msgstr "Controleur" + +msgid "Inspecteur" +msgstr "Inspecteur" + +msgid "-- Sélectionner un rôle… --" +msgstr "-- Selecteer een rol… --" + +msgid "-- Choisir une personne… --" +msgstr "-- Kies een persoon… --" + diff --git a/loko/interventions/static/interventions/interventions_index.js b/loko/interventions/static/interventions/interventions_index.js index 8f8c25c..d9656e4 100644 --- a/loko/interventions/static/interventions/interventions_index.js +++ b/loko/interventions/static/interventions/interventions_index.js @@ -330,6 +330,7 @@ document.getElementById('reset-filters').addEventListener('click', async functio togglePauseReasonFilter(); filterCategoriesByThematics(); filterProvidersAndContracts(); + resetRolePersonFilter(); // Explicitly clear date fields document.getElementById('begin_date_min').value = ''; @@ -2185,8 +2186,8 @@ function filterProvidersAndContracts() { } }); } - if (typeof updateInterventionManagers === 'function') { - updateInterventionManagers(); + if (typeof updateRolePersonManagers === 'function') { + updateRolePersonManagers(); } } @@ -2278,7 +2279,9 @@ function countActiveFilters() { 'contract': false, 'assigned_team': false, 'assigned_member': false, + 'assigned_controller': false, 'intervention_manager': false, + 'inspector': false, 'pause_reason': false, 'begin_date_min': false, 'begin_date_max': false, @@ -2330,7 +2333,8 @@ function getCurrentFilters() { // Get all filter parameters const filterKeys = [ 'thematic', 'status', 'priority', 'maintain_type', 'category', - 'type', 'provider', 'contract', 'assigned_team', 'assigned_member', 'intervention_manager', + 'type', 'provider', 'contract', 'assigned_team', 'assigned_member', + 'assigned_controller', 'intervention_manager', 'inspector', 'pause_reason', 'locations', 'overdue', 'to_be_planned_soon' ]; @@ -2407,7 +2411,8 @@ function countActiveFilters() { // Define filter parameters used in the global filter modal const filterParams = [ 'thematic', 'status', 'priority', 'maintain_type', 'category', 'type', - 'provider', 'contract', 'assigned_team', 'assigned_member', 'intervention_manager', 'pause_reason', + 'provider', 'contract', 'assigned_team', 'assigned_member', + 'assigned_controller', 'intervention_manager', 'inspector', 'pause_reason', 'begin_date_min', 'begin_date_max', 'end_date_min', 'end_date_max', 'locations', 'overdue', 'to_be_planned_soon' ]; @@ -2451,7 +2456,8 @@ function savePreferencesFromUrl() { // Collect all filter parameters const filterParams = [ 'thematic', 'status', 'priority', 'maintain_type', 'category', 'type', - 'provider', 'contract', 'assigned_team', 'assigned_member', 'intervention_manager', 'pause_reason', + 'provider', 'contract', 'assigned_team', 'assigned_member', + 'assigned_controller', 'intervention_manager', 'inspector', 'pause_reason', 'begin_date_min', 'begin_date_max', 'end_date_min', 'end_date_max', 'locations', 'overdue', 'to_be_planned_soon' ]; @@ -2504,7 +2510,8 @@ async function savePreferencesFromForm(urlParams) { // Collect all filter parameters from URLSearchParams const filterParams = [ 'thematic', 'status', 'priority', 'maintain_type', 'category', 'type', - 'provider', 'contract', 'assigned_team', 'assigned_member', 'intervention_manager', 'pause_reason', + 'provider', 'contract', 'assigned_team', 'assigned_member', + 'assigned_controller', 'intervention_manager', 'inspector', 'pause_reason', 'begin_date_min', 'begin_date_max', 'end_date_min', 'end_date_max', 'locations', 'overdue', 'to_be_planned_soon' ]; @@ -2558,6 +2565,7 @@ async function savePreferencesFromForm(urlParams) { document.addEventListener('DOMContentLoaded', function() { updateFilterBadge(); initDateFilterPresets(); + initRolePersonFilter(); // Save preferences when table sort changes (user action only) const $table = $('#interventions-table'); @@ -2637,62 +2645,153 @@ if (filterModal) { }); } -function updateInterventionManagers() { - const checkedContracts = document.querySelectorAll('.filter-options[data-field="contract"] input[type="checkbox"]:checked'); - const container = document.getElementById('intervention-manager-options-container'); - const row = document.getElementById('intervention-manager-filter-row'); - if (!container || !row) return; +// ==================== Role & Person Filter (Gestionnaire / Contrôleur / Inspecteur) ==================== - // Get currently selected managers from URL or from checkboxes if they already exist - const urlParams = new URLSearchParams(window.location.search); - const selectedManagers = new Set(urlParams.getAll('intervention_manager')); - - // Also check if any are currently checked in the UI before re-drawing - const existingChecked = container.querySelectorAll('input[type="checkbox"]:checked'); - existingChecked.forEach(cb => selectedManagers.add(cb.value)); +function getRolePersonsData() { + const scriptEl = document.getElementById('role-persons-data'); + if (!scriptEl) return { manager: [], controller: [], inspector: [] }; + try { + return JSON.parse(scriptEl.textContent) || { manager: [], controller: [], inspector: [] }; + } catch (e) { + console.error("Error parsing role-persons data", e); + return { manager: [], controller: [], inspector: [] }; + } +} - // Gather unique managers - const managersMap = new Map(); - let anyUsesManager = false; +function syncRolePersonHiddenInputs() { + const roleSelect = document.getElementById('filter-person-role'); + const personSelect = document.getElementById('filter-person-select'); + const hiddenMgr = document.getElementById('hidden-filter-intervention-manager'); + const hiddenCtrl = document.getElementById('hidden-filter-assigned-controller'); + const hiddenInsp = document.getElementById('hidden-filter-inspector'); - checkedContracts.forEach(cb => { - const optionDiv = cb.closest('.filter-option'); - if (optionDiv) { - const usesManager = optionDiv.getAttribute('data-uses-manager') === 'true'; - if (usesManager) { - anyUsesManager = true; - const managersStr = optionDiv.getAttribute('data-managers'); - if (managersStr) { - try { - const managers = JSON.parse(managersStr); - managers.forEach(mgr => { - managersMap.set(String(mgr.id), mgr.name); - }); - } catch (e) { - console.error("Error parsing managers JSON", e); - } + if (!roleSelect || !personSelect) return; + + const role = roleSelect.value; + const personId = personSelect.value; + + if (hiddenMgr) hiddenMgr.value = (role === 'manager' && personId) ? personId : ''; + if (hiddenCtrl) hiddenCtrl.value = (role === 'controller' && personId) ? personId : ''; + if (hiddenInsp) hiddenInsp.value = (role === 'inspector' && personId) ? personId : ''; +} + +function populatePersonSelect(role, preselectedId) { + const personSelect = document.getElementById('filter-person-select'); + if (!personSelect) return; + + const chooseLabel = typeof gettext === 'function' ? gettext("-- Choisir une personne… --") : "-- Choisir une personne… --"; + personSelect.innerHTML = ``; + + if (!role) { + personSelect.disabled = true; + syncRolePersonHiddenInputs(); + return; + } + + const data = getRolePersonsData(); + let persons = data[role] || []; + + // If role is manager, filter by checked contracts if any are checked + if (role === 'manager') { + const checkedContractBoxes = document.querySelectorAll('.filter-options[data-field="contract"] input[type="checkbox"]:checked'); + if (checkedContractBoxes.length > 0) { + const checkedContractIds = Array.from(checkedContractBoxes).map(cb => parseInt(cb.value, 10)).filter(Boolean); + if (checkedContractIds.length > 0) { + const filtered = persons.filter(p => { + const pContracts = (p.contracts || []).map(cid => parseInt(cid, 10)); + return pContracts.some(cid => checkedContractIds.includes(cid)); + }); + if (filtered.length > 0) { + persons = filtered; } } } + } + + persons.forEach(p => { + const opt = document.createElement('option'); + opt.value = p.id; + opt.textContent = p.name; + if (preselectedId && String(p.id) === String(preselectedId)) { + opt.selected = true; + } + personSelect.appendChild(opt); }); - if (anyUsesManager && managersMap.size > 0) { - // Build the HTML for options - let html = ''; - managersMap.forEach((name, id) => { - const isChecked = selectedManagers.has(id) ? 'checked' : ''; - html += ` -

- - -
- `; + personSelect.disabled = false; + if (preselectedId) { + personSelect.value = String(preselectedId); + } + syncRolePersonHiddenInputs(); +} + +function updateRolePersonManagers() { + const roleSelect = document.getElementById('filter-person-role'); + const personSelect = document.getElementById('filter-person-select'); + if (!roleSelect || !personSelect) return; + + if (roleSelect.value === 'manager') { + const currentPersonId = personSelect.value; + populatePersonSelect('manager', currentPersonId); + } +} + +function resetRolePersonFilter() { + const roleSelect = document.getElementById('filter-person-role'); + const personSelect = document.getElementById('filter-person-select'); + if (roleSelect) roleSelect.value = ''; + if (personSelect) { + const chooseLabel = typeof gettext === 'function' ? gettext("-- Choisir une personne… --") : "-- Choisir une personne… --"; + personSelect.innerHTML = ``; + personSelect.disabled = true; + } + syncRolePersonHiddenInputs(); +} + +function initRolePersonFilter() { + const roleSelect = document.getElementById('filter-person-role'); + const personSelect = document.getElementById('filter-person-select'); + const clearBtn = document.getElementById('clear-role-person-filter'); + + if (!roleSelect || !personSelect) return; + + roleSelect.addEventListener('change', function() { + populatePersonSelect(this.value); + }); + + personSelect.addEventListener('change', function() { + syncRolePersonHiddenInputs(); + }); + + if (clearBtn) { + clearBtn.addEventListener('click', function() { + resetRolePersonFilter(); }); - container.innerHTML = html; - row.classList.remove('d-none'); + } + + // Determine initial role and person from server context or URL parameters + const urlParams = new URLSearchParams(window.location.search); + let initRole = typeof SELECTED_ROLE !== 'undefined' ? SELECTED_ROLE : ''; + let initPersonId = typeof SELECTED_PERSON_ID !== 'undefined' ? SELECTED_PERSON_ID : ''; + + if (!initRole) { + if (urlParams.get('intervention_manager')) { + initRole = 'manager'; + initPersonId = urlParams.get('intervention_manager'); + } else if (urlParams.get('assigned_controller')) { + initRole = 'controller'; + initPersonId = urlParams.get('assigned_controller'); + } else if (urlParams.get('inspector')) { + initRole = 'inspector'; + initPersonId = urlParams.get('inspector'); + } + } + + if (initRole) { + roleSelect.value = initRole; + populatePersonSelect(initRole, initPersonId); } else { - container.innerHTML = ''; - row.classList.add('d-none'); + personSelect.disabled = true; } } diff --git a/loko/interventions/templates/interventions/interventions_index.html b/loko/interventions/templates/interventions/interventions_index.html index e54fb2c..8ba11e9 100644 --- a/loko/interventions/templates/interventions/interventions_index.html +++ b/loko/interventions/templates/interventions/interventions_index.html @@ -770,21 +770,6 @@ - -
-
-
- -
- - -
-
-
- -
-
-
{% endif %} @@ -825,6 +810,42 @@ + +
+
+
+ +
+ +
+
+
+
+ + +
+
+ + +
+
+ + + +
+
+
@@ -1466,8 +1487,12 @@ const SAVED_SORT = {{ saved_sort|default:"{}"|safe }}; const SAVED_COLUMNS = {{ saved_columns|default:"null"|safe }}; const subcatNoneLabel = "{% translate '(aucune sous-catégorie)' %}"; + const SELECTED_ROLE = '{{ selected_role|default:""|escapejs }}'; + const SELECTED_PERSON_ID = '{{ selected_person_id|default:""|escapejs }}'; + {{ role_persons_data|json_script:"role-persons-data" }} + diff --git a/loko/interventions/tests/test_general.py b/loko/interventions/tests/test_general.py index 09c01ea..0687b9d 100644 --- a/loko/interventions/tests/test_general.py +++ b/loko/interventions/tests/test_general.py @@ -2004,6 +2004,198 @@ class InterventionEndDateFilteringTests(TestCase): self.assertIn(itv_reopened, apply_intervention_filters_from_querydict(qs, params_august, user=self.user)) +class InterventionRolePersonFilteringTests(TestCase): + def setUp(self): + self.User = get_user_model() + self.admin_user = self.User.objects.create_user( + username='admin_role_test', + password='pwd', + first_name='Jean', + last_name='Dupont' + ) + self.role_admin, _ = Role.objects.get_or_create(name='admin') + self.config = UserConfig.objects.create(user=self.admin_user, is_intern=True) + self.config.roles.add(self.role_admin) + + self.thematic = Thematic.objects.create( + code='thematic_role_test', + name_fr='Thématique Test', + name_nl='Thema Test', + allow_planning_without_contract=True + ) + UserThematics.objects.create( + user_config=self.config, + thematic=self.thematic, + can_view_interventions=True, + can_edit_interventions=True, + can_inspect=True, + ) + + self.company = Company.objects.create(name='Entreprise Test') + self.control_team = CompanyTeam.objects.create( + name='Équipe Contrôle Qualité', + company=self.company, + operation_types=[CompanyTeam.OPERATION_CONTROLS] + ) + self.control_team.thematics.add(self.thematic) + + self.controller_user = self.User.objects.create_user( + username='ctrl_user_test', + password='pwd', + first_name='Marc', + last_name='Lambert' + ) + self.controller_member = CompanyMember.objects.create( + name='Marc Lambert', + user=self.controller_user + ) + self.controller_member.teams.add(self.control_team) + + self.inspector_user = self.User.objects.create_user( + username='insp_user_test', + password='pwd', + first_name='Claire', + last_name='Bernard' + ) + self.insp_config = UserConfig.objects.create(user=self.inspector_user, is_intern=True) + UserThematics.objects.create( + user_config=self.insp_config, + thematic=self.thematic, + can_view_interventions=True, + can_inspect=True, + ) + + self.manager_user = self.User.objects.create_user( + username='mgr_user_test', + password='pwd', + first_name='Paul', + last_name='Martin' + ) + + # Interventions + self.itv_manager = Intervention.objects.create( + title='Intervention avec gestionnaire', + thematic=self.thematic, + created_by=self.admin_user, + intervention_manager=self.manager_user + ) + self.itv_controller = Intervention.objects.create( + title='Intervention avec contrôleur', + thematic=self.thematic, + created_by=self.admin_user, + assigned_controller=self.controller_member + ) + self.itv_inspection_checked = Intervention.objects.create( + title='Intervention avec inspection liée', + thematic=self.thematic, + created_by=self.admin_user, + ) + self.itv_type_inspection = Intervention.objects.create( + title='Intervention type inspection', + thematic=self.thematic, + created_by=self.admin_user, + type='inspection', + assigned_member=CompanyMember.objects.create( + name='Claire Bernard', + user=self.inspector_user + ) + ) + + from inspections.models import Inspection + self.inspection = Inspection.objects.create( + checked_intervention=self.itv_inspection_checked, + inspector=self.inspector_user, + asset_content_type=ContentType.objects.get_for_model(Intervention), + asset_object_id=self.itv_inspection_checked.id + ) + + def test_format_shortname_helpers(self): + from interventions.views.helpers import _format_user_shortname_with_team, _format_member_shortname_with_team + + # User with team (via CompanyMember) + formatted_ctrl_user = _format_user_shortname_with_team(self.controller_user) + self.assertIn("Marc L.", formatted_ctrl_user) + self.assertIn("Équipe Contrôle Qualité", formatted_ctrl_user) + + # Member with team + formatted_member = _format_member_shortname_with_team(self.controller_member) + self.assertEqual(formatted_member, "Marc L. (Équipe Contrôle Qualité)") + + # User without team + formatted_mgr = _format_user_shortname_with_team(self.manager_user) + self.assertEqual(formatted_mgr, "Paul M.") + + def test_interventions_index_role_person_context(self): + self.client.login(username='admin_role_test', password='pwd') + url = reverse('interventions:interventions_index') + + # 1. No filter (follows default redirect) + resp = self.client.get(url, follow=True) + self.assertEqual(resp.status_code, 200) + self.assertIn('role_persons_data', resp.context) + self.assertEqual(resp.context['selected_role'], '') + self.assertEqual(resp.context['selected_person_id'], '') + + # 2. Filter by manager + resp_mgr = self.client.get(f"{url}?intervention_manager={self.manager_user.id}") + self.assertEqual(resp_mgr.status_code, 200) + self.assertEqual(resp_mgr.context['selected_role'], 'manager') + self.assertEqual(resp_mgr.context['selected_person_id'], str(self.manager_user.id)) + + # 3. Filter by controller + resp_ctrl = self.client.get(f"{url}?assigned_controller={self.controller_member.id}") + self.assertEqual(resp_ctrl.status_code, 200) + self.assertEqual(resp_ctrl.context['selected_role'], 'controller') + self.assertEqual(resp_ctrl.context['selected_person_id'], str(self.controller_member.id)) + + # 4. Filter by inspector + resp_insp = self.client.get(f"{url}?inspector={self.inspector_user.id}") + self.assertEqual(resp_insp.status_code, 200) + self.assertEqual(resp_insp.context['selected_role'], 'inspector') + self.assertEqual(resp_insp.context['selected_person_id'], str(self.inspector_user.id)) + + def test_filter_by_assigned_controller_and_inspector(self): + from django.http import QueryDict + from interventions.views.helpers import apply_intervention_filters_from_querydict + + qs = Intervention.objects.all() + + # Filter by controller via apply_intervention_filters_from_querydict + params_ctrl = QueryDict(f'assigned_controller={self.controller_member.id}') + filtered_ctrl = list(apply_intervention_filters_from_querydict(qs, params_ctrl, user=self.admin_user)) + self.assertIn(self.itv_controller, filtered_ctrl) + self.assertNotIn(self.itv_manager, filtered_ctrl) + + # Filter by inspector via apply_intervention_filters_from_querydict + params_insp = QueryDict(f'inspector={self.inspector_user.id}') + filtered_insp = list(apply_intervention_filters_from_querydict(qs, params_insp, user=self.admin_user)) + self.assertIn(self.itv_inspection_checked, filtered_insp) + self.assertIn(self.itv_type_inspection, filtered_insp) + self.assertNotIn(self.itv_controller, filtered_insp) + self.assertNotIn(self.itv_manager, filtered_insp) + + # Test via interventions_geojson + self.client.login(username='admin_role_test', password='pwd') + geojson_url = reverse('interventions:interventions_geojson') + + # GeoJSON: controller + resp_ctrl = self.client.get(f"{geojson_url}?assigned_controller={self.controller_member.id}") + self.assertEqual(resp_ctrl.status_code, 200) + features_ctrl = resp_ctrl.json().get('features', []) + itv_ids_ctrl = [f['properties']['id'] for f in features_ctrl] + self.assertIn(self.itv_controller.id, itv_ids_ctrl) + self.assertNotIn(self.itv_manager.id, itv_ids_ctrl) + + # GeoJSON: inspector + resp_insp = self.client.get(f"{geojson_url}?inspector={self.inspector_user.id}") + self.assertEqual(resp_insp.status_code, 200) + features_insp = resp_insp.json().get('features', []) + itv_ids_insp = [f['properties']['id'] for f in features_insp] + self.assertIn(self.itv_inspection_checked.id, itv_ids_insp) + self.assertIn(self.itv_type_inspection.id, itv_ids_insp) + self.assertNotIn(self.itv_controller.id, itv_ids_insp) + + diff --git a/loko/interventions/views/general.py b/loko/interventions/views/general.py index a6fb862..ee639c4 100644 --- a/loko/interventions/views/general.py +++ b/loko/interventions/views/general.py @@ -269,7 +269,7 @@ def index(request): for mgr in managers_qs: managers_data.append({ 'id': mgr.id, - 'name': _get_user_short_name(mgr) + 'name': _format_user_shortname_with_team(mgr) }) managers_json = json.dumps(managers_data) @@ -356,6 +356,103 @@ def index(request): list(m_thematics), )) + # Build role-persons data (Gestionnaire / Contrôleur / Inspecteur) + # 1. Managers + user_access_map = defaultdict(set) + for uca in UserContractAccess.objects.filter(contract__in=contracts_qs, can_approve=True): + user_access_map[uca.user_config.user_id].add(uca.contract_id) + managed_itv_map = defaultdict(set) + for itv_data in Intervention.objects.filter(contract__in=contracts_qs, intervention_manager__isnull=False).values('intervention_manager_id', 'contract_id').distinct(): + managed_itv_map[itv_data['intervention_manager_id']].add(itv_data['contract_id']) + + manager_users_qs = ( + User.objects.filter( + Q(config__usercontractaccess__contract__in=contracts_qs, config__usercontractaccess__can_approve=True) | + Q(managed_interventions__contract__in=contracts_qs) | + Q(config__roles__name='manager') + ) + .prefetch_related('companymember_set__teams', 'config__company') + .distinct() + .order_by('first_name', 'last_name', 'username') + ) + manager_items = [] + for mgr in manager_users_qs: + c_ids = list(user_access_map[mgr.id] | managed_itv_map[mgr.id]) + manager_items.append({ + 'id': mgr.id, + 'name': _format_user_shortname_with_team(mgr), + 'contracts': c_ids, + }) + + # 2. Controllers + controller_members_qs = ( + CompanyMember.objects.filter( + Q(teams__operation_types__contains=[CompanyTeam.OPERATION_CONTROLS]) | + Q(controlled_interventions__isnull=False) + ) + ) + if allowed_company_ids is not None: + controller_members_qs = controller_members_qs.filter(teams__company_id__in=allowed_company_ids) + if allowed_thematic_ids: + controller_members_qs = controller_members_qs.filter(teams__thematics__id__in=allowed_thematic_ids) + controller_members_qs = ( + controller_members_qs + .select_related('user') + .prefetch_related('teams__company') + .distinct() + .order_by('name') + ) + controller_items = [ + { + 'id': m.id, + 'name': _format_member_shortname_with_team(m), + } + for m in controller_members_qs + ] + + # 3. Inspectors + from inspections.models import Inspection + inspector_users_qs = ( + User.objects.filter( + Q(config__userthematics__can_inspect=True) | + Q(inspections__isnull=False) | + Q(companymember__teams__operation_types__contains=[CompanyTeam.OPERATION_INSPECTIONS]) | + Q(companymember__assigned_inspections__isnull=False) + ) + .prefetch_related('companymember_set__teams', 'config__company') + .distinct() + .order_by('first_name', 'last_name', 'username') + ) + inspector_items = [ + { + 'id': u.id, + 'name': _format_user_shortname_with_team(u), + } + for u in inspector_users_qs + ] + + role_persons_data = { + 'manager': manager_items, + 'controller': controller_items, + 'inspector': inspector_items, + } + + selected_managers = _expand_csv_params(request.GET.getlist('intervention_manager')) + selected_controllers = _expand_csv_params(request.GET.getlist('assigned_controller')) + selected_inspectors = _expand_csv_params(request.GET.getlist('inspector')) + + selected_role = '' + selected_person_id = '' + if selected_managers: + selected_role = 'manager' + selected_person_id = str(selected_managers[0]) + elif selected_controllers: + selected_role = 'controller' + selected_person_id = str(selected_controllers[0]) + elif selected_inspectors: + selected_role = 'inspector' + selected_person_id = str(selected_inspectors[0]) + # Status classes (Bootstrap contextual classes) status_classes = { 'in_preparation': 'secondary', @@ -415,7 +512,12 @@ def index(request): 'selected_teams': request.GET.getlist('assigned_team'), 'selected_members': request.GET.getlist('assigned_member'), 'selected_control_teams': request.GET.getlist('assigned_control_team'), - 'selected_controllers': request.GET.getlist('assigned_controller'), + 'selected_controllers': selected_controllers, + 'selected_managers': selected_managers, + 'selected_inspectors': selected_inspectors, + 'selected_role': selected_role, + 'selected_person_id': selected_person_id, + 'role_persons_data': role_persons_data, 'selected_pause_reasons': pause_reasons, 'selected_preparation_states': preparation_states, 'begin_date_min': begin_date_min or '', @@ -471,6 +573,7 @@ def interventions_geojson(request): assigned_controllers = _expand_csv_params(request.GET.getlist('assigned_controller')) pause_reasons = _expand_csv_params(request.GET.getlist('pause_reason')) intervention_managers = _expand_csv_params(request.GET.getlist('intervention_manager')) + inspectors = _expand_csv_params(request.GET.getlist('inspector')) preparation_states = _expand_csv_params(request.GET.getlist('preparation_state')) begin_date_min = request.GET.get('begin_date_min') or None begin_date_max = request.GET.get('begin_date_max') or None @@ -555,6 +658,21 @@ def interventions_geojson(request): qs = qs.filter(Q(assigned_control_team_id__in=assigned_control_teams) | Q(assigned_controller__teams__in=assigned_control_teams)).distinct() if intervention_managers: qs = qs.filter(intervention_manager_id__in=intervention_managers) + if inspectors: + from inspections.models import Inspection + from django.contrib.contenttypes.models import ContentType + ct = ContentType.objects.get_for_model(Intervention) + insp_target_qs = Inspection.objects.filter( + Q(inspector_id__in=inspectors) | + Q(assigned_member_id__in=inspectors) | + Q(assigned_member__user_id__in=inspectors) + ) + qs = qs.filter( + Q(quality_inspections__in=insp_target_qs) | + Q(generated_inspections__in=insp_target_qs) | + Q(id__in=insp_target_qs.filter(asset_content_type=ct).values('asset_object_id')) | + (Q(type='inspection') & (Q(assigned_member_id__in=inspectors) | Q(assigned_member__user_id__in=inspectors))) + ).distinct() if followed_only == '1' and request.user.is_authenticated: qs = qs.filter(subscriptions__user=request.user) diff --git a/loko/interventions/views/helpers.py b/loko/interventions/views/helpers.py index 55caea9..b21399e 100644 --- a/loko/interventions/views/helpers.py +++ b/loko/interventions/views/helpers.py @@ -173,6 +173,8 @@ __all__ = [ '_flatten_asset_collection', '_force_delete_operations_for_assets', '_format_location_label', + '_format_member_shortname_with_team', + '_format_user_shortname_with_team', '_get_allowed_asset_category_ids', '_get_asset_classes', '_get_asset_model_classes', @@ -1765,7 +1767,10 @@ def apply_intervention_filters_from_querydict(qs, params, user=None): contracts = _expand_csv_params(params.getlist('contract')) assigned_teams = _expand_csv_params(params.getlist('assigned_team')) assigned_members = _expand_csv_params(params.getlist('assigned_member')) + assigned_control_teams = _expand_csv_params(params.getlist('assigned_control_team')) + assigned_controllers = _expand_csv_params(params.getlist('assigned_controller')) intervention_managers = _expand_csv_params(params.getlist('intervention_manager')) + inspectors = _expand_csv_params(params.getlist('inspector')) pause_reasons = _expand_csv_params(params.getlist('pause_reason')) preparation_states = _expand_csv_params(params.getlist('preparation_state')) begin_date_min = params.get('begin_date_min') or None @@ -1812,8 +1817,27 @@ def apply_intervention_filters_from_querydict(qs, params, user=None): qs = qs.filter(assigned_member_id__in=assigned_members) if assigned_teams: qs = qs.filter(Q(assigned_team_id__in=assigned_teams) | Q(assigned_member__teams__in=assigned_teams)).distinct() + if assigned_controllers: + qs = qs.filter(assigned_controller_id__in=assigned_controllers) + if assigned_control_teams: + qs = qs.filter(Q(assigned_control_team_id__in=assigned_control_teams) | Q(assigned_controller__teams__in=assigned_control_teams)).distinct() if intervention_managers: qs = qs.filter(intervention_manager_id__in=intervention_managers) + if inspectors: + from inspections.models import Inspection + from django.contrib.contenttypes.models import ContentType + ct = ContentType.objects.get_for_model(Intervention) + insp_target_qs = Inspection.objects.filter( + Q(inspector_id__in=inspectors) | + Q(assigned_member_id__in=inspectors) | + Q(assigned_member__user_id__in=inspectors) + ) + qs = qs.filter( + Q(quality_inspections__in=insp_target_qs) | + Q(generated_inspections__in=insp_target_qs) | + Q(id__in=insp_target_qs.filter(asset_content_type=ct).values('asset_object_id')) | + (Q(type='inspection') & (Q(assigned_member_id__in=inspectors) | Q(assigned_member__user_id__in=inspectors))) + ).distinct() if followed_only == '1' and user and user.is_authenticated: qs = qs.filter(subscriptions__user=user) @@ -2387,6 +2411,54 @@ def _get_user_short_name(user): return display +def _format_user_shortname_with_team(user): + """ + Format a User's short name with team/company in parentheses. + E.g., "Prénom N. (Nom Équipe)" or "Prénom N." + """ + if not user: + return "" + short_name = _get_user_short_name(user) + teams = [ + t.name + for cm in user.companymember_set.all() + for t in cm.teams.all() + if t.name + ] + if teams: + team_str = ", ".join(dict.fromkeys(teams)) + elif hasattr(user, 'config') and user.config and user.config.company: + team_str = user.config.company.name + else: + team_str = "" + return f"{short_name} ({team_str})" if team_str else short_name + + +def _format_member_shortname_with_team(member): + """ + Format a CompanyMember's short name with team in parentheses. + E.g., "Prénom N. (Nom Équipe)" or "Prénom N." + """ + if not member: + return "" + if member.user and (member.user.first_name or member.user.last_name): + short_name = _get_user_short_name(member.user) + elif member.name: + parts = member.name.strip().split() + if len(parts) >= 2 and parts[-1].isalpha(): + short_name = f"{parts[0]} {parts[-1][0].upper()}." + else: + short_name = member.name + elif member.user: + short_name = getattr(member.user, 'username', '') + else: + short_name = "" + + teams = [t.name for t in member.teams.all() if t.name] + team_str = ", ".join(dict.fromkeys(teams)) if teams else "" + return f"{short_name} ({team_str})" if team_str else short_name + + def _get_available_occupation_members(user, intervention):