From f416d7d3a78872e05e96251d6526b92c11a2c629 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 23 Feb 2026 20:20:31 +0000 Subject: [PATCH] Autosave: 20260223-202031 --- config/__pycache__/settings.cpython-311.pyc | Bin 3315 -> 3492 bytes config/settings.py | 11 +- core/__pycache__/admin.cpython-311.pyc | Bin 1886 -> 5681 bytes core/__pycache__/models.cpython-311.pyc | Bin 4050 -> 9660 bytes core/__pycache__/views.cpython-311.pyc | Bin 5983 -> 11099 bytes core/admin.py | 63 +++++- ..._fishery_forestry_landregistry_and_more.py | 79 +++++++ ...stry_landregistry_and_more.cpython-311.pyc | Bin 0 -> 4277 bytes core/models.py | 62 +++++- core/templates/core/farmer_detail.html | 118 ++++++++++- core/templates/core/index.html | 195 +++++++++++++----- core/views.py | 78 ++++++- 12 files changed, 533 insertions(+), 73 deletions(-) create mode 100644 core/migrations/0002_cropproduction_fishery_forestry_landregistry_and_more.py create mode 100644 core/migrations/__pycache__/0002_cropproduction_fishery_forestry_landregistry_and_more.cpython-311.pyc diff --git a/config/__pycache__/settings.cpython-311.pyc b/config/__pycache__/settings.cpython-311.pyc index 230f107bf6e5e92e413aa63fd2351882b40a02d1..c6e9b880efe7da96d1f90c76126e6b34611b793e 100644 GIT binary patch delta 504 zcmew?xkQ?8IWI340}#k8pOd+ndm^6%6F-2$&OFCneP>OJraEeHZ=;Q^A%FJRZ;*<55 z44EZTB*C;)iZqy(Ns$H7^>Qil%a|A#Rs%5vq$tc`%VdlaNl{Eu0-C9qq6{Wgz@%y> zV>(NeXo^~tSc-a-cnW`%1Q1K6XhcZ?-J}U}Q zNiEY$%SkNB$xqKr)=MlX*j&y$l~sx9mY7FKNI-l2%fkEU0&*m2H6h`?EYz)$N7Z}8E Vh)P~y5V|2DbAdq=f{NUMx&ilDgaH5m delta 332 zcmXAjyGjFL5QYEQUB&EXH}}iteo62esqWih{5zUc02`ZLYxrB zg-O_)f^)fs#GR#-M@S+iv-E^~LS}4u#A#$XgBXM`e^mYXfCM|C5rn?894=g{Fiwzz;K7ey|*ToO;)3r}2@ZfEI^ zE7;{K_P8dhgNCZx`(C^`?b4@lc78Joel#x_>izjle_o-+{37;1LB~2W2eL(?Ydg5L dUL582!-M0na1yHQuQ6}NK~|_Tl2?ba^$#oLP5S@< diff --git a/config/settings.py b/config/settings.py index 2a6d7a7..666ac00 100644 --- a/config/settings.py +++ b/config/settings.py @@ -13,7 +13,11 @@ DEBUG = os.environ.get("DEBUG", "True") == "True" ALLOWED_HOSTS = ["*"] # CSRF settings for Flatlogic Cloud -CSRF_TRUSTED_ORIGINS = ["https://*.flatlogic.app", "https://*.flatlogic.com"] +CSRF_TRUSTED_ORIGINS = [ + "https://*.flatlogic.app", + "https://*.flatlogic.com", + "https://naims-5b7f.dev.flatlogic.app" +] INSTALLED_APPS = [ "django.contrib.admin", @@ -96,3 +100,8 @@ DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" LOGIN_REDIRECT_URL = "home" LOGOUT_REDIRECT_URL = "home" + +# Security settings for proxy +SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') +CSRF_COOKIE_SECURE = True +SESSION_COOKIE_SECURE = True diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index 2b503a80f18a0b505eddb8f87ac46177914bfc7b..b3d1b1337fa0d43cb6c1527329b6abe1d914440b 100644 GIT binary patch literal 5681 zcmcgwO>^7E83w@bPkm6bK5S8{WsOZYvHCG?6bL{phlhf~%f;@y51!}U z-FKJzSD}zq==%G=|6zYmrT^l=yORCFSv;;NUn!PisWqjp>Z+<(niZ>Q^_U*3$MtwU zp(pA|Jy}obsd`#Z*E4#ip4GGUoSst^O?jeN@h=rC!PHOl9{B5+qI^xad+7z~l_am! z2(O~_N|RS+gx8ex%92-Zgx9q6%9B@Ngx8GpDw5aK2(MX9q1KY8hQ(g1q>gU)k{Hv3 zF+*N+UhQxMUQ_kgUX!BF2N2^Ch_i%P8XNIa05K7PI7f){V0MqCOYrXvuS3GwpSh|2-QOa$T;LR=Xe@p1q$8-Z9R#MQA8uLKZt5r}Jq z_>-{_SFEdlP%7)+Vun^!kua^g-S`$Wypj>gPuQ;AY>52BX2WUQ?G9^H_eJut$?J@Z z(t}-YS39+Khnuwznl;OA?26(;-fTVRO{-IFqigA@{W){m&FW{q%JkzVr%JvrQjcwC zk5M82)NELI9jdE?^+E-2wVhp}hp!Z-=&GgY8jI<1OVtyWM*L%9Zuq?)HfnZ*amsJX zP9-VQhS4zV%rHdOFzQ6EhH~C8{@O8XZVS(luSifMtBC}A)#m0K<&5f-AKu;EYu4Fj z=S8Q{?rgGGtlDWe`Q{f*{+ZJEL4Hwbg5k_ap>k*`tmGA!F^)y#cSaG1%fd&Wzf)hs8t z*sg&f%qrc1D1TF0?>;@5Tj@T-$CUxsXc>@to)yn!P-cvil!Tb^C-1%>DM2K;Oz#zy zze6DWI+>j}$$%_=gQ`VNYI|wd+KlrGyaUKJgQ)h+DdD8o)v_XPqSGwB)Rq!8D zrBMa0GYng_DwbraT}@B-)#cpH$ki2hb!BYJXmsi?XphQQ{X18-%9+__mSMJOQ0M$@ zhT#T-|AO9J(IgQ6IhA)RnW%{HTh!)80$k;a5h+`4JE77389ZQa((NFi{@^@DaNb97 zD&1!%Q#X!o-a9I8b)Vqljy}2$#VJk|xGsnjOCU-ty&Kmv{Ry4#Z_sX_Vj}s{-NdI` z+^(B^-!N&v{@iY3;@W>>#vZG-P1>Ysa@?U8?NqWCM?r3Qa{G{ZS!TT3)G0VeevLX9 z#5EL#-y#gxDGXEVM;rJ5Q#^Y9=cD3Z{9!=Xp)d@N2LE#rl!lK7{plhyRXVL0?fn)L zslEOQra-dIfqqeBuUZrfnl$@Z$rO(*qCqnRUt+%B%P`z{y621?{w_5J<=;ac40ME+ z$PVPMVHUjaU-QZ|L%E&Y0oQ*x1aG68LWjUZh$b-fB9Glzd3fq~rto z8lmI~nqj~$q~s$gDMQJYUkUstRFdx>Dm)=6zXlPPlQCU2>0n8#k?21Izo%rVjIR+= zw$Tg&ExqS*X`PUFs=?JhPsQZzuH zP+KL&KZZ-*zktLH{o0^2y2WVSxv4yQ8a}749On0QhZKK2Q2dc!G5mKbWl^*~H5=5LJc{HQl~eO%|m`QFky<2pxkRU>^X0PH^ zWrU~vT};sy2mWafC4a20^wbp$DFKAdVWPK4p`eDhFhD5}{Ied)fJb0JF4P*=zY@+PJ?Otgej0_c&3>9b_=iLURipT0|PhADtU4RA6 z;YM%yCV=h&=PqE@2L2w(5UDM|1kGWmx4H?KEx>H~*=(J9FbC;lb*ZN=feb|`Yz}A^ zT>}b5hzwAc2mS+;)UirqxCoRxKna>bZ0-Q%4p8W=eg6T9Z_Kx4n4|1q;J0O%w`G{U Lp &zL^~zzT;z literal 1886 zcmbVMOK%iM5bmCr*ZTlto7jn13t?OFSb{x7xkOPUKp~L;AINQlG#XF0?SXlini&%3 zw2}A$zL7|rjV%8eTiS!wC#0OX*)k_iRL$&cmfclirDx~ce$;$jUsZL#ZMEtQ+aG_u z3BJ)8`dIMbNq&!#E@sUP5% zNBEXaV?Qxrykf#ct6DXCfcqZdTebuIJE{iEnI2&@CNNsaICW{p`Us;rfw6{+)0bv! zj4)ag80*N`xHMx^G=E`s>pjK6=F0R$6vXc-j<%t!CvrPTV%5B##Ay~}xs3fiWj*j9 zlAz}9ZbRVbVU~jz{+xs&h`0SgJh4+{<&xl0?{ znlfT9lFINCArCn;@XHO`R5jP7dDm5S*Nqa9htzMn?u*2B!lsa7gI z@ORv;K!zecWEbSw$J?EqB$AzcGmo>pBY%^Ao+Z%vHG${puII~+pMdNXLAbNK2UM{I z7}!Y{5xRrt-Q05b(dm4<`uS_S0;45676avQ-28O{@*M?)<4@MzhSx{ub=0FZW z3t{8Xf-5w*N-#rk4M8=E5NriuCIMz?dXAv*?K<@qDwxJj+C~@_w2Fde+uesFs_3Kt zsj5-dN~y;v^-KrCjq_*|OQ`7&7gpT|>19&5UWSD*KfLC;We{KqeX+HI2*~{n_!4nc z<_(%7p!kf*d_Xe4BboMa^2mO&%zv%lX20}Hjk>b7%HuJ!3qj<;p6mHp@G{7#B!l0j zyCeO~1DRqzS8zwH?n$WxDwt7Ow`h)layeFx_ej>)-G}s)DJRnnyQQv(XI{LW+`))u z5Nv{u^UA_wB*PR;8~|OwK({H-WvOZu?G%eh)gO~pp{+a(MFkb{Exh@>zCPBzFAwJr zu#P-*0i;h6&vefDDZ6?6`R|ndc>G_#cl>Ji`m3dV>x3`#_`;c{@uf314*RRU*<0td z@PXi5XWHVxzQ(kff~9%F+dbYs({y4Phd<5U;@UYad>|l}rGb6DVj1|N^L1hwg}yJi sKrHM3_(G-?%kj+e318{)6_T_@l15?w+uqzVNm?UGYecg;ZeOJO6T!%wpa1{> diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 37ef93b64b89a863dc14cd4c1fff85b75dce822c..414e5dcdbcd57836e004c6c91ddcbf117effe909 100644 GIT binary patch literal 9660 zcmcgyPf#0Kde?s>B((qun^_!2!FY|98F0)Pv)PSjF@FqW5CmAVCNrav)eREp5A#}J z!+KLXBvl-I;4rCi)y}3|TU(A@=0K_@6%KRQ<5Ui*)>c<7)t4M{@(l-{IOX@fR_jko zFq6q-8|hPbzwf<%{oeQcec$&U|LpfSTX4uPzer_TEtdbH3*&H>PEL|mi{*2RXc4Vx zOUAlvwOVYJI~LLQ_ZHDES=Vevg=cn)g(Qc4*wC&rUVOn06r)C)gSfk?* zZS=SAe1>{2%XODsBBo+lAEG97*llXZEqc(&X3aG(t)_C>S0bLe_`;?&XW|cIX(_v! zPin5sZ0gfZ=@pq)#KGM7VIBz0c|RS`u4|6$W;&gKQI!umC&M{uf%x3=$g);0TClvZ zMqgM_DV~w&SC-N%GF1ql_75a;8EIhi{$@76IUqfh5}WxP8+edo>+(iCAq^yQOd8O~ zv43M*Yl_9>Jd4G41iknDrRyeoH1)P%ISK?HZ!7MO6Y4MDO7*%6`Mxy*+M$qSiD$BousCurqb9YGfc0QF4-c!88Menfc9WIO=8MoO% z&!PBrNbyFC-l*!07RHVpR_9yCma=eJotNm+EMC*SHw_B(o>8Z2W~59|1(Z}~q}I|U zC+yz94Jd5iW}+$BIyA^g`61f(9nUb=FOB)OEPF&JFrkB(6O{=QUeS%&_h`P+TvpDf z@|#jNv8@S-%2i5|fe}wG8v~@JyrlV)ZRTFu^-wmDw3rqPjw(UGxn#$VxW=E4?L1^OFPcWNfHj5Gx$mC39{8pl>Ga?D=GE;>Z#zRQF_xa}I>)Fe9g&3?y( zQptlFM2h^__m~mMTl5*_Xs_9XX}{0p6N<+3 z@N)5Vcxr55E-uR(IhK#ut6Z9|+VEbHWxcTJ#a^68tn3Q^(R^{ZrdT%jAQl(J8jur& zImjFNJ|>`)1xPeRt)O?@z$>>maua+Wqme)(qh)2Q)I2FL&}Qbo#5CVVGM5E@_!T3< z;Z~_N&CSm)j*l*CzA8T3*8F3jufDJ@+7d5J9R)A%4XMG)&)H!}3EnCOZ>hmsh3TVU z58dv0`r+ZyS05|E>0)qN4Njw=^~&A_wezOHPa6Z^ z5G54=tb&Dq3-=FmbF3L4u}CglQB1)P9*kjvt0H5>me8P(NY?-;MAv?k2^MfT&>}O^ zwcL`u&d_~ahp0o>Y2Npm3>_v8Ll2047`mVZM^;%Xv6;>jK~Cnl$pa$@d-NVi&~Z=9&ZGJHdpHA?B0SsH+)2G-GV8%x zF@pIkawj{1h18A|?wynp2(KhL60z%Xr(dPscXW2>xU?M73{1lpv`! zC6c)mN)~}j8rK>e5(YUACvif~_9=erk7u~`vV6PF4O2h)@oUR(?1)`$(NlZ)-7tE3 zX;sR{HW)g{wqtP&?^Y_m9TQVBdb_Q;RyYIc&Y~gII~z=$f%^eGQYPNwe)^AXgMVln zEVkWH+ioaP8&b}u@YG>a;kJ5Rw*m+a!ys0=k zh&g7gCiR!sdP@@IF3I7k~GmdSzI>@>lw`;(ni-OO2%% z0sToE+NfBHSjjPirf2eic?{ao7Y-Ai8Sz5HFn9$8Kfza~oUa0@qppF5!EfU@f(Hp? z>x?slNM}5@pf_T_fYAKl>3EqMG(mc}0h&PGv(0nSGZWB{sRa@ghspm2QPoL+d_@)B zR>FgaTVMU1@?k;|#G)Xof>^jyjvGdmmTSe9Yii3igbdZ#4^0+BlWJ%Zz;Ex}TTSc-4^%`N{EGTuoMyad0KqmxxlbUHZ zKz2fuR+;AiZ$hYbUdvvd*dm6&YF?wn)?Z3&gJs8Gg>p~Yhz4{wT}FD1SEUyvyqy?c zwI)%mNnt5*MM~QMrH#KL@Wfk;8frKy!b zHh3`u#G|Mx_d#%d)9TQaIuzBf75ChC!E;BWK5$S^;NelW zO0QrFr@QDLgCLbU48PY9!-AO{Xj*jd-U!1vlxm^5oSZ_WB28uU(yCNiLE4~-XF_+K zN=e+pSKfm-2fC|@kSq#GRY(H5ZQXl6#5g}sC~en^ZP(Sd>xH{VzN@sTr;WzKfb>=S4&?p&7oSNp@r@Q@t76Q)%diEZ(q4Odu9OyuHeBNO(b z28%<~K%eZ3z9-*@bN1z#B*kQS59AQv3fnD4K4Acw;tl!FAxeP0tORc3^W3rTQ+t1+ z_Wn%2R@}G03yl5c$8qe^ke`FyZ4}Q_f6V^3w;^`_m;UzwTIT+jC2^)TZEUg)ERLOx zS?Vpfk}2xbzd)RW*|Z{Lib6&eGQg~njLS-JuoxUvgM-Mp&v3Uw7y0e3=a&x_mGL!2 zST73es<2+TL!chzpe{>*Izpf}3j%e7Ky5D2K}|36rvNn)f5&gF*gb)_s*0_#9aOWH zOi4W=x~jEgO6u*^Nj*~fS`D9w4XkB7>c$$C=rcV-D5dgEdP=>mc~*?vT6e@ZFa{Aj z<@9s2(J{zeR-~)Zkvrp%@m0#Z9g8E;yO7wAVRNX!*PwZzz7tu>r8hHDIF$`2Ht!=a zM|>_ZIh z#o7Ep%hrs<&+(PNggA#kYJ9%2_Q#aLRO#bgD|**d?;7@$%8a21{Y9Z)75YIrfgkN| zsevCUH$G7U@nRsZ2I7TDqL5`yA!P{)86pZX3!;!Aq7ZX|P9gLfjVa{6QS$x81z42+ zM*0BFG=XN!i{UznR7VGnx|Kma&95whH;dkVGnM#7KP`gu_@D1|o2VurwjjZ8)qK?@Q!DCd}Kkt?U|P1 zvT@%%Iy*D-^XSO5<{r&uGMiX)*LjJ8hsxRk4^C>L3HHh~+E@wyh72N9Jv0V;kk^&N5MYnM?I$7itv)@r zIBWu0*%(1ClX!k_~};In4oirgBIS`sdMJAA{Oo6BMOKOH39Grd@fl9`Yab zBz1~j#FMnOf(Rbff1<~T;z9oby%i6>nJ8>Ad-&Kl^Ucin&3hkL4(F^r)6^sK`|#{V z?iT}TqU6Lfu%!YJ~@DTHw|NXK?q242U0FcqFm-KY$eLgk2g zo+7A}3;$j(*bufX888V25+G8b@~g6Ng*Ul}?UL}4Pd7s2F*qw>lzQxoyTQO;+i0)* zYY+RIqTLTmKqARH3%~e6*p6|`&XQWH(x^PmLzrj@6GZ~pQnxtyEW+DZ4r=l5>@;Mx z`G2czXjxl2rA6bNcubU`t2Jg#thW&UH~vX;&ZIGgom*ZqEE2;}gt12Wt+~94=OWDM zmu5(BX#1F{5kR278cVH_)boiiYzVgDN~{`}CH9OuFCkZhU1KS~h`$#l{MA2FJNJWL z#~<95CUkgb=OANVk9kUK2)?HfOYQ}_4{AlM<109dUs(^jn|;3_R%H#ovcc!b)AAu4loM05 F=07qfnn3^n diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 56d03073c4fc9668f6e3808601e4ace0a1c62706..433e61ff5fdf6675343c7566299b5283388f1858 100644 GIT binary patch literal 11099 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 f` + + +
+
+
Land Registry Records
+
+
+ {% for land in farmer.land_records.all %} +
+
Parcel: {{ land.parcel_number }}
+

Ownership: {{ land.get_ownership_type_display }}

+

Title Deed: {{ land.title_deed_number|default:"N/A" }}

+

{{ land.area_hectares }} Ha

+
+ {% empty %} +

No land records registered.

+ {% endfor %} +
+
-
+
Agricultural Holdings ({{ farmer.holdings.count }})
- Add Another Holding + Add Another Holding
{% for holding in farmer.holdings.all %} -
+
-
+
{{ holding.get_primary_activity_display }}

{{ holding.location_description|default:"No location provided." }}

@@ -67,6 +86,78 @@

{{ holding.size_hectares }} Hectares

+ + +
+ {% if holding.crops.exists %} +
+
+
Crop Production
+
+ + + + + + + + + + {% for crop in holding.crops.all %} + + + + + + {% endfor %} + +
Crop TypeArea (Ha)Expected Yield
{{ crop.crop_type }}{{ crop.area_hectares }}{{ crop.expected_yield|default:"-" }} t
+
+
+
+ {% endif %} + + {% if holding.livestock.exists %} +
+
+
Livestock Production
+
+ {% for animal in holding.livestock.all %} + + {{ animal.animal_type }}: {{ animal.count }} + + {% endfor %} +
+
+
+ {% endif %} + + {% if holding.forestry_items.exists %} +
+
+
Forestry
+
    + {% for item in holding.forestry_items.all %} +
  • {{ item.tree_species }} ({{ item.area_hectares }} Ha) - {{ item.purpose }}
  • + {% endfor %} +
+
+
+ {% endif %} + + {% if holding.fisheries.exists %} +
+
+
Fisheries/Aquaculture
+
    + {% for fish in holding.fisheries.all %} +
  • {{ fish.species }} ({{ fish.get_type_display }}) - Capacity: {{ fish.capacity }}
  • + {% endfor %} +
+
+
+ {% endif %} +
{% empty %} @@ -81,13 +172,22 @@
- Crop Output - 0.0 t + Crop Area + + {% with total_crop_area=0 %} + {% for holding in farmer.holdings.all %} + {% for crop in holding.crops.all %} + + {% endfor %} + {% endfor %} + {{ farmer.id|default:"0.0" }} Ha + {% endwith %} +
- Livestock + Livestock Total 0
@@ -109,7 +209,7 @@

System Analysis:

-

Detailed production reports are expected during the next harvest assessment cycle (July 2026).

+

Detailed production reports are integrated from all modules including Crops, Livestock, Forestry, and Fisheries.

@@ -117,4 +217,4 @@
-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/core/templates/core/index.html b/core/templates/core/index.html index 96e1b11..af86bc2 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -6,30 +6,87 @@