From d36649f3bf039b7934b5b9c02a08f0417375ed10 Mon Sep 17 00:00:00 2001 From: kdeterme Date: Mon, 5 Oct 2026 15:12:16 +0200 Subject: [PATCH] feat(assets): add generic ManagementZone model, admin, geojson API and map overlay --- loko/assets/admin.py | 57 ++- loko/assets/locale/en/LC_MESSAGES/django.mo | Bin 117167 -> 118889 bytes loko/assets/locale/en/LC_MESSAGES/django.po | 54 +++ loko/assets/locale/en/LC_MESSAGES/djangojs.mo | Bin 10192 -> 10756 bytes loko/assets/locale/en/LC_MESSAGES/djangojs.po | 27 ++ loko/assets/locale/fr/LC_MESSAGES/django.mo | Bin 129060 -> 130882 bytes loko/assets/locale/fr/LC_MESSAGES/django.po | 54 +++ loko/assets/locale/fr/LC_MESSAGES/djangojs.mo | Bin 11651 -> 12243 bytes loko/assets/locale/fr/LC_MESSAGES/djangojs.po | 27 ++ loko/assets/locale/nl/LC_MESSAGES/django.mo | Bin 119681 -> 121447 bytes loko/assets/locale/nl/LC_MESSAGES/django.po | 54 +++ loko/assets/locale/nl/LC_MESSAGES/djangojs.mo | Bin 10620 -> 11184 bytes loko/assets/locale/nl/LC_MESSAGES/djangojs.po | 27 ++ ...entzone_managementzonedocument_and_more.py | 102 +++++ loko/assets/models/__init__.py | 3 +- loko/assets/models/management_zones.py | 214 ++++++++++ .../assets/js/management_zones_map_overlay.js | 390 ++++++++++++++++++ .../templates/assets/base_assets_index.html | 1 + .../assets/templates/assets/nature_index.html | 16 +- loko/assets/tests_management_zones.py | 201 +++++++++ loko/assets/urls.py | 3 +- loko/assets/views/management_zones.py | 87 ++++ loko/locale/en/LC_MESSAGES/django.mo | Bin 11667 -> 13445 bytes loko/locale/en/LC_MESSAGES/django.po | 54 +++ loko/locale/en/LC_MESSAGES/djangojs.mo | Bin 3232 -> 3788 bytes loko/locale/en/LC_MESSAGES/djangojs.po | 27 ++ loko/locale/fr/LC_MESSAGES/django.mo | Bin 13752 -> 15574 bytes loko/locale/fr/LC_MESSAGES/django.po | 54 +++ loko/locale/fr/LC_MESSAGES/djangojs.mo | Bin 3375 -> 3959 bytes loko/locale/fr/LC_MESSAGES/djangojs.po | 27 ++ loko/locale/nl/LC_MESSAGES/django.mo | Bin 12114 -> 13888 bytes loko/locale/nl/LC_MESSAGES/django.po | 54 +++ loko/locale/nl/LC_MESSAGES/djangojs.mo | Bin 3340 -> 3896 bytes loko/locale/nl/LC_MESSAGES/djangojs.po | 27 ++ 34 files changed, 1553 insertions(+), 7 deletions(-) create mode 100644 loko/assets/migrations/0030_managementzone_managementzonedocument_and_more.py create mode 100644 loko/assets/models/management_zones.py create mode 100644 loko/assets/static/assets/js/management_zones_map_overlay.js create mode 100644 loko/assets/tests_management_zones.py create mode 100644 loko/assets/views/management_zones.py diff --git a/loko/assets/admin.py b/loko/assets/admin.py index 1996b58..a5b2233 100644 --- a/loko/assets/admin.py +++ b/loko/assets/admin.py @@ -745,4 +745,59 @@ class ParkingSpotAdmin(AssetGISAdmin): ) search_fields = ("code", "name_fr", "name_nl", "note") filter_horizontal = ("poles", "panels") - raw_id_fields = ("location", "street") \ No newline at end of file + raw_id_fields = ("location", "street") + +# ─── Management Zones ────────────────────────────────────────────────────────── + +from django.utils.html import format_html +from django.contrib.contenttypes.admin import GenericTabularInline +from .models import ManagementZoneType, ManagementZone, ManagementZoneAsset, ManagementZoneDocument + + +class ManagementZoneDocumentInline(admin.TabularInline): + model = ManagementZoneDocument + extra = 1 + + +class ManagementZoneAssetInline(GenericTabularInline): + model = ManagementZoneAsset + ct_field = 'content_type' + ct_fk_field = 'object_id' + extra = 1 + + +@admin.register(ManagementZoneType) +class ManagementZoneTypeAdmin(admin.ModelAdmin): + list_display = ('code', 'name_fr', 'name_nl', 'thematic', 'color_badge') + list_filter = ('thematic',) + search_fields = ('code', 'name_fr', 'name_nl', 'description') + + def color_badge(self, obj): + color = obj.default_color or "#198754" + return format_html( + '{}', + color, color + ) + color_badge.short_description = "Couleur" + + +@admin.register(ManagementZone) +class ManagementZoneAdmin(AssetGISAdmin): + list_display = ('code', 'name_fr', 'thematic', 'zone_type', 'color_badge', 'target_frequency_days', 'is_active', 'has_geom') + list_filter = ('thematic', 'zone_type', 'is_active') + search_fields = ('code', 'name_fr', 'name_nl', 'instructions', 'description', 'seasonality_notes') + readonly_fields = ('created_at', 'updated_at') + inlines = [ManagementZoneDocumentInline, ManagementZoneAssetInline] + + def color_badge(self, obj): + color = obj.get_color() + return format_html( + '{}', + color, color + ) + color_badge.short_description = "Couleur" + + def has_geom(self, obj): + return bool(obj.geom) + has_geom.boolean = True + has_geom.short_description = "Géométrie" diff --git a/loko/assets/locale/en/LC_MESSAGES/django.mo b/loko/assets/locale/en/LC_MESSAGES/django.mo index eab5d06b0ff4fc94e2b7b7fbda809c47f1dbc692..6d09db7ab8db067d26dccc5ad383c9d6b67c0edf 100644 GIT binary patch delta 39935 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 DM3>ia5`2)zG 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 diff --git a/loko/assets/locale/fr/LC_MESSAGES/django.po b/loko/assets/locale/fr/LC_MESSAGES/django.po index cf6cd9d..4ee7d6d 100644 --- a/loko/assets/locale/fr/LC_MESSAGES/django.po +++ b/loko/assets/locale/fr/LC_MESSAGES/django.po @@ -8763,3 +8763,57 @@ msgstr "Assets rattachés directement au bâtiment" #~ msgid "Arceaux cargo constatés" #~ msgstr "Arceaux cargo constatés" + +msgid "Type de zone de gestion" +msgstr "Type de zone de gestion" + +msgid "Types de zones de gestion" +msgstr "Types de zones de gestion" + +msgid "Zone de gestion" +msgstr "Zone de gestion" + +msgid "Zones de gestion" +msgstr "Zones de gestion" + +msgid "Consignes et points d'attention" +msgstr "Consignes et points d'attention" + +msgid "Consignes d'exploitation, points de vigilance, règles de sécurité..." +msgstr "Consignes d'exploitation, points de vigilance, règles de sécurité..." + +msgid "Périmètre géographique" +msgstr "Périmètre géographique" + +msgid "Couleur d'affichage" +msgstr "Couleur d'affichage" + +msgid "Code hexadécimal (ex: #198754). Si vide, utilise la couleur du type de zone." +msgstr "Code hexadécimal (ex: #198754). Si vide, utilise la couleur du type de zone." + +msgid "Fréquence cible (jours)" +msgstr "Fréquence cible (jours)" + +msgid "Intervalle indicatif entre interventions en jours." +msgstr "Intervalle indicatif entre interventions en jours." + +msgid "Saisonnalité / Calendrier" +msgstr "Saisonnalité / Calendrier" + +msgid "Ex: Tonte d'avril à octobre; fauche tardive en septembre; interdiction de taille au printemps." +msgstr "Ex: Tonte d'avril à octobre; fauche tardive en septembre; interdiction de taille au printemps." + +msgid "Asset de zone de gestion" +msgstr "Asset de zone de gestion" + +msgid "Assets de zones de gestion" +msgstr "Assets de zones de gestion" + +msgid "Document de zone de gestion" +msgstr "Document de zone de gestion" + +msgid "Documents de zones de gestion" +msgstr "Documents de zones de gestion" + +msgid "Si coché, cet équipement est exclu de la zone même si sa géométrie intersecte le périmètre." +msgstr "Si coché, cet équipement est exclu de la zone même si sa géométrie intersecte le périmètre." diff --git a/loko/assets/locale/fr/LC_MESSAGES/djangojs.mo b/loko/assets/locale/fr/LC_MESSAGES/djangojs.mo index 03cf3c410d4d93791f2c1e7ac1815cb83b673bef..abe73c39c131e2cd3337bb15a7a8a5be2f55f5b7 100644 GIT binary patch literal 12243 zcmeI1dvILUeaBCTc`4vfXdnf*IlL?hBN-c<5cvVJEZL5=mTC!+7}Df=_iBA%_uln= zsJ23Q1c#=CkfuCJ0tu8MjMXu1r|q<)c}&SNZ3BJLluW17(xyyXI#be_J}B+9(9ieY zySsPSa{5>Q(;fZxbKduNe&=@{_vn>#S3P8Sor;2H2JlnFiu&x4P^3*m7n{eBM)!k6J5_%>Vx_t2Q^G7a_qo1ygj1e84x z=kc#Y_2VT-m&|MM0{AABUC!a(hw6_9 zExa9G3?GLYm*=4By$CgKe+s4dD>>hUsofY{`BOjK2{*wF@RLyf^ea&P`3MahIGx$LD{Vilz!ia8pju*%KufK z{sxqvybV?FR3?q$=R?(714rM1PH-#nD#k0pufhrVuTcFRvDy14;OWF?pw`2ip!$6W zRQf|ucKR~ZI39-@=ii3%pBLaJ_-9c0eGHQHeJ_+a6bu_ z+ud*vd! z_aQ2q*Yo^yFpm7=LMT1g=kYO!%b5>D=@CQO=Yc%_t5ECVA4A#YEw~P@!MO(DE+~Bt z!PDSfPXP@l*sBya!O7Ht}J`Gd5 zLHX0ma3_2fYCT+cMdnW*h3d}%sP;mrdPkt@-4AgE^BBZb<~b-o{YNOjTE(EsZWlrM z!v-jSDna#c9!l?fpoPca)$lv;8u&j@>*2;Lvw3qAevtS#pvt`gH^VE2GP}$}&GP`h z3*HXpFZaS#@KGpzo`4$f--IFjPM*I7r^Ezi6ylQR);#_NsQ!H&s{gO%d=suEe)jsT zU)R91h?k(=yC3Skw?d6u18N+PK-uB5dHPdOe)0@dy7gZu)r3Hdyt z=MWO4p=_wm^SCgZhxfpv$bRH-o`$=m^I$TM3-Y(tBVW*?vAGkG zFUh|!zuAK5@sal$xirSooPd zyd8cL8ACpf96?;<7DUfu$o+_ij3U#B9?iqnQzsyQZarTip!MtFJfQ-=h}@3IU#o~7 z`HG&4kv;_XO`ps7eF%w=GZD>^FCq6JpGEZChG@>rAx|Rn$fby$1|mPd64{67*_a{y z)mr^Hvc8b^NFM$~A?;?unzy?V&BFtT{Cxts7r7SE^FW4l%~Nn3SwtRHgeOFPHVtL_ zNFGe*kmi$~b;v>*%6`rQnxmgWzKpCvK7y=5K8M_Zw4T)j9z=c)xgI$WDI*D@XDxD* z0+$bzgT#*qBkM$w8{4S4RCCL*7x;d2sW&(3&W;NCwV>?OyvR|_?o#eaO7%467F$D! z=2G4DW7`P5$hy8Q2lYl=Y^q%(>Mb)6G*bQD+MpTe^oL079H_a2W^{huD<5=2yWZBF z=uko^4wBf7Yz;K5qrRWi+|Z0R8cyhXHQP8C#DN)2O;-+^OU zEEd@~43dTB5|!eZo?sU(Cvu6;Jg&x^>bF+X#}-mR%bkY5ZTM)Y-BVHmUw@H{%`4C?g-yC{^7kb@)niY2Ncaw`h+-3&UnRT413@&BH_NSWWFN+K7RZ9AGVJddRGO*JR=Z8LVz z39D{8yDE%v%em90+F4mF@S;?KfoRaiZoN@+Vprixf6&l7)%nPd(4 zVVwqcNT(eUnZCJnDDfJpN^~cvxct zozpYSY5!2-_{?V-V|=qUDP2Qa7Hg%Zz06zyHOBqWt$L9RmR7`Wnh=Gqwvt=3xD)U8 zGqZy!6gs$tLIr16ll`func~~VHA;(?W?AQ29p}aQIwm#8Su1dt5!(vke&zOX6%&~# z?qMxAc@-6GrM26s1!20*;1pW7QX91@ESFb!@p9SAwOjWh*D}JlutqG?G;b{@Z7*Ur zp-(o)8Mj>Z!mAe8UMi`YJ-JE23~4LH2_JR0)Lk~Q^FdfoYVxvnqo@_RPBLsJ+^~)# zOpt)D`YfPjt+RN$oXqnJE6vX4Qc!%W#%p)g4>a@eE36-TKHH4hU2gxL&t|q~-nJkVu|~DP#xS!y|UaN#~n_6Bvy0hXw}Z1tGGID5_19y8T&%IxV&W;z?57PZ&wtiYjb!7Z~mm&?s# z5koYs<3wbpwaRrZa??TNrALTXz+&n|CoYUY`7Ae0bZaFuld#wVY>sLZ;S@>4^ z4mvOU=dL+uro-Sst$D0YV`0#sOBqlehu_yajD##vu61aNwO$rkKId=me3~2<`P@5O zTZ|HOReff|J}i(PBRF_@br~uew%QJT?ITX-M3K#h^gu<6jam}fc`RGYcZ?aQwfQgv zxGP)IMh+7pCd$rJ>2zwJsKQ}0<8WY_aVXe1bC?+pG)Zh`k_LxProPTh`Me@A28Ou zB)9sB?;uZyu;nuFi1y)O`TXKSwS0-AbF>Pie%3yHo>;Tc$9!AJDz%Ovy~fhpPF|;5lVLNX6{oo5#q^O^}{@v~k+>la6W6HmjqI6UOWbv-;A}kK8T&He)^2=a|0# z@+RE&{4jHF;<0EhS|?Q|WFN|x5saL#0K=V9UES*{n}0&I+v_gb>j!2|r~8Ulp-x9g zR5uI9KuxkaEN=aNc8f(6N)K+8Fz|E|&b%l)zs>Qn!e>bAvAo%V?O}3Qn*kfy9LLe- z66>3eh5Pk^tBU#83kmFG^f}f*6F>o-;nUs_=%f_ASQ*(ahQW2ji%g-r%_Ze$pVG}c zS*>-DXG^(-qsh?j%FrCk8@i0x>Cv%0qdUj#-1xqk-BWw}v_pjPP${Zf^gaANE6Xv=MfJ!|{4PkUW2LdLZR8W$O*I6GPW_%1Nzx zHyj%GIs15ib;MqKz>E8)Yf0$Th9)?RMkCf|dm|cc-MCq+Bf+f$zTIXw3~uf#+@xe~ z-DUCK+@8<(;{8f-AdAyghl$ROP_a}`V=NJ!a_y^_-kX?Zimcq$tlZXgE(#0ZQ0XmK z_x4n{cNg@_33=#^$Q2G zmD?JwO;>JfR&HxnZfjO7vF=f=uy YP49id%54q*gD>2}tlZZ8zuwmTFO*Fxm;e9( delta 3466 zcmajhYfzL`9LMpq%SG|B32Gt)Y-&55Fw^*^GyL~+&a>y)=bZmJ z=g}*xT30wfCPW`KluqIyqBq)@EBIa>a#HYSL>a3EerzB1ooKl~Yo z<1O2c@)^UQ8OR5hOcFkT0pt;mnM@^@3o~tp227;A8^_>VI0G-*b~JZCNIL`7uK+dh zZU0k{Q|un9HdV>k}q!D9RpNs>v9 zk7U4)8bBs$=0&KCtg`JI)PP%%F_=yqfu}Hz=bH;uG?PoHl=k8y_=h^+P=-4UQ*bCw zwCx}!(_Vp^aXo4vA=?h)W3<0PWx&JD<1q~bSd5NFw3SLM?nEYM_9K7hO+NJCF3iJ= zsDZ_BQK=3fzinos`Yo|mTOCxt4phGnP?@=aWATe&NHH_gOpK0$4oOQ@M$vF+bcnfMd6RLZy3(udk3shEoa)b}e<1FJ#J zd>78Z(`q|ZZcx#h4)I4irXzzi`N%4mGUQpN9`(Z^)Oo&)bMOW#<=HH_1{_3XW*+K= zR*I~GS%Vr-GioXJqf<=f92KS1!{Js2Vo?J~K+SvtDkHOPdl72Dm8h9J$bK|!s0^G$ z&G-!J_j-^&^DQ6x{w`{%qehW`ozuiokqeo~a+?CwjLT31X|nB3)En(%R0e*<@fgEV z31Aj#K+935sv6x*ih529>cJt*!_%Y5zeaYG3re+*1yU*lsE$*u3#=8WevPPp9jMHl zL~YiywtWqix!+Lz@1Zi3NGJ7w95u1&4i$IAsI{xc7_7x8Y`|D-Ld~ERy?6}O{|#jO zm=hR_pP^2}=cqk!4KqR8{<|=Apo=4dWJl`Zy(F4;_Bg;gs zVJ@m;p}k&?8eo-eH=>8Oic)`n8DuYL)<=k=#34e1>MMG_nMb^4uWZNtwl4IlB%@|C z!D(~<54a0ebQHB2RhAKXZjH6ZA|j2@=~_ojBvdMhwZsyF$vNf#747sOp)?l|Dmoro z?^Z(lL*+?gKJkJY|0&wA&)c@%8`=lOg!aWVgx(c(go>Z&rwS!Y>)%(ZsTB4#P{%Oe zwzUuT5{<-6VjmGAHWJ5(mk2E#Tf;m-Od(z;RAv)3gqBq0RYJ?CS8{aU^K~@X7jD_c z=NKYDlo3mbWJ3RFs4O5l-CE>h2jmj35SxerL?vLNz{(k(KaC1VLH+*Z@IBz&@L|bh8rz!bE>bg(WRIJ@vwRzK~ e?o)xfapC0DBJcm*m304IrhA8f-Ri2^3iB`S0zO&* diff --git a/loko/assets/locale/fr/LC_MESSAGES/djangojs.po b/loko/assets/locale/fr/LC_MESSAGES/djangojs.po index 807bb46..79e39f8 100644 --- a/loko/assets/locale/fr/LC_MESSAGES/djangojs.po +++ b/loko/assets/locale/fr/LC_MESSAGES/djangojs.po @@ -722,3 +722,30 @@ msgstr "Erreur lors de la validation." msgid "Erreur réseau." msgstr "Erreur réseau." + +msgid "Zones de gestion" +msgstr "Zones de gestion" + +msgid "Aucune zone de gestion définie pour cette thématique." +msgstr "Aucune zone de gestion définie pour cette thématique." + +msgid "zones" +msgstr "zones" + +msgid "Afficher / masquer toutes les zones" +msgstr "Afficher / masquer toutes les zones" + +msgid "Opacité" +msgstr "Opacité" + +msgid "Fréquence cible :" +msgstr "Fréquence cible :" + +msgid "jours" +msgstr "jours" + +msgid "Consignes & points d'attention" +msgstr "Consignes & points d'attention" + +msgid "Centrer sur la zone" +msgstr "Centrer sur la zone" diff --git a/loko/assets/locale/nl/LC_MESSAGES/django.mo b/loko/assets/locale/nl/LC_MESSAGES/django.mo index 0b7e96dba41ada9d6e62a43cb8270f2fcaff66cb..2d6a18393768b1b3e9bdad316e8b0af9d03d8626 100644 GIT binary patch delta 39890 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 D3*IMA delta 38226 zcmZAA2fUBvF+cD656ukxjA+k(rE$%&d}8h(shpgHqNf zQC8#sdY$|7`1ybD$M^1e?S0+nr22f%tVum|QR?`~Y$@K1@tjE&i{-*GeGi`We;h6&SR zvBX#`9xFkhAPFt72tI{{aXeaZ1s2D{m>&PeESP3`)NvlPqehq$+hQi{h1qaWh)=+D z#NWY;xERyZe{3Cr)Ff=f(zpk+;-6^4sb|Dux$#akzbaIPzLY7x|kW;U>kfgq;En8_I2<)x`HWZMk`PX zZKnq2#g^y_J&8_W5XS9rGy#`Ml2R;eyXa>3! zAE0}`6N};@cq2Nq&qMqay0^ch4W^qHtw>q) zP&UV;TY%2I7rG*2&;d?F&(wQZ5O<^Hf5RsD7qV6HSnc^ygDtTV8C}tWQ_;PghYoBd zdMNjzdwvz&k_-!CvAeJUx?*k7`n|C#zKn%%1-b$U(0WI(y7&J#0u@O}r#PHV41PxHCOVz!Aq5 zM>D$%ZKyRmuvgIzUq>5Qh-GmzTJE=ypLSHSGfUeZzSRV(W-;Yg8SpO0P z_L5K&uV7Owzce~j1JK(r39H~jbgPb{_0qi`&Ac*t$nHb8s1JI&XJc{Pj2_ZcX#Lo- zs9vRItbZc$dr7zp`=Cqr9@_CHbmsff8J)ofn6NzBqDE-`BO%@&EjJ$1<9nDES7FjX zuoUrAm<}_>KZs6cZggo21goJRl6%mRKZbTR80}yxy5}FDOS}gycK{vuMRduNt%%a| zqwUwi6xbRwV7x5>8+rnhn}8|twNPLTx>s+Z4K6}wv<^h2W^dN`(FPMn2) z^H*UOJdB?5U(h|hjNap-o1y`i3RXqisgDk@MX+PA7rH{PpaYJNCg2Pgp(9;~rEyz` zUqCy)j$Wr!o1>YPLDTEuo!AOJD?QNm`k-fG2wHChI-#X#y?w|)(1Gm%0?Xr*(o4piAEk z?O+&MZ$|I~tU!Ew@G_PmUSw}{c<;xTi4VkhN&>$VD2jiD0(b6eA;(7N+`6VzT@k;2~sE_IK0kqtsA^mAgP5foF{bA^ey}h6H_i(Hr!2x`P>F^lZ z@Xu(2m(dRX!*ZDAt7ygQp)+~{OXD04Sz%j@((6rny;fRD}@z_*G4DQ3vG7{dNvkeDewQM1iT*S z&})?AP_(oa(3w4qp5AU~#}hFtE=IR#BU*1)$UlXN#BZV<=Q|u7wwmYwTA(xUj!A$1 z*M~rT5?;o#xDgZa3}(YL-$W~OCzc>y0v*8p!7iAScz>*fW6(3T3H|czKo9d7bcHXW zEB6nk^8V*J68%=1h}nrZL6@jKx@Y~+Ycvl1=1)c&o`%k3Big|>EP#8_nVv)Ir~NiM zbcNBax(i*|Mi{rkg9L22FFL~K(GG{9`C~$SG1}n@bW7HwD|9NP|Aje-|BLKxEc?-D z3+kdP(h*&`C(sEDJj(vNhtorW_b?an73e@dLuYmnt#};m;9@ZOvFL|MZgfEP@eX_j zz5lPFKVu^Z@Cl!zaX8mx>SuGUx=UqUOa$LhEX8{vQGfEt~MPJK&s z=1*cKoD|aMqV+eS1KJz%kE1Jc4qe%J>}2#COFH!Dc2jgu$Ds|(Mz>-GI+IQ4ci|xB z#Xr!qlJWcK@a8~gRuXNeO0XF=Al?Bz3vVOs$72f!IHEOCLTopB3yuXZqDz_Vhv+ot zMmwm4&Y%vuBF)gPxDOrhBj^BnV19fVZD)G$15En+{~ZL1lkp3>1sQ*gW>^h9EN#$+ zo<%zz7UHjCKH_sRH*UdF_)SQU{S@WrM<-Yd?dN`U1)j&;aRPAy$#6P)$Y!D)FF^}# zN0)jpI^#3wkLye5%yXTJ@(W-g;x*BkK7wvpU-S%&M%$f^#c&nI9nrT0toR>#%?h24 zDpo;9-V&YpW7rUTVntkr4&Ve9!Jk7s?a$He$%?Mr9q8>Sjdx=sw7u~^v;UgyT$o*IjpFk%t39YvpZD%i*$D`;9ra2ScrXpy$j%QeZ zm%Kj-Iu!53H_(~CkIrB#dK&QJb^?4bI}T)Vkz8%webpCu;RI>!zNgl_zUP^S{u^$V*%pH&PNj{gpG)o z#k=uYG=Br8z;BTikH=0B@RXiI4@t5MQ9LiYM3t}@Hb6Vw}< z)o6QrLjF%7|1zd0J>^B~v;SEMWFR3Qy62_P4@Nz-fk)8>2cTOu4jst5X!(!P>-IHT z{x`H-!v7-kVn*UsFcBMu^sbo3`#*?)dovuJ!36Y>%nj+=(E;p3J31ZGZ=eHD@q4rq zS)j81>jTa=~X)TIwLER86I-zsu08?CxW}YUP6`fFC%Gtf^nBR@6D*=Lg*PN zg&w{N=xJ_+j<_e5#?k0ruSN&(5jyZ)=)k`U=|7CtIMhEm6x|GM!8T=OF*U%1A{u_042Re{S=yhv>cHA1BNKdSaL$C&}!g6>H zt(PbMUo?PZEq@Ce*tEp|Jag{u@Q?C-;FNm@92orrHq!k0J^tD&;gbW*1{ab zTcF>GPUzM>g|1jXw7s$Dp?epf!A%%1MW95ggrwi~TB9R-9qo7uT5%D&#GeKap||4< zx|dh5IsT1Juu1ADJ_gGWKY)q&58j0Z(j+7u*0yO9qJRHqBnjTjHR!24g3jbRy7Vd1 zMkCJ=EQ1`LSR*Wmk6}@aqg(kdy5uX-m06FTiM{B6PoVw%oHiacoF-jVpdc0?qaxbD z{pgwKh2DY@=pN4vevEc}935~%`e^AhpevROy-lUimAn_7U=MU)W8xuUHagR-=$?Ir z?(wf^1An0%<;@V~*GCUiyAbb=cK8a~!6dZ3)#zE+j<&ZCo!EEihc14NfHTXKFXa^soGx-LSev?73Q$prwfcdcz@$#4)`=aFrhWIOJd&AIyk4F#n9JIgHn9}?I zaY)#Kj%+`Ah)$!2=y$Y%tLRM9Wr@x}2`oXpDLT;J=nUULJN^Le=p%H6x1;q>q7%G{ zN&oyWd)BCfa_H%75Nv_Y=mE4s2lU$YMLT!}-J;Q$i1X0;+d}>x^spX6KTv<5*E>bF z=nI$*<6eV01f1bx=#2ZJOZ5^u;@3m|Qgn~EpnH5Ir2mbch0NKbffhh#UOm_lJ$(0| zE71|%vVqyT{}y~H6c~Cp+G{c8fL~4*t7um-;wkt!H!3xdp#ek;3jmY{|o8q z3q~tc6#cp15MA;vX!+N$Dz3-scphDuB8kzA8=~z$imuGS#CY^28$yDoc|KOa_s|)C zgAU*S_jq5)(^J1&cE)qUtnc0|kdLRVlQdKSi_?aV~Kxa-lweJmaVKcIX03)&SwInV)>Kv$%Eh&M$ia1VNBI)(TU%;x={ zK)@N#L$BXv^e`R`>6g*1$y7Yrf^D*2YSd7N<{^8qBAdzZb{wXJ?LqE1d|RQy2KOE@^eD|Dzw8d z(E*)8SK@cHe7e%ye-F={rK5u7&_mb=9mwP84~qdIe>hrk20DPH=m0(o@e^qI>*y&@ zTP9ku9O#x6Mz`pGbgTQ9;r@H?Cz8+rr(z2{j9#w-Wg}alhqE7gieEuLBrDMdcViX2 zfbMyra?wBk4Byg9bgqS zy%T!q`k`lMG+KWm*28y0{1heg?$)CZBB#c4N!bbF(T}2O3iHcE!jnDzN zMYp1Rh`)et_0wSjqc8gMdGkz6co!RT7f^tfng7 zMS5>^Zx>=!Jcv5Uv%U{(1s?UBc6hO>9(Rv`7K)hXLO*KLVB8-(N^R{%N0SttQAAN z7CPYOHM#!=9wea*c0y-32A$zVbb!-Cd^x%jYtg0t7@hI4;8}DJ58p^^iXWphNKq%6Sthi>eAp;~Lylh4fpw!_XeMGK z;%l)PUPI4N{d&=WdZ1t0_$UG{=|ZfJThJBw2i=ks^&{^30d;0@vGe>Cp5n z=u8WuD^?Z#vE4kxd!j!RhM+4p3!U(0O#1JCek5SU%b19%8b|RGXot0eP0$(Mhj!Qt zUD~1OAzY5Ovjv^;SLh-81-%_N&=twrB>EXs5aXWW8U!r(aPTSgln+Lid<5FySad7q zq8%+mx9k&i0DD6EF|^zTbOP7W_LDb_+Pwo^xx}X2fA_8e2^PEuonc!ngagn|=v(Lj zR-z4mhR)<*@CS6D7tw2X8C~*}&7!R;if(afbm=RhE7-PKJet8XA>n!SLo*ItvX9X3 zz<%^pA3-}hjUJ-kf;WQcn@1hxLszH>TCO@enw>-b8;7 z$ar_uKudH+?a?1X&!FWNh5QX@ho7UT|HqJ@qGeP+7rL@V(WP&VtVlf8oj`FC1_o!L zOS~QJU>DZHV^|Gywu)Ay6?!I~2)=}+h`)h;A2y&XcN(4G-&g^2-V=Qpn__M6|7Zdh z+<}hlIQl8QgjUROZ#08q=xMJKtcT{`9qfv>GYDOwDIvZe-GVd0Kd~6`cf3%~qSOpiL13ZGR$RFtKDS3ZnWwd@Bw4>Ho312`5xCA}SpJLK~ z|MMjQm;4O6r04NIO!h!jur-?A86Cg?ERT!PfgM2)zR;|>cOak{Ah)H(EKN{Iu1t<<0f=qUj|R3--jDm15-T|<<}3k2|j}k zVCX~Ke-GJo65QLR=x-)#(bIYoU8?jCN7p7d+F?QT+Ezn5yc<2lZP4}xqt|po@O|{! z?F#YzXu0!o0_6z&i|$d`Hqp#Fqg&D!9l-PGp1y`QG(F_cLBAL8qBB~Go{dk@fgMK& z_A9z#ncGJBh0%$`>k{w__Yk^=kDxQ_g>KEOXvfphj+dj~`Zeg!h#hFd`$GB;=!fWc zbcVUxMFT92)~kqi+yLn>9&1Y==~IYyI09|(9rRSM#4@-sr2m3;a2;K_LhYliyFb_w zoxqdmkK32fc4nX*F9>eHOy2+f1YE+C=m<}v6|MyTMGs+`4$%M$1#6-+Y>n0M33Taa zVA2W&cLWci13HZ!&J-Q_V0r)R67Zh(K==H0bR{MSm!bpMhW-%w4sGacFx?~3)|5sE zR0;jD-Wc7|$It;ihi=)cXggyt?%|qFKo_D*zX~15PIS-rpcM|Fhw2Bk+<9z`|DheW zel%L*-e~@7Xoqj16Pknmj94Gi4?N2Kx4!Ick?5h_ zgAVK)q>4BbN{W-jsyqN8~xBck8|-&^pI75Ec$8K z4Luw4(ChX-Ihj#E1 zx`&g{t(u4al=}c(iKA%4KcW*jiw-DlmuLm@qwSVK5BpsqJzkf9GirraY!e)SR+xg` z|2gO$uR%Nd3axh(oxmyd_y0f8Lzt^;)KN(+NxVFICfcD}&=Z+hJT{1cGnj%Nj+tnO zYlC~xfqaktPIwNzW*MJ|EQywHjP7;&V0W~m0qDw(K--xZoRuW^Z*fRigN|@3I-svZ z{5!ORi|C#w?-n(j7hQ=m=!~nP9W_JGRBLpFdZ6X{246-8_8MmM{!b-f!A0n|`a|@- ze~aGpOXzLL`eZbKyU+&i!&3MdI>0d@eKxxHE3gf2M-O41?$IqNfUaaQO#1i#n-lPG zbw>}!^JoKu(Sb}vuh$Z^qm}3i?L=p~51qiNkbVK3@tz)$F*x`ECx&C}5#%7)IU0GeMB?Vuhyv%9ebc0$`7fnM8j!RhE0 zE{uo3I<$e$(Q9}RU6D)ZilpcnHJAtOpdmWLHt4V0eM5XIx|J)@0d7TSdJx@`vmyU7 zx>E7v&qUX#1ln<;_)7FQoBhG_=>1RIE9x*eI`GoyHLZ)zygfRRC(#MK z9L3|Y2?Xq50eYy`g!pE3EB2vh;Sk!;MRZ0tF%h%(4u=VyaSL>&9no@61P7t@r=VwU zE=K?RKLi}{Hgri2VsF!RQPpq8%(m5A7y&f``z0 zKZo?cv9$L;=d)3V4X^_7e(2$uk0WspdWc#-7Y(!>I@6x$iVa4WdN}&GY;!{XadZF| z(UnNuH~J0~L|39H#?7cizz*(4XLLXMVd;o=G#p)_x6lvL5_G1!(efwJ8UKcr@jtYK z%Kf6-QXkE4h2EAf!Dst%|6S4{Az?ha>2XFx0({IteJC6?NAGG6)1EP2?G`~1H z!@ENIy=eVT=#2ZKD;7srdMY~cw@t8tCFlocBihgobVkR}75F*CFQF^(H`+mpfzi*5 z+~~mSqlc^ox@C`rct5nAF=+d5qFWz-pFn8>+tG>_LxGgfM+NT0;-pu>V%QPw_*Jz0 zRCKT3N6*YhXv06DGrobYT;>-d3kEA7<>ImWA)y_*R6WoS%s_MnCZkLB4%WwIXh-MK zf#rHJno(V}{zK@5x`g!c=z!;=w_zRD#{HP|@BgQNDLU1;&?TylcH9W9a4-7fvpae% zpFx*)3i@GsFT}T^Tk|zKE$Rt7kVfQVA6m8TbF=!fF1Ng8ytr& z`RF0tjt=Y)`dv64;uq1w`xiQp*x=|4WJEhEhDEU^mc-8J2W!+|?!QYtp9Bxha&)P8 zqD#969pGv7)ZRo_D(jHwa1}+%*F*Y13$1qmUCGmEzkkL< zhW{d>*Cii1^GfJ|TA>|0fz`1W*24uM{U>w<&tcLQpzXw7jkYu=8n243(B0@jTB9ox z??%85`-Y5h=*(uL9e<4O_2(h~D0-OA2mcQF8HPqPDuC{7WprToqBCxf9?qxHm3l79 zkH-dw0;A9wPe(_*5?!L5=;1ty-uG+hVJbK*+T$kZ0J{YHqca{?m=*ql_4s15M^jpy1A3hKH=P;4@6?Exy z4vz+wAHC+KF&F*E8WV8l9nmH0hc-9_o#`k{#AWC$*oWSVQ)syxA)aDHRR2z_NqTWC zi;trNejVM~w?cd!CjIySpAc}VcA`u5Ew;uB=ryT7GTQTd(d*R-9cV9frCtc>)99#taWuaQn%^87V%yQ-+Ds?Gy_}EE;8S#@2ha{Lpeu9(Z6M>AXzBBz z11pYx>nme@Y=igUo9I^j6wEg^`mVG^2Q)ZNz@?fPoPqA?e6-_b=$>ytzi9hI`gyd& z>*#kO-?(Ui4`I^E1*f9rwqaTP8NEf>#z$KiuSuX02~DsHjzX7q6FRU%=txhXx8xGK zQkh?mR;WB$t|huM5259|qMzpH(X%oLy*(q*GcgUBSUmOt0Y5-H(4{|#9>R<0;Y&Ut znpsx#8Wly$l?~~2(1!0v>pdRQ2cj!C8trg)a4ovBdoiQ;|0n?~o(FVJtOZzN3vjJ$sE&3gk{{6oclcI{b&?PH@iC7oi zyUyr}JdLizNc470KpR>b{22XW9z-YdExOeIq614mIa<+tXt}bJx&My5G6~MC4m$Ft z=*-%q6`w^9-K!yg4tfSwVIpor2XZQS6|J9sO7y#8VYHol(0)3hThM(9_umn|N`fPL z9sNX3L1(xcJ%szw22Y^nuY~l3snKo8jFvBn4y+0KQ}AK*tUQYj@D;SZ$ss;BPQZ@W zpewNv9pMgi>Gz>~{VjSePoU-gLcegaH=}s&U}1D1WznA5X3BzG!=IpzXw` z67c8pY_!3J=uEeu12}}v=zDYt|A!vd*jrJ(oaoH*q4^cj6>5l{mHR?|Tl7=k6W!v$ zSjhYT1_4L(Av&UU!L4XRd(cC9BzPgDC!ZGOX9?yCuwrLYJ~Kx<%E|fz?L`+9udFq(2)Rfu4bx=-FC|uEZY9 z?)^Vbz|;LZx&@hML>-nu2htc_%GSXS=!$hg2i_e$&BM_xn2mnpSD-8U4Z7q%pl9te zI^gRVcd1gn9c5%gmn=8hPzAJN15En1qXX(1@}EOjXed_0w?h72wEQu&o!`)YZlD87 zH8ZN0WhVFEQ(cS%SD+qRuoF77r!g6hLJ#R!bm=FdOaC@nekD5a%_06ZI?(UYmAQaU zB=xMQ-Gq8B7& z`U_}>qk`i@`XsdeJap^cN58BaF}3%9CjlGUhc4wAbcQ!^AZA|>9hxy%kN8JuM_17X z|3*HgvGngoTUIXE1YL);F62-jfTy}C-kEy%VoTH-|X`jtbsq7~Xu7qr6x z=#syNuGo|ipMxH*6=?Y#!6RrpXVI;Qy%&{Be2@F@OsbLKVX1{4mgeZvcR)LQ3~itf zx-!Gjy_|)9KbE71^)vL8pFk&YBba+pbc?E^{j@>1pzES|)M0ND>^L5rgpPCpI+N{a zgWsStz7o=7i=&mxj&4CA^ei<-SGGI4QbW;!PC~bMDJJ5_aRScpd-NV(4E}{K<-h2_ zvM-4SPz+sx#%M#2peyria70L-iJqwyX#2a-zd8Ljr2mbjh{tm+jh3PTI^tHCh~3c! zMxobb9y-7+=waH4&g@HcKqt{t{ud^Fu-=abUJyNWmC&D_ebD;-qB#HjkAQm;M`tn~ z?RY*q^3CX3_yX7j%HVF|GIiMFK9_ zFtnq2=n}0)58r0Aq5bF~`VL)@E9gqyz+#x=gXmV&!bIY&usrrcXFN0He~50~HjF!x zg9PmG1lr**=;6DLE^Ve2(GunimO{6tE;`_Q(2hD|349%GXDue;F7)>NhL%sgGU_kS zO76cM6ehupQs~mwMn~8b9Y`B2iapVL|3=84i|*-4^l%;w>BrC+pGD7B?89gx8PRe% z(5=k(A@|>rRw2PHXojAFC(-m_XoqhG-$NT-kFLNzw1eXz{u?@xYv>m>-KuEia--$T zq7$l()_WjMz?pUm3BAzS(F+pcA+YJu5BI z57Pta8S0OgkB=wd8F&ZnXfZm%9q2%gqDyuTJ=K?k>DNU0MbHkap#!dsHhed_=N-{4 zelZwFCo(dM$72%-xB}DAQ@jXmU|&c-8PYGJr#;8osC;>J1?r)<;}P@&)&rBa4js^& z=w2^CJKl(X33p%?@Bgm^EO;GlDD}FiqwK+QXoJl|yd!$(2B3TR7FusX$X|ipg5Btf zUJ7PhA5E|ndWP=Dr2qc^NdhkQ^Js<9A^t9UDA%ETd>Ea{X>=uSq65qMQ4}v3Y=oA7 z6#eP?40^qvL$~rJbbv!KZUajQ_=((%o`tWlBz}j9m|{b8CW@h3Q!B(A(F97Odt3z*u^qZqFQO|k0zC^8Hii2?JtVx39>%rk>D`GA;8gH8bf*6c@#LGM z)14Mg&w`$%qUcgrMki7W9cWv$y{CeG;vr)IdhJG{4a`JGyafHRxeje$BRa6X=+d6W z@|bc!=H#y*K=m=-+?CD4J?MLW0$y?#%j zhjlC_-SZG%5aJ)8-;>SgY5xhWmu_oxHp*hs{eOUfOWg%6&<8#J6R{R6npj+|=rt|0jGy*Qsd=qdLx`bQMQ~VWr z`mbOW%(^XVs42Qa?a=zY(GSrObj8M?6Pu29yfDPqqvdyC(trPRC}f;P8@P&oXp(P_ z8pw-oQ3*7^BHD2sw4(>n8FoSIJ%dhU7&?I0(Qf+F|Zp(af5lEA|XJu+iwDormuIs^AWEz~7*U zJ^owBNWVK;f&A!}6h~)V9vxt9bbt?`GwFxUa3tE$Ec8S5G1|d4^zjDz!_IUXVw7SyYA>|pM;fgCsxI)SOLp^5#>LM=1&Z6!^*_3pkLGyd!sF@ zgRVrgV0%pZ-~Z`Jz(W#8e=5C=?%^lsY5xYD(NAatf1(3Ty)Pk_h~>~TaUXhJ+hZLZ zj2^ZPSQpQt11uhIM@3J@foS`2O#1)-H9llaMZaLP(S{bFGhK?V#8<)N=nDOcHuN7_FT+>S z)@4QW>!1UD2(8~4UCEy4Cws_O+T9jdhG zVa$dOq-3xhI*`g}yLSiMqPOIU1KfW{IG6;l*QiinAuc4o3T>eM!Dxw}#nQxwqkFjm zJ#0Usdz|CzXd(}y9dCeFEi+5PpDnE^(i{_yT3#r*10Vwxn&R z-Z|1ax3T%iPyBc+3yFV(Sy(ZR4N&0#??D>)nY`CRXPL=cXg<#c>iKk|F`wp?J52Zq z()sxn+d|qY>a9R_C$^b-FOt`Qa{t<2Qk(qzJxxa!$tXsl*`z;)pHui-(%zy_GTu)~ z{|=W>aWUm@kUxrYB}w~{a4*XKK)5jF=2E62@qbA_MEpGOO6vH`CjI~S`13y_6<6{$ zAafEnB&`LNea_$-Dt8ZY(;g=LA8&EWj%N^AZp(X|{IZnqNM0A(t4LlK;@x5tNJe!@pcYe@VM;o-dhQLa;1sfWocMB1cetp6QU7)oX$?^_f`iyUQ1;^I=4Ts zkyn6-fd3Td`>#0wmdB}_3 z9~v?9B;kTI?lU+PcsW#TL3&Q!FX-TF$~o|NuxL~~>95(T^9|{%sI!D}HF*b6rWxr! zhH|fxf1Lawq}@$3Ny$Iba7A8zsfo=A9qyvwO&aLM`w*o%6MroOX|HGFkcn5Bz;PZq#U|HfB zc&{>$|B<$YMk`aEAAYfZ=#vd!qfCC%UZh-I-sPlaBW-F_B=#3!pF63aH2?AhZc^cq zknt|*H3%1_vQIz4RV~ajFr+OfEg5y@k^UXwr^xHYJB`kYQRWriw&XuU+F{w(7`SWo_(e(U+u|NXVkY1C)VZ5d-p8yC{e^LK<_iLar|O&Y99xCf2p zBc91diC4L80uO{q{Y~0t-qVzMoHE^LX9|8!S~1>l{r|s^n}p(w-sc|*cHs4C9MYB& z&PBK~%#9JvGSqe z2Pio4w#IBAZOA)LrQy8K@}>&|tVQ0)P`)c^Pld9L2){!5#L!_W>fFmal=SiRk)N>7 z+r04#6dWB2en){qNm(2a3htudbL7t;Z5#1fSc$Z}l&co%Y$E<`s3RjoxD{oZGN5n5 z05?<4=Q+~u2z6^E5BERH;$OKXGZP(M4h3%D3>v5uW|o4y+@!4}{xadxygv2l%%?Bu zABBz<5uZ=lVdNDhEjjNGKTXXQeL z$)pt~tsVZ&d+SL?xFwMdyx)ZMnqdHg@o(za4uw01woYLMUVqu;&#q!esF#(2#ylB`cZODrgZjYO(_dm)!9Xgsx{CmQ$V_V9cq0A}rPm@+U z^zkS0r|8t@7-a?}WB-4pU?T5K5|5Htm-kaD_&19_J*jl-DI3E3DC3hi#H&z$0uAS5 z;El-pg8D^xC-Z(v+OE)Pk5Il2>Cck(yWjs#6!?|~Qs36mQ>6LyCv6&qr}I`MZ61|& z^ZpVB(24Z9q4AECZB2LqKEzvwyj+x-T>aBWg^f z6%Bt!r#T5HhE9GBgWDRkp>>pB9~x>wyy$HMdVz+0GGJ-S3-=D@Rlkg;NCGi;=cpRSyg@2*YL&Sa3&`2^~ zpAj}l*)6z*LGBJ6HzIzJ_fgt>3%6OAw#x9fxu6t{1|0th7RAv<01T9)LiVj z(C*Ka?@wB1+FZ-~nm_+n(!dE4oAcHoyfIY1^=AWpNLvybI)(Q$s8V(k(rREH8XHb} z8`@iiy&NQIK0i|5r({Izx6r;(|Nnr*icoN0DEwb2Y-S5aJA=aKXwWA&Wgg)Dm&T{# zP0AL=r^$a3eR`92G784VQ{U$g+GvFd)GI~Vbi7BBa@ha>QD_bsA5dsM87p{`g+bJ( z(f3GCOPTc8g!JiDJV}`o)bXi7y3fT>rxZ3OZ4vLggbRg%MWy&nhem-RH{efyA;?? zVo?hD+`}L)llNzccOrc2X-3&s8Pta)JWKkNP{#b}J7QAOmqMK{{S8M z?4?2)22hX&8xp=q!P&&$BR+ue8Ol9IdT-uWdCT$MdbU%h31uF`OVk<5d+XUj;I+`{ z8tVKN>OF`lZ{6{MM9Na|u`rnNg!xB%u_?R@Nh=>3cq%lUo%lF9TOArpOL}_B^<$Pb zu}&zzlQKI9e;;Q5F!4QvyHl?WeZ;#`cq;*)c4R(^b7`zEW(nZm$X$^>vB)*L{eHIh1M|cNmiG*)GeMmb@{0Dy$Uk;s^`Ag{Nl_^7qXOBNj zwg3A(5lXZp?@hw@Q6L)*qm|j1on{yE-W6I+PPrDL&Ql?6A=8_|`!nftsXv-`Y8dh^ zd?V^NI+`bq@KzzCBf;8)zo3J6sr&}|_9+koQm+lsTX9K2KSn7yVn)S|QRGAEkoNtGq*~=sy`~jy@&mD1q>s45SwE--!EM zAf68gg>nzt8E*y{ho6V`-=XcSw+-Yi>ObJ8sS1hnLSs+jdEzfq_{&g{c49*b-$mKe zq#wX0ysZfrp=|EkR;CN-FBAWXybioGXs;0OU$pT!Z9GH1Pg(q%a`7Jt93`-fLMuY1 z1-_;7LDGwm_9dN+B)=pL9N~SI`~jr5AkAkaX&Whf`?G=i_meO@Bxa;+mr!OK<--&0 zzmdvRI6{H8yd8OS@ZL)&#X~0#;t4ALO}U2T{okiI=^upjhk`Fs|5pk=iKTe^Q099k z<8y)VH242r5~@aNu{>04Lwso%VSg$;Lbw_4+E6haX+EiOH;vThofyhTIniHNl0J(% zpOM#__vPElObnBH*1t7*k@s`zyiJAw`y3$e9R~FR70%&(l=+$WJqlLB#th=O+bZp+ zd|%SO2%QZjd>3^;#QMCqKbeTfGgu*XoGDZ)OocRbwj!ikX*lr{w>6N5GF8ZL&ifPT zKi%Fk;pVjUC+VZ9=QD`+d(sM$R)Ri#N+jnWNPSPjF&f)N;?bl}QdY7W(Ch-LjwSUn zC9;!tr**%{ye@e! z@t)_s^<<{*??f__&zA5@CzWnJEorFOtq9&jJXh%Gbg(<+6R12d%(7xqL;tVRAmZ0~ zzv8`vw^GQej=OlvGng6-!sjzTNtJ16If+w3Vh(IZ#crX)cS1)G(D69ZuJRV3{8r)v zDCbi@xR>xH!eyy*7XQKFypIsRa@#6cry6h4Ct(u}?x3-BVE}1}KNmXPMmSvvPo%(-imgfasZZWi;=A!x>f|BqcYK|G%<@+Duf@Q z%ytI2j_@0#&81w0Q1)Na{-thS^tnd(>nO;7Ekh-r4x!@*LVN_4AbkSq_Yy8oI2E0o zrqi8aW)BkgX%{R*ho4e*A$IJpaAC@%BV3gC zPJdf&O9PWAn3I9rdj6u&SR$|UwkNy>U!su@D0@8&@-E^&_wY_8?Lw&k6J=J@-o2zh zM%_5!hY9b+spPdL&F5?Dhw~SkN#&j-+|65-_aoxZ^KJ-@W(X$LA^dO^!usPlJ`G4%Rrr@xCRSS?itGbK;9R`hlTp-NqdTVxl%Cya}<7w zcLs^Ko^E9N4CeiZcO?z@d_W`p32&kNbCl0!!;~$9IT_>;(u+B5o&}-3#9M|oZj#?6 zDiZt3UrG9ru^=QIrf?n_`HHlkDVTse=yVn7calDUwBEd#33ny!Yx16E0M&@6;{AYj zmWIJ!C*FfM1?9F-t|j%ZkiUui>ZBdEocmvxLgy%O>v@|_S5Scei(MhFqXC|usL-Cc z&vzkhKH>I+TZT>t5w1r4Hz{|J4t?&Y?Q7(JOt?Df?MZKg%SgL*{$j@|G?cdy8Nc%S z{6oQtQ84LWX30&%V?$mc!Z&E(8fCVJv`>hqAbd4++>kOpKahUw`7Q(=rc7!7Y58C( zyhVW-q0l-8agDO_&@SrBAz4UZ3*RV;P)`|{e+iO zJ}>36kah##$D5>Iq5LA+`I!2j^3Emi)-%&P`80`XDYTUa(i2}rZq_i`TLrZ;Zzl3j z&_F%H^{96@?{zbIYVwZb9Ye=&P(L|kNAUXW zqVl)IPtkblP_PKjA#W<)LAuWn!VL(2M#IY}{~qxJgzv-KpT)%YgoGO8|4w{q)J8lu ziG-%SJ~{Bm+h(4Hv_Yg*W5nY^qos*IO_}|4Sf2L}@^;eLEc}W05P6kI?-2(1*=>Wl zO4?N3-n`XGUzCbJN&1^kYEt3Wvy4Dv8X84`jG^+!#C@7ku?gY&cqQ5DlT#08oK`qx zLXIgv%)hz%uLTwItnR<1ee%^+KJAcv_1qno(o9*tZ_(<0U(QIk`kA8-rda*WiJvm8 zK6kcGiS-S$C9F)fK0}^_776Ru=S^soBYpqGZciq59oVbull|9MuaK}S{j^NA6K1X7 zR6F5pmT65FCS;jbYhgmMY3J`r_+S>Gn zC(K{}_<)3IX{Yf&2$Okz*H;pXq*y;|Si+y_)^C43AxDw*7gr{vNHs0n`h=V7`IqJ| mWKI2SuK_PT_hg^-6ZRzRPB-n>!wE&EjXa#tW<8;JivJJ5j}8U^ diff --git a/loko/assets/locale/nl/LC_MESSAGES/django.po b/loko/assets/locale/nl/LC_MESSAGES/django.po index 75e9554..118829c 100644 --- a/loko/assets/locale/nl/LC_MESSAGES/django.po +++ b/loko/assets/locale/nl/LC_MESSAGES/django.po @@ -8711,3 +8711,57 @@ msgstr "Assets direct gekoppeld aan gebouw" #~ msgid "Arceaux cargo constatés" #~ msgstr "Vastgestelde cargobeugels" + +msgid "Type de zone de gestion" +msgstr "Beheerszonetype" + +msgid "Types de zones de gestion" +msgstr "Beheerszonetypes" + +msgid "Zone de gestion" +msgstr "Beheerszone" + +msgid "Zones de gestion" +msgstr "Beheerszones" + +msgid "Consignes et points d'attention" +msgstr "Instructies en aandachtspunten" + +msgid "Consignes d'exploitation, points de vigilance, règles de sécurité..." +msgstr "Exploitatie-instructies, aandachtspunten, veiligheidsregels..." + +msgid "Périmètre géographique" +msgstr "Geografische perimeter" + +msgid "Couleur d'affichage" +msgstr "Weergavekleur" + +msgid "Code hexadécimal (ex: #198754). Si vide, utilise la couleur du type de zone." +msgstr "Hexadecimale code (bijv. #198754). Indien leeg, wordt de kleur van het zonetype gebruikt." + +msgid "Fréquence cible (jours)" +msgstr "Doelfrequentie (dagen)" + +msgid "Intervalle indicatif entre interventions en jours." +msgstr "Indicatief interval tussen interventies in dagen." + +msgid "Saisonnalité / Calendrier" +msgstr "Seizoensgebondenheid / Kalender" + +msgid "Ex: Tonte d'avril à octobre; fauche tardive en septembre; interdiction de taille au printemps." +msgstr "Bijv.: Maaien van april tot oktober; laat maaien in september; snoeiverbod in het voorjaar." + +msgid "Asset de zone de gestion" +msgstr "Beheerszone-asset" + +msgid "Assets de zones de gestion" +msgstr "Beheerszone-assets" + +msgid "Document de zone de gestion" +msgstr "Beheerszonedocument" + +msgid "Documents de zones de gestion" +msgstr "Beheerszonedocumenten" + +msgid "Si coché, cet équipement est exclu de la zone même si sa géométrie intersecte le périmètre." +msgstr "Indien aangevinkt, wordt dit asset uitgesloten van de zone, zelfs als de geometrie de perimeter doorsnijdt." diff --git a/loko/assets/locale/nl/LC_MESSAGES/djangojs.mo b/loko/assets/locale/nl/LC_MESSAGES/djangojs.mo index dc3205db335546eea69d3a3ada91d5bc3ad78d1d..ed4ecd7b9c5d7366955b9abba8abe04af422b5ec 100644 GIT binary patch delta 3958 zcmYk-3v89;9mnyfr#EOTy+9qd#lCH^P%dQ!YF!ycpwJ2fUCTuj&_mBdd!&6&ITto% z&Uxy5(*OH; zp7;8HZap9M{BUbKbt21f0<4xF$9eBTMpTp~E zUq;>cKB@!L%8a=I=i`mI2KC+u&cZQl!*f`{_sumb$~?E+m?>C{>ii6xj+vw=;crkQauN06cTow2DzYO{iyEm`*ItF!^L=wC6_PhG{0s)D5jlbC*=f{^ zU%`5O&0YT+&Y=AsD$yw%)ULs5Y(XWm0hP$0YahjC+Am))}ClKdFiq)miMq z^VouUOuQD=&8QwNL%nc4>cJk=bNx6QQ#c35P>b~!NN(m2sFC{@YE2Z81y$3C>R_;f ziZZ_kJv@j@@Ht$HzsEK#=B=N@)u`(uxD0=U8j-&vJJ)=G>Ty0_(^@G8}s2+dlEMcM>Y1g58(v4aJVblkG)CU7pVh^LH?ilL+ zQ||mZ%-8<^ITby4A#=i*x7-bvaa9g;jqO~Y$6o3{iyE2lpn7@<_5b2esI_wqdBpr1 zH6oRav)06H)D$+O5^BZLfJ&FUuobm0ccNZ+3^j+(pyv2RR3g7cjZCSRz24^Bh>X6m z$gG(MQ9T|*C7edR@2|KJ|BKoQW+4kenRTLiupX6hFDla=&KPP)4luH|?Fc8dD4s&KpGS?rEAITOsKnkv{>&daDB)aw zX_QbAYL`q$O=Sb>gG*5#T8HZBPG<_W)*fpJvNycM3H9hTcj3>dMODJM>%%voK2V2B zum!dK)}lVJ3FqJdYVMyvCGZ1xeFF8|MN}eJow)&NXwIroBhZRkRNbgmz6q7Ue$#j?JCqr1$FMiV$_G)TzdtoC!JV;VN{O? zQ1|UaC2{~6Eb}C4u784>k~gsc-*)YHQ3+plevCXHm@>vqL(_oWcngxeIf%;qd#Fsm zj|KQs)cwCiz3>uh>aL)N#dEXQ7dTgIK- zL&y#?r%{>v};fw>~ZI}qMi$*Mrh@z1>KtY3DqLfzt3fa$`GOTaftXjF*WzJUUx{BKRuT6QUnU|%lu$XD#SGxB#O#3;3h(>}nXTC_Nv}F0@_$_M9pR`!8uKvKM&fQJ@4x*bVCc=ca_Zs2|(MG5| zkvY8H7I+DuV!l5ZRx6+Ei}b7=3#2`0+tZk^D1LR4RI%tM|_RgL`;@x zRG#!W93xf`(}`U~l2EycxGVi?Nls4HB5x?1*qgF(FBwZEZNeKQ9*Frikv@Oj%uw6P zRA0)snKNF*di^$$jK+K~GBLh8>PM|N981N$KATKhFF7zVJ`_$yd0X@7o24z~)=$QH zae_Mr!+OPNPT7xZ{6w^$*L#gT8}*Y3FES_0fX&-8E>v z_H_C5d7&w{4~P4r$%*lFd*!e4i}a3cMx!5Bb=BNQA_1vR&C+ zT^*`fImoLrZTjk4-&^GEv+-Rv-f#VMY}S>Wg|1=V#O-&tjkuZ50CcvtPq!`I| M&TO(?B*vxx0Up4`S^xk5 delta 3412 zcmZA3drZ}39LMp8!(D~oaPbCmKt#a{kdO-ANx;-n5=_a=;3!@K1@abpyeCR|Ickf! zS*%RjoYpDLS+3GH?Xr1ms~OI6rSlK7ndwYh?+@ppT+jHP*Yo^-&+qr#f8)@!`z4-B z&Y)d}w3|pEz6mnsJT`>$Lps&Pm=SmyCt+xWF@;!)opBFx%k0Nc{0QUlQ(Hcdk(4hY zf95(rkKkRT36BZmZY~#`s0zi{4a=|(*5F9oWy=>Zp7K3Zy=dO1j%Q$ZEW%zm8};7R zn23kbi5E~Ey^3M9Z+;`wi3@kJ2L?v@JJJi&DG$I2ScXiFX+e$rT~xz9)QHcZX5v>{ zzJ=;&c(i}SF6>G<3pKgL*p2p02^qa`0jA(mTcH_aDZh;|c+{4^#h#RZMve4uR7VmS zp2~SR2&bb)z6tx|KJ16*kg=M-&=W$YGjFG}#))dEH$Q542#&&usE#$EruZQ8tT~OU z_oMZ9YX}!ruP3TrE^20qF%3&?xgnPM*VHv~K@aRjP0>+X;Vf!om$1FZsI}|NL%|q> zf!G~2kVK>pCKVkx6jeVTldu3)uL7AgGe3^`4S8opbMKZ8IPgXstxtvRn$`5 zKy~<@HI{|e^Mg>ExB!cA3TERQsJ-(wY9MD&@4M_FqX(~|9=wmK*okTAiVLUen;}Fcj1vmuX#9`?9-d1ojoO~`6qGn_*a>C3O z)QFo=dt@JKBu7vk`2@Ab=j`=gP^acP>iEXedzJH01FA#~xXG`_yhSFB3x|=um^RdA z`4iPpAj4FL!cc1#jjGq%ULTI?*f?7*!?6Lz%)&gbx3Gcq{b)nYKmtcX1Db-JbpB_O z(I%-vjd&4i%{{0!YD6`>4YhVH_WB2?V|Env{kVo&qFdO$gq%fnAQLt6`KbFltgYCC z_RVKxm@RV=HL}~No<_2udZ55M1J$9$s17efb#yhVgPTz^wFmh#@9iQR`j(msuKD41as2!+|gra6F3bjNo zR6E(Ic8Zdje~qx53$hlqX&P;XgQ$_5u-C7k_C`3Zso{83M|+`8&tTMx$6#M9MSVY3 zq8e_t_Ya|-JDK9~H~a$^)PbAGzB8e{{Uc04ZI)crCLM!nxC+(KBGgQ*M=inYs2OU- z{`ev4y_ZoRtUIWscwlvS*eRN_P}CGfqADa=Q&A&GN7XAtjdT*KBjuUf4TJFxs-q8319A5A54bBv>HKGq(T#khjv0-b!YX9HnT@E;vmZ56$5Ffb zEUIHap^k3|y;TQXsP|>qawe+&Fw{(qNA0O{>_YoyE}2lQ#{g8)1OHFj`AYhzY$bLO zTL_Kr;WUZDtMB8#n4usPnH>PoxssTh9`u#Aadyq4v#F#BLRAT7@};?!8FpgR-4a z+CV%!ks;n_s zPAnxB*=wTA<|A+lQDDm*%=c}G2ng`K7a8gB-i*rf=0v~m3v$kM`08WR9lm|>Uj=*D zB#e%#JJGt(T~R-;rn>q>Yrnd5Ut2;?hc7PadVqIea+bFyd5144#o_Q}r-nFuqtZfx by(Rre#Lacrx%HUaU0Z3Ux?Pnu?rQT70;w}S diff --git a/loko/assets/locale/nl/LC_MESSAGES/djangojs.po b/loko/assets/locale/nl/LC_MESSAGES/djangojs.po index ec79502..82c08a3 100644 --- a/loko/assets/locale/nl/LC_MESSAGES/djangojs.po +++ b/loko/assets/locale/nl/LC_MESSAGES/djangojs.po @@ -719,3 +719,30 @@ msgstr "Fout bij validatie." msgid "Erreur réseau." msgstr "Netwerkfout." + +msgid "Zones de gestion" +msgstr "Beheerszones" + +msgid "Aucune zone de gestion définie pour cette thématique." +msgstr "Geen beheerszone gedefinieerd voor dit thema." + +msgid "zones" +msgstr "zones" + +msgid "Afficher / masquer toutes les zones" +msgstr "Alle zones tonen / verbergen" + +msgid "Opacité" +msgstr "Dekking" + +msgid "Fréquence cible :" +msgstr "Doelfrequentie:" + +msgid "jours" +msgstr "dagen" + +msgid "Consignes & points d'attention" +msgstr "Instructies & aandachtspunten" + +msgid "Centrer sur la zone" +msgstr "Centreren op zone" diff --git a/loko/assets/migrations/0030_managementzone_managementzonedocument_and_more.py b/loko/assets/migrations/0030_managementzone_managementzonedocument_and_more.py new file mode 100644 index 0000000..c80bac5 --- /dev/null +++ b/loko/assets/migrations/0030_managementzone_managementzonedocument_and_more.py @@ -0,0 +1,102 @@ +# Generated by Django 6.0.7 on 2026-10-05 13:06 + +import common.storages +import django.contrib.gis.db.models.fields +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0029_publicbuildingdocument_floor_location_and_more'), + ('common', '0017_territory'), + ('contenttypes', '0002_remove_content_type_name'), + ('documents', '0004_alter_documentfolder_visibility_and_more'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='ManagementZone', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', models.CharField(max_length=100, unique=True, verbose_name='Code')), + ('name_fr', models.CharField(max_length=255, verbose_name='Nom (FR)')), + ('name_nl', models.CharField(blank=True, max_length=255, null=True, verbose_name='Nom (NL)')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('instructions', models.TextField(blank=True, help_text="Consignes d'exploitation, points de vigilance, règles de sécurité...", null=True, verbose_name="Consignes et points d'attention")), + ('geom', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=3812, verbose_name='Périmètre géographique')), + ('color', models.CharField(blank=True, help_text='Code hexadécimal (ex: #198754). Si vide, utilise la couleur du type de zone.', max_length=20, null=True, verbose_name="Couleur d'affichage")), + ('is_active', models.BooleanField(default=True, verbose_name='Active')), + ('target_frequency_days', models.IntegerField(blank=True, help_text='Intervalle indicatif entre interventions en jours.', null=True, verbose_name='Fréquence cible (jours)')), + ('seasonality_notes', models.CharField(blank=True, help_text="Ex: Tonte d'avril à octobre; fauche tardive en septembre; interdiction de taille au printemps.", max_length=255, null=True, verbose_name='Saisonnalité / Calendrier')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Date de création')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Date de mise à jour')), + ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_management_zones', to=settings.AUTH_USER_MODEL, verbose_name='Créé par')), + ('thematic', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='management_zones', to='common.thematic', verbose_name='Thématique')), + ], + options={ + 'verbose_name': 'Zone de gestion', + 'verbose_name_plural': 'Zones de gestion', + 'ordering': ['thematic', 'code'], + }, + ), + migrations.CreateModel( + name='ManagementZoneDocument', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description du document')), + ('upload_date', models.DateTimeField(auto_now=True, verbose_name='Date de téléversement')), + ('status', models.CharField(choices=[('active', 'Actif'), ('archived', 'Archivé')], default='active')), + ('file', models.FileField(max_length=255, storage=common.storages.PrivateMediaStorage(), upload_to='assets_documents/management_zones/', verbose_name='Fichier')), + ('thumbnail', models.ImageField(blank=True, max_length=255, null=True, storage=common.storages.PrivateMediaStorage(), upload_to='assets_documents/management_zones/')), + ('managed_document', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(app_label)s_%(class)s_sources', to='documents.manageddocument')), + ('uploaded_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Ajouté par')), + ('zone', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documents', to='assets.managementzone', verbose_name='Zone de gestion')), + ], + options={ + 'verbose_name': 'Document de zone de gestion', + 'verbose_name_plural': 'Documents de zones de gestion', + }, + ), + migrations.CreateModel( + name='ManagementZoneType', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', models.CharField(max_length=100, unique=True, verbose_name='Code')), + ('name_fr', models.CharField(max_length=255, verbose_name='Nom (FR)')), + ('name_nl', models.CharField(blank=True, max_length=255, null=True, verbose_name='Nom (NL)')), + ('description', models.TextField(blank=True, null=True, verbose_name='Description')), + ('default_color', models.CharField(default='#198754', max_length=20, verbose_name='Couleur par défaut')), + ('thematic', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='management_zone_types', to='common.thematic', verbose_name='Thématique')), + ], + options={ + 'verbose_name': 'Type de zone de gestion', + 'verbose_name_plural': 'Types de zones de gestion', + 'ordering': ['thematic', 'name_fr'], + }, + ), + migrations.AddField( + model_name='managementzone', + name='zone_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='management_zones', to='assets.managementzonetype', verbose_name='Type de zone de gestion'), + ), + migrations.CreateModel( + name='ManagementZoneAsset', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('object_id', models.PositiveIntegerField(verbose_name="ID de l'asset")), + ('is_excluded', models.BooleanField(default=False, help_text='Si coché, cet équipement est exclu de la zone même si sa géométrie intersecte le périmètre.', verbose_name='Exclu')), + ('notes', models.CharField(blank=True, max_length=255, null=True, verbose_name='Notes')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype', verbose_name="Type d'asset")), + ('management_zone', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='explicit_assets', to='assets.managementzone', verbose_name='Zone de gestion')), + ], + options={ + 'verbose_name': 'Asset de zone de gestion', + 'verbose_name_plural': 'Assets de zones de gestion', + 'unique_together': {('management_zone', 'content_type', 'object_id')}, + }, + ), + ] diff --git a/loko/assets/models/__init__.py b/loko/assets/models/__init__.py index ef9106d..74b1cb7 100644 --- a/loko/assets/models/__init__.py +++ b/loko/assets/models/__init__.py @@ -13,4 +13,5 @@ from .clean import CleanLocation, CleanLitterBinModel, CleanLitterBin, CleanLitt from .buildings import PublicBuilding, BuildingAsset, BuildingEquipment, PublicBuildingDocument from .outdoor import OutdoorLocation, OutdoorAsset, OutdoorLocationDocument from .parking import ParkingLocation, ParkingSpot -from inspections.models import Inspection as AssetInspection, ParkingSpotInspection \ No newline at end of file +from inspections.models import Inspection as AssetInspection, ParkingSpotInspection +from .management_zones import ManagementZone, ManagementZoneType, ManagementZoneAsset, ManagementZoneDocument diff --git a/loko/assets/models/management_zones.py b/loko/assets/models/management_zones.py new file mode 100644 index 0000000..36e60ab --- /dev/null +++ b/loko/assets/models/management_zones.py @@ -0,0 +1,214 @@ +from django.contrib.gis.db import models +from django.contrib.contenttypes.models import ContentType +from django.contrib.contenttypes.fields import GenericForeignKey +from django.conf import settings +from django.utils.translation import gettext_lazy as _, get_language +import json + +from common.models import Thematic, Document +from common.storages import PrivateMediaStorage + +private_storage = PrivateMediaStorage() + + +class ManagementZoneType(models.Model): + """ + Typologie de zone de gestion spécifique à une thématique + (ex: Fauche tardive / refuge biodiversité, Tonte d'agrément, Onde verte coordonnée, etc.). + """ + code = models.CharField(max_length=100, unique=True, verbose_name=_("Code")) + name_fr = models.CharField(max_length=255, verbose_name=_("Nom (FR)")) + name_nl = models.CharField(max_length=255, blank=True, null=True, verbose_name=_("Nom (NL)")) + thematic = models.ForeignKey( + Thematic, + on_delete=models.CASCADE, + related_name="management_zone_types", + verbose_name=_("Thématique") + ) + description = models.TextField(blank=True, null=True, verbose_name=_("Description")) + default_color = models.CharField(max_length=20, default="#198754", verbose_name=_("Couleur par défaut")) + + def get_name(self): + lang = get_language() + if lang and lang.startswith("nl") and self.name_nl: + return self.name_nl + return self.name_fr + + @property + def name(self): + return self.get_name() + + def __str__(self): + return f"{self.get_name()} ({self.thematic.name})" + + class Meta: + ordering = ["thematic", "name_fr"] + verbose_name = _("Type de zone de gestion") + verbose_name_plural = _("Types de zones de gestion") + + +class ManagementZone(models.Model): + """ + Zone de gestion générique avec géométrie polygonale. + Regroupe des équipements/assets selon une logique métier, d'exploitation ou de gestion écologique. + """ + code = models.CharField(max_length=100, unique=True, verbose_name=_("Code")) + name_fr = models.CharField(max_length=255, verbose_name=_("Nom (FR)")) + name_nl = models.CharField(max_length=255, blank=True, null=True, verbose_name=_("Nom (NL)")) + thematic = models.ForeignKey( + Thematic, + on_delete=models.PROTECT, + related_name="management_zones", + verbose_name=_("Thématique") + ) + zone_type = models.ForeignKey( + ManagementZoneType, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="management_zones", + verbose_name=_("Type de zone de gestion") + ) + description = models.TextField(blank=True, null=True, verbose_name=_("Description")) + instructions = models.TextField( + blank=True, + null=True, + verbose_name=_("Consignes et points d'attention"), + help_text=_("Consignes d'exploitation, points de vigilance, règles de sécurité...") + ) + geom = models.MultiPolygonField( + srid=3812, + null=True, + blank=True, + verbose_name=_("Périmètre géographique") + ) + color = models.CharField( + max_length=20, + blank=True, + null=True, + verbose_name=_("Couleur d'affichage"), + help_text=_("Code hexadécimal (ex: #198754). Si vide, utilise la couleur du type de zone.") + ) + is_active = models.BooleanField(default=True, verbose_name=_("Active")) + target_frequency_days = models.IntegerField( + null=True, + blank=True, + verbose_name=_("Fréquence cible (jours)"), + help_text=_("Intervalle indicatif entre interventions en jours.") + ) + seasonality_notes = models.CharField( + max_length=255, + blank=True, + null=True, + verbose_name=_("Saisonnalité / Calendrier"), + help_text=_("Ex: Tonte d'avril à octobre; fauche tardive en septembre; interdiction de taille au printemps.") + ) + created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Date de création")) + updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Date de mise à jour")) + created_by = models.ForeignKey( + settings.AUTH_USER_MODEL, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="created_management_zones", + verbose_name=_("Créé par") + ) + + def get_color(self): + if self.color: + return self.color + if self.zone_type and self.zone_type.default_color: + return self.zone_type.default_color + return "#198754" + + @property + def geojson_geometry(self): + """ + Retourne la géométrie GeoJSON transformée en WGS84 (EPSG:4326) + pour utilisation directe dans MapLibre / Leaflet. + """ + if not self.geom: + return None + try: + geom_4326 = self.geom.transform(4326, clone=True) + return json.loads(geom_4326.geojson) + except Exception: + return None + + def get_name(self): + lang = get_language() + if lang and lang.startswith("nl") and self.name_nl: + return self.name_nl + return self.name_fr + + @property + def name(self): + return self.get_name() + + def __str__(self): + return f"{self.code} - {self.get_name()}" + + class Meta: + ordering = ["thematic", "code"] + verbose_name = _("Zone de gestion") + verbose_name_plural = _("Zones de gestion") + + +class ManagementZoneAsset(models.Model): + """ + Liaison explicite (inclusion ou exclusion) d'un asset à une zone de gestion. + Permet d'affiner le rattachement au-delà de la stricte inclusion spatiale. + """ + management_zone = models.ForeignKey( + ManagementZone, + on_delete=models.CASCADE, + related_name="explicit_assets", + verbose_name=_("Zone de gestion") + ) + content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, verbose_name=_("Type d'asset")) + object_id = models.PositiveIntegerField(verbose_name=_("ID de l'asset")) + asset = GenericForeignKey('content_type', 'object_id') + is_excluded = models.BooleanField( + default=False, + verbose_name=_("Exclu"), + help_text=_("Si coché, cet équipement est exclu de la zone même si sa géométrie intersecte le périmètre.") + ) + notes = models.CharField(max_length=255, blank=True, null=True, verbose_name=_("Notes")) + + def __str__(self): + status = "Exclu" if self.is_excluded else "Inclus" + return f"{self.management_zone.code} -> {self.content_type.model} #{self.object_id} ({status})" + + class Meta: + unique_together = ('management_zone', 'content_type', 'object_id') + verbose_name = _("Asset de zone de gestion") + verbose_name_plural = _("Assets de zones de gestion") + + +class ManagementZoneDocument(Document): + """ + Documents, fiches techniques et arrêtés associés à une zone de gestion. + """ + zone = models.ForeignKey( + ManagementZone, + on_delete=models.CASCADE, + related_name="documents", + verbose_name=_("Zone de gestion") + ) + file = models.FileField( + upload_to="assets_documents/management_zones/", + storage=private_storage, + verbose_name=_("Fichier"), + max_length=255 + ) + thumbnail = models.ImageField( + upload_to="assets_documents/management_zones/", + storage=private_storage, + null=True, + blank=True, + max_length=255 + ) + + class Meta: + verbose_name = _("Document de zone de gestion") + verbose_name_plural = _("Documents de zones de gestion") diff --git a/loko/assets/static/assets/js/management_zones_map_overlay.js b/loko/assets/static/assets/js/management_zones_map_overlay.js new file mode 100644 index 0000000..097250f --- /dev/null +++ b/loko/assets/static/assets/js/management_zones_map_overlay.js @@ -0,0 +1,390 @@ +/** + * Management Zones Map Overlay & Layer Switcher Integration + * + * Permet d'afficher en surimpression les zones de gestion (gestion écologique, + * ondes vertes, secteurs prioritaires, etc.) sur la carte MapLibre + * et ajoute une section dédiée "Zones de gestion" dans le LayerSwitcherControl. + */ + +(function (window) { + 'use strict'; + + /** + * Calcule la bounding box [[minX, minY], [maxX, maxY]] d'une géométrie GeoJSON. + */ + function getGeometryBBox(geometry) { + if (!geometry || !geometry.coordinates) return null; + let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity; + + function traverse(coords) { + if (typeof coords[0] === 'number') { + const [x, y] = coords; + if (x < minX) minX = x; + if (x > maxX) maxX = x; + if (y < minY) minY = y; + if (y > maxY) maxY = y; + } else if (Array.isArray(coords)) { + for (let i = 0; i < coords.length; i++) { + traverse(coords[i]); + } + } + } + + traverse(geometry.coordinates); + if (minX === Infinity || minY === Infinity) return null; + return [[minX, minY], [maxX, maxY]]; + } + + /** + * Initialise l'overlay des zones de gestion sur la carte MapLibre. + */ + async function initManagementZonesMapOverlay(options = {}) { + const map = options.map; + if (!map) { + console.warn('[ManagementZonesMapOverlay] Map instance missing.'); + return; + } + + if (!map.loaded()) { + map.once('load', () => initManagementZonesMapOverlay(options)); + return; + } + + const thematic = options.thematic || 'nature'; + const geojsonUrl = options.geojsonUrl || '/assets/api/management-zones/geojson/'; + const layerSwitcher = options.layerSwitcher || window.layerSwitcher; + const beforeLayerId = options.beforeLayerId || null; + + const _t = (key, fallback) => (typeof gettext === 'function' ? gettext(key) : (fallback || key)); + + try { + const url = new URL(geojsonUrl, window.location.origin); + url.searchParams.set('thematic', thematic); + + const response = await fetch(url.toString(), { + headers: { 'X-Requested-With': 'XMLHttpRequest' } + }); + + if (!response.ok) { + console.warn('[ManagementZonesMapOverlay] Failed to fetch geojson:', response.status); + return; + } + + const geojson = await response.json(); + if (!geojson || geojson.type !== 'FeatureCollection') { + console.warn('[ManagementZonesMapOverlay] Invalid GeoJSON received.'); + return; + } + + const features = geojson.features || []; + + // 1. Ajouter la source et les couches à MapLibre + const sourceId = 'management-zones-source'; + const fillLayerId = 'management-zones-fill'; + const lineLayerId = 'management-zones-line'; + + if (map.getSource(sourceId)) { + map.getSource(sourceId).setData(geojson); + } else { + map.addSource(sourceId, { + type: 'geojson', + data: geojson + }); + } + + // Couche de remplissage translucide + if (!map.getLayer(fillLayerId)) { + const fillLayerDef = { + id: fillLayerId, + type: 'fill', + source: sourceId, + paint: { + 'fill-color': ['coalesce', ['get', 'color'], '#198754'], + 'fill-opacity': 0.20 + } + }; + if (beforeLayerId && map.getLayer(beforeLayerId)) { + map.addLayer(fillLayerDef, beforeLayerId); + } else { + map.addLayer(fillLayerDef); + } + } + + // Couche de contour avec tirets pour marquer une zone de gestion + if (!map.getLayer(lineLayerId)) { + const lineLayerDef = { + id: lineLayerId, + type: 'line', + source: sourceId, + paint: { + 'line-color': ['coalesce', ['get', 'color'], '#198754'], + 'line-width': 2.5, + 'line-opacity': 0.85, + 'line-dasharray': [3, 1.5] + } + }; + if (beforeLayerId && map.getLayer(beforeLayerId)) { + map.addLayer(lineLayerDef, beforeLayerId); + } else { + map.addLayer(lineLayerDef); + } + } + + // 2. Gestion des popups et du curseur sur clic + const zonePopup = new maplibregl.Popup({ + closeButton: true, + closeOnClick: true, + maxWidth: '340px' + }); + + map.on('click', fillLayerId, (e) => { + const assetLayerIds = (window.assets_layers_defs || []).map(l => l.id).filter(id => map.getLayer(id)); + if (assetLayerIds.length > 0) { + const rendered = map.queryRenderedFeatures(e.point, { layers: assetLayerIds }); + if (rendered && rendered.length > 0) { + return; + } + } + + if (!e.features || !e.features[0]) return; + const props = e.features[0].properties || {}; + + let typeHtml = ''; + if (props.zone_type_name) { + typeHtml = ` + ${props.zone_type_name} + `; + } + + let freqHtml = ''; + if (props.target_frequency_days) { + freqHtml = `
+ ${_t('Fréquence cible :', 'Fréquence cible :')} ${props.target_frequency_days} ${_t('jours', 'jours')} +
`; + } + + let seasonHtml = ''; + if (props.seasonality_notes) { + seasonHtml = `
+ ${props.seasonality_notes} +
`; + } + + let instructionsHtml = ''; + if (props.instructions) { + instructionsHtml = `
+
${_t('Consignes & points d\'attention', 'Consignes & points d\'attention')}
+ ${props.instructions} +
`; + } + + let descHtml = ''; + if (props.description) { + descHtml = `
+ ${props.description} +
`; + } + + const html = ` +
+
+
+ + ${props.code} +
+ ${typeHtml} +
+
${props.name}
+ ${descHtml} + ${freqHtml} + ${seasonHtml} + ${instructionsHtml} +
+ `; + + zonePopup.setLngLat(e.lngLat).setHTML(html).addTo(map); + }); + + map.on('mousemove', fillLayerId, (e) => { + const assetLayerIds = (window.assets_layers_defs || []).map(l => l.id).filter(id => map.getLayer(id)); + if (assetLayerIds.length > 0) { + const rendered = map.queryRenderedFeatures(e.point, { layers: assetLayerIds }); + if (rendered && rendered.length > 0) { + return; + } + } + map.getCanvas().style.cursor = 'pointer'; + }); + + map.on('mouseleave', fillLayerId, () => { + map.getCanvas().style.cursor = ''; + }); + + // 3. Intégration dans le LayerSwitcherControl + if (layerSwitcher && typeof layerSwitcher.addCustomSection === 'function') { + layerSwitcher.addCustomSection({ + id: 'management-zones', + title: `${_t('Zones de gestion', 'Zones de gestion')}`, + render: (container, switcher) => { + renderManagementZonesSection(container, switcher, features, map, fillLayerId, lineLayerId, zonePopup, _t); + } + }); + + if (features.length > 0) { + layerSwitcher.setOverlayActive(true); + } + } + + } catch (err) { + console.error('[ManagementZonesMapOverlay] Error initializing overlay:', err); + } + } + + /** + * Rendu HTML et interactions de la section "Zones de gestion" dans le LayerSwitcherControl. + */ + function renderManagementZonesSection(container, switcher, features, map, fillLayerId, lineLayerId, zonePopup, _t) { + if (!features || features.length === 0) { + container.innerHTML = ` +
+ ${_t('Aucune zone de gestion définie pour cette thématique.', 'Aucune zone de gestion définie pour cette thématique.')} +
+ `; + return; + } + + const countText = `${features.length} ${_t('zones', 'zones')}`; + + // En-tête avec toggle général + const headerEl = document.createElement('div'); + headerEl.className = 'd-flex justify-content-between align-items-center px-1 mb-2'; + headerEl.innerHTML = ` + ${countText} +
+ +
+ `; + container.appendChild(headerEl); + + const masterToggle = headerEl.querySelector('.management-zones-master-toggle'); + + // Curseur d'opacité + const opacityRow = document.createElement('div'); + opacityRow.className = 'px-1 mb-2'; + opacityRow.innerHTML = ` +
+ ${_t('Opacité', 'Opacité')} + 20% +
+ + `; + container.appendChild(opacityRow); + + const opacitySlider = opacityRow.querySelector('.management-zones-opacity-slider'); + const opacityValLabel = opacityRow.querySelector('.management-zones-opacity-val'); + + opacitySlider.addEventListener('input', (e) => { + const val = parseInt(e.target.value, 10); + opacityValLabel.textContent = `${val}%`; + if (map.getLayer(fillLayerId)) { + map.setPaintProperty(fillLayerId, 'fill-opacity', val / 100); + } + }); + + // Liste des zones + const listEl = document.createElement('div'); + listEl.className = 'management-zones-list d-flex flex-column gap-1'; + listEl.style.maxHeight = '240px'; + listEl.style.overflowY = 'auto'; + + const activeZoneIds = new Set(features.map(f => f.id)); + + function updateLayersVisibility() { + if (!masterToggle.checked || activeZoneIds.size === 0) { + if (map.getLayer(fillLayerId)) map.setLayoutProperty(fillLayerId, 'visibility', 'none'); + if (map.getLayer(lineLayerId)) map.setLayoutProperty(lineLayerId, 'visibility', 'none'); + } else { + if (map.getLayer(fillLayerId)) map.setLayoutProperty(fillLayerId, 'visibility', 'visible'); + if (map.getLayer(lineLayerId)) map.setLayoutProperty(lineLayerId, 'visibility', 'visible'); + + const filter = ['in', ['id'], ['literal', Array.from(activeZoneIds)]]; + if (map.getLayer(fillLayerId)) map.setFilter(fillLayerId, filter); + if (map.getLayer(lineLayerId)) map.setFilter(lineLayerId, filter); + } + } + + masterToggle.addEventListener('change', () => { + const checked = masterToggle.checked; + listEl.querySelectorAll('.zone-item-toggle').forEach(chk => { + chk.checked = checked; + }); + if (checked) { + features.forEach(f => activeZoneIds.add(f.id)); + } else { + activeZoneIds.clear(); + } + updateLayersVisibility(); + }); + + features.forEach(feat => { + const props = feat.properties || {}; + const color = props.color || '#198754'; + const itemEl = document.createElement('div'); + itemEl.className = 'd-flex align-items-center justify-content-between p-1 rounded hover-bg small'; + itemEl.style.cursor = 'pointer'; + + itemEl.innerHTML = ` +
+ +
+
${props.code}
+
${props.name} ${props.zone_type_name ? `(${props.zone_type_name})` : ''}
+
+
+
+ +
+ +
+
+ `; + + const itemToggle = itemEl.querySelector('.zone-item-toggle'); + itemToggle.addEventListener('change', (e) => { + e.stopPropagation(); + if (itemToggle.checked) { + activeZoneIds.add(feat.id); + } else { + activeZoneIds.delete(feat.id); + } + masterToggle.checked = (activeZoneIds.size > 0); + updateLayersVisibility(); + }); + + function zoomToZone() { + const bbox = getGeometryBBox(feat.geometry); + if (bbox) { + map.fitBounds(bbox, { padding: 40, maxZoom: 16 }); + } + } + + itemEl.querySelector('.zoom-btn').addEventListener('click', (e) => { + e.stopPropagation(); + zoomToZone(); + }); + + itemEl.querySelector('.zone-click-target').addEventListener('click', () => { + zoomToZone(); + }); + + listEl.appendChild(itemEl); + }); + + container.appendChild(listEl); + } + + window.initManagementZonesMapOverlay = initManagementZonesMapOverlay; + +})(window); diff --git a/loko/assets/templates/assets/base_assets_index.html b/loko/assets/templates/assets/base_assets_index.html index 9baa69e..d9fce78 100644 --- a/loko/assets/templates/assets/base_assets_index.html +++ b/loko/assets/templates/assets/base_assets_index.html @@ -366,6 +366,7 @@ + {% block extra_script %} {% endblock extra_script %} diff --git a/loko/assets/templates/assets/nature_index.html b/loko/assets/templates/assets/nature_index.html index a5d5f86..48a568a 100644 --- a/loko/assets/templates/assets/nature_index.html +++ b/loko/assets/templates/assets/nature_index.html @@ -223,7 +223,7 @@ {% block extra_script %} diff --git a/loko/assets/tests_management_zones.py b/loko/assets/tests_management_zones.py new file mode 100644 index 0000000..1878beb --- /dev/null +++ b/loko/assets/tests_management_zones.py @@ -0,0 +1,201 @@ +from django.test import TestCase, Client +from django.contrib.auth import get_user_model +from django.urls import reverse +from django.contrib.gis.geos import Polygon, MultiPolygon, Point + +from common.models import Thematic, Role, UserConfig, UserThematics +from assets.models import ( + ManagementZoneType, + ManagementZone, + ManagementZoneAsset, + NatureGreenSurface, + NatureLocation, +) + +User = get_user_model() + + +class ManagementZoneModelTests(TestCase): + def setUp(self): + self.thematic_nature = Thematic.objects.create( + code="nature", + name_fr="Nature", + name_nl="Natuur" + ) + self.zone_type = ManagementZoneType.objects.create( + code="fauche_tardive", + name_fr="Fauche tardive", + name_nl="Laat maaien", + thematic=self.thematic_nature, + default_color="#28a745", + description="Zone de gestion écologique avec fauche annuelle en automne." + ) + + def test_management_zone_type_bilingual_and_str(self): + self.assertEqual(self.zone_type.name_fr, "Fauche tardive") + self.assertEqual(self.zone_type.name_nl, "Laat maaien") + self.assertIn("Fauche tardive", str(self.zone_type)) + + def test_management_zone_creation_geometry_and_color_fallback(self): + poly = Polygon(((0, 0), (100, 0), (100, 100), (0, 100), (0, 0))) + multi_poly = MultiPolygon([poly], srid=3812) + + # 1. Sans couleur explicite -> prend la couleur par défaut du type + zone1 = ManagementZone.objects.create( + code="ZG-NAT-001", + name_fr="Marais de Jette - Prairie", + name_nl="Moeras van Jette - Weide", + thematic=self.thematic_nature, + zone_type=self.zone_type, + geom=multi_poly, + target_frequency_days=365, + seasonality_notes="Fauche en septembre; pas de taille au printemps", + instructions="Attention aux zones humides et aux ornières.", + ) + self.assertEqual(zone1.get_color(), "#28a745") + self.assertEqual(zone1.geom.srid, 3812) + self.assertEqual(zone1.geom.geom_type, "MultiPolygon") + + # GeoJSON property + geojson = zone1.geojson_geometry + self.assertIsNotNone(geojson) + self.assertEqual(geojson["type"], "MultiPolygon") + + # Spatial intersection + pt_inside = Point(50, 50, srid=3812) + pt_outside = Point(200, 200, srid=3812) + self.assertTrue(ManagementZone.objects.filter(pk=zone1.pk, geom__intersects=pt_inside).exists()) + self.assertFalse(ManagementZone.objects.filter(pk=zone1.pk, geom__intersects=pt_outside).exists()) + + # 2. Avec couleur personnalisée explicite + zone2 = ManagementZone.objects.create( + code="ZG-NAT-002", + name_fr="Zone spéciale", + thematic=self.thematic_nature, + color="#ff5722", + ) + self.assertEqual(zone2.get_color(), "#ff5722") + + +class ManagementZoneAssetTests(TestCase): + def setUp(self): + self.thematic_nature = Thematic.objects.create(code="nature", name_fr="Nature", name_nl="Natuur") + self.zone = ManagementZone.objects.create( + code="ZG-NAT-TEST", + name_fr="Zone test", + thematic=self.thematic_nature, + ) + self.location = NatureLocation.objects.create(code="LOC-01", name_fr="Parc de Jette") + self.green_surface = NatureGreenSurface.objects.create( + code="GS-01", + name_fr="Pelouse 1", + location=self.location, + ) + + def test_explicit_asset_association_and_exclusion(self): + # Association explicite d'inclusion + link = ManagementZoneAsset.objects.create( + management_zone=self.zone, + asset=self.green_surface, + is_excluded=False, + notes="Inclus dans le plan" + ) + self.assertIn("Inclus", str(link)) + self.assertEqual(self.zone.explicit_assets.count(), 1) + self.assertEqual(self.zone.explicit_assets.first().asset, self.green_surface) + + # Bascule en exclusion + link.is_excluded = True + link.save() + self.assertIn("Exclu", str(link)) + + +class ManagementZoneGeojsonEndpointTests(TestCase): + def setUp(self): + self.user = User.objects.create_user(username="nature_manager", password="password") + self.role_manager = Role.objects.create(name="manager") + self.config = UserConfig.objects.create(user=self.user) + self.config.roles.add(self.role_manager) + + self.thematic_nature = Thematic.objects.create(code="nature", name_fr="Nature", name_nl="Natuur") + self.thematic_roads = Thematic.objects.create(code="roads", name_fr="Voiries", name_nl="Wegen") + + UserThematics.objects.create( + user_config=self.config, + thematic=self.thematic_nature, + can_view_assets=True, + can_edit_assets=True + ) + + self.zone_type = ManagementZoneType.objects.create( + code="fauche", + name_fr="Fauche tardive", + thematic=self.thematic_nature, + default_color="#198754" + ) + + poly = Polygon(((0, 0), (10, 0), (10, 10), (0, 10), (0, 0))) + self.multi_poly = MultiPolygon([poly], srid=3812) + + self.zone_nature = ManagementZone.objects.create( + code="ZG-NAT-1", + name_fr="Prairie fleurie", + thematic=self.thematic_nature, + zone_type=self.zone_type, + geom=self.multi_poly, + instructions="Ne pas tondre au printemps", + target_frequency_days=180, + seasonality_notes="Septembre", + ) + + self.zone_roads = ManagementZone.objects.create( + code="ZG-ROAD-1", + name_fr="Itinéraire déneigement P1", + thematic=self.thematic_roads, + geom=self.multi_poly, + color="#0d6efd", + ) + + def test_anonymous_access_redirects(self): + url = reverse("assets:management_zones_geojson") + response = self.client.get(url) + self.assertEqual(response.status_code, 302) + + def test_authenticated_user_access_nature_zones(self): + self.client.login(username="nature_manager", password="password") + url = reverse("assets:management_zones_geojson") + "?thematic=nature" + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + data = response.json() + self.assertEqual(data["type"], "FeatureCollection") + self.assertEqual(len(data["features"]), 1) + + feat = data["features"][0] + self.assertEqual(feat["id"], self.zone_nature.id) + self.assertEqual(feat["properties"]["code"], "ZG-NAT-1") + self.assertEqual(feat["properties"]["name"], "Prairie fleurie") + self.assertEqual(feat["properties"]["thematic"], "nature") + self.assertEqual(feat["properties"]["zone_type_name"], "Fauche tardive") + self.assertEqual(feat["properties"]["color"], "#198754") + self.assertEqual(feat["properties"]["instructions"], "Ne pas tondre au printemps") + self.assertEqual(feat["properties"]["target_frequency_days"], 180) + self.assertEqual(feat["geometry"]["type"], "MultiPolygon") + + def test_user_without_thematic_permission_denied(self): + self.client.login(username="nature_manager", password="password") + # nature_manager n'a pas accès à la thématique 'roads' + url = reverse("assets:management_zones_geojson") + "?thematic=roads" + response = self.client.get(url) + self.assertEqual(response.status_code, 403) + + def test_superuser_access_all_thematics(self): + admin = User.objects.create_superuser(username="superadmin", password="password", email="admin@example.com") + self.client.login(username="superadmin", password="password") + + # Sans paramètre thématique, superuser reçoit toutes les zones avec géométrie + url = reverse("assets:management_zones_geojson") + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + data = response.json() + self.assertEqual(len(data["features"]), 2) diff --git a/loko/assets/urls.py b/loko/assets/urls.py index e085354..c3db905 100644 --- a/loko/assets/urls.py +++ b/loko/assets/urls.py @@ -1,9 +1,10 @@ from django.urls import path -from .views import core, locations, nature, publiclighting, trafficlights, artworks, structures, controlcenters, sign, roads, its, clean, asset_editing, history, location_editing, export, asset_permissions, water, buildings, outdoor, parking +from .views import core, locations, nature, publiclighting, trafficlights, artworks, structures, controlcenters, sign, roads, its, clean, asset_editing, history, location_editing, export, asset_permissions, water, buildings, outdoor, parking, management_zones app_name = "assets" urlpatterns = [ path("", core.unified_assets_index, name="index"), + path("api/management-zones/geojson/", management_zones.management_zones_geojson, name="management_zones_geojson"), path("parking/", parking.parking_index, name="parking_index"), path("parking/assets/", parking.parking_assets, name="parking_assets"), path("parking/assets/geojson/", parking.parking_assets_geojson, name="parking_assets_geojson"), diff --git a/loko/assets/views/management_zones.py b/loko/assets/views/management_zones.py new file mode 100644 index 0000000..514140a --- /dev/null +++ b/loko/assets/views/management_zones.py @@ -0,0 +1,87 @@ +from django.contrib.auth.decorators import login_required +from django.http import JsonResponse, HttpResponseForbidden +from django.views.decorators.http import require_GET + +from common.models import Thematic, UserConfig +from assets.models import ManagementZone +from assets.permissions import get_user_asset_thematic_access + + +@login_required +@require_GET +def management_zones_geojson(request): + """ + Retourne la collection GeoJSON des zones de gestion actives avec géométrie. + Filtre optionnel par ?thematic=. + Vérifie que l'utilisateur a accès en lecture aux assets de la thématique. + """ + thematic_code = request.GET.get('thematic') + user = request.user + + if thematic_code: + thematic = Thematic.objects.filter(code=thematic_code).first() + if not thematic: + return JsonResponse({'type': 'FeatureCollection', 'features': []}) + + can_view, _ = get_user_asset_thematic_access(user, thematic) + if not can_view: + return HttpResponseForbidden("Access denied to this thematic management zones.") + + zones_qs = ManagementZone.objects.filter( + thematic=thematic, + is_active=True, + geom__isnull=False + ).select_related('thematic', 'zone_type') + else: + if user.is_superuser: + zones_qs = ManagementZone.objects.filter(is_active=True, geom__isnull=False) + else: + try: + user_config = UserConfig.objects.get(user=user) + if user_config.roles.filter(name__in=['admin', 'operator']).exists(): + allowed_thematics = Thematic.objects.all() + else: + allowed_thematics = Thematic.objects.filter( + userthematics__user_config=user_config, + userthematics__can_view_assets=True + ) + zones_qs = ManagementZone.objects.filter( + thematic__in=allowed_thematics, + is_active=True, + geom__isnull=False + ) + except UserConfig.DoesNotExist: + return JsonResponse({'type': 'FeatureCollection', 'features': []}) + + zones_qs = zones_qs.select_related('thematic', 'zone_type') + + features = [] + for zone in zones_qs: + geom_json = zone.geojson_geometry + if not geom_json: + continue + + features.append({ + 'type': 'Feature', + 'id': zone.id, + 'properties': { + 'id': zone.id, + 'code': zone.code, + 'name': zone.get_name(), + 'thematic': zone.thematic.code, + 'thematic_name': zone.thematic.name, + 'zone_type_code': zone.zone_type.code if zone.zone_type else None, + 'zone_type_name': zone.zone_type.get_name() if zone.zone_type else "", + 'color': zone.get_color(), + 'instructions': zone.instructions or "", + 'description': zone.description or "", + 'seasonality_notes': zone.seasonality_notes or "", + 'target_frequency_days': zone.target_frequency_days, + }, + 'geometry': geom_json + }) + + return JsonResponse({ + 'type': 'FeatureCollection', + 'features': features + }) diff --git a/loko/locale/en/LC_MESSAGES/django.mo b/loko/locale/en/LC_MESSAGES/django.mo index fa8224ccc23f854271d6e8acd8ceeb11d541cd66..c577f727cf87a7bb8a5b7415bb737a1b285c8d87 100644 GIT binary patch delta 5959 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 delta 4197 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 delta 1332 zcmX}sNl27o9LMozn$6iXmocYOCzqNQbt)$f>JTMS7X>BC2t;Q>NSbVd2!c6DiwA?3 zqJxJHp@#~BA@C3c(L&(CI<$xt9;$-}qeFEO`u>Jzdhq{#p67X=_u0q!`g^hbmnzR~ zL+U0r6H6{*dU4v#gY?m3OdWngFaE+x{EO=_NTuo{JT_uA?#FgKh@IGO89bhnm1M z9(ir$8#3y69<`-!u>-&1UX0S4K0Jo>W%^J9oZ`V5nl$SB%c%EPZFvGCly9OIcGr5} zzJDBK|24BGR4|r#g*uxB)XKi1&T#lhHk%jiHn0B=x@7j>La}zMeWwX)x0G~WN@;`5)MK33Lg;u( zi3JW8^9?*%Xz}N?19uWSS6xCKhc1z}RY}Leb@-oZ$h8tWjwrE+ diff --git a/loko/locale/en/LC_MESSAGES/djangojs.po b/loko/locale/en/LC_MESSAGES/djangojs.po index dd5579e..807e9e9 100644 --- a/loko/locale/en/LC_MESSAGES/djangojs.po +++ b/loko/locale/en/LC_MESSAGES/djangojs.po @@ -194,3 +194,30 @@ msgstr "lots" msgid "Fonds de plan & Orthophotos" msgstr "Basemaps & Orthophotos" + +msgid "Zones de gestion" +msgstr "Management zones" + +msgid "Aucune zone de gestion définie pour cette thématique." +msgstr "No management zone defined for this thematic." + +msgid "zones" +msgstr "zones" + +msgid "Afficher / masquer toutes les zones" +msgstr "Show / hide all zones" + +msgid "Opacité" +msgstr "Opacity" + +msgid "Fréquence cible :" +msgstr "Target frequency:" + +msgid "jours" +msgstr "days" + +msgid "Consignes & points d'attention" +msgstr "Instructions & points of attention" + +msgid "Centrer sur la zone" +msgstr "Center on zone" diff --git a/loko/locale/fr/LC_MESSAGES/django.mo b/loko/locale/fr/LC_MESSAGES/django.mo index af7817c779525344b74ced7992306e7facd36f14..ae1ac4e8d7b35673bc9bba708be9748ecf27baa2 100644 GIT binary patch literal 15574 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 T;ry%1^g%fPtAY1_aS;BWUwED} delta 4293 zcmaLZd2mfv0LSr@h=e4F1R+F_#1^s;Vqan_Vr_{g_N9%zNG;LyS&9a&<=Gppom#6; ztu1QF=+F#hI!4u6S~}XIwzf>azuc35YNluW-sjx=^3HzW^Zk_lBVAX5eU=)^5mJei z@ioTF%b37G-8CjC$e0pX8jE6tHQE|uO~6&WpM-w+9nzG!WWA1|T>pY)(UdkO%ovv` zM}>bTftNDa2K})Q*1#dC2IpY{y0ILdv|dJy^&tkJ33fUT#O7RvU`_0SB{2)rF$Y`F zzqv&vi5pQN&ItQrMXocE!J36g+h#3lU>+=vhfynX%9@WfWiFup{$~uwXPAYd%ub(M zY|TY~`Zt@XXz6#OI?hLy#@t08EXsOmDg99cD2=pfDxo@z$MV<)wNiaie>c>=KNj`* z8P*)@LUgI22j>Umg)y?sNs94J$!)0@P)nhqjxnBf@-iTvN$FhHIOFA7)@K$SxCcH z_$I3TEvShdM747gE8zK1)?Xdnvu`}M`Y4b&!gT$z<5;>8J)4 zV=8Vz&0HI-`+nAN)PU=wR;-h~-wV_9{EwuP$Qyas6#vE;OyZGXkY)(#G0R5n`ApPI zR-jgDD{3WPTLXhp4K~39Ohyen(>f2eHS16_--S8@hp;&wLv68%c20jSOy{yu zw9DDECEQ5j#(C5T1FAdURFSA9ZiyOTchtZJqqb%=7R5={Y}8iHME(6Trtc|R$mQ>VGdsK&Ms1Lr4oHsKKwE}BUE3+Flpl?t!$VYX25jiI2K5A=1YB|@n zu?W{Gs58_ZHNpPK_l(PAQPEP(MKzp@+QYS240qV;y{HC`p&C4kIx82jINm`Ws)wkv zP`tMD8&D3_eky8W!%^*IVg)__GpMMeT>HjGs|VH4*T{i3`KSTjN6q*#`eUgW=Zh)~ zHS9cHs082&)ZT4CE%kQPH{c1>%&yq$KT#c(tmDi) z8r4A@>hD{jW|)TB`wV-3Drx{rQNID3(WQp>QqdotL4EKl>NnsXYGt0II`FOQ%sdoz z9gq5aYut&csG0l5I`>OhBT)lxj9QWI_I`RS>%WH^rQAPn_>1nTLjYwx=fsAyyj zQA^qdwdVt{8)hI2qHoTEvcOu12D^=DRa9Ol9}>R7O&6k~fv5~5>T4`fS*7QHHx+&% z3rZ@lIb;tRMoJMa=Q#2f(EwF61K`+_epFdylKqOE;}=!;3^a|iP!eoT7n zlRUoahot=GdSQh|ipdlA<8xRI2w*X^uru$k)gZ#Iw^ z@)>!96qa7LG971=I;5+;C*HI5l{m}Rv#difgDfTcNlmheG$h$%45?3Q5wn=|CGU`Q z(uC|Kn~BO7WTq#lbTMzQ37))=8Q$(Pb;|l>jz7L<)UXNe*wCHsC3W5I;uY??1H)Q) zvcrSZ7)xF)nY#GZq4R+zKu>U^8ZckcejkI_fm77 T$iye!G!x_Hnbc@s5w-O%e@LbM diff --git a/loko/locale/fr/LC_MESSAGES/django.po b/loko/locale/fr/LC_MESSAGES/django.po index 8288e74..809bd0a 100644 --- a/loko/locale/fr/LC_MESSAGES/django.po +++ b/loko/locale/fr/LC_MESSAGES/django.po @@ -1335,3 +1335,57 @@ msgstr "lots" msgid "Fonds de plan & Orthophotos" msgstr "Fonds de plan & Orthophotos" + +msgid "Type de zone de gestion" +msgstr "Type de zone de gestion" + +msgid "Types de zones de gestion" +msgstr "Types de zones de gestion" + +msgid "Zone de gestion" +msgstr "Zone de gestion" + +msgid "Zones de gestion" +msgstr "Zones de gestion" + +msgid "Consignes et points d'attention" +msgstr "Consignes et points d'attention" + +msgid "Consignes d'exploitation, points de vigilance, règles de sécurité..." +msgstr "Consignes d'exploitation, points de vigilance, règles de sécurité..." + +msgid "Périmètre géographique" +msgstr "Périmètre géographique" + +msgid "Couleur d'affichage" +msgstr "Couleur d'affichage" + +msgid "Code hexadécimal (ex: #198754). Si vide, utilise la couleur du type de zone." +msgstr "Code hexadécimal (ex: #198754). Si vide, utilise la couleur du type de zone." + +msgid "Fréquence cible (jours)" +msgstr "Fréquence cible (jours)" + +msgid "Intervalle indicatif entre interventions en jours." +msgstr "Intervalle indicatif entre interventions en jours." + +msgid "Saisonnalité / Calendrier" +msgstr "Saisonnalité / Calendrier" + +msgid "Ex: Tonte d'avril à octobre; fauche tardive en septembre; interdiction de taille au printemps." +msgstr "Ex: Tonte d'avril à octobre; fauche tardive en septembre; interdiction de taille au printemps." + +msgid "Asset de zone de gestion" +msgstr "Asset de zone de gestion" + +msgid "Assets de zones de gestion" +msgstr "Assets de zones de gestion" + +msgid "Document de zone de gestion" +msgstr "Document de zone de gestion" + +msgid "Documents de zones de gestion" +msgstr "Documents de zones de gestion" + +msgid "Si coché, cet équipement est exclu de la zone même si sa géométrie intersecte le périmètre." +msgstr "Si coché, cet équipement est exclu de la zone même si sa géométrie intersecte le périmètre." diff --git a/loko/locale/fr/LC_MESSAGES/djangojs.mo b/loko/locale/fr/LC_MESSAGES/djangojs.mo index 8ed7bcc5ab7e041b84913f1891f351c0004d3b04..ad27026bd3f83e6890400d06fdaf6b738985d675 100644 GIT binary patch literal 3959 zcmeH{UuYaf9LGm(wVu{LRqKB<+J8ygO)hDx_43D_xr?OUB}bAL+WOGV-rU`mz1?$X zR&1eK>YGJSM5q+RC&~FFDhfV`<-qnq1w|oG1uGPaXkSE-iu(QTZkpz$BKVkLe)E}` zoj<>Sv**^VcuSz;UoXTyaO(;*D6g*+;y&;V5LLX7W*ztecqjNhh%Mp*h$=3k zc>ufwJ_%-S6k-@GfKPzOK~(V>nhbavyaoIUTm#O7cY!~HRN-&%5pcy#Lfj0l137Pj zyng^(3l>10a{#11b&%&A0&fLh0&fRTfLwnHd=UH)r)%3>sUZt{(xJ2L+JlH$eLRNc#OK$a`J^nFsHH%!7H5d9W5r)1C>C_v``jNgMyLuWgI7Vu@9lK{BarL9NXKVE#_NZ4{v1gAE~NY=o&OEwIe&s&zZQox z54u3+!4SwicrN8@AlH2k((W@L&;2$X&x5r0JV;@Uv10dJi>9__mJ|2iP5Z#a+5S~ptSb7q~|B$pBgZ|$Ip`QmJ3x)Y`FNF6j zl&$E{jvFA4L8!}S2xGGWLffH&*ao4W77BgGLfh9v80&i=%ry(b!aSu9nZFAK?vL%~ znEu=dVf+`$44;DZLv}(~=zse9ZU}RE z6Xa0{3&NF@ZaZ=!Ur8NA+H!2uY1f0$RXrl_7`GH3ZrX=uiy zWvkN;-DYRbgi1R29NLbFlqaj5cFpx&*$SdiI?5O&O{3Fp+Qxes}Yz0->@G} z^&P0^&U#Ab#JG<*AaP28V|%VnjxH}fa_LY;J|okF`J#NaLFJ&@ne&vGn3bVw+94Kc zG1;;m7g;JQw(l!D5|zNjh;vL-VrWrW%#PHWBt6nE3`4vG9ob!lpO?6}M@%VZeVqBs zwIqSzX&bIKD*U(avfB@uGN9+Hs;9TN_rGm8f9ySMNKC%c(PG-zCNg3=YPFd9Z85W$ z*jM+pn85=QGoc-OYUXfD2{y5fd@79Wm6=xR$i0CZ#;+PLD9IcrXtq3s_q?C)oV(N4 zBA9Sm#BV+M2Xu}}yg-+(i9_HRYrJahRiQ>A=VT>6`fUE0qTE}YnjW8=$V{nL5E`qj z>u%M0I;v}HCdkQ5Wzw2bFSy)eG5K?HAUm+b>L0MO+hzZ@TsFHU+n>#5O13r@%=5Kp zn;^`|u|1`doXD4pa;R9&kC%4k3x%oT^z;ap`t``JD{DsCO)LzNtqnO;D(&*z-XN?m zuE@z+m?@8!i;HUa_hvJAt$djl9hj3wy=eOI5?p^!It@G2$_($B8MAgSuA^Et69^vc9v&FP!{V3WZeNbb{+_{%SpFw3|C5*h$;;_c&>^UEfgPeQ{Tmnw(i%vobqJzU#i-Nh z60M*lXplkBA&u~6L8fAs9qO<^2+0V9-kY-OOBlo<4B<;` za4zpgx#3;z69#a``rlC>s$erNp%ymrHhnmOjo6N1Oyg=if|`E<*W)Fu#~Y}5w{R5} zv4!uuC-&eiYT^g$Ph0;7^5^Ew-!{I4EsXnFv=ZZ}3??y-M=^yN^B!v6JJdnPv5xP% zX&abBov?!1=^`pKK2~w-0;qlrm6>MLiIb?*_t^7ZRH{$nVajhHaZ&L=cs25-5qK#fhYUpmGHueBn;vQT7IqE~hsFIAK)_p~N z_h*p&tA_Io=)_*0>O@i0f&{9DX;cP!QS(ltYS@P=!Jv)bLCw2w{gU;|r~|w*-`MzA zi2UmX?-?LVu7axJ0;+~FzNQ*>ndeaR3aFD7Q7VwY diff --git a/loko/locale/fr/LC_MESSAGES/djangojs.po b/loko/locale/fr/LC_MESSAGES/djangojs.po index 48f6111..d4d1ebb 100644 --- a/loko/locale/fr/LC_MESSAGES/djangojs.po +++ b/loko/locale/fr/LC_MESSAGES/djangojs.po @@ -194,3 +194,30 @@ msgstr "lots" msgid "Fonds de plan & Orthophotos" msgstr "Fonds de plan & Orthophotos" + +msgid "Zones de gestion" +msgstr "Zones de gestion" + +msgid "Aucune zone de gestion définie pour cette thématique." +msgstr "Aucune zone de gestion définie pour cette thématique." + +msgid "zones" +msgstr "zones" + +msgid "Afficher / masquer toutes les zones" +msgstr "Afficher / masquer toutes les zones" + +msgid "Opacité" +msgstr "Opacité" + +msgid "Fréquence cible :" +msgstr "Fréquence cible :" + +msgid "jours" +msgstr "jours" + +msgid "Consignes & points d'attention" +msgstr "Consignes & points d'attention" + +msgid "Centrer sur la zone" +msgstr "Centrer sur la zone" diff --git a/loko/locale/nl/LC_MESSAGES/django.mo b/loko/locale/nl/LC_MESSAGES/django.mo index 2def9554e19e9d77e99f6cc40862e81e4e2e7ee9..84ba12002597f8920a2d816dc2b68ade0dd36d74 100644 GIT binary patch delta 6015 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 delta 1334 zcmXxkOGs2v9LMo9%|o3><}m;H+;i?d_nh-TXQt3{uPODp zCUDv0X$v5vQC;5gP|J4Ue^H{fa1^ZmF5Z(s%9MLjox z>oJ3kjBg&>8*fn$&fEHut$#&6X4U%3wy$9$?Lj(KVk;_x9oUM!m_WxmiF)oGYN2x& zVtlh?84;-9vIuh$HNY9v3;S>r4%qq_YTz`g|2TRRvu08K zr%?-e79sx)Tomk$In?1P;x=5xLs-o+WG|}Y9psitqcSsr%-Kw$CXhu9G=rKz4%P3u zt-nM*=5@;6m_zO15^AMCQG4_c*+TCib)bq?zME(#bkGhGIu9ysgeIiPDFYf*hf=?o zqeM5MvrsN6?cV|7ux&YlyX>{-ve!BXnxOq#@LG4;ds?A>YAVW7xhS(L%|x6~MwOj% zVe2n>*DZXrQ19^V!M%je!G1#9p-d<%D*Fhfx?JkG*g+`WIt!h|cEY&h!G!xMIOEQS z68_O4$8D>4;x1QQ$)BrC`uxe!vHU{Sb)S1VGUXC-!q7U7(v4MOpcG1^x)44V1 SB%Kk{@5HY;!&gU!yxM;q0eV9K diff --git a/loko/locale/nl/LC_MESSAGES/djangojs.po b/loko/locale/nl/LC_MESSAGES/djangojs.po index d172e66..7579e0f 100644 --- a/loko/locale/nl/LC_MESSAGES/djangojs.po +++ b/loko/locale/nl/LC_MESSAGES/djangojs.po @@ -194,3 +194,30 @@ msgstr "percelen" msgid "Fonds de plan & Orthophotos" msgstr "Achtergrondkaarten & Orthofoto's" + +msgid "Zones de gestion" +msgstr "Beheerszones" + +msgid "Aucune zone de gestion définie pour cette thématique." +msgstr "Geen beheerszone gedefinieerd voor dit thema." + +msgid "zones" +msgstr "zones" + +msgid "Afficher / masquer toutes les zones" +msgstr "Alle zones tonen / verbergen" + +msgid "Opacité" +msgstr "Dekking" + +msgid "Fréquence cible :" +msgstr "Doelfrequentie:" + +msgid "jours" +msgstr "dagen" + +msgid "Consignes & points d'attention" +msgstr "Instructies & aandachtspunten" + +msgid "Centrer sur la zone" +msgstr "Centreren op zone"