From 4475d3607574d4f061edbf9c1c92365725023efc Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Thu, 15 May 2025 14:43:45 +0800 Subject: [PATCH 01/85] [IMP] spp_area_base menu icon --- .../static/description/OpenSPP-Icons-Area.png | Bin 0 -> 3618 bytes spp_area_base/views/area.xml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 spp_area_base/static/description/OpenSPP-Icons-Area.png diff --git a/spp_area_base/static/description/OpenSPP-Icons-Area.png b/spp_area_base/static/description/OpenSPP-Icons-Area.png new file mode 100644 index 0000000000000000000000000000000000000000..a980b1d5b6b4e7481fa64410594d3c1518aec7e1 GIT binary patch literal 3618 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 From ef1c6e47bd7d561be0554d0de12cf91a6eea5306 Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Thu, 15 May 2025 15:01:25 +0800 Subject: [PATCH 02/85] [IMP] spp_idpass menu icon --- .../description/OpenSPP-Icons-ID-Management.png | Bin 0 -> 2976 bytes spp_idpass/views/main_view.xml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 spp_idpass/static/description/OpenSPP-Icons-ID-Management.png diff --git a/spp_idpass/static/description/OpenSPP-Icons-ID-Management.png b/spp_idpass/static/description/OpenSPP-Icons-ID-Management.png new file mode 100644 index 0000000000000000000000000000000000000000..7c83f1f430b57e896e0f2f89d03c43a58067b674 GIT binary patch literal 2976 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 z From a8dc0a7b34a75757a300492a42477de6ae87435e Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Thu, 15 May 2025 15:03:41 +0800 Subject: [PATCH 03/85] [IMP] spp_service_points menu icon --- .../description/OpenSPP-Icons-Service-Point.png | Bin 0 -> 4106 bytes spp_service_points/views/main_view.xml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 spp_service_points/static/description/OpenSPP-Icons-Service-Point.png diff --git a/spp_service_points/static/description/OpenSPP-Icons-Service-Point.png b/spp_service_points/static/description/OpenSPP-Icons-Service-Point.png new file mode 100644 index 0000000000000000000000000000000000000000..42417cc35c4276b9135820aa6a5f4b984f8850c1 GIT binary patch literal 4106 zcmbuC`8U+>`^R5n>>2w~j7;{jMr9d7_GF7}V~yc0TQZ_FV?<1vH!ar4q>?2?n5LAm z6I0g75+Sl=Mhr1y48Gpqf8lfeazF2LUC+n4&$+L2oparFak7O7$_fGi0I|2Tx(EQE z0|^57c@GZXYZajYATnrgW#OLqo&IDce&W4&dZp=3@;8eHDXU5tipTYYSL1E<18x36 zYJkM0B4t-;ex1kt#C`aH%E-W*8m)^h01UK#qwgmJGp5Yn2R{seVUz>*{~9x=C8`1o zik-?o?VTJRonSv+j=;=2uhM9)0V136F8fh>g_CZt3;~=Q{ruSZwN+xvhI#h)a6X3H zZrqCG(MmKF_^ZaYMxzJJc4m^$yDnz2yuc6sWY>Tqw_6o@TC8&b$Y+P`GvXPaNjRS$ z-KNDIb=9eus0nslCe1bn4;O=%Di1{egVSM2V5Y!K=E z>TgB7>+_Yv$pVBSTq-8$u z!Od(zx;YgG9H@OB`!ecThoCM2U^YQCIk!&q??+EV(BW6Ca$&B+R$Y@u?Sri#J!}3R z*=AH#&EY^l$)V%tGzBi6Vi9%eU-^91KGeb+x}L#QECU7>H_xiJMO)raOX=t4JzE9R zDU~o>CJF+sa!hFkUmO=gQz%`U-EZp~5ZB11D;ZoO=+kifW_^jgq26i!ld|iX529j! zjQ15(SDeQ6V8gyd!ADD@`a1AFsa|+e$Ur|O5$h;Z^njb&H@opTNfvHFct<{nxaK<}Q&S7r4yVwmj`7IH-jfafqh}MI>cK+-fk`ecY;C`d#iP44qqc+(s z{X(4z4fxw{frnMF?`z31vCgCQTzQ^pF&7u=dc>A$r-}G`z@~)(@C>q_pU(94`)#We z|LXk}vGq=s`rBF`v{g0yj?dXFZW5I6z45=M^mMS%0BQkrzaiYh??Q?jM#c&&&t{;G=#AVukKU6WZ zE$FFcOktTiqS$`;DPq{Z>rlI%N0z=49?U&!P}L&qrUV}gZEfNtwNEESvR3muD)ly^ zb$08tX;JM>f|M|a>9R`Sm&t_S5<~33r_&tM(Nli;P-Y?7e|&$Pj>o_sUXELqC&r@Vy1P21cGASXjj_$23roL zo?WRsra5htMssXt)|cW(m**a3{2A;!D7r6pnc+;i#UzI}d_wxXiL`tELoN?Fs2icX z;nhV%KItzIz`lTDXUIs3FJ~DF`6rg7!u+LmyHJ4QDw`8qNq~QI3Ym*jQ-A^;Fw8K| z3ES2tm5EG)chwNLm?8~i0Vyir&wH<)$C=y$JSda!dQ!zknqRp`ahd>_I45NSpU-Jsq^(0%;zO@40Sf=S5+VNZ0y_`%}?8} zy(1$E@;&gcH|KlAIu;{hp2A*FBj#_>HKDzZ*cA)*4;-c12EPw)~FS)oc z$zL%j(qZqJ>2E->i}dA)H>(U4mm{N*D?fDTf|CT+r9*z)m`;EMx_r91ePUXZMxy1Y2zJz>p+CU5GKG^%G z_uX%yqvuv%zstur8^4Z@q=)D*Hz`c38+uBL8LMDf&9Ei_W<+?;(vb|TKy=?D< zL!mOu3*=G?x9FW($98(#>}q}%@`O(vcu|-c1qWVS)!Z0rkPCc({!GT^=|a@y0R7fb z3CQSI%d@9*HoE3H=DQ>V$SSAj?Uyt2H)-1wfUr59wjg=KQpWuILnpbC&24MJ8mfTF z8IM;2T2%@^`5 zT`YJv)=HYGt8P#FuVp3W#f#GEt8n$9hUYG<*0pi+$=B_v+1et)z%3ilp{m}(JBu+~ zhCmobc5e!gsdQu2EJrVF7XiX8M~WaP_ihf}N$kXZbQ@istudeGz6$is0WWz;fih56 zni-LQzj=5+-{M4Vu|hg;m5?`*{hBLx?rQ0Nk{!z^EU$1IHYf5$%s8f0bD>=0%9lor z#yz%5+iib*gV5Vusm&`yM_IU_MNIl*g!c2YGQE4%St0utCwM=Kpw+uRFAs-;hfGiN zqUEYrERGZhPWa}>Q5rQ5Msn-bDBfzX`YGRR1g}SskSpK^A`K8m6doQu^i*R;nmx?S zSi+BO1@>oprzG3#YET*}Zw+yS1qKZvtxDyPJl>O}(07Qqe5E%!6LE)n%GQJ;Kqk+m zUr>43r|aRX&Jb8tbCY}#OMfSrLT3B_eg08mnXR;wkfF3GLfx}4ph%{V6i`0fQ z6yPWT#q(5O?P|$!b;Xf@eBzba~-D{sF>!?VWj~yrz}Hyx||gzJgY-gqHGTR zs-ms8zc0qFf~x){FKX5<9qMjva&beu{dAurSN3U!UCr`3JtiA4Q1Qoro+U;j2cO+~&Zv5EpLcVULu_r)!x(b4oOPon2o1W2VdniTnghI*)Tj50cn~uq={kh_k)b zmHf#k?67J0hQCDcR?bqeod2}_b)S*&)+EYe<#>@pHCzK0-xO8mtHex)b4uVA2zlM^+A+lg0Civxy1+h+*PyKZ-gND5J3>YL-SP zMGtT~M~t!^@xn9#Ls=nzCL?@v{;r-Wu6a1;@?kP7dkLZX^bO*2hX}4YV4d8twDzf0 zdqYKHptPUR^YT?!UnzMC=?vetyS8cVozVCZW-l&|l$r%Z%}&)*LX5-+Die3(pIpR) z%{em);TW^oZct)8fC!>(Rv^e3DVKWWR)iMCGL!ShYv^tj_^t#m_@`497Y%WeAxYJr zmsLd?)KXB6$>lTwfRTMR;)@09Z8hDJGeey3xApS;(0!Vxnw~lZdE6nkV?4n;hS{Y< z9>~J>Fto2oM{bQBfT8A}fC&2Wwoc^XpYA+r$v1oB1H%&D^YL^xOW$J)G^-G|dyutJ z+tZ3?GN}`F4kzpC`bA!Fg*8Q49hddJSId4`XaXt7MT=U~a;-+jTDEw+1Zmi4S-dj` z90#b(mLC#L1>dixCsBj;(F($Wz&CB5@a|r+F6Yc;M*i`;$uJJOApI&nR7tFv?e7l% zB%Yk<9eg)q_Zd4Fsn7x2Q}@_9hVj@+DZ)NRS(#$8o`RO%BEpo|2SY-cd4RgFib}_%OcPPv5@s>+e5#U#iSnf)l(O@#Zdu< z66WB$%~EpFI6^LZCe%ea>&0f1*Ek=JUO4@&`EMm9_E13fh@A)59>mxrf?EgS3q}q@FuR3aja~yY|o0RgDHL z2Y-8G#73ttSlc*?xl#6$hS&G6Whfp%gDWf?bA=eSE$G>G!#Z5#Dp1?C(>Y~K@e zlp1G=d3>3c8XWOh9H%g8HFsYa+UZ+A2Y(@?vC~q7dx+w?Sw%OrVd%pSois{OEL~T` zV0m3%Lxt+iIj!R`%#vbt)`$S!onyPOeN0NN_8iCmjDc=Df&XK67>DTs7&6+h^a!~wS zt<4mc;A;f0n=Uz-9}fnl(JpJ0a-6-!y!HzTwGT#JCD{7cHUHJ%o` zC%`NpZc-p^vW$-bw)(@pkWy@JvBHHP7C3M{Fa~vq+^>+hYA^3mU1^PtH3msD0X+4; z9LN~-h#GXzWkO?OIlq`-{Dgp{PTro!F_I+T|GF|C__1$T1ON=w`lf%~w~EO5k7#f0 LWcB7;;O+kdoC>NE literal 0 HcmV?d00001 diff --git a/spp_service_points/views/main_view.xml b/spp_service_points/views/main_view.xml index a5ceba0d2..f7791c000 100644 --- a/spp_service_points/views/main_view.xml +++ b/spp_service_points/views/main_view.xml @@ -4,7 +4,7 @@ From bd326f43f13de9c965c19958ceccc233df08dd6d Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Thu, 15 May 2025 15:06:26 +0800 Subject: [PATCH 04/85] [IMP] spp_programs menu icon --- .../static/description/OpenSPP-Icons-Program.png | Bin 0 -> 5297 bytes spp_programs/views/main_view.xml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 spp_programs/static/description/OpenSPP-Icons-Program.png diff --git a/spp_programs/static/description/OpenSPP-Icons-Program.png b/spp_programs/static/description/OpenSPP-Icons-Program.png new file mode 100644 index 0000000000000000000000000000000000000000..aa46ad80b381433ba3c13eb9c6a0e8d34933f569 GIT binary patch literal 5297 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 CAJ3`) literal 0 HcmV?d00001 diff --git a/spp_programs/views/main_view.xml b/spp_programs/views/main_view.xml index 482fa2e18..dfbed568a 100644 --- a/spp_programs/views/main_view.xml +++ b/spp_programs/views/main_view.xml @@ -19,7 +19,7 @@ Part of OpenSPP. See LICENSE file for full copyright and licensing details. From a5687e43cb27a58d7be79c795c6b1b5a7fc1510f Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Thu, 15 May 2025 15:10:54 +0800 Subject: [PATCH 05/85] [IMP] Registry Menu Icon --- .../description/OpenSPP-Icons-Registry.png | Bin 0 -> 2901 bytes spp_base/views/main_view.xml | 2 +- .../description/OpenSPP-Icons-Registry.png | Bin 0 -> 2901 bytes spp_registry_base/views/main_view.xml | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 spp_base/static/description/OpenSPP-Icons-Registry.png create mode 100644 spp_registry_base/static/description/OpenSPP-Icons-Registry.png diff --git a/spp_base/static/description/OpenSPP-Icons-Registry.png b/spp_base/static/description/OpenSPP-Icons-Registry.png new file mode 100644 index 0000000000000000000000000000000000000000..4ab30801805345ec338b144510dfe78e60edb6f6 GIT binary patch literal 2901 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 ChCOTm literal 0 HcmV?d00001 diff --git a/spp_base/views/main_view.xml b/spp_base/views/main_view.xml index fa4bfc34b..cdc5a1592 100644 --- a/spp_base/views/main_view.xml +++ b/spp_base/views/main_view.xml @@ -6,7 +6,7 @@ Part of OpenSPP. See LICENSE file for full copyright and licensing details. diff --git a/spp_registry_base/static/description/OpenSPP-Icons-Registry.png b/spp_registry_base/static/description/OpenSPP-Icons-Registry.png new file mode 100644 index 0000000000000000000000000000000000000000..4ab30801805345ec338b144510dfe78e60edb6f6 GIT binary patch literal 2901 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 ChCOTm literal 0 HcmV?d00001 diff --git a/spp_registry_base/views/main_view.xml b/spp_registry_base/views/main_view.xml index d67c21ad3..11ac72367 100644 --- a/spp_registry_base/views/main_view.xml +++ b/spp_registry_base/views/main_view.xml @@ -3,7 +3,7 @@ From a83928b99a017b85e0c127272b6ebf1a1dd82b0d Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Thu, 15 May 2025 15:14:26 +0800 Subject: [PATCH 06/85] [IMP] spmis Menu Icon for Apps, Settings --- .../static/description/OpenSPP-Icons-App.png | Bin 0 -> 2516 bytes .../static/description/OpenSPP-Icons-Setting.png | Bin 0 -> 4144 bytes spp_base/views/main_view.xml | 11 +++++++++++ 3 files changed, 11 insertions(+) create mode 100644 spp_base/static/description/OpenSPP-Icons-App.png create mode 100644 spp_base/static/description/OpenSPP-Icons-Setting.png diff --git a/spp_base/static/description/OpenSPP-Icons-App.png b/spp_base/static/description/OpenSPP-Icons-App.png new file mode 100644 index 0000000000000000000000000000000000000000..d835c255d3d5bb67ba6463f0fa1210e903745f27 GIT binary patch literal 2516 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 xNb^i&ZW3c_Bs-oq(yh>3NbLV + + + From 352d5b9194d9d1a6860783a784ab48910e567087 Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Thu, 15 May 2025 15:19:42 +0800 Subject: [PATCH 07/85] [IMP] Change Request Menu Icon --- .../description/OpenSPP-Icons-Change-Request.png | Bin 0 -> 2108 bytes spp_change_request/views/main_view.xml | 1 - .../description/OpenSPP-Icons-Change-Request.png | Bin 0 -> 2108 bytes spp_change_request_base/views/main_view.xml | 7 ++++++- 4 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 spp_change_request/static/description/OpenSPP-Icons-Change-Request.png create mode 100644 spp_change_request_base/static/description/OpenSPP-Icons-Change-Request.png diff --git a/spp_change_request/static/description/OpenSPP-Icons-Change-Request.png b/spp_change_request/static/description/OpenSPP-Icons-Change-Request.png new file mode 100644 index 0000000000000000000000000000000000000000..aef82c7987dd7b6808a484f0a1ab5b868f8e6afd GIT binary patch literal 2108 zcmb7FdpOf=AOCF)GkR>ZA~}`RNDfgCdoYyqnOI%X99|K^(}d7AbLjLSQF!ZRm7EGo zD8y_E9Y{rF*yc19nY`A_Z122(ynl8*@BPpBzCPdY_j7;l?|pr)`-+d3^H!J!3;=+w zt}aLY001Q0f&i$zECijaJ`DiSEv`rHkEM()OyvHl>I}&HxE=u++9y&Ib#d@&pp{Yr zGu@_cc)bRwwsVt9GNfT>ei@CpqmKqyq_;==g%W z|Mhd&doD;3N=KqC#BO%Nn|53-4$N$Tz*MB6ik5m7G)L2GP$>@QL@VKwW}Eor?Tq|9 zaar`4J=YZJNH|gd`r326g$3`wy{A_?V^aohlKJ~H9J(7IS$IX1wnXaIg;tXBn~S}a zA{*g>>))S6RXpPF2gwe)(!UnQR?*iLyHR;o`K^uqn@VJ)GGJ3n0hjIzewj^QWFDWx zR2F)uF&%|S^Z6yFV6Crw1JyEdMM^yXxX)QFw@FpPj|k3RHi+v^BF?;vV zhV0#8oE1$CpS+uFqn(d0=dX~m7me;gP7gZ-fO7}dj1G$1{duO33RZ5oh1>`g;tIG} z>}oM{Y24{nSCFE`VIE#k8`iBem!M|0^s=bys7%!q7e5ldLsi1s_cjfoZ;IHIJ9}$0 zMdo8`F>#4IPk;$>{HAQ$Wo2pQD?S#TQH-Et8t}b0a6;!*v#ck5$m3O~z=c_A4zW>T zM^YCkqkrXL>k^~5_X<8SvC(?stwmiHtH_c)nvzjMr>`^7I|x2fpiesn&TqS_EWL1& ztCOneAsg?WgG<9DMta?(iT8I@>LGh&50^zBmo+v)Pg`Zv?;@WeCFx8l6;eCx(cXtF zF(gY*I%bhrkwTrKu5Xv|9o6p=i!>yTaa?T4$|CxE6F(7^Y_Oi7M2&mlpUHoaz5bh& zL8+dMLOnr~Oi~m$0ePF1qcKNr!8mEIcUI1Z*uMy}3jD#k6uD0#K5xh+MJrY`@`|Tf z8HLJHRd@05&C z*gI4dSz{BE0}{bIH^TqDSQIi`yX5~l;%d4FDNkZECS5fPkZu^?G*`cfjmcSFt1DYs zW0bvL7d;5g%m0G0uI$h3Jyyq7X|=7~Wiy@FreKF8On%X}^V)k$p~xLX1_LO73IK8d z8n6QaFu(`+d(g#{08$TY$Y0BMN(aT7sNOeZ(6_ zn#Jq)1oL<^;m?7ug8_(f14`jsm~U|v=i?hQO7m{@ApXP0ba=YoiNDISJK5`gZKGPN zjqZF`!s7vqrS2hBvD0tQJ85CB9z*5R+`e*#9>$oedmw_EpHUTjAzBdWeUABzT<7aQ zGe+bt)ad#` zIyC&?gAeCP)k6VwZMTbLv3}Bc>!O-H%X!cnb3U;A)w6_dl)4u}{6n)XW`}O>?)j;& z%nNvuipzcIr~0u>>#NlMk(mx{0+45t8F9~%Go^*5K_NP+MwG)1ZwZB-eHGB{TH7)n z3gl->cd6$rr#!Dwc^**38cPq9z+1eXG(V)wl?xKAsnxej9BLWyD;gl4$ezCqQ~?*a zEIBL~cU+I+;||cve)i~~(L%P?3)Xstw#!~&$HalYU{Xj4gZ{_txrq+%Z`lKs@&(Vs zml9O{T@DF9FT}OWS6?X()MP7QOPQH}~4r`TfFyYgPV`dgDFo9QN?8 zQjH_wmm^IgqD^28cr9mNNMfrltMgT*-Y8Z(Inr<5MmP|v(hdy@cHuGbio`?&if~AO z!{+1h5W!niQ?Li)T?JJ0HrG|@%ZK-K3p`p~X4AJ1J?Fx#Y+f11#&-+St+nwvXCqz4 z)Oyx1vG2N{@ml-OmT^?U%&>h15{8Sh%4wZ#f^xz)u0&MC%}AYr-#X+V{T1y|0=Z2F(Q{!g?0 zJxj`}er;pBA3YCjI2%N)68^Nacs|KmJN`g{{o6H*^irMW`|YN@r%uYh{E9b|Za?#Z YEkGr5i1?!A)ZR_R)zRx{y+a7)KTn#nYXATM literal 0 HcmV?d00001 diff --git a/spp_change_request/views/main_view.xml b/spp_change_request/views/main_view.xml index e444758d7..11e80d753 100644 --- a/spp_change_request/views/main_view.xml +++ b/spp_change_request/views/main_view.xml @@ -2,7 +2,6 @@ Part of OpenSPP. See LICENSE file for full copyright and licensing details. --> - ZA~}`RNDfgCdoYyqnOI%X99|K^(}d7AbLjLSQF!ZRm7EGo zD8y_E9Y{rF*yc19nY`A_Z122(ynl8*@BPpBzCPdY_j7;l?|pr)`-+d3^H!J!3;=+w zt}aLY001Q0f&i$zECijaJ`DiSEv`rHkEM()OyvHl>I}&HxE=u++9y&Ib#d@&pp{Yr zGu@_cc)bRwwsVt9GNfT>ei@CpqmKqyq_;==g%W z|Mhd&doD;3N=KqC#BO%Nn|53-4$N$Tz*MB6ik5m7G)L2GP$>@QL@VKwW}Eor?Tq|9 zaar`4J=YZJNH|gd`r326g$3`wy{A_?V^aohlKJ~H9J(7IS$IX1wnXaIg;tXBn~S}a zA{*g>>))S6RXpPF2gwe)(!UnQR?*iLyHR;o`K^uqn@VJ)GGJ3n0hjIzewj^QWFDWx zR2F)uF&%|S^Z6yFV6Crw1JyEdMM^yXxX)QFw@FpPj|k3RHi+v^BF?;vV zhV0#8oE1$CpS+uFqn(d0=dX~m7me;gP7gZ-fO7}dj1G$1{duO33RZ5oh1>`g;tIG} z>}oM{Y24{nSCFE`VIE#k8`iBem!M|0^s=bys7%!q7e5ldLsi1s_cjfoZ;IHIJ9}$0 zMdo8`F>#4IPk;$>{HAQ$Wo2pQD?S#TQH-Et8t}b0a6;!*v#ck5$m3O~z=c_A4zW>T zM^YCkqkrXL>k^~5_X<8SvC(?stwmiHtH_c)nvzjMr>`^7I|x2fpiesn&TqS_EWL1& ztCOneAsg?WgG<9DMta?(iT8I@>LGh&50^zBmo+v)Pg`Zv?;@WeCFx8l6;eCx(cXtF zF(gY*I%bhrkwTrKu5Xv|9o6p=i!>yTaa?T4$|CxE6F(7^Y_Oi7M2&mlpUHoaz5bh& zL8+dMLOnr~Oi~m$0ePF1qcKNr!8mEIcUI1Z*uMy}3jD#k6uD0#K5xh+MJrY`@`|Tf z8HLJHRd@05&C z*gI4dSz{BE0}{bIH^TqDSQIi`yX5~l;%d4FDNkZECS5fPkZu^?G*`cfjmcSFt1DYs zW0bvL7d;5g%m0G0uI$h3Jyyq7X|=7~Wiy@FreKF8On%X}^V)k$p~xLX1_LO73IK8d z8n6QaFu(`+d(g#{08$TY$Y0BMN(aT7sNOeZ(6_ zn#Jq)1oL<^;m?7ug8_(f14`jsm~U|v=i?hQO7m{@ApXP0ba=YoiNDISJK5`gZKGPN zjqZF`!s7vqrS2hBvD0tQJ85CB9z*5R+`e*#9>$oedmw_EpHUTjAzBdWeUABzT<7aQ zGe+bt)ad#` zIyC&?gAeCP)k6VwZMTbLv3}Bc>!O-H%X!cnb3U;A)w6_dl)4u}{6n)XW`}O>?)j;& z%nNvuipzcIr~0u>>#NlMk(mx{0+45t8F9~%Go^*5K_NP+MwG)1ZwZB-eHGB{TH7)n z3gl->cd6$rr#!Dwc^**38cPq9z+1eXG(V)wl?xKAsnxej9BLWyD;gl4$ezCqQ~?*a zEIBL~cU+I+;||cve)i~~(L%P?3)Xstw#!~&$HalYU{Xj4gZ{_txrq+%Z`lKs@&(Vs zml9O{T@DF9FT}OWS6?X()MP7QOPQH}~4r`TfFyYgPV`dgDFo9QN?8 zQjH_wmm^IgqD^28cr9mNNMfrltMgT*-Y8Z(Inr<5MmP|v(hdy@cHuGbio`?&if~AO z!{+1h5W!niQ?Li)T?JJ0HrG|@%ZK-K3p`p~X4AJ1J?Fx#Y+f11#&-+St+nwvXCqz4 z)Oyx1vG2N{@ml-OmT^?U%&>h15{8Sh%4wZ#f^xz)u0&MC%}AYr-#X+V{T1y|0=Z2F(Q{!g?0 zJxj`}er;pBA3YCjI2%N)68^Nacs|KmJN`g{{o6H*^irMW`|YN@r%uYh{E9b|Za?#Z YEkGr5i1?!A)ZR_R)zRx{y+a7)KTn#nYXATM literal 0 HcmV?d00001 diff --git a/spp_change_request_base/views/main_view.xml b/spp_change_request_base/views/main_view.xml index cc6650f18..caeb74970 100644 --- a/spp_change_request_base/views/main_view.xml +++ b/spp_change_request_base/views/main_view.xml @@ -3,7 +3,12 @@ Part of OpenSPP. See LICENSE file for full copyright and licensing details. --> - + Date: Thu, 15 May 2025 15:22:53 +0800 Subject: [PATCH 08/85] [IMP] DMS menu icon --- spp_dms/static/description/OpenSPP-Icons-DMS.png | Bin 0 -> 1732 bytes spp_dms/views/main_view.xml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 spp_dms/static/description/OpenSPP-Icons-DMS.png diff --git a/spp_dms/static/description/OpenSPP-Icons-DMS.png b/spp_dms/static/description/OpenSPP-Icons-DMS.png new file mode 100644 index 0000000000000000000000000000000000000000..836761e2cd1b1561c13024debe90855f23fea459 GIT binary patch literal 1732 zcmah}cT|&C9DVtS5LQSFgi%Sr1+uqFAxQ&>hy@%7G9;3Ms3(Bq00AT)4zP@Z=y8-4 zl}e#96wt#=sA4>df<*)e1QKN!H9(Yv5RwLHwWprbzJK00_ub!p=iT4^G0@*fTf5U@BB1mt~;S z^pS3-tWMQJk!ljlx^H0tj3&D=RigXN*Su6I=(=4vGZ*7r+)d$oE6Qff0#QoV{~T=p zt-7tdgMxx5MmPHD9WbGW&&=v1kGZ&Swv{)7rIZ8Mam_ z?RTU3J?sfPPVDvs#r=+V*FV*o-x1Vjp(S(I@dWm200l?@KmY@7?`-6kFg|Tzu*d}4 zisINRQJ3|5R6aAi*+p{fX#x9+_G!BgX;V0*igPkrSJ^*NVT124mvAP=jKx$m^GYZF=MyC95G~fVmv#MG%lw0tW%0O}aB*W> zFP9Nts|zCR$zdJMvJZNOy1i&FYC7l@MM%f4kL7i12KeIq7|I37xsW4c&k z3Mk%WdoL)~l`cN?K7HD!t}6?Sv(mi$y*_ z^;n|d8)Vafnfd)n*k^nE<%fkXSaQrKpJi55RasTTz~YuBB~7rDYRYOYmv@S0#XT;Nm|-h2*yvH5-h4h*j46*YJ?dhFTD*`gpE z=*-8FIN3xQk;*7($E|C6D^AKk5Gtbv8lTb`Q<9-q6x08d}CX-%CyLY{<;g1kT%7|jkgD+ zC%#WVsu#Ci)@^Q?{sF8XIjyMdh+s{qw?qkaz_XJIl8b?Ljkj%nIVL=CafDV#V&Ml|ah(l(_jZt_9WI%{L$C=FIp@UqeU3;r>5gGogeG%ygE0ix`x+fS6IYY6yh^k7G8q1dOCdZ- zaD9b61Ao2@0Yl3Na6{u0Bm|Q?4TTNIz%XPxe=!3Enxkvf*PDL{jz4fo9Rp78pS#GQ zp#JviqUcYCRjTSpMLc?UwaT(g&>tBL!PF$?=@|BcaCj;9lrIcF7tQ9s@{67eXC10u zM(T*lrK^R+s%s&D2N*B3+|ZMgld=HULP&0E(rfiG;I%YN_g^)oosJX~-UR_M10C+B zwjeT>3LGJ~-`Lj3-DIV{&`Y$lbsF}>$xHUkf5h>k5b%FPZ From d254dee496540af20e0f78f02d8dddec8fbb1838 Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Thu, 15 May 2025 15:26:25 +0800 Subject: [PATCH 09/85] [IMP] Audit Log Menu Icon --- .../static/description/OpenSPP-Icons-Audit.png | Bin 0 -> 4038 bytes spp_audit_log/views/spp_audit_rule_views.xml | 7 ++++++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 spp_audit_log/static/description/OpenSPP-Icons-Audit.png diff --git a/spp_audit_log/static/description/OpenSPP-Icons-Audit.png b/spp_audit_log/static/description/OpenSPP-Icons-Audit.png new file mode 100644 index 0000000000000000000000000000000000000000..c21ee24a0bffc796f95589b600920ad25fcd0dd2 GIT binary patch literal 4038 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 literal 0 HcmV?d00001 diff --git a/spp_audit_log/views/spp_audit_rule_views.xml b/spp_audit_log/views/spp_audit_rule_views.xml index e02cc3752..a81a40db5 100644 --- a/spp_audit_log/views/spp_audit_rule_views.xml +++ b/spp_audit_log/views/spp_audit_rule_views.xml @@ -53,7 +53,12 @@ - + From 30ea23f5685341f4559974d86f321ca02c9b5920 Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Thu, 15 May 2025 15:31:29 +0800 Subject: [PATCH 10/85] [IMP] SP-Farmer Menu Icons for Registry, Apps, Settings --- spp_farmer_registry_base/__manifest__.py | 1 + .../static/description/OpenSPP-Icons-App.png | Bin 0 -> 2516 bytes .../description/OpenSPP-Icons-Registry.png | Bin 0 -> 2901 bytes .../description/OpenSPP-Icons-Setting.png | Bin 0 -> 4144 bytes spp_farmer_registry_base/views/main_view.xml | 24 ++++++++++++++++++ 5 files changed, 25 insertions(+) create mode 100644 spp_farmer_registry_base/static/description/OpenSPP-Icons-App.png create mode 100644 spp_farmer_registry_base/static/description/OpenSPP-Icons-Registry.png create mode 100644 spp_farmer_registry_base/static/description/OpenSPP-Icons-Setting.png create mode 100644 spp_farmer_registry_base/views/main_view.xml diff --git a/spp_farmer_registry_base/__manifest__.py b/spp_farmer_registry_base/__manifest__.py index ad886f44f..89fdcc595 100644 --- a/spp_farmer_registry_base/__manifest__.py +++ b/spp_farmer_registry_base/__manifest__.py @@ -35,6 +35,7 @@ "data/id_data.xml", "views/res_partner.xml", "views/configuration_view.xml", + "views/main_view.xml", "views/res_users.xml", ], "assets": { diff --git a/spp_farmer_registry_base/static/description/OpenSPP-Icons-App.png b/spp_farmer_registry_base/static/description/OpenSPP-Icons-App.png new file mode 100644 index 0000000000000000000000000000000000000000..d835c255d3d5bb67ba6463f0fa1210e903745f27 GIT binary patch literal 2516 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 ChCOTm literal 0 HcmV?d00001 diff --git a/spp_farmer_registry_base/static/description/OpenSPP-Icons-Setting.png b/spp_farmer_registry_base/static/description/OpenSPP-Icons-Setting.png new file mode 100644 index 0000000000000000000000000000000000000000..4f36d7ee49b97afbebbf7acb50626c39bdcd287b GIT binary patch literal 4144 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 xNb^i&ZW3c_Bs-oq(yh>3NbLV + + + + + + + From f7254c1c4231e8de6b3ccd0019b6fd5d1d1cacb0 Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Thu, 15 May 2025 15:33:04 +0800 Subject: [PATCH 11/85] [FIX] pre-commit --- spp_audit_log/views/spp_audit_rule_views.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spp_audit_log/views/spp_audit_rule_views.xml b/spp_audit_log/views/spp_audit_rule_views.xml index a81a40db5..6df10e373 100644 --- a/spp_audit_log/views/spp_audit_rule_views.xml +++ b/spp_audit_log/views/spp_audit_rule_views.xml @@ -54,11 +54,11 @@ + name="Audit Log" + id="spp_audit_log.menu_root" + groups="spp_audit_log.group_manager" + web_icon="spp_audit_log,static/description/OpenSPP-Icons-Audit.png" + /> From c3eef20009334fe57186fe1851610c2d62ba60da Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Tue, 20 May 2025 05:03:53 +0800 Subject: [PATCH 12/85] [IMP] icons for odoo menus --- spp_base/__manifest__.py | 7 +++ .../icon-Dashboards-White-line.png | Bin 0 -> 2844 bytes .../description/icon-Discuss-White-line.png | Bin 0 -> 3773 bytes .../icon-Email-Marketing-White-line.png | Bin 0 -> 3493 bytes .../description/icon-Employees-White-line.png | Bin 0 -> 3268 bytes .../description/icon-Job-Queue-White-line.png | Bin 0 -> 999 bytes .../description/icon-Project-White-line.png | Bin 0 -> 2864 bytes .../description/icon-Surveys-White-line.png | Bin 0 -> 3318 bytes .../description/icon-To-do-White-line.png | Bin 0 -> 1363 bytes spp_base/views/main_view.xml | 47 ++++++++++++++++++ spp_farmer_registry_base/__manifest__.py | 6 +++ .../icon-Dashboards-White-line.png | Bin 0 -> 2844 bytes .../description/icon-Discuss-White-line.png | Bin 0 -> 3773 bytes .../icon-Email-Marketing-White-line.png | Bin 0 -> 3493 bytes .../description/icon-Employees-White-line.png | Bin 0 -> 3268 bytes .../description/icon-Job-Queue-White-line.png | Bin 0 -> 999 bytes .../description/icon-Project-White-line.png | Bin 0 -> 2864 bytes .../description/icon-Surveys-White-line.png | Bin 0 -> 3318 bytes .../description/icon-To-do-White-line.png | Bin 0 -> 1363 bytes spp_farmer_registry_base/views/main_view.xml | 46 +++++++++++++++++ 20 files changed, 106 insertions(+) create mode 100644 spp_base/static/description/icon-Dashboards-White-line.png create mode 100644 spp_base/static/description/icon-Discuss-White-line.png create mode 100644 spp_base/static/description/icon-Email-Marketing-White-line.png create mode 100644 spp_base/static/description/icon-Employees-White-line.png create mode 100644 spp_base/static/description/icon-Job-Queue-White-line.png create mode 100644 spp_base/static/description/icon-Project-White-line.png create mode 100644 spp_base/static/description/icon-Surveys-White-line.png create mode 100644 spp_base/static/description/icon-To-do-White-line.png create mode 100644 spp_farmer_registry_base/static/description/icon-Dashboards-White-line.png create mode 100644 spp_farmer_registry_base/static/description/icon-Discuss-White-line.png create mode 100644 spp_farmer_registry_base/static/description/icon-Email-Marketing-White-line.png create mode 100644 spp_farmer_registry_base/static/description/icon-Employees-White-line.png create mode 100644 spp_farmer_registry_base/static/description/icon-Job-Queue-White-line.png create mode 100644 spp_farmer_registry_base/static/description/icon-Project-White-line.png create mode 100644 spp_farmer_registry_base/static/description/icon-Surveys-White-line.png create mode 100644 spp_farmer_registry_base/static/description/icon-To-do-White-line.png diff --git a/spp_base/__manifest__.py b/spp_base/__manifest__.py index 202ebea93..6a1c5afb7 100644 --- a/spp_base/__manifest__.py +++ b/spp_base/__manifest__.py @@ -29,6 +29,13 @@ "spp_programs", "spp_user_roles", "spp_custom_filter_ui", + "project_todo", + "spreadsheet_dashboard", + "queue_job", + "mass_mailing", + "project", + "hr", + "survey", ], "excludes": [ "spp_farmer_registry_base", diff --git a/spp_base/static/description/icon-Dashboards-White-line.png b/spp_base/static/description/icon-Dashboards-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..8aa0dd206c523e8ff3d71829c5df1d5dc5adfc42 GIT binary patch literal 2844 zcmaKuXH*l&7RM){B@qOXriQkP2!^I80kVXqV4)}~WkJFs2tsH=2rH1Npt5KzG?fx8 zfQ6-qKnRE-Lf|2YY+OMCM1vHig<=v3Ngn$?>^b|++c#h4-h2M{%$a*C#h*GkPVv?%Vd=6!zGl z{6d^&`!TggWN(N!q#Q~^#F<|4fp{voney3}dNcm@I`DZz*nE`(b(2c+Zh~X8SbWAe zzpVVvHU9sQakT+O;ApxxxC#=Hdnq zf!~n6^cjPPjU-`qr0-H^@m!FF(9-G$>6mAMew>^yyFUGJwIA)G3AUi5anAE>MtNSY z$<=UahAzwjpd3#9Wu@ehEMA+~| zs;9x^CWik~qLpgyi~%J~ogy6@|H_2l&f&*K{42NtZyY71h$%0_1K$!cS)ozKS)tAs zv6XKb!p;65+C+KISBI*)Ke$n`r1CAzIKUG`H|ctv(5cwCl`m8&+||2Mk=yr^f@2z+ zXDQ(6%(P&7@%kqx-j{j|WxX5=XwBP~!W*>rB))cvQK}qvP#_lYhn5=T=9FCsNN9+1 ziO`y*qz!^9GO`KH)~j9ZVaS|9L-U4~@1vn)yTI)|(2~oHq`73aCg6+19Ct{U zG)L_sOZ4iKbm!HKlz(|v0iUv!H|IdpIhBO|zHKqRcWq3V%4A(T&p?C$cod;k6G1{E zAP`2Ji$S0+@rjWF-+NS_lYRDgq`BcQ1E*BRk zs)2WVw?s6)(vkO>RQfaT0{>x!j5XetQnU&6+>;atcc+9{)}burfIKkx&+P(^06>8n zAcOx3$pgz{F)$`8bMkvVc7NXN3EJ@wn9)jCz<5aP)j$Sn{6M$i`;TyRCGlRB9O#r=%F*yHADsast~kT!JXqTV{2&Yh z0g_9MOh68?P-1L}uX1Fobt!Zt`dcc)9XRSb@$Jk*juyeeBV!n4qYLg9 zXPgNI?^Vy|jx%loGW}uE@VT9!w921>2{FMb0!{kY73O$CiUBCS&$-m$&$$0wq6Orh zb@biCt~UestBmD(LD$L^d+zVtC2IGO@N6Wh2I%Bhoh}`C5&mLY+(~x@H9rRRIab@t zO<^?OEG+s#9Is8w;+g8W-yTQvv{Tzl6MD3x=+a-sL@9`~cz6;yEHsln-g?3RdEhSkZ^p0Oiz8>>L`J@vrgB@a8yl6>WG)vMytdQ;Q%(MU`-vc#1cSV*l+}mI1Gt-HpjJdM zKe<({q-N}MDZs5`OI{JV^ymzKcZ{v*G{y$Ee=XU&pR}{mPgGYV8>E&rX{V3EFPhb- znUmaGq~|IRy*FLy9HuNrQL>IKB_@T^x@*fV;JpWbG2Qid+ShEfI5XNbp5V_GcGZci zNU1j_+x9D+y2QSBum&M%P_&G%F+$Rc5}2?;TGu& z>WS#F%a&)aKyEFH?LI8iNrhuOQh)t@fh)r)^5;+3?#k>uOr2kB5-KRnoXYffLwD;J zEFNz5qp^-eLe!K_cUzk#z6;iCxV`OLopkMm(>kG%)BadyuvU*x7k4KPg?Mm$8tPcHZT`S7Lb>#N8lq!*LfVRGo1}pwv^BJV( zW)P%wns$#_cFS|`8jmB}jF~Lfkr0U5bT z&Wh;%ZHA2&z+KlmN6;w+Zy-n&oW3!(fQTn$0 zh=8>p#%A$R@Yx2pUMcRFat8@>qc!mJsv81yRExy^OwIlRr~x&JH{G2rv#Ra$eSn9?2VcLpzACa=@y=;bF$SxLaY2+_%_ZsKdl>sQE4y=JR>4I{|2 z+ODE#*^@=4s+j1*OV&{r?+Psc(X7cr!BOVJjXMV8o~0hAv#3~3XNu2MZ|&}=Rc!rJaA2ROYn3zZ!oLBY`yvbg literal 0 HcmV?d00001 diff --git a/spp_base/static/description/icon-Discuss-White-line.png b/spp_base/static/description/icon-Discuss-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..9081d42182bb674bc71d82019fecc35f3ceaac86 GIT binary patch literal 3773 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 Su}AH<*s&vS_OB0LNc=y)i#0X? literal 0 HcmV?d00001 diff --git a/spp_base/static/description/icon-Email-Marketing-White-line.png b/spp_base/static/description/icon-Email-Marketing-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..196759bf0a33ce885b3483863d907d1370034a21 GIT binary patch literal 3493 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 literal 0 HcmV?d00001 diff --git a/spp_base/static/description/icon-Employees-White-line.png b/spp_base/static/description/icon-Employees-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..f69ca16b49a4b8ade47da68f2313e716ad4cf3b7 GIT binary patch literal 3268 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 literal 0 HcmV?d00001 diff --git a/spp_base/static/description/icon-Job-Queue-White-line.png b/spp_base/static/description/icon-Job-Queue-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..3ed800e8584401b52bfa54dc08c724a6c3759ecb GIT binary patch literal 999 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJFdb)GJcAr-gY+^sFVZ6Lw^ zU{yH7!T`3$2TC_2bX+fpI@+@AR?3iMIdo`2;sk>TiH!Amj2G@EJ?;H$Q*QP5`RA99 z#cytWGg}&HAbDU%)YfaRQw&e7n|I#o)B^Jb|DXI{QMu*|S8=!y>w)Nyn`(D!HB<9v z7=&++totkM_wU(B0Y?U({Fz&7r?qh~F$gd;Ffgz%C;+{6;pDP84l>UjuQ!V_a4?dPlx1%_W0e&4!(OB~!{?y_KV z)ayliovdL#Vn7BSi&Lx@M!nWrm7i|Yx=r=x)v$yY)*o+&J%~4LzaKcQs&(h-FHRGt zYdB9Tj&#XP++yG&z#v=qck!=zYjST{uH_MAIq+qZ-uC?xO2|IYyLPvAZhp1b`=2bw zGyhxtx$>8z;dGJ4(wu+a6}E=i^6N1IeXGYf!|V6GhiC8a<-3scDCpZkF66+2g@^^G zKT}zNm*irptt?@XuzetRV7cz?=ZF0YWa9rca`QBp6|&!DLj>b=afaVZ-flK^nX!4& zQJ>NHFley0ZrWyB=r#LVA{4?>B^Zn2RN~fZ2*T+s-U&TC~;W=;fx4-+= z`M;U_Xmc`h5EY2_?PfgwxNlE!q`Tx7wlDMl$eZ?0jZ1uIv{&$j?y8*0=cF5FY`v{A zxqf27Cv$&bB1ot@4Yc0`7*q|gw7|g8;Ai%f<&g#dF1aeMt@!Fi*ATvB&{an^LB{Ts5iwR9* literal 0 HcmV?d00001 diff --git a/spp_base/static/description/icon-Project-White-line.png b/spp_base/static/description/icon-Project-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..e378ac26b1446b04ef62d50545f85a7040b64ead GIT binary patch literal 2864 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 literal 0 HcmV?d00001 diff --git a/spp_base/static/description/icon-Surveys-White-line.png b/spp_base/static/description/icon-Surveys-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..fc3e2c7c3cba04b3e57d913c7b71ab606efa319c GIT binary patch literal 3318 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 R!3%$U4R4w1;chs^{10+_C-49O literal 0 HcmV?d00001 diff --git a/spp_base/static/description/icon-To-do-White-line.png b/spp_base/static/description/icon-To-do-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..61f156bc8ec38ca4cc1ab3d5de72e889eac50da9 GIT binary patch literal 1363 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJD%DNh&2kcwMx?mo<&?I6*R z7+l)W^C0hm--MLr66RfwyBe(>cQ@{CyvjL;_l@6!oC`S){H^j~N}+6gJDQ(Q42aTP zyYb`inG#Lm+CVe$g9m#LIUkr58d@s6?@sGeGo9HR*35pocKHUI_NV@TpD)tzle0Zx z{>Mn?_p05+5!(_Yt4$Qwe>fi+W8KVfiLYLGTC(YyweC`vy6dBRpJ(JVT;lk@?53^! z?fX^zhs7E)AKQmr)(WnlBg2+5?PI%s`_!JQHcJuQKPs`+I9j;xQcV4X7IYYw1kJ1bq z-u$@E#-L;HFYT{ahP;`ulX}JMY>2@;7h)>Zsqr|5n3& zpMI`=*_n6tkLDj%|Fq@L&ih9l1par(Uk_Cis~3|OWz#%X@0ZC@()0gCWWx_@mpPXt zn`9rCOBx)xuYOOY&7uFt_IaEg`_s1s^EJwS{B0m`L|*%vCP=*B@0a7BiORCY93ApP zUG-;f3)-tl{Fm6SUgu%)Pcc9I&jiOm&Ug0xP+a^Yd0qPt#lt_8*Pi$LGa>WO#B1Jv zCS?Cn=4bq<{4bH(@!_|HF89!t=mC8#erasEE;Ty!!Cc-AC?! ziaYl2)c59KfN{%*cdVr4l2=pl^v_8u-RDbNA|CFzx`Nu&90ecCCN9@cG_PT#` zmXSA#c^>Qq%!9l8zCYZj(IxKh$kSl+J>p0|BQS)L8Gu0!R4s1L)&TS?R7jqO;bSw9 zZNPAZA1Dqt(cw=5LkCFmaDZLfj&rjG@}~S(*Ri+yv)k&|d%^3?sa8urFa@c6$*SRq ze`li~(NV?!>101c10#b3Dsg1erI`)tvzu89r7ZCmQ$Sgj*Yg>e8NRMITzA?>_76z8 Mr>mdKI;Vst0E<3?B>(^b literal 0 HcmV?d00001 diff --git a/spp_base/views/main_view.xml b/spp_base/views/main_view.xml index 7680b2121..f85042db4 100644 --- a/spp_base/views/main_view.xml +++ b/spp_base/views/main_view.xml @@ -21,4 +21,51 @@ Part of OpenSPP. See LICENSE file for full copyright and licensing details. name="Settings" web_icon="spp_base,static/description/OpenSPP-Icons-Setting.png" /> + + + + + + + + + diff --git a/spp_farmer_registry_base/__manifest__.py b/spp_farmer_registry_base/__manifest__.py index 89fdcc595..c24b7f0e5 100644 --- a/spp_farmer_registry_base/__manifest__.py +++ b/spp_farmer_registry_base/__manifest__.py @@ -22,6 +22,12 @@ "spp_land_record", "spp_hide_menus", "base_import", + "project", + "hr", + "survey", + "spreadsheet_dashboard", + "queue_job", + "mass_mailing", ], "excludes": [ "spp_base", diff --git a/spp_farmer_registry_base/static/description/icon-Dashboards-White-line.png b/spp_farmer_registry_base/static/description/icon-Dashboards-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..8aa0dd206c523e8ff3d71829c5df1d5dc5adfc42 GIT binary patch literal 2844 zcmaKuXH*l&7RM){B@qOXriQkP2!^I80kVXqV4)}~WkJFs2tsH=2rH1Npt5KzG?fx8 zfQ6-qKnRE-Lf|2YY+OMCM1vHig<=v3Ngn$?>^b|++c#h4-h2M{%$a*C#h*GkPVv?%Vd=6!zGl z{6d^&`!TggWN(N!q#Q~^#F<|4fp{voney3}dNcm@I`DZz*nE`(b(2c+Zh~X8SbWAe zzpVVvHU9sQakT+O;ApxxxC#=Hdnq zf!~n6^cjPPjU-`qr0-H^@m!FF(9-G$>6mAMew>^yyFUGJwIA)G3AUi5anAE>MtNSY z$<=UahAzwjpd3#9Wu@ehEMA+~| zs;9x^CWik~qLpgyi~%J~ogy6@|H_2l&f&*K{42NtZyY71h$%0_1K$!cS)ozKS)tAs zv6XKb!p;65+C+KISBI*)Ke$n`r1CAzIKUG`H|ctv(5cwCl`m8&+||2Mk=yr^f@2z+ zXDQ(6%(P&7@%kqx-j{j|WxX5=XwBP~!W*>rB))cvQK}qvP#_lYhn5=T=9FCsNN9+1 ziO`y*qz!^9GO`KH)~j9ZVaS|9L-U4~@1vn)yTI)|(2~oHq`73aCg6+19Ct{U zG)L_sOZ4iKbm!HKlz(|v0iUv!H|IdpIhBO|zHKqRcWq3V%4A(T&p?C$cod;k6G1{E zAP`2Ji$S0+@rjWF-+NS_lYRDgq`BcQ1E*BRk zs)2WVw?s6)(vkO>RQfaT0{>x!j5XetQnU&6+>;atcc+9{)}burfIKkx&+P(^06>8n zAcOx3$pgz{F)$`8bMkvVc7NXN3EJ@wn9)jCz<5aP)j$Sn{6M$i`;TyRCGlRB9O#r=%F*yHADsast~kT!JXqTV{2&Yh z0g_9MOh68?P-1L}uX1Fobt!Zt`dcc)9XRSb@$Jk*juyeeBV!n4qYLg9 zXPgNI?^Vy|jx%loGW}uE@VT9!w921>2{FMb0!{kY73O$CiUBCS&$-m$&$$0wq6Orh zb@biCt~UestBmD(LD$L^d+zVtC2IGO@N6Wh2I%Bhoh}`C5&mLY+(~x@H9rRRIab@t zO<^?OEG+s#9Is8w;+g8W-yTQvv{Tzl6MD3x=+a-sL@9`~cz6;yEHsln-g?3RdEhSkZ^p0Oiz8>>L`J@vrgB@a8yl6>WG)vMytdQ;Q%(MU`-vc#1cSV*l+}mI1Gt-HpjJdM zKe<({q-N}MDZs5`OI{JV^ymzKcZ{v*G{y$Ee=XU&pR}{mPgGYV8>E&rX{V3EFPhb- znUmaGq~|IRy*FLy9HuNrQL>IKB_@T^x@*fV;JpWbG2Qid+ShEfI5XNbp5V_GcGZci zNU1j_+x9D+y2QSBum&M%P_&G%F+$Rc5}2?;TGu& z>WS#F%a&)aKyEFH?LI8iNrhuOQh)t@fh)r)^5;+3?#k>uOr2kB5-KRnoXYffLwD;J zEFNz5qp^-eLe!K_cUzk#z6;iCxV`OLopkMm(>kG%)BadyuvU*x7k4KPg?Mm$8tPcHZT`S7Lb>#N8lq!*LfVRGo1}pwv^BJV( zW)P%wns$#_cFS|`8jmB}jF~Lfkr0U5bT z&Wh;%ZHA2&z+KlmN6;w+Zy-n&oW3!(fQTn$0 zh=8>p#%A$R@Yx2pUMcRFat8@>qc!mJsv81yRExy^OwIlRr~x&JH{G2rv#Ra$eSn9?2VcLpzACa=@y=;bF$SxLaY2+_%_ZsKdl>sQE4y=JR>4I{|2 z+ODE#*^@=4s+j1*OV&{r?+Psc(X7cr!BOVJjXMV8o~0hAv#3~3XNu2MZ|&}=Rc!rJaA2ROYn3zZ!oLBY`yvbg literal 0 HcmV?d00001 diff --git a/spp_farmer_registry_base/static/description/icon-Discuss-White-line.png b/spp_farmer_registry_base/static/description/icon-Discuss-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..9081d42182bb674bc71d82019fecc35f3ceaac86 GIT binary patch literal 3773 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 Su}AH<*s&vS_OB0LNc=y)i#0X? literal 0 HcmV?d00001 diff --git a/spp_farmer_registry_base/static/description/icon-Email-Marketing-White-line.png b/spp_farmer_registry_base/static/description/icon-Email-Marketing-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..196759bf0a33ce885b3483863d907d1370034a21 GIT binary patch literal 3493 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 literal 0 HcmV?d00001 diff --git a/spp_farmer_registry_base/static/description/icon-Employees-White-line.png b/spp_farmer_registry_base/static/description/icon-Employees-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..f69ca16b49a4b8ade47da68f2313e716ad4cf3b7 GIT binary patch literal 3268 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 literal 0 HcmV?d00001 diff --git a/spp_farmer_registry_base/static/description/icon-Job-Queue-White-line.png b/spp_farmer_registry_base/static/description/icon-Job-Queue-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..3ed800e8584401b52bfa54dc08c724a6c3759ecb GIT binary patch literal 999 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJFdb)GJcAr-gY+^sFVZ6Lw^ zU{yH7!T`3$2TC_2bX+fpI@+@AR?3iMIdo`2;sk>TiH!Amj2G@EJ?;H$Q*QP5`RA99 z#cytWGg}&HAbDU%)YfaRQw&e7n|I#o)B^Jb|DXI{QMu*|S8=!y>w)Nyn`(D!HB<9v z7=&++totkM_wU(B0Y?U({Fz&7r?qh~F$gd;Ffgz%C;+{6;pDP84l>UjuQ!V_a4?dPlx1%_W0e&4!(OB~!{?y_KV z)ayliovdL#Vn7BSi&Lx@M!nWrm7i|Yx=r=x)v$yY)*o+&J%~4LzaKcQs&(h-FHRGt zYdB9Tj&#XP++yG&z#v=qck!=zYjST{uH_MAIq+qZ-uC?xO2|IYyLPvAZhp1b`=2bw zGyhxtx$>8z;dGJ4(wu+a6}E=i^6N1IeXGYf!|V6GhiC8a<-3scDCpZkF66+2g@^^G zKT}zNm*irptt?@XuzetRV7cz?=ZF0YWa9rca`QBp6|&!DLj>b=afaVZ-flK^nX!4& zQJ>NHFley0ZrWyB=r#LVA{4?>B^Zn2RN~fZ2*T+s-U&TC~;W=;fx4-+= z`M;U_Xmc`h5EY2_?PfgwxNlE!q`Tx7wlDMl$eZ?0jZ1uIv{&$j?y8*0=cF5FY`v{A zxqf27Cv$&bB1ot@4Yc0`7*q|gw7|g8;Ai%f<&g#dF1aeMt@!Fi*ATvB&{an^LB{Ts5iwR9* literal 0 HcmV?d00001 diff --git a/spp_farmer_registry_base/static/description/icon-Project-White-line.png b/spp_farmer_registry_base/static/description/icon-Project-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..e378ac26b1446b04ef62d50545f85a7040b64ead GIT binary patch literal 2864 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 literal 0 HcmV?d00001 diff --git a/spp_farmer_registry_base/static/description/icon-Surveys-White-line.png b/spp_farmer_registry_base/static/description/icon-Surveys-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..fc3e2c7c3cba04b3e57d913c7b71ab606efa319c GIT binary patch literal 3318 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 R!3%$U4R4w1;chs^{10+_C-49O literal 0 HcmV?d00001 diff --git a/spp_farmer_registry_base/static/description/icon-To-do-White-line.png b/spp_farmer_registry_base/static/description/icon-To-do-White-line.png new file mode 100644 index 0000000000000000000000000000000000000000..61f156bc8ec38ca4cc1ab3d5de72e889eac50da9 GIT binary patch literal 1363 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJD%DNh&2kcwMx?mo<&?I6*R z7+l)W^C0hm--MLr66RfwyBe(>cQ@{CyvjL;_l@6!oC`S){H^j~N}+6gJDQ(Q42aTP zyYb`inG#Lm+CVe$g9m#LIUkr58d@s6?@sGeGo9HR*35pocKHUI_NV@TpD)tzle0Zx z{>Mn?_p05+5!(_Yt4$Qwe>fi+W8KVfiLYLGTC(YyweC`vy6dBRpJ(JVT;lk@?53^! z?fX^zhs7E)AKQmr)(WnlBg2+5?PI%s`_!JQHcJuQKPs`+I9j;xQcV4X7IYYw1kJ1bq z-u$@E#-L;HFYT{ahP;`ulX}JMY>2@;7h)>Zsqr|5n3& zpMI`=*_n6tkLDj%|Fq@L&ih9l1par(Uk_Cis~3|OWz#%X@0ZC@()0gCWWx_@mpPXt zn`9rCOBx)xuYOOY&7uFt_IaEg`_s1s^EJwS{B0m`L|*%vCP=*B@0a7BiORCY93ApP zUG-;f3)-tl{Fm6SUgu%)Pcc9I&jiOm&Ug0xP+a^Yd0qPt#lt_8*Pi$LGa>WO#B1Jv zCS?Cn=4bq<{4bH(@!_|HF89!t=mC8#erasEE;Ty!!Cc-AC?! ziaYl2)c59KfN{%*cdVr4l2=pl^v_8u-RDbNA|CFzx`Nu&90ecCCN9@cG_PT#` zmXSA#c^>Qq%!9l8zCYZj(IxKh$kSl+J>p0|BQS)L8Gu0!R4s1L)&TS?R7jqO;bSw9 zZNPAZA1Dqt(cw=5LkCFmaDZLfj&rjG@}~S(*Ri+yv)k&|d%^3?sa8urFa@c6$*SRq ze`li~(NV?!>101c10#b3Dsg1erI`)tvzu89r7ZCmQ$Sgj*Yg>e8NRMITzA?>_76z8 Mr>mdKI;Vst0E<3?B>(^b literal 0 HcmV?d00001 diff --git a/spp_farmer_registry_base/views/main_view.xml b/spp_farmer_registry_base/views/main_view.xml index 68b8a0328..539c0ba22 100644 --- a/spp_farmer_registry_base/views/main_view.xml +++ b/spp_farmer_registry_base/views/main_view.xml @@ -21,4 +21,50 @@ Part of OpenSPP. See LICENSE file for full copyright and licensing details. name="Settings" web_icon="spp_farmer_registry_base,static/description/OpenSPP-Icons-Setting.png" /> + + + + + + + + From 852b8af0313b67af2c9e1462572b2d8889043f86 Mon Sep 17 00:00:00 2001 From: openspp Date: Thu, 11 Sep 2025 07:48:48 +0000 Subject: [PATCH 13/85] [UPD] Update spp_change_request.pot --- .../i18n/spp_change_request.pot | 921 ------------------ 1 file changed, 921 deletions(-) diff --git a/spp_change_request/i18n/spp_change_request.pot b/spp_change_request/i18n/spp_change_request.pot index bd86f2564..230eab3b9 100644 --- a/spp_change_request/i18n/spp_change_request.pot +++ b/spp_change_request/i18n/spp_change_request.pot @@ -41,42 +41,12 @@ msgid "" "'Pending Validation'." msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__message_needaction -msgid "Action Needed" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__activity_ids -msgid "Activities" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__activity_exception_decoration -msgid "Activity Exception Decoration" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__activity_state -msgid "Activity State" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__activity_type_icon -msgid "Activity Type Icon" -msgstr "" - #. module: spp_change_request #: model_terms:ir.actions.act_window,help:spp_change_request.action_change_request #: model_terms:ir.actions.act_window,help:spp_change_request.action_change_request_validated msgid "Add a new change request!" msgstr "" -#. module: spp_change_request -#: model_terms:ir.actions.act_window,help:spp_change_request.action_change_request_validation_sequence -msgid "Add a new validation sequence by request type!" -msgstr "" - #. module: spp_change_request #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_source_mixin__group_address msgid "Address" @@ -93,13 +63,6 @@ msgstr "" msgid "All Requests" msgstr "" -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "An error was encountered in applying the changes: %s" -msgstr "" - #. module: spp_change_request #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__applicant_id #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_source_mixin__applicant_id @@ -156,152 +119,46 @@ msgid "Applicant:" msgstr "" #. module: spp_change_request -#: model:ir.model.fields.selection,name:spp_change_request.selection__spp_change_request__state__applied #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "Applied" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__applied_by_id -msgid "Applied by" -msgstr "" - -#. module: spp_change_request -#: model:mail.activity.type,name:spp_change_request.apply_changes_activity -msgid "Apply Change Request" -msgstr "" - #. module: spp_change_request #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "Apply Changes" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields.selection,name:spp_change_request.selection__spp_change_request_validation_sequence__validation_group_state__both -msgid "Apply to Both" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/wizard/cancel_change_request.py:0 -#, python-format -msgid "Are you sure you would like to cancel this request: %s" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/wizard/reject_change_request.py:0 -#, python-format -msgid "Are you sure you would like to reject this request: %s" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#: model:ir.actions.act_window,name:spp_change_request.action_change_request_user_assign_wizard -#, python-format -msgid "Assign Change Request to User" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__assign_to -msgid "Assign To" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__assign_to_any -msgid "Assign To Any" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__assign_to_id_domain -msgid "Assign To Id Domain" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/wizard/confirm_user_assignment.py:0 -#, python-format -msgid "Assign this change request to:" -msgstr "" - #. module: spp_change_request #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "Assigned To" msgstr "" #. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__assign_to_id #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_source_mixin__assign_to_id msgid "Assigned to" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__message_attachment_count -msgid "Attachment Count" -msgstr "" - #. module: spp_change_request #: model:ir.model.fields.selection,name:spp_change_request.selection__spp_change_request_targets__target__both msgid "Both" msgstr "" -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "CR Reset to Draft" -msgstr "" - #. module: spp_change_request #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "CREATE" msgstr "" -#. module: spp_change_request -#: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_cancel_wizard -#: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_reject_wizard -msgid "Cancel" -msgstr "" - #. module: spp_change_request #. odoo-python #: code:addons/spp_change_request/models/change_request.py:0 -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#: model:ir.actions.act_window,name:spp_change_request.action_change_request_cancel_wizard #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form #, python-format msgid "Cancel Change Request" msgstr "" -#. module: spp_change_request -#: model:mail.activity.type,name:spp_change_request.cancel_activity -msgid "Cancel Request" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields.selection,name:spp_change_request.selection__spp_change_request__state__cancelled -msgid "Cancelled" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__cancelled_by_id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_cancel_wizard__cancelled_by_id -msgid "Cancelled by" -msgstr "" - #. module: spp_change_request #: model:ir.model,name:spp_change_request.model_spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_cancel_wizard__change_request_id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_reject_wizard__change_request_id #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_source_mixin__change_request_id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__change_request_id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validators__request_id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_dms_directory__change_request_id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_dms_file__change_request_id -#: model:ir.ui.menu,name:spp_change_request.spp_change_request_menu_root #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "Change Request" msgstr "" @@ -326,25 +183,6 @@ msgstr "" msgid "Change Request Applicator" msgstr "" -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "Change Request Applied" -msgstr "" - -#. module: spp_change_request -#: model:ir.model,name:spp_change_request.model_spp_change_request_cancel_wizard -msgid "Change Request Cancel Wizard" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "Change Request Cancelled" -msgstr "" - #. module: spp_change_request #: model:ir.model,name:spp_change_request.model_spp_change_request_source_mixin msgid "Change Request Data Source Mixin" @@ -355,85 +193,13 @@ msgstr "" msgid "Change Request External API" msgstr "" -#. module: spp_change_request -#: model:mail.activity.type,name:spp_change_request.validation_activity -msgid "Change Request For Validation" -msgstr "" - -#. module: spp_change_request -#: model:ir.module.category,name:spp_change_request.spp_change_request_module -msgid "Change Request Module Access" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "Change Request Partially Validated" -msgstr "" - -#. module: spp_change_request -#: model:mail.activity.type,name:spp_change_request.pending_validation_activity -msgid "Change Request Pending Validation" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "Change Request Rejected" -msgstr "" - -#. module: spp_change_request -#: model:ir.model,name:spp_change_request.model_spp_change_request_reject_wizard -msgid "Change Request Rejection Wizard" -msgstr "" - -#. module: spp_change_request -#: model:mail.activity.type,name:spp_change_request.reset_draft_activity -msgid "Change Request Reset to Draft" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__request_type_ref_id -msgid "Change Request Template" -msgstr "" - -#. module: spp_change_request -#: model:ir.model,name:spp_change_request.model_spp_change_request_user_assign_wizard -msgid "Change Request User Assignment Wizard" -msgstr "" - #. module: spp_change_request #. odoo-python #: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 #, python-format msgid "Change Request Validated" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__validation_group_id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence__validation_group_id -msgid "Change Request Validation Group" -msgstr "" - -#. module: spp_change_request -#: model:ir.model,name:spp_change_request.model_spp_change_request_validation_sequence -#: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_validation_sequence_form -msgid "Change Request Validation Sequence" -msgstr "" - -#. module: spp_change_request -#: model:ir.model,name:spp_change_request.model_spp_change_request_validation_sequence_mixin -msgid "Change Request Validation Sequence Mixin" -msgstr "" - -#. module: spp_change_request -#: model:ir.model,name:spp_change_request.model_spp_change_request_validation_stage -msgid "Change Request Validation Stage" -msgstr "" - #. module: spp_change_request #: model:res.groups,name:spp_change_request.group_spp_change_request_validator msgid "Change Request Validator" @@ -450,15 +216,6 @@ msgid "Change Request Validator Local" msgstr "" #. module: spp_change_request -#: model:ir.model,name:spp_change_request.model_spp_change_request_validators -msgid "Change Request Validators" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_g2p_program_membership__change_request_ids -#: model:ir.model.fields,field_description:spp_change_request.field_res_partner__change_request_ids -#: model:ir.model.fields,field_description:spp_change_request.field_res_users__change_request_ids -#: model:ir.model.fields,field_description:spp_change_request.field_spp_attendance_subscriber__change_request_ids #: model_terms:ir.ui.view,arch_db:spp_change_request.view_group_ext_form_custom_spp_cr msgid "Change Requests" msgstr "" @@ -474,118 +231,25 @@ msgstr "" msgid "Click the create button to enter a new change request." msgstr "" -#. module: spp_change_request -#: model_terms:ir.actions.act_window,help:spp_change_request.action_change_request_validation_sequence -msgid "Click the create button to enter a new validation sequence." -msgstr "" - -#. module: spp_change_request -#: model_terms:ir.ui.view,arch_db:spp_change_request.view_dms_file_spp_custom_form -msgid "Close" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__company_id -msgid "Company" -msgstr "" - #. module: spp_change_request #: model:ir.ui.menu,name:spp_change_request.spp_change_request_config_root msgid "Configuration" msgstr "" #. module: spp_change_request -#: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_cancel_wizard -#: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_reject_wizard -msgid "Confirm" -msgstr "" - -#. module: spp_change_request -#: model:ir.model,name:spp_change_request.model_res_partner -msgid "Contact" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__create_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_cancel_wizard__create_uid #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_group_members__create_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_reject_wizard__create_uid #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_targets__create_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__create_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence__create_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_stage__create_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validators__create_uid msgid "Created by" msgstr "" #. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__create_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_cancel_wizard__create_date #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_group_members__create_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_reject_wizard__create_date #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_targets__create_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__create_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence__create_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_stage__create_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validators__create_date msgid "Created on" msgstr "" #. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__current_user_assigned -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_source_mixin__current_user_assigned -msgid "Current User Assigned" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__curr_assign_to_id -msgid "Currently Assigned to" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__dms_directory_ids -msgid "DMS Directories" -msgstr "" - -#. module: spp_change_request -#: model:ir.model,name:spp_change_request.model_spp_dms_directory -msgid "DMS Directory" -msgstr "" - -#. module: spp_change_request -#: model:ir.model,name:spp_change_request.model_spp_dms_file -msgid "DMS File" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__date_applied -msgid "Date Applied" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__date_cancelled -msgid "Date Cancelled" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__date_rejected -msgid "Date Rejected" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__date_requested -msgid "Date Requested" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__date_reset_to_draft -msgid "Date Reset To Draft" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__date_validated #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_source_mixin__date_validated -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validators__date_validated msgid "Date Validated" msgstr "" @@ -595,32 +259,12 @@ msgid "Date of Birth" msgstr "" #. module: spp_change_request -#: model:ir.model.fields.selection,name:spp_change_request.selection__spp_change_request_validation_sequence__validation_group_state__destination -msgid "Destination Area" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_cancel_wizard__dialog_message -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_reject_wizard__dialog_message -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__dialog_message -msgid "Dialog Message" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__display_name -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_cancel_wizard__display_name #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_group_members__display_name -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_reject_wizard__display_name #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_targets__display_name -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__display_name -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence__display_name -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_stage__display_name -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validators__display_name msgid "Display Name" msgstr "" #. module: spp_change_request -#: model:ir.model.fields.selection,name:spp_change_request.selection__spp_change_request__state__draft #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "Draft" msgstr "" @@ -628,7 +272,6 @@ msgstr "" #. module: spp_change_request #. odoo-python #: code:addons/spp_change_request/models/change_request.py:0 -#: code:addons/spp_change_request/models/change_request.py:0 #, python-format msgid "ERROR!" msgstr "" @@ -638,46 +281,11 @@ msgstr "" msgid "End Date" msgstr "" -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#, python-format -msgid "" -"Error in validation stages. No available stage to assign to this validation." -msgstr "" - -#. module: spp_change_request -#: model_terms:ir.ui.view,arch_db:spp_change_request.view_dms_file_spp_custom_form -msgid "Files" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__message_follower_ids -msgid "Followers" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__message_partner_ids -msgid "Followers (Partners)" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,help:spp_change_request.field_spp_change_request__activity_type_icon -msgid "Font awesome icon e.g. fa-tasks" -msgstr "" - #. module: spp_change_request #: model:ir.ui.menu,name:spp_change_request.spp_change_request_for_application_root msgid "For Application" msgstr "" -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "For Application of Changes" -msgstr "" - #. module: spp_change_request #. odoo-python #: code:addons/spp_change_request/models/change_request.py:0 @@ -686,10 +294,7 @@ msgid "For Pending Validation" msgstr "" #. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 #: model:ir.ui.menu,name:spp_change_request.spp_change_request_pending_validation_root -#, python-format msgid "For Validation" msgstr "" @@ -698,11 +303,6 @@ msgstr "" msgid "Group" msgstr "" -#. module: spp_change_request -#: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_validation_sequence_filter -msgid "Group By" -msgstr "" - #. module: spp_change_request #. odoo-python #: code:addons/spp_change_request/models/mixins/source_mixin.py:0 @@ -716,44 +316,11 @@ msgid "Group Membership" msgstr "" #. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__has_message -msgid "Has Message" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_cancel_wizard__id #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_group_members__id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_reject_wizard__id #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_targets__id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence__id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_stage__id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validators__id msgid "ID" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__activity_exception_icon -msgid "Icon" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,help:spp_change_request.field_spp_change_request__activity_exception_icon -msgid "Icon to indicate an exception activity." -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,help:spp_change_request.field_spp_change_request__message_needaction -msgid "If checked, new messages require your attention." -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,help:spp_change_request.field_spp_change_request__message_has_error -#: model:ir.model.fields,help:spp_change_request.field_spp_change_request__message_has_sms_error -msgid "If checked, some messages have a delivery error." -msgstr "" - #. module: spp_change_request #. odoo-python #: code:addons/spp_change_request/models/change_request.py:0 @@ -767,38 +334,14 @@ msgid "Individual" msgstr "" #. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__message_is_follower -msgid "Is Follower" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__last_activity_id -msgid "Last Activity" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__write_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_cancel_wizard__write_uid #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_group_members__write_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_reject_wizard__write_uid #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_targets__write_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__write_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence__write_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_stage__write_uid -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validators__write_uid msgid "Last Updated by" msgstr "" #. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__write_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_cancel_wizard__write_date #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_group_members__write_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_reject_wizard__write_date #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_targets__write_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__write_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence__write_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_stage__write_date -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validators__write_date msgid "Last Updated on" msgstr "" @@ -812,16 +355,6 @@ msgstr "" msgid "Membership Types" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__message_has_error -msgid "Message Delivery error" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__message_ids -msgid "Messages" -msgstr "" - #. module: spp_change_request #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_targets__name msgid "Model Name" @@ -832,87 +365,16 @@ msgstr "" msgid "Monitoring" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__my_activity_date_deadline -msgid "My Activity Deadline" -msgstr "" - #. module: spp_change_request #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "NEXT" msgstr "" -#. module: spp_change_request -#: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_user_assign_wizard -msgid "NO" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__activity_calendar_event_id -msgid "Next Activity Calendar Event" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__activity_date_deadline -msgid "Next Activity Deadline" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__activity_summary -msgid "Next Activity Summary" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__activity_type_id -msgid "Next Activity Type" -msgstr "" - #. module: spp_change_request #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__next_area_center_ids msgid "Next Area" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__next_validation_sequence_id -msgid "Next Validation Sequence" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__message_needaction_counter -msgid "Number of Actions" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__message_has_error_counter -msgid "Number of errors" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,help:spp_change_request.field_spp_change_request__message_needaction_counter -msgid "Number of messages requiring action" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,help:spp_change_request.field_spp_change_request__message_has_error_counter -msgid "Number of messages with delivery error" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#, python-format -msgid "Only draft change requests can be deleted by its creator." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#, python-format -msgid "" -"Only users of groups defined in the validation sequence can be assigned to " -"this change request." -msgstr "" - #. module: spp_change_request #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "Open Applicant Form" @@ -924,7 +386,6 @@ msgid "Open Details" msgstr "" #. module: spp_change_request -#: model:ir.model.fields.selection,name:spp_change_request.selection__spp_change_request__state__pending #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "Pending Validation" msgstr "" @@ -981,49 +442,21 @@ msgstr "" #. module: spp_change_request #. odoo-python #: code:addons/spp_change_request/models/change_request.py:0 -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#: model:ir.actions.act_window,name:spp_change_request.action_change_request_reject_wizard -#: model:mail.activity.type,name:spp_change_request.reject_activity #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form #, python-format msgid "Reject Change Request" msgstr "" #. module: spp_change_request -#: model:ir.model.fields.selection,name:spp_change_request.selection__spp_change_request__state__rejected #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "Rejected" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__rejected_by_id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_reject_wizard__rejected_by_id -msgid "Rejected by" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__rejected_remarks -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_reject_wizard__rejected_remarks -msgid "Rejection Remarks" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__name -msgid "Request #" -msgstr "" - #. module: spp_change_request #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "Request #:" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__request_type -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence__request_type -#: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_validation_sequence_filter -msgid "Request Type" -msgstr "" - #. module: spp_change_request #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__request_type_target msgid "Request Type Target" @@ -1031,7 +464,6 @@ msgstr "" #. module: spp_change_request #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form -#: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_validation_sequence_form msgid "Request Type:" msgstr "" @@ -1057,26 +489,6 @@ msgstr "" msgid "Reset to Draft" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__reset_to_draft_by_id -msgid "Reset to Draft by" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__activity_user_id -msgid "Responsible User" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__message_has_sms_error -msgid "SMS Delivery error" -msgstr "" - -#. module: spp_change_request -#: model_terms:ir.ui.view,arch_db:spp_change_request.view_dms_file_spp_custom_form -msgid "Save" -msgstr "" - #. module: spp_change_request #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__id_document_details msgid "Scanned ID Document" @@ -1089,46 +501,19 @@ msgstr "" #. module: spp_change_request #: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_filter -#: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_validation_sequence_filter msgid "Search Change Request" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence__sequence -msgid "Sequence" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields.selection,name:spp_change_request.selection__spp_change_request_validation_sequence__validation_group_state__source -msgid "Source Area" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_stage__name -#: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_validation_sequence_filter -msgid "Stage" -msgstr "" - #. module: spp_change_request #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_group_members__start_date msgid "Start Date" msgstr "" #. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__state #: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_source_mixin__state msgid "Status" msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,help:spp_change_request.field_spp_change_request__activity_state -msgid "" -"Status based on activities\n" -"Overdue: Due date is already passed\n" -"Today: Activity date is today\n" -"Planned: Future activities." -msgstr "" - #. module: spp_change_request #: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_filter msgid "Submitted By" @@ -1146,174 +531,6 @@ msgstr "" msgid "The Applicant field must be filled-up." msgstr "" -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#, python-format -msgid "The Request Type field must be filled-up." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The change request has been approved." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The change request has been fully validated" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The change request has been partially validated" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The change request has been validated and the changes has been applied" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "" -"The change request is now fully validated. It is now submitted for final " -"application of changes." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "" -"The change request is now set for validation. Depending on the validation " -"sequence, this may be subjected to one or more validations." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#, python-format -msgid "" -"The change request to be created must be in draft or pending validation " -"state." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#, python-format -msgid "The change request type must be properly filled-up." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The change request was cancelled by %s." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The change request was rejected by %s." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The change request was reset to draft." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The request must be in draft state to be set to pending validation." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "" -"The request must be in draft, pending, or validated state for changes to be " -"applied." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The request must be in validated state for changes to be applied." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "" -"The request to be cancelled must be in draft, pending, or rejected " -"validation state." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "" -"The request to be rejected must be in draft or pending validation state." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The request to be validated must be in submitted state." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The required document %s is missing." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The required document category is not configured." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "The required documents %s are missing." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/wizard/cancel_change_request.py:0 -#: code:addons/spp_change_request/wizard/reject_change_request.py:0 -#, python-format -msgid "There are no change request selected." -msgstr "" - #. module: spp_change_request #. odoo-python #: code:addons/spp_change_request/models/change_request.py:0 @@ -1328,13 +545,6 @@ msgstr "" msgid "There are no data captured from the QR Code scanner." msgstr "" -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "There are no directories defined for this change request." -msgstr "" - #. module: spp_change_request #. odoo-python #: code:addons/spp_change_request/models/change_request.py:0 @@ -1349,62 +559,11 @@ msgstr "" msgid "There are no registrant found with the ID number scanned." msgstr "" -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#, python-format -msgid "There are no user assigned to this change request." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#, python-format -msgid "There are no validators defined for this request." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#, python-format -msgid "This change request does not have any validation sequence defined." -msgstr "" - #. module: spp_change_request #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "This change request was REJECTED." msgstr "" -#. module: spp_change_request -#: model:ir.model.fields,help:spp_change_request.field_spp_change_request__activity_exception_decoration -msgid "Type of the exception activity on record." -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/dms_file.py:0 -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "Upload Document: %s" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_user_assign_wizard__assign_to_id -msgid "User" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "User %(user)s does not have access to apply changes. %(error)s" -msgstr "" - -#. module: spp_change_request -#: model:ir.module.category,description:spp_change_request.spp_change_request_module -msgid "User access level for the OpenSPP change request module" -msgstr "" - #. module: spp_change_request #. odoo-python #: code:addons/spp_change_request/models/change_request.py:0 @@ -1423,7 +582,6 @@ msgid "Validate Change Request" msgstr "" #. module: spp_change_request -#: model:ir.model.fields.selection,name:spp_change_request.selection__spp_change_request__state__validated #: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_form msgid "Validated" msgstr "" @@ -1433,82 +591,3 @@ msgstr "" #: model:ir.ui.menu,name:spp_change_request.menu_change_request_validated msgid "Validated Requests" msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__last_validated_by_id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validators__validator_id -msgid "Validated by" -msgstr "" - -#. module: spp_change_request -#: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_validation_sequence_filter -#: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_validation_sequence_form -#: model_terms:ir.ui.view,arch_db:spp_change_request.view_change_request_validation_sequence_tree -msgid "Validation Group" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence__validation_group_state -msgid "Validation Group Application" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__validator_ids -msgid "Validation Records" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence_mixin__validation_ids -#: model:ir.ui.menu,name:spp_change_request.menu_change_request_validation_sequence -msgid "Validation Sequence" -msgstr "" - -#. module: spp_change_request -#: model:ir.actions.act_window,name:spp_change_request.action_change_request_validation_sequence -msgid "Validation Sequences" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validation_sequence__stage_id -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request_validators__stage_id -msgid "Validation Stage" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,field_description:spp_change_request.field_spp_change_request__website_message_ids -msgid "Website Messages" -msgstr "" - -#. module: spp_change_request -#: model:ir.model.fields,help:spp_change_request.field_spp_change_request__website_message_ids -msgid "Website communication history" -msgstr "" - -#. module: spp_change_request -#: model_terms:ir.ui.view,arch_db:spp_change_request.change_request_user_assign_wizard -msgid "YES" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#, python-format -msgid "You are not allowed to %s this change request" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#, python-format -msgid "" -"You are not allowed to validate this request! Stage: %(stage)s. Allowed " -"Validator Group: %(group)s" -msgstr "" - -#. module: spp_change_request -#. odoo-python -#: code:addons/spp_change_request/models/change_request.py:0 -#: code:addons/spp_change_request/models/mixins/source_mixin.py:0 -#, python-format -msgid "You're not allowed to re-assign this CR." -msgstr "" From 966cefebb8dddbf0a95da397f6cae10630061ecf Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Wed, 3 Sep 2025 12:00:44 +0800 Subject: [PATCH 14/85] [IMP] preview of images --- .../static/src/js/preview_binary_field.esm.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/spp_dms/static/src/js/preview_binary_field.esm.js b/spp_dms/static/src/js/preview_binary_field.esm.js index bf7ab5c30..8c5067bec 100644 --- a/spp_dms/static/src/js/preview_binary_field.esm.js +++ b/spp_dms/static/src/js/preview_binary_field.esm.js @@ -4,6 +4,7 @@ import {Component} from "@odoo/owl"; import {registry} from "@web/core/registry"; import {useFileViewer} from "@web/core/file_viewer/file_viewer_hook"; import {useService} from "@web/core/utils/hooks"; +import {url} from "@web/core/utils/urls"; export class PreviewRecordWidget extends Component { setup() { @@ -39,16 +40,20 @@ export class PreviewRecordWidget extends Component { if (record.mimetype === "application/pdf") { window.open(fileUrl, "_blank"); } else { - const attachment = this.store.Attachment.insert({ + const imageUrl = url("/web/image", { + model: resModel, id: resId, - filename: record.name || "", - name: record.name || "", - mimetype: record.mimetype, - model_name: resModel, - url: fileUrl, + field: "content", }); + const fileModel = { + isImage: true, + isViewable: true, + displayName: record.name, + defaultSource: imageUrl, + downloadUrl: imageUrl, + }; - this.fileViewer.open(attachment); + this.fileViewer.open(fileModel); } } } From 9bc1c7e3afd859c5965309d2404bc91e2ee0c97b Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Wed, 3 Sep 2025 13:54:26 +0800 Subject: [PATCH 15/85] [IMP] simplify --- spp_dms/static/src/js/preview_binary_field.esm.js | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/spp_dms/static/src/js/preview_binary_field.esm.js b/spp_dms/static/src/js/preview_binary_field.esm.js index 8c5067bec..d3242e280 100644 --- a/spp_dms/static/src/js/preview_binary_field.esm.js +++ b/spp_dms/static/src/js/preview_binary_field.esm.js @@ -4,7 +4,6 @@ import {Component} from "@odoo/owl"; import {registry} from "@web/core/registry"; import {useFileViewer} from "@web/core/file_viewer/file_viewer_hook"; import {useService} from "@web/core/utils/hooks"; -import {url} from "@web/core/utils/urls"; export class PreviewRecordWidget extends Component { setup() { @@ -40,17 +39,13 @@ export class PreviewRecordWidget extends Component { if (record.mimetype === "application/pdf") { window.open(fileUrl, "_blank"); } else { - const imageUrl = url("/web/image", { - model: resModel, - id: resId, - field: "content", - }); const fileModel = { - isImage: true, + isImage: Boolean(record.mimetype.startsWith("image/")), + isVideo: Boolean(record.mimetype.startsWith("video/")), isViewable: true, displayName: record.name, - defaultSource: imageUrl, - downloadUrl: imageUrl, + defaultSource: fileUrl, + downloadUrl: fileUrl, }; this.fileViewer.open(fileModel); From a2cd949f05179ad5dba3ca23693bfdda5b38d761 Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Mon, 1 Sep 2025 13:19:13 +0800 Subject: [PATCH 16/85] [ADD] parameter for oauth pub and priv keys --- spp_oauth/data/ir_config_parameter_data.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 spp_oauth/data/ir_config_parameter_data.xml diff --git a/spp_oauth/data/ir_config_parameter_data.xml b/spp_oauth/data/ir_config_parameter_data.xml new file mode 100644 index 000000000..b2fc79516 --- /dev/null +++ b/spp_oauth/data/ir_config_parameter_data.xml @@ -0,0 +1,13 @@ + + + + spp_oauth.oauth_priv_key + YourPrivateKeyHere + True + + + spp_oauth.oauth_pub_key + YourPublicKeyHere + True + + From 6f1709ab494520702ecb61fc2f8a2bcbd74592e5 Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Mon, 1 Sep 2025 13:20:27 +0800 Subject: [PATCH 17/85] [ADD] add new settings for oauth pub and priv keys --- spp_oauth/models/res_config_settings.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 spp_oauth/models/res_config_settings.py diff --git a/spp_oauth/models/res_config_settings.py b/spp_oauth/models/res_config_settings.py new file mode 100644 index 000000000..dbd08a7ff --- /dev/null +++ b/spp_oauth/models/res_config_settings.py @@ -0,0 +1,13 @@ +from odoo import _, api, fields, models + +class RegistryConfig(models.TransientModel): + _inherit = "res.config.settings" + + oauth_priv_key = fields.Char( + string="OAuth Private Key", + config_parameter="spp_oauth.oauth_priv_key", + ) + oauth_pub_key = fields.Char( + string="OAuth Public Key", + config_parameter="spp_oauth.oauth_pub_key", + ) \ No newline at end of file From 133c22850e65b07f8bfd4c8e290ea95e45cc7efc Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Mon, 1 Sep 2025 13:22:06 +0800 Subject: [PATCH 18/85] [ADD] modifications on parameter to hide parameter --- spp_oauth/models/__init__.py | 2 ++ spp_oauth/models/ir_config_parameter.py | 7 +++++++ 2 files changed, 9 insertions(+) create mode 100644 spp_oauth/models/__init__.py create mode 100644 spp_oauth/models/ir_config_parameter.py diff --git a/spp_oauth/models/__init__.py b/spp_oauth/models/__init__.py new file mode 100644 index 000000000..bca8c404b --- /dev/null +++ b/spp_oauth/models/__init__.py @@ -0,0 +1,2 @@ +from . import res_config_settings +from . import ir_config_parameter \ No newline at end of file diff --git a/spp_oauth/models/ir_config_parameter.py b/spp_oauth/models/ir_config_parameter.py new file mode 100644 index 000000000..f20346a75 --- /dev/null +++ b/spp_oauth/models/ir_config_parameter.py @@ -0,0 +1,7 @@ +from odoo import _, api, fields, models + + +class ConfigParameter(models.Model): + _inherit = "ir.config_parameter" + + hidden = fields.Boolean(string="Hidden", default=False, help="If checked, this parameter will be hidden in the settings UI.") \ No newline at end of file From dff5db083820540cef8e4c2fc5373adf62c9d740 Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Mon, 1 Sep 2025 13:26:11 +0800 Subject: [PATCH 19/85] [IMP] rsa_encode_decode to use the new settings --- spp_oauth/tools/rsa_encode_decode.py | 77 ++++++++++++++++++---------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/spp_oauth/tools/rsa_encode_decode.py b/spp_oauth/tools/rsa_encode_decode.py index 81af8b7bc..c2c230422 100644 --- a/spp_oauth/tools/rsa_encode_decode.py +++ b/spp_oauth/tools/rsa_encode_decode.py @@ -1,41 +1,62 @@ -import os - import jwt # pylint: disable=missing-manifest-dependency from .oauth_exception import OpenSPPOAuthJWTException JWT_ALGORITHM = "RS256" -# Initialize cache variables to None -_privkey = None -_pubkey = None - - -def get_private_key(): - global _privkey - if _privkey is None: - private_key_path = os.environ.get("SPP_OAUTH_RSA_PRIV_KEY_PATH", "/etc/secrets/private_key.pem") - with open(private_key_path) as privatefile: - _privkey = privatefile.read() - return _privkey - -def get_public_key(): - global _pubkey - if _pubkey is None: - public_key_path = os.environ.get("SPP_OAUTH_RSA_PUB_KEY_PATH", "/etc/secrets/public_key.pub") - with open(public_key_path) as publicfile: - _pubkey = publicfile.read() - return _pubkey - - -def calculate_signature(header, payload): - privkey = get_private_key() +def get_private_key(env): + """ + Retrieves the OAuth private key from Odoo's system parameters. + + :param env: The Odoo environment. + :return: The private key as a string. + :raises OpenSPPOAuthJWTException: If the private key is not configured. + """ + priv_key = env["ir.config_parameter"].sudo().get_param("spp_oauth.oauth_priv_key") + if not priv_key: + raise OpenSPPOAuthJWTException("OAuth private key not configured in settings.") + return priv_key + + +def get_public_key(env): + """ + Retrieves the OAuth public key from Odoo's system parameters. + + :param env: The Odoo environment. + :return: The public key as a string. + :raises OpenSPPOAuthJWTException: If the public key is not configured. + """ + pub_key = env["ir.config_parameter"].sudo().get_param("spp_oauth.oauth_pub_key") + if not pub_key: + raise OpenSPPOAuthJWTException("OAuth public key not configured in settings.") + return pub_key + + +def calculate_signature(env, header, payload): + """ + Calculates a JWT signature. + + :param env: The Odoo environment. + :param header: The JWT header. + :param payload: The JWT payload. + :return: The encoded JWT. + """ + + privkey = get_private_key(env) return jwt.encode(headers=header, payload=payload, key=privkey, algorithm=JWT_ALGORITHM) -def verify_and_decode_signature(access_token): - pubkey = get_public_key() +def verify_and_decode_signature(env, access_token): + """ + Verifies and decodes a JWT access token. + + :param env: The Odoo environment. + :param access_token: The JWT to verify and decode. + :return: The decoded payload. + :raises OpenSPPOAuthJWTException: If verification fails or for any other JWT error. + """ + pubkey = get_public_key(env) try: return jwt.decode(access_token, key=pubkey, algorithms=[JWT_ALGORITHM]) except Exception as e: From 042cf418f333bb2e0c1b20b7487a7bf276c6ab69 Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Mon, 1 Sep 2025 13:26:43 +0800 Subject: [PATCH 20/85] [IMP] add views and icon --- spp_oauth/__init__.py | 1 + spp_oauth/__manifest__.py | 6 ++++- spp_oauth/static/description/icon.png | Bin 0 -> 12567 bytes spp_oauth/tests/test_rsa_encode_decode.py | 4 +-- spp_oauth/views/ir_config_parameter_view.xml | 6 +++++ spp_oauth/views/res_config_view.xml | 27 +++++++++++++++++++ 6 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 spp_oauth/static/description/icon.png create mode 100644 spp_oauth/views/ir_config_parameter_view.xml create mode 100644 spp_oauth/views/res_config_view.xml diff --git a/spp_oauth/__init__.py b/spp_oauth/__init__.py index e69de29bb..9a7e03ede 100644 --- a/spp_oauth/__init__.py +++ b/spp_oauth/__init__.py @@ -0,0 +1 @@ +from . import models \ No newline at end of file diff --git a/spp_oauth/__manifest__.py b/spp_oauth/__manifest__.py index 519a1d191..1b0cdd169 100644 --- a/spp_oauth/__manifest__.py +++ b/spp_oauth/__manifest__.py @@ -12,7 +12,11 @@ "depends": [ "base", ], - "data": [], + "data": [ + "data/ir_config_parameter_data.xml", + "views/res_config_view.xml", + "views/ir_config_parameter_view.xml", + ], "application": True, "auto_install": False, "installable": True, diff --git a/spp_oauth/static/description/icon.png b/spp_oauth/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..35f8fec263588314689c920efc4b6728b407daaa GIT binary patch literal 12567 zcmW+-b66#B8$Q|AW^J`;v$sxev+XuxvyH7bZ?9d&I=lQSGq%(qxksmE0ENqsa=TIC*`@5*; zlZ@L_`{Xb|K5+g!T~BvDVye!4*Q3X9c!~4i!s6O*km%@}$Iack7k;fEj2m%dbS@g+ z&=(0&=8uP-x0Zo=3!)It?=-Zk9Pq4;w^+LagDlrZJ6O15xaY^oL=bSz;<)GDlr$uL6X)^k3|pxhu2( z;_tdO%DJ4jTUyBdzT$xUzXTq*Mdd^n8tz8T7ZRRi57vC$Zv>MUEP4wpRL0 zY~SS+buafxe|G8TvkS=E4my#ndzs#k96VRZL_BmH9%~Hc|NA6bAm*Nire4mUl&2d2 z>UMGd#-BiDQI%(923rv?=0>kWjD+9ZAv9Jzf77qJHcRST^@=%Qt!u=j@^4d?Tkss- zU5`VFrEG7c!5cXm5>)>2;wujVpiHWM;V%zYEnn zt{>bHYhNrG_lst7{4I$IN{efQ=;!t!5EFQ`Y%Rl%rR3!~XGQpFSPX`5eeZe3Oj>yf zxL0S$JbqB}QK?@2EY#`BMLLb136|1Gf%s9awql4-YM|Oz z>a>59{l&87VSl#6y^V1grlEyNVMwf!6ruszAaUXjgMt_7Ws?(?LzT{+J&=(RqR0k6t)rkqb z=6ZE9`|NcR`%Z387?`YBCLvYoFh5*2e*z)+Y2sXfHRfeB2>NOCfrtBI3$_cqgB3momFOvQ*KE z&q^#v$pl`u%p5!>y-+V1J!r?bi=NnVeq<{Qe^)ZV6TDYFiJlpC3)TJ{}7kC1|(f(x%6%=_QO(vTj(KKhu0ic)h0 zTB(3@c)p;iR=v4tHV}}(Qz;K{gCgT3o|$yG*xZW+6+it`di?T;NCb;9p!IKl0@y<{&@8*(dG zJ7=~SeleZo{^PgBKKA7wX^xmLUTavWkKEz)<$QUrg&XUJ%p78hIa%mCH&;;we@08D zT%eN(cMsjihvEYZz~rDSYHjU>tTx-b^6CU~h+9usoWn@ji1CoojaRBR4-_2F?n2~? z4$HICsd3{I-T-M72lkVR!+4dwNqA7l(3}Yy#$N3~z`h*uk#De!Zt6lyx>cx*r0S{a zNwuM|l|25s=i1704&l(k8N*k$q3Ijf!FFGTCoHmMqT2UW{*!}XrnoRoaaL!GmA?^M z{9InDo!g66sdpfdQpkv8pJ!K_smq}UD+gb=G_u2OyXoUgNmv{RLZ_A;W3^D5o67Dd z@aT?=EoQhUmWeW~*D|+l$07|tDXsq<+W;I(4ICRdi&A?)GrzkAPB?>ucfTOQ#JD-# z7u%{5g}WLVp2_!@03h(SLY&)DOa%$lNoFB<06hlQZ24v5krn`=qj9d zxwR^Mf*f90DFeCveGlO+RzGX?z|-N@ym<28E-@LF`q zCtG1cf$zcH9SOD$MM8+Ht~WkxfZ21;TkxvXkWS?JOtD{3|L`L#dwk31`#||~ef$!w z{o9j%TuulmsLR;u9nEx3%0doO3gvn)y3}mqqu`ATUkj7vCW*f+H!C(w)8oIZp@r-% z*LxrN@dQ5KG{xo=%^2pXoqt^y4p!4vFpWv4__1`JHHsE94Hw<_{$sNAP*SPJs`l4Z z3|z?G?+Y!08V0EqD^h$9^=r$dQz?31f8>gV?0zyj#^X9K&tWupNNCXpFO3LrBU4y9 z8BPteLvEfu2SXy>+MzpPW0_@4k{vUGbBv$(~9jjo)Nd zM)mt2Z8o&0KVspRzwk^?J5edrBQUIJ-A>ih}QyxSEOpH;2tinG>d-JI|C(+gT;kGC9c9uN5$=MfXm9(Wk> zX$SmbTL2lPVPpbyw~m|0%PS?8aDl#QkaOG$zL&8KFCV%c1-3ArCWmG9VjTL z$!JRotdQ?yMHl(T%FKdg62;t-{$S%qrjg;)5i~L&f8eDZ30X%X33+t*D%31SXi2s- zNn+HXRj}?g*kaAQQz`P=3I|-MvKr;ugL4Dik5Ptm;vl*aWDm+3maw!@)ni!aD6G-j zl)+DOS3JU(F*08DlYhgDph+kQ&>}tAw5TUi;+76nb9w*Po?DMGv0Jp;(fV^3D?&2nd5cj$n$$I!33DJBhkwuf zn(kRuq98aA1IEiy_lCedU?7Dtxq}){mJI`KBG|Q4(}gAx;`Q)lp;I=K?Xr2ShJ*kk zrkkhB5>lDVTDuh4kFbODtb~7q-}Y~yLttDHF+8Z=x(4pN_1`Y5grUi%4n`C_J>GgQsRoi9^EW@lXv^Zz;ELGC&4y+{K8YRW}ZFS9mSRU2hmLErl znloh1nLX2Ey$BPR2XcPDE^PN+l-`^qs!JhBfLk0Cz@*r_EnaKEyE&$KcidbMYC!cI z`{QC=DDhOb6L8ReD|11TFfs%{W~TSSq)Y<|Aw*e^sYg7?hk-(T%%q(gm~@VB=x76_ z<{ER>I=ONDb9B{8;_h&P|l!vJGEn+K|biD#LQOzdT z{?eho+7+fwmFKjvFsQlFTe#T@AB4>SP4sS1JjAh@$2tZ}y>utu(y2D@>^u;v?^x6D z18!{{r3MWPz=C&@0c)ZDdGrYyixJ8&y1L|urPW_Bl0w=rI!uSLHn?Nd%k^EBfAY?V zIEOkTN*hEAL-dL0-D#+clL#6+_-g4pj5@VKP-vtl1C}8C^*Hd8Hz z%d$o5Poa`)H_^u>Z+cpom)pTvd!jL=eN6noK{bhR9U}8&RXNGdBH^z7Dud`DJ9eUp zur6n6rC)8p2}aE4_ia&=)r^d)94S3`E;nT1&qfm~$f(kDDT6$7LP?d|I89lsuaRmn zA+k0Iq;S)Zj>OvSZFE&<-D^cqvCyAj`G-P3D7`kP?LF`#|9?+?`}i4cYNR@z%b7 zH}Ny%Vot0;)l^aL&ym=YA8g1?XDHHzdrSFs0(IpZbzyCEK<%>u-CY}nut46`GL2VG z7Db}?HwJ*Tbh0hFjF27Su`^-NI@B3BY=%_Ztl?Aqvm-hToO`A_?;XW@A+FsxsXm*n zWk=$5)D3~HiMD5}wc782-R`@26~W!oMfkU#(E}m(v`$L|Vw?AN5)1MYSJv@e_gT6J zs^A51l@OB(KK7v&qO%=QL=I}2`=dYdXnfN>?H)v%@%vFI$Kz);9E!NIM@=vw5TEo` z${*bu2MIi9^B8G&=P6HL4dm!tdjubg>a#W|MIoJ$D0E;qr6w~s2GG4#MltlZeO6dG z`C{$qUUQWaRcZ0??YlQWNZr9I$5Dq$9$tfK-+jg4AJ&$Up02s3>e~;1SwVx+;XuqV z(n|x=LhWVt80$?LIDZehr(J)Up!`-bM~k?8T1Y9VP}Pd3WMX|6$>ID<5Fy(E0g_!O zD&(b(aHRa2o<+IKmM(D6zTM(;(NS}@@5pSEKo`!SZ-E$!y06;cEZYX#qLuGCr+~)O z-Yeuh1K&ldU_-9BsL`zdnxE-=UF!1H)QayX#3cQ}5p>t&L1fY?-Zg$abs=HWrmK_L z^I0?o^kXc8jVEX41Kww=Mk#R@XC19X)0FllZkT$OE5Ds=Y9GJLH21jA+B+2O2@|2C z6FW5lUcTfvtHk{G`F)WXo9^4OK3Y!9w%XcB^?dy!%{owfGJJW)!XvhwiKqOEDeTT` z`U7CSmK#OS{pugg9K)Sp)w`$urpg1-@zxu8x}9T6BX$|$trv*pRt$(&+rP*-n7pwo z7)^8vTSy-h8y^$vGeqt+7N*+!paK>PL_TK3D)3pr4H-Uk4-M>Fc8`yc(dPV}4g*W6?-)p_Jue6ZF*A5MY zlrA}chd%LXdI0cvx3U|9V|>&g4lJkJa!hT#v7!A|HHVHg=4z<9U{}@u{n@)fq1PwJyT`&eCOT@Q=6m_v!H; z3%pX-m_HSdI#DiEsx6KTA?;JE%Nl5PP1fjRAQ6{`tD zz&5uzP@vAp^^dY;TD0_K$VAD)x=#xyiUTLy&p2XKKj+>ZVGS-<0)Y12_>^AL=cZ_; z3W0jv!NB;j5UP0pn~Om$rq04}ml8NQTZxFAQ~G z(TB`(_I+fLA(=5qMpndowwoVcHE3eRwO=D;bCU7|4%Np#V%HhympjWOL{-FKl~=># zm8Bsbte00&6YG&u*mbU=x%^CBA&{U8QQ4~0UF8qdQ7rk;JAZ8~Aweehnv!|6Uus}R z0CA{$abL2SRb-_84Bi*dan$;@Rq92O| zBxpKOO)@LxG$ONqBBa_EFO%>K)uqH>xi;Ba*R+>o(0Cq@Ki&fgeFu+NF>|2Ey@|!$ z9)G4S2p_}>4(ptVKS}DX=XV#2i~n@t`Fx>oJ5L4(Utf~tPJisuz=g{RHlDFB`yNS< z!&Br7{{z|+)4@C{J|z~0+`tCDFcf#|6iAL2M7DPKe?A(mtA$~VqL$|}gs~qwLQkeamYGUMY z90ks|B}`~C0hMF*`Rt&w8<)ftUgVM)Ln9&(II!gRj~;6hOpMtGvTX68yVAtR+Kk#R zga%HfH#SP#xqXpcWC^oRxb)l)S6dE*GUq|Pwa;##?r6rY`xqg_(qluEfPr5(OhS#$ z@I;%DD#xCn^jhO-fLznFNjyvfL!JC+c*K>5vNC%>z56GWA1vRbj4@s}c6y)8{u4T+ z2N(TZ$>zhQ(<{m8nesab9ScD@bhI%Vtb(X$Bp*C4=@xFtz%q& zvN`Yk95|HS=<3>Q#5LH7rCR0dDE@{E+I*K$gu}9zsh`I6rm9+a-xzI+QcadX!Sue; zQrd_lpV8wm9>k;AQ+Vcs0dYx-F%;#e5~GiGIdQ08R10C#Ii};+t$Qa~?C1Pd@UIm> zr7rH7UZrO~Gk`xH|20v)h@VeEUGgk3X(cZ2b>s2QWj2?lo!V!QF1PRe7F%-i&aj@M z_eW-bML0Cx5eZ~KA$w^H-=gP>*nuy%oCgDdpca1dw}VR z-x18fT{x3V!OH&2OMEulPQV1|&()vaA1W3f8AF2SVoQxMCMakT*(A*0{c9mwrOr0( zNG#e^`Gj$|Dv%Saa|&;GDZZw=a(~Xo+rpePorA@-rC*JsU1Xw+J#6Dg96g~Ke`Eg0 zmkQ^Nm#brp6~8T{J1H<3bo;3KGUF541NDgL2USd7EIfbNJ#`8Z_+=i&ZnlVf3Jrdn z@6P%*ymuA|-Fn81 z0?Wut04RiznTQiM=PXvx_hp5?-FAmjC=$1BfJNe>Qqp0t-0(2WNL9LqAs}=nQ9wTC z`_M&(VR?NHzwDG$p=lapcsf@pn2l9^Eh*1<5K%*M@=r-*@Dwm-LA9Hq)?Si{{x@0# z*D0N-XNHjIaBZ+s;(Q2YWq`IiZ^^g{sTmrt3_lz7g|rK!u|I9{H5{1{VzSI`ynM>p z*xWm%&kVnZYrosZxUu5&Axg=LM8_C{EhMl@l1*OCg+8trsD%%ev&L@~Z1p|~;1r53ZYWwXc6{B% zKR}gLlYT)zSpxb!4uIL>AqS82kg`{EfnQqw_PX9`2Ux$kTbmX(|Fd zWc%=xLwwxw3f|Dv7Qj#W5|NWRl&F31s4uWl{Vd+nt67vKo|RkqyZ8ey5 z7+y2mNqA}5v!5}}+lFqjHMNKmY2L4T-%q%h;C;sc!Lu`Nyxbe=F{Dca2aAuqheJNf zG{~#UVW|N0YsBj#;`uGX3ArH*gqp2`M=<2%?g9o{LgCoi$NTp1TVsLQT1uj_k;h=b zasc)*Y%qSq9p?2X6eSiUpx;Yj8hQCh5o{%W-DUf}f#=jwykNrTk5X9Z-!zA-mmDO! z60mXDL-BOjlS?zXe;90RyeOl7QVlIaJg9a=a3()o7z1+QPdhSTl@7XBaZmU0#>T$6f8Lg8|?SxYawWC$MP_G z*%yV(xlzr-$mF8-C3Y1(Ya%@bHSqTW5fK%RVrU_BTaXBW{zIffgc51w_+^uO8wtHz2=o&M z#8UT(BsB&!ai)O4$HbbPModc2OGuq_x*Dcz?-}?-#k419wiL!fGxg)ev!(7M>kb;? z;r$mphn94xxRqoK9-*0!qn5WTeSb0cmVdtCJD>5i7b`1iE5FB&IQ13x@!PeaUpv=#F>?8JFA28J^EvF1{k&9>`73Ajh1R8HY`o7buJMco_an81Jk z*OD1S==G$*zGnOZAj3KsqJeQc5)9En465_2g`nsoEl-r^A6cSHZ&wfegKTG7JgGgO-MtqcLD zIYY=H>{z&{@}*8e+3Z{;K}n)T)70yI+4X&l@eA9Na?S=0OP(6DtMYoKH-2d#h%CQr zSDQI)H*iiHkBdZs;j?y{}!q*QrdZjp&bFS9K**yZPpZCw#><#M)XrIYHvU_j~m&Gzg-#Uth{w2`h9 z*U-^H+1^-~;8VcG**cECV1rD-RCQj5SM@sjw|fsi1^vkm zeC$4v2UC@=4r;!lfY(7ZKGO~h>UD5v>Ya;oP4{W+)7+((RdSakrq$jhCTEnc>sJVA z8R$5`6-rg4kELClbQ0S*c%Ny_*EhSAb{Tg9p$FH!h_QUTRMN}X5#!SJ)BYq{!YQG} ztgWwpt7~N$yN5k5R3LnOoZf<}{`oiZ9B=&0>xl6dE^Ldc{~ul9Wpc!k<247=F8a7md®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 + + + [('hidden', '=', False)] + + diff --git a/spp_oauth/views/res_config_view.xml b/spp_oauth/views/res_config_view.xml new file mode 100644 index 000000000..40f1c6c8c --- /dev/null +++ b/spp_oauth/views/res_config_view.xml @@ -0,0 +1,27 @@ + + + + spp_oauth_config_view + res.config.settings + + + + + + + + + + + + + + + + + + From 79ea540c2fcc5b887dc4417aa9d166726e9e751a Mon Sep 17 00:00:00 2001 From: emjay0921 Date: Mon, 1 Sep 2025 13:27:50 +0800 Subject: [PATCH 21/85] [IMP] fix controllers and models to pass the env on encode decode --- spp_api/controllers/pinguin.py | 2 +- spp_api/wizards/res_users_bearer_token.py | 2 +- spp_api/wizards/res_users_bearer_token_views.xml | 7 ++++--- spp_attendance/controllers/controllers.py | 2 +- spp_attendance/models/attendance_api_client_credentials.py | 2 +- spp_base_gis_rest/controllers/controllers.py | 2 +- spp_base_gis_rest/models/api_client_credentials.py | 2 +- spp_dci_api_server/controllers/controllers.py | 2 +- spp_dci_api_server/models/client_credentials.py | 2 +- 9 files changed, 12 insertions(+), 11 deletions(-) diff --git a/spp_api/controllers/pinguin.py b/spp_api/controllers/pinguin.py index 602f75a78..1d0f9c722 100644 --- a/spp_api/controllers/pinguin.py +++ b/spp_api/controllers/pinguin.py @@ -233,7 +233,7 @@ def get_data_from_bearer_auth_header(header): normalized_token = header.replace("Bearer ", "").replace("\\n", "").encode("utf-8") try: - res = verify_and_decode_signature(normalized_token) + res = verify_and_decode_signature(request.env, normalized_token) except OpenSPPOAuthJWTException as e: raise werkzeug.exceptions.HTTPException(response=error_response(*CODE__no_user_auth)) from e diff --git a/spp_api/wizards/res_users_bearer_token.py b/spp_api/wizards/res_users_bearer_token.py index 5c7f21440..690e8301e 100644 --- a/spp_api/wizards/res_users_bearer_token.py +++ b/spp_api/wizards/res_users_bearer_token.py @@ -32,7 +32,7 @@ class SppUsersBearerToken(models.TransientModel): def _compute_bearer_token(self): for rec in self: rec.calculated_token = calculate_signature( - header=None, + env=rec.env, header=None, payload={ "database": rec.db_name, "token": rec.user_token, diff --git a/spp_api/wizards/res_users_bearer_token_views.xml b/spp_api/wizards/res_users_bearer_token_views.xml index fee84a655..57ed5f081 100644 --- a/spp_api/wizards/res_users_bearer_token_views.xml +++ b/spp_api/wizards/res_users_bearer_token_views.xml @@ -7,9 +7,10 @@
- - - +
+ + +