From 5998f75b7f9a6240df2718a7f95e61d69f93eb18 Mon Sep 17 00:00:00 2001 From: mostafa7171 Date: Tue, 3 Feb 2026 16:39:09 +0330 Subject: [PATCH] update HatchingsViewSet --- .../excel_processing.cpython-312.pyc | Bin 104997 -> 111917 bytes app/__pycache__/helper.cpython-312.pyc | Bin 8351 -> 11796 bytes app/__pycache__/helper_excel.cpython-312.pyc | Bin 14378 -> 15838 bytes app/__pycache__/serializers.cpython-312.pyc | Bin 34166 -> 35355 bytes app/__pycache__/urls.cpython-312.pyc | Bin 8838 -> 9036 bytes app/__pycache__/views.cpython-312.pyc | Bin 265328 -> 267306 bytes app/views.py | 314 +++++++++--------- 7 files changed, 157 insertions(+), 157 deletions(-) diff --git a/app/__pycache__/excel_processing.cpython-312.pyc b/app/__pycache__/excel_processing.cpython-312.pyc index b2bb30168dd1a79dce460c4b00b979a65de9ce37..dfd1ac5a13db0fa98eb0a16046168436cbe0d4d3 100644 GIT binary patch delta 15528 zcmb7r3tZGy+W#CFh5?2<0}PDZL5G_n7g6wnc*jeoX<|B#{6-vvL4OS18iLv`n3m|T z_J^6JU0%_!Fl}|K-K@54)3!kEb(q|(KJQy?ZSQ7Q+ivaq?*I9o-wceT;D40wJm)#j zbMC+AdCob%dG@5{*q55HbD^QZD*8;G)oNRGeot6DJGf``+pP`h)#*$ns03YoMnh(G zWSD((G6p&$26F#O%2)A**rhAKBpnKI=3OOIKnswWDOgp-6Q!ZIQHUcIWiT!^8> zWI<0jMTjMwDs5&{L#7D^qARvBQ^JXtSsG&+=}&&Q#<-(v8tt2{qQl(e5Y3K8vtV&Z z`TjLbEA93FA3t}7WKqYYRyH>|8XJ~aMVqDGw%sb4m^)-`v#nk*Z)&!R+f05^hdLqI zJ<8rFHgE~^MyuFlv)IiR(X!T7V|G}#I!+u_Cr7GR(V$6FV&hMIs{h(gy&kD2&c;fA zi_c?QB%`5&9g&V1X0sL2_lC196TG8tJw7^(Vwp z3*v6!%44B04x#}L(bBYjmN*`qW=l_Q>ZwNzQpN( zN-4ZJD`F+cI{>QzW@%<|u4WBLi?pRUuVgmJIe;p_d_WOk5#ScUV!*9{+X$MI2&C1e zNjh;Ec*_B|OX`xG#Y5{t&IQ04fCX?7uoh4Q5CB%dI)DvO2iO3}liEsBL*4^v2W*kL zOJ-&w?GD^1HVVx(4!3_}v%{_3)NHXkY>sV5{KR5NmPoM^mL+~dq{&Y#2M1b57%zvu z4oVM9Sikr~WPAni1AGqn3*ZaDmw>+#e8F4Uj^qx&9>7w-UVsF61n{Udt+cXL2H6SN zNnk1vBS7y1JO(fVo&+2O90EKAz{(Pz20R1s2jJlr{{wIs&;>XGI0^^>JO|hhcpM-F zzZ)#+CZ@I~Qp&AvwAXJFQ;?wnG>}s{R-e!z;6J& zL%#*}8sK%n8-O>Z=t;ZTSJKmyjLy;hbO5X4lf_fC9N z_PUn6d*aZH_oCS$9l2AH5kjrNsTO(Q<8YxEDhdjOj_e<>E=+@_v z9t9Y*s@+H)BXH|#L@QZ3bJKdO)iHt<)k7-{!2NbSs8|4hnx6s{2Y3PCHHUfEw}&Pl zd+1~8q``rmYc|*WOtZX z(rn#YW33lksZFO(Jh@?G5E<8q=Gk#^A!wzJz@!sHL5BgtCHpQTi;#BiN>4zDCB}mr z4Tu52_BK~Y^B>BPzS@;u>Z6Fg%&*cVaSgY2vH#_8hdZNVzP=Lj{v1Nm7 zJ7gDoWk;}XP5`0&Lf?h7Jl3L!lZ9H(~5ZA-e+#tGNQe#|vOo z&EQ!8bt?IractG_ZUHU$GYYJM%7_Cf^>hYktX|QP$4@fv3((XK%8xjF|BbfT6os1_ zzR#er0SY%ad+n*KU<2WSCe!ZTD%63Q(@e=cg^%7zu zR1RZSx&TK2JR%JN^&G&*IY?jbPif`u;2KYGeMjIM82dN^6uA+#ZUVfHF@0l2@&R!Ol3@{)E_mOIK)UvD1bGoB^MvnMPEei=eO;~!mL8)%C>TIUI*QQib8 z;mzDqzCD|W^dtZ_YO}=2AYBBse*;H!1O5jLCUW6FOLx6FyPn6&+?H*Ez!ty~fD+Y$ zvIDjQxb@>k4(8LXSHufe}m0Vt%NVe)Tk&pmVWWpY_?T8_f{QyS1S4a_{g0og}K?* z0f}wDpRB*1_76?Ll+~s>xcK0vLrdFK;=9th->-=n>NcdZx3j7~Aj$6|30%iq-Tn8a zxR1C_x{kUIyN-|GQU*2yrbuxb>5CO7y5BajqDs(x1kKnix=!{#Kt;WTA;BhP=$3+e z#3Cu^9aFgCdZrhMw?pn$sp6fSFzzZ8??5Hc>B?={n2K3^k{0sKF>Ti$f&w2Z6gRk$ z_~$!C>?bMz?BtL=knqILo6okSqmZROg^0hU;)iTQpuJ71IyWxlHMCx_9Mb*gW~KTV z3@XP|DTbr?A;yC5oqeLoLy$=U@Q2<6>S@3;fEYk30R3>Q>uq#~H5z1Cv%S92B49^} zXhZC##<&A(8XMNy>{hqhVQa98$I!sPL0U@(J~bOiSkzobX}^>1dp9@cLu3W6w=`KC z4$-rYrMKSAG!2@%5sa4<{l`h;Zo*KF_la0fNmt)UQ;xGvOV9rCjyP^cc>jXY74v3G zJsr6{FU7x?Qg}V9HfV*oedFed+c(7uNgLif5HV`Z{wE%ndlOkPbIBSbD@}hF*)LMR zO#aH)U&R8^u5I3C7Hl;RdOW7e79)#}nghWqzz)2kQ5r z-jP|BjB;dCrz7PyF%JlPT~BHasUpTP`+M=eP=soF4_RA0{Ys>&VNEbK-n63Sqommi|- z&tOd{H&+w8AlpZK_2gSJN2=zcyl4zlj!5`gFy3S}AISM8mNnSC)SJ}%PdO}`DMu~5 zzO-R@N^+pX(h=RH?bSDw$i}oySJE z@+ajK=`Buak5CTDhPb&qQ<(#A`0AhQMdz>Lzag>%Gb~&ZwkKQ;kt7E z&Q~K}&B|&?_LCzLS$lzag-WGLVMpB|9;;l_C|FH?Zq_8iTq>TwO*w${nAcfy)>u{= z3iC?JFVUBHmG4l4F?{n$>pI7geDx;26iAsN5aVNT2D)>REZ}>zwZpFckeOPN%;MVe z-FLDZ?r?csA+sQDQlu@;k)&rsI#-cSEgVUD4y4C&Y2Nb!ki+!6Of!B^xM&37l8|{Q zzIZ@G?kQ#g!w*drG)f0FjFU#JV?H#>1~n#+sIdSVQwBArji|8@8Wn>Yl_P1?FM`Gl zu7P#L1No^w0b~SL3=cyFPa_Y3*9-BdKn;l>lfX*^><2s!H~@G;ezKH}oBcWz&jB*P zMG!XRXjIv+9!5qN;3yyj@Ejl-kSWJbWV!YiKz|SD0UQTVkA`07h<4P+1IzD_8wG&B z7wP$+BQOA*GX=5RHd;-Sm4}SSWkKMWmEcV7naE~D`~>N-fN_9-$?8dLN$XtD-=Z2G zTfTzitAO7Cco$vOUv3GM4an(4oE|NrC8x*}W>~l(SjNt!z-cod*R zEdv|D=1AhXo_8Imd$ku*TrW|C*WQ1(DNLC*9?Buw6T_g@2mSK^K7rxjMfj<-Dlrmd zl>GP2Y*X<}(7llQ3pBq3@TvM5yiW;C8j<@v?(PyH{+0ar7WV3BPE(qOfsovsA8jVD z_zs64%>QZ%ZM07lE?XN3ZV|&!Aq#+aV4$ zq~S2(#r_ABt1|ANd8?D5tTbJ|cN^O;|9kr|<{$GUmpUnyd0;zYnc+PnmyT~C>DoKF z^st_huYpc^q7%W6Jgi&fqWfe+izhBxZ5-Aoa`DIHf3_gVl#}mbB~!VrpWtKb{V`sM zkd!O>BcN_*g_X-HZtRD6hNqxs0&q+HG^l3)nE-Cp^q{bV6IWvF?*POj83$N}qyf}O z=Dn3l<1lt|{Zh$!GfwI7ZC-dI-51PRn8gOpFV8zLRq5fLb zz->N18W`T3Z-wxnp?M3%aHDb~!!9;MV+&w2;9t8Pnm@#IG2l>_(+$p-ZpfQJ&JKy4>*2hF4ly^RiA zqur-Pcgl?t%ZRc=3ekWmUUBFT$?3SS-XR(ncc9(6#oV~I zPK1Yd2h+<|4K|0l!LrdE;-L|%i`(V9A7QCkyCIZdYuMOGuX)i~m%RxTKOCdCsciM) zOH}6BQ-64b?e`mpOOAmL`i5uiTZc}il2wj@j20#^!OzB8{G>GjInu`&!P3c$Txn-O zuw)9zmF+88ko5MEJZa6*VCm6-+{VD?JjJ#II{n39r@x@xFo8N1;PiL;2|*Y>r&`oI z)gFEXQNbI=kc37EAqh1k>;X=-mv#n-Hm63cbq07e);cvFYE_U*y8Gy4eSo)4LH8VW z5T6z;a&k1+$q905sq9eRk|3hOKsmytZQY}!@!c`B2U0oxo?#EOI=ys!bM(}3AxMZ2 zB84a+T8I(!f?9|b;)Hm?AS4Khf>9VHBnipS!LHD!CD<7#&Ts~LS~%4iDDQcgj;6%1 z&fvOesbWmDbf>mRALwnTw|%4+EPeAuOoWgkqTSnyV7 z30d8v2bvJ>DDajjj1k6ko4h&Ba5L;7|4@svsYMZvVlT%T=8O<>gj^v{$nPHe91I6oY})4~~;&Xy=) zoHKI2N+@tf5sp6);0zNA`9zitNQVhULa|UHOz19sEWJs#SlYxr=qi3NtXITUnDIjZ|ezoKx?d8@D}_GWE_F%C1B1B=*Xmp1oiRcdAJ7;l%>bvO9Tna|qS=b)d}0V$-X*|PyFOBrh44z%MM%Hsjvitw zD)DUB%=F3#k>1uhe0UBxHU1I&x^MGJbT9MH!3|_HePyNB^P&yQZ&cFHa(|}Vx_qGC z+r2BY#o#muD}2VPvL%5y)z@(J#94U_Cy_XJT*EOEXVo>FQN&s8%V}*%awZ6s8)neV z7CIB1M)*umI>%Av86Oqpc=EQ>8Wzmk=?SJO@tXH!A4%h|k|}mIJxa;+mm;hYEJCYA zusHQZ4EvAPO6oQ1B9+#~4Bpf%VQqJfk3sPl{ha=IY8(p&8lT`DV;`Pg;Zc0%!yI)T z!9*|5nd~E(}dTj0)9x70J5k1kVz;Qa`ma!JVWtfW`L=qNd*HSLry9yt1dnI=UVIXj zz+b%PR~Fv0(&Kaw`{IYY29o{1pgq)s%8N)Jk`?c|smt-)-0Bd0vadWuC1!kU~D@4z5|>Y~NtUi=-w!-~Kj7O5a4qwDQd^?~m(n z|2_Tp65i+O9^Hn#K%2zl%?KOmPU$e+MZchk@|$SdR6noe-AAG?Q66Fux>~-UL{IcT zkV4l{K78Wg1{)VsUVa=l4a!~g&ogh444>mSjaRG^P-bsy=!m%nL19Xsy(695vR*OZHz;nXp=o_VC#lZ)tj zpc)0^){y7ZjlwZHX=$gT#0glOHe~Z%)CN#6q{>a52#OzMHGz7RA|Bdg5q!b--6f## zD1U(o^SMLpz=N^}uooZ!9szs}xlaN7faWt$UjaS``~~m@;7h3gKK z1I$MNj}kObqt}wgw7U3ep@rb>A`QmT{H^s(Thj&)os@IqJmuYieJJ5Ez<$8v0PNb_ z!OL*VK2sDMMKJ~3fxVyj4U$g*On|2W{LG;B5Rq;z*%i^^AU*7xe9kBiBiRKw0yql5 zjQPCd#833_Y$zuT{L~=f$zY39?-*g_{Txw(H#0Cfed9^`730d;(#gP z7rfV6Rd+DGRzurFm?yW^Y8RB-;?vN18So0=RlsimydSTFYW*$nHNYEyHvxYD%mrKq zyhY#+@%{<|TVbpKcbLtNn^y0SN!;O{t5+{$a80;F6;W~tHCDUB9p;gwv>puQeW|xm z*I9z540^S8^uX&31(RaudETo%NBxfuCW+5z6Vj%-99!77=;P3sj@#N7was=#C&*=c z%H*kgrXHMfA$okUim!_cL2VV|K6Hv2wS0hq?3i z3!zzUvpxxo?$mXKoR2SbjWV?db_Dfl6Fvz{>`f^;9dbUU(iM_?u>5?;SXcg}_SwBL z+2?gRALmc!WS=hQlR(`beP{8(s`H6sduE@+UH%4OTH90rY~;HrMQB=xPp`EJ=PQ1r|T}n&269KO3!Pb-BH!2 zOL3*=c&P8Rs-RJqv>AQcjE_R2cP#tHp9LkmVn^}s&qL#PtaRyOT{^u>7tM(%myZ4$ zTvUcG&816n>0(^EM3-(9F5ML2+_$4+!h){^ssh5lDN<>}Iz zn)Sl`BlEi#y7bAH^jUrStjoH%&hSg|xqb1um*NZi;tPA0UC@<(>+csE+#Y;Iqlz+K zip=PX%s9Bb%YGqpa@#ytWTL|9QTIk>T!<`gn|DasqzZQ;k^hO4TifP!{^S9EO0radKl%Q_dg zYhBvd&M|%3wDvISMQE5y7v8~k%)0jL!37;Pd<>Pm`HOmQS$uZZuF6M3E*i)7`1e#C z*IY18IFoTPV)jMdoZj1MI($o^A@@xp<+o$@^}jO5bVVInu9SH`v!qX#+FQQZBl_UN zj;5cJt_8RBE?#nW`CxOV9}m1>EIm_nF=Ea|-Q3>l)>S@QS8`$_gWChHj8g>#w=dqI zX=g5NkV0J6#&oPW7;tb?SHYp?F3ShnaaShOfPF{5Pl+CVDJs7&D*sYcaUcFqI~_=H zDQaF{)V#}KksaAP8!yMibq04A^ys_GFUFK!*2i}ybXW9bbXQ$$)t6q5F?41;v#IO0 zXPg&fiZ1IDI*Ynlm(U$@QD4OKq^c{Ss^}{Attv2D(^hpQN)?^d+0Yl2dp@e5hqYC? z^eG49`t+vr`uwiNZL}^^4vy;6k3Fw1>M5XPZ0f=MzSx5Eu_Zl=+ZMT^M)~Ttx~QzX z`l9pCM;G>_w$1-IFsftmJ*}M!yUcyY@-yswV#Ve7QJr`7B%K-CSFpG*`PSZLEBcaF z^sc<)Lj0=s(94FTgW)|>&MfLHT+)}al;*cDd1dda)fWur9bq5G8`?u%h6Gwa!K$Em zmp0h@Kh{gM4zNZbuH?jrYT9Pf^AQl)Vd$KBuz=odEbdC}nec(S>>G{Bkhw$Gm3~

BRv7kt|F5(IqoX8)W5Wu~ut}x!7t#V}t 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 diff --git a/app/__pycache__/helper.cpython-312.pyc b/app/__pycache__/helper.cpython-312.pyc index f224d6b6a621d80f104ef7a23950debc6c535a5c..b1ae25293b05a5dc10e0769172983f5f8fe8b7ab 100644 GIT binary patch delta 4135 zcmbtXdrVvB6~CV!*T%+g^M=)V8Ycw8D4m+5Rag=z%R)lgGL079Ira^?i67+iB?V?` zmZS-3*#f$mKx(sjYAYb5fz<7iPMXwc`=e5&ErdwDzO+&{Rg?NpMIKY7y|i<#F*prm z({{~0-}%0C&hI?F$Nl(a!-W^EA6qOY2A=mD6T&~%jaZAxmsh=4$+v^Wrw`?NG{l6Nb|$>3eG_4zUl!UNu4=CWz8vhf^b%i1>K?hTA(N@U z=-wdY$4vg411V zo&l&1aSBtJ%?Miob{AIZx|P9ixaT`5|(=`64c z3+3nziF6RhRn&9Hp{~Mq@iZ)mbXfX((MFFtW5u1k$Q|*Efg?hslgr4tKs3nHi&8_e z4CUKeP?D-E*-gkT1{S)Y4l~eOWHS!0* zOn^w90A?JR`5|Qz4bo?FEny5z#-Y6g$Y(({q2j#<;}hw#s#6e6$kX#f>C>JS^g(^e zFStve^*ri46R9$d&N4xbdk_(j!40&jj3Wp%ojBvk49g#^?9Qu9dOhhuk9U3u+8p1I zMg18%lc%wnmal#-6P%4}m{$6vd(h{N<|$(ty>3vWiHQhW#O-kH^Iu6Z{d*PyL6404MT2BAo!8pTirg0y4ndwKDm3 z+2$HFKQJ-*wn6c=rw4Z5G271XIJaX=Hx`^TuT%R2dns=F0KAKjWGb(0d=WYjgG+4` zoe()3&5b2LKzYB&bDelt(J9cHgg1r<_yF^{&h%G?=vi7X^^`vgr^mJOUnKT|i0(tO z!YPPnR-db_?Yj*@f0xM9YK{{kg2-_*Xz&9h7^F{6e}udr$sr`_VTZBPAP_aehmJKE zoJN5~x?SPetzu~C2GsWg@e#!+3Squ48sP(rTMmX9CJ$cx$lTwmS2r!mY}z@WvYSh6sg)Wd%r%e4eF1&LC*s zB0nQ-40y{|z3q$ZS3!iC`~Twz{O33%l0W)H2CC( z{KM6794bx^6y!u)-_MGUj4i{gRFdoh*v)j*0=_YugV%W3nU#qvFPWtYF38dCXNT%^ zOcv#Ttb|L=pgLQL3S)4&7VarFlTU6fysOosKt*bTTI^BLZWs%io!NRUw<}eq5Ap-Q z%bp9T43BzFtn3-TvBfQl{;k*5HrnBi6?auE*r z7~Ce02r=#@oW`d6>|_jABTkyRDL!{5~v>V-Nk1O5TDehY8R4X5}3lQtL1wxU7XokV`o`Tghik2NI^&gEAP?2(-n zqctNn$&GVP-@sluE1k<lkrBIf zmT`RZKBIA%2K5UpV{`wvK670r9`+f&Wmq?g`t zeRGbr_ZX7bLIxY;g3{4M$4E!=_;ANuf$wtj_1fE2&&(D)^NG80*4_9~?M-*%oO|E7 zJqubixbwI)9v8-9VQ`_yPS=9w-C$kd%+MGEwy9V}WZdKKp8_`MFFtj)IRmCA9 zJc)c0l4c|$NYsCX-bN0un(C!b-ScLT_CdamY#J_mz(Dhrn<2i>m^Js=orJhmn12K8 Ckm!E^ delta 993 zcmZvbOHUI~6oBXUF`>|oLV>=NHlaYK7Gt3jYtT% z6LWM05s4(m5Es~m|GoejENGAUFbcxafOrg>zVVu_ndh+yxc9lvDvBx z_GHJis_b|mImzqwwsqn*2)#nmIV&XXinwM(4?(!(FA~{RavOdah+LA)ON4Zm*2F4f zyUeUKfDjpUQ#O+->gF6(Ga5aBYKg1!@dxF%%(GbDVooYtaV!3QKm5yiPV+y5bm^yD_ z@cDexl&2Vi8C#Tvzqg$v5%5Zl{y~g2QsstjqDnqT&utGHh9Rk&1uaT}nkX~VA;d7e zl^PnkJ7MofDh2w`)CXnBFNV2TYT40mByEtbnv)W)njNmG7+6fE2O zNe67$J!GL|t{)`q;1?TSkf4G|t|G=5dgwJ2Rfdgv2H8Y0550~Uhma%6YRowH$djlj zB5ophS5qk6Lfl5&Ma;klM{{6~iMq&+Ur1?m9`!uyJ(SQ_7jp_ts~Wuz&CXWV=YX?` zEP?9$$l5&W8X;s3p14C~KfH6xjY}97#4yW=$%K;A)NF=ML9M5?r5#OJjTg{~@^3so zetY_^cutK$#OWfdFyVO#Uz<9}W!UX?1^ISZ6I6+7N^Gp4rjqm-%kzl+^0>6q!WUEZ zra;Uh4MV8L1ykM@cGD}~$4vuR?-b%c3&D5l4sZE9y5P`cGmW8q1rbN^sgI(RV90Nq zH&ZU6!N%}wR@gEa&4KR%LnWU~{mf9gah!~99LI??j&-1RvJ| zO1!aEl<>6AEB*1i`dxK6olO=}N*8^_OxRMsEWn@Ow|XNHe_Bl>u;AGg*dOoVFT7If A#{d8T diff --git a/app/__pycache__/helper_excel.cpython-312.pyc b/app/__pycache__/helper_excel.cpython-312.pyc index 0242cd04169a7c5f03254e7de09dd98dae0f823e..4fba8e1d36abc1ed74d51d394c8471f7c3f9c6a9 100644 GIT binary patch delta 3934 zcmZuzeQX>@72mzRJKu-Tcm6y(aqLabm-8jD6Fau!p3|gm95?<-(%7`|wasz4*|XQ# zy*t{sB@WAuwqKC@6^c zX3uAz(^=^^GryVl_RV{5KE9v-^XpX~1_C|~%Co}-xi)dVsNA)JXsxRqN{YgLLDwIk! zkPN6*$tpFN3^LB6gw*O}HP6W$@sfhiu!dnR!#alb3>z4R z88$L(Vz`ZLH+lF`GuC7W!xqvCZIR*50;_g0jF2`Mh%(&GFvhT*VVvO}hI<+AW7xs4 zlk7M7cX+ZNz5`!(yu&AJ9Gny&U8MWg!JFV?EXi8nsz?ufy|?;q3P2T*t^+zq4guL; znp)4qpD7b>U|gb%3o~w@jB8}v;WDm?anF`<+Z>Q<*{NehE%^)*NYRKZhZs&m#;W zV6c{4k$sU!gl3^V6?fPsuvD4>#&Qq!4fhQn-?ZpCpyRD{0!RJR$H&J{y_`A*6+LbK zy5&e*0e)*#Uq;T5y5b#Ebo&63xcuk7%bg3jV?x#kU7(e0GMw2fCYAF{Ap zykbZGvoK)ssvU6jqMhLe(m^6;vl5kZM(Sc3c7)}T4M{aWYK`=>6huSxY5;L-q0Hfx z#r$Bx^lLEj?bQMC4kX6ve|LV4@5WT1%r$Phgzb%-z6M=O&?vEl%q%TNpI$d_N4kQj z+n$d?zcJS$cR}M%+62D87R8)~bjh$|f_ov(vt{eJlSJDvUz(8hz4~3CKQf<0Ux0Ky zzT52XhdzA-0*4IQP$V7pyQZe#G)~hh7?BUmbKFVDFJb2#bFFTeU zL)>eyl*@vbTjpulK+UYoxz}5qdCTJuFAM8;^JQnQtu)X4rYBt37@Nb(XGT8E(z1z0v{LB-+~4E&@;!h+(n5RVp`MR1w#_G^K(+h==3p(saaVUv-7zO9-krzNxG=cD~6m`Br&6@DzGRoW;Lp& z4Sk;|=Q7GXLFFTpr^Nog16|^RY|M%pWeTya%^RW$;goeLqvZ$)rE^5gD`~lq6Jyg* zIwmGMhK6FD;z(9BW~Fs=GwEDTGsN?fm`_t(BKw$1*$}B@%+s7Mp44(u(el%2npP!4 zqI!bO>ewi(U-Uo%bu$7TRG5OFvGr^?2uwt$71f@x|5UD%$!~HadXX|?N}2~ZySe0L zQO<%FQNND<)eG~Pj3l8)G*~uW01s_m)8u?UuTeuH>+UW$W6KIVHv4kw#EHbjL}GHX zQ`hxmOcdM8!(+#zUHzFl*Ljmzcr+vqM;~fOWP_YWfk)XJ!cCP;@+kD=yXR^ z?TC`8=!ryhA`zYJjAoNdHBZsWrG}?Cm>OMLs(p$FvhFDoCNEW&u?76y#!PXO1sgL< zERDjRI~jLd0%VKj!j#EVJS;2^wBf}8kCJxi(w_muU6$KUDl34S08c~qHnl3T1#cPH zKm|j$gsf^Xv8~5$Z7~y5peAK#Oac8Xs2+oZN`C_yE8L?4Tvhd34cA_|A85H7Xt@^< zSB4+DeRb}Y@wG-S)clb1xazM6YmN$U{U3tOe+;+Y54Yb9w|}qUcI~}z?@QO6f7wFa z4=3)16ZgW0-*W!GHhgt#EdUzU>bT0#e;!qEp=}R29#mD@@ojts^eAH=+a z2VEa@^MK~|o{o;V?HY%yQFe93&@=dQfhXD=+;m#!tYPFS9-DBj<$LP<>~`>A-)nxk zr@p|hQ$P0cMPpTIc`27)yrgt)JYK9|MxzwYFW62gB4-Ty#XE*ViwO9vqE`?;k8ld% zG{P4Ut|Igx5QGJU6$E^coU$Jh_y}NkGP_qP-hcKjgQ0krqj<%zyXUdzu&R-HMLI(N m0UX{Y`Y+%p22b()pST^XbG`37LZ3AC@%tZ*JG%G~6a7CETfp`J delta 2524 zcmZ9NS!`5Q7{~9KrJbd-v~&f!(CIcUw6uj%TDG#3mX?BAKrV)Hm~%^~-rH%;y@j?I zCq@*M2P4Pj#TTO_A{fz$zNk^(H1eP^(RekIsEKK!Q4{fj1mpL8w=FHxwAC6*D(i4}acWbmOi*z&c+N?ry1YGMs>9kDjc zV=z%itS2@Q8;MQCII)@7LR?SWz*{A|!gwqEwY}=P!qh^Sq80Fsy#0E|HF#J2sYRfL zcqjaAy1x0EdqG_VYM6KN?568mmX;RN_U;wiOGw+gLMtV$XN6WqTJH+2oV0B#vJdaA-W7Xi%s0i##lw#Q7*X`&qUGC36KX9ex6E~ zFKcRxb0>=ab7eQfcpejJRO|$b?Knn<&!c}uDPqZ3oAu2zQ0}mvc(K@za|MV2#314T z;t*mO5kwqDJb*xpZMUvXiidCrw!0PKmp_#BHmE3^Ksa+KDltX>(#47R}_|FFnUtr))33o85uCmhL3dFpTFfGk?iw z+b1-h7|Tprg4_@^G;vx>q%>VO<352V+a55k-41fiOo{ZAmCj5GI=>7jea37emC-YT zmUY;4fPA~6q>{`n)MntU#PYpQz_!csR>gCyGdHpNZ+Cbro|88VpM*!~mFcRcljt(B z3$Yu4&YJVa*2iKo!J$7IcR40dENP(Fd3(G1yZZMnyYx87@oF)Iv%%y0hKCOwOYDJ0 zjL1K$cEl$@zu&7zP&DB119QQ9do&0Tkr>(SZIw6B`8!x0c zB)8j4cRYU*CTwOn4#!t?LR_F6;pwq4O=y!=;!F}!!uF*t&A40>>!t`qJIq2r&HXzth7*6TbF=Ou+~%>g8Ow1Arb3+2txZg%8pp6elJmt}eFNlMva(@6 zM61>yJ1`T(7Q|A>#ytYrt>CumwpVI?St#k(-`hrHc1 z1Xu5izs`zKfTET>qX9MTG2xN_HrMyu0NJtg9b5nzW=>@$P0jSekjz{-Jf&w$ZQ<|_ zVeYm((()u6{$0!G-Yo{6f;Nsq<&9ctOV>v0KY5R{4uc=Al^xMfWV56XCRJDi!)CZ}d+^j7+` zV>P-?_;5P1G;Lb5a9JnGux?Z0E!%!C$Fg=Ll@UTqVO2`-bjorn^C0dzi@@|3&mf*g z97K#DE+8%S#SZyjpr7a=t}3Ease=LL#vR`_Bg3b4ZHM?3 eh8Xwer%<*2ax=zq<-H%c0{>KWu{PMEDE|Y=F;)8j diff --git a/app/__pycache__/serializers.cpython-312.pyc b/app/__pycache__/serializers.cpython-312.pyc index 99fd1f854b4defc654dcc4cc2e695fa37d4f5b4b..d10259107fa6f81c0810dba6a22358dda896c535 100644 GIT binary patch delta 3682 zcmeHKYfu~472dmgfDjJ3P1-unG>(~e+Iz0d z!xSfVe|Jaw>Fhn{+;h&o=iEK}=>+@QH`vTyW@Mx>Q6cLX6Cgj!!$~0hrLG! zrt!N~1!y|<=c-9f>F-=3aUfe^!# zA?csMc>#b0_!Qs{z-It=0TyCYJ9w1$H=u6;d<<|KK#SF8XVwCcIx?S>0+5DFTFUgP zKpI~@wjma7c}}aJ2bp>N*=`$}$6k{K_f|OZ_?|1sipyJf>&+l-#>ZPXAv2z8jp_dc z@_)pSY!*-nKH28bb0ERtpSE#`BNE&3g?s~^Z_UPA_x3DG_Y!6){_);zdLE>Ce0ML0 zcq-l1{yN%(@3cEMZUh!UFS$eM#LgM!4$JDc+-3+!)nIrd!d{!1`uN?)-awmihugfR z02Hf$O=W6;Du*!u9}tBAlvz%V{>J?SRE1xB+_9k&H~;~1uP|BzMr)Efl~hOA7eiaI zy3b*$1sw`N^e!2$rE-HE7&-AjIviFzumMKzm$O3D)iYc*#y5&k&H{DsVg z$L;H5XAX2~i|O{!-KTl5ItB3Er?#23L@kjO4u-t}PoGx`d5-%J4~8W@c6T|FTW!E! z>#9da{B~D|J{^o?V6MB^xgE$IplzUfK5y8YNbP%e%mb9PI(0xg4X4^Ml*6ze32ew3UJ3_XjJ{LM+4ob7b^@ zAi#WbM;3;1SWnWa(Iao%%ex@q7mx&7&O1-wOWNpCY9v?a!5Ik4c@Dr$pe#dzWR!LS z=m8!Dpi$8!Gr;3+0J@Dvpy+}w2igu}$o<1(7g*y_paIP6Qck@WGN7Zh$}HilX<@>A z9Nd@itz5w>fdYUV#+J)cqDe^4jGkwIghp}pNa>nq#t2LR@B~b-d}fRgi!S_~k(bcP zSlw|OLgVMJf zeOjLmztm8OXHFPWbP=6Y6w%?goVhIdQws75^xtM9nuxZMSRB^*nMFFn4&~wTLpgZ7 zH?J$A^)pwAH*j4ge!_*A2pY;y(kqcTn6fr!mB;2~kF9GftQ~_sq9-xvlQHON45?on zL-YYLum_lFgFBHK2=;r!{@}2u-`hVpkT5(W1xNhD{R1B9*Ce_XZ)24_CUpJeUG0$) zgeG~te7=~1lK-%O*t4iD!2(H51fr4)NE2B-iN5of-|z6cPZ;lM!o;*6C`(yUyMF-P z38I@YQ2#tf2F4PmMJt}9Zo){tNzDw@zl@AWY`9mrnQ20Qc zAD%Sb%!%@IqD>X+6|sJHk@#4rsm`BtPdRVoZn>4lRM!HnG~;)l#8Y zDz3E7NO4R3uhJWchv!`ru32mGl;*POl1VPElFijCyyN(bfmZ`6SFLc>GofqIH={CF z9p`qdT(n)`+JEt+{6u%0`?AU%RJen2u5Z$KGl!cKDlfY(xn`4p5AT#I_iQ?C4f^lZ z4A}~XSyk7hr2b#n_Z?3ETVWr1aA8a5NQ&QApSiw)P}o15tn|h5SuWDgsZm@V%`bvJ zeeJrG&LixLR%EZLI?|%!i_zxjBuRwOz<*b8!VRNvuizS$(neX>CYzg9q_p^mD%us% zu8K{H*z~g&b!U&Vvqu)2;^Nb)*r$kna{r(_6pV|{sN#qsj>N_2sGL=LGe?{g8&uJy zh_2a1;^C7U&V=F{#$sA?YDt|^QYRO0mCd#lE(+r1#!HQ=U{eI!^%k`;x=(4`CkwW? z(4h*QiqI)P)g$-z#|57%3@O4;TnNZnB{y?~IiXe+?22HYT_hgf!KLbRllG^A?3lC} zPvsc!_n)_If+J9R0btelz-br*I1D@0gww|zS;e}%Pnr?IWSf6Fc3_-Co%Dmq4C3_5 zhJLVYgvW9K`n^DVf7;#C#+UYewBe#X3++Q_FYyy_j@!O}0(k_x2$d3t~iv9Ie Yh+V%2p}Z>%YQ-+4V%Ogpc%q*C8!Q#ccmMzZ delta 2540 zcmcJRdrVVT9LIZZOV9HyWEU%Qe{3<+xrg(?G|RH{JC%pb%)i#q55Jz@ z_ndQozw!6S zS%7M!7>afY#1_IZm2HQKAFxe9-l z*vVCJhQ~ouiUUSUPm&l|RaT-kquLC;Wh;ppPL%nyKcfBzNKZ{7@i0)HqZLpgz~|)& zM4*awaMYrQYh_XJWJTkQx`{fMz^4^?S`pPE+^a|+B2(8_9wW&xU752y30;UL`t^j; zd3LL&IWA=NA1Vqd6DLk0;IzlGXMFG3)5Hq3Rk5pMv110hnI;RZ71)MoMI#QuoGaL* z-&UO=tKqfkoa7YrAUf%H-lSPLX;!dL3hR?p<0Dz1)a1lvU>^oFnr0`?V7m5NAa?kx zHix&N8`1Z$&W1s_;Ouh;$Tf&8i#4sK{t?t%r(?lLc8qU#-6o9~Ts|D0)xp9NfP2s9 z#S+>r5aD%uot@1sPRY~U>)P7xmDEsGpA%eaExca;6w$#~^|e|(PGW$B2GNm+=F`|) z&-%4Gz0QEHW&4h1w4{ZlgX$OP0MYzh`6X?jzg!=B?YkzxvpuH^O6$pEd`vm z4!w0Cx31ypf=ldf+sADpAScF{u&8gKU^aaFO9~-*5Y}#qSci_e2#dkiUcd+AT;Rc< z)3CoiFRGrJR>SlFm^(8(bjEymr{^Gf)o1Iq6EXCn=~qiD z`#D(RSj6?K;k;uJe6hv?jTvTG>WJq0HLNMhW`XgHD5$Y%>kX0xm*r_hK1CqhExES3 zx|&~++&!+YEp5`=wPbwY+Cp!q1vis5WL|lFPsf2917bu7H4^b7v6FTL;s*z6`v5+Z#slu<4`Be&^Df5}*9wob6&Mu$eGyQyp!q>`tt)H(O3!k#^hdU2;Di*73 zv7Ypt89FsIVX^ux`HE$|Y+3KOl#CfK8TrZ3$o-XjD<{P?Ma+`LtXbn`h?)<(tx}u9 zZ|Y)Ip)oT;Vfpd=Bl(lTe^8Z``afqo?BQ&~<(+Ykx%5V~wt2j+E~nS!?rMH~j-g^# z%EAoqgt1+PLqoKPJRi(Uv$#SL(`7MT5$&>QKUbvWZjf^~Oo(>BxKR-|%i?Cg_`-y4 z@suDQ&pnc>2x+pAHeRIIN@ZK=gplSJ$`qkm7OMS1?SwA&l2M$=ptwd6vt==Ra>k&k zPM*!RDs=ITP)JdPbXiEBoH1y+E$~)!G}MgRSB~HY*@;+iIS*qSVk^d!2Oo~+golNg zZzWO$uiRnZ-O&WHiM^b#R}l7=!CoGcuruE5?Ai|A!|bMImk>LH+2O~|4|XQ7ef=5D r9NVqZFm&vRHyoxT&_9)D*mrP`hchoH=96oclwvuh_>PMHV9)Un={}MM diff --git a/app/__pycache__/urls.cpython-312.pyc b/app/__pycache__/urls.cpython-312.pyc index 48d8983e752ea60d32370ff90591e552d587eb8a..667d64321a9d5e90cdcaa34ebe9d1c4d0b63f0f1 100644 GIT binary patch delta 2570 zcma*nUrZxK90%~7-D$gRDJ^YbDdpeN<8LV~{|>m5lm8rWho_!*UhyPA=MG4VwM9LM z9(uVLG=_j_d~AlTrLMkKH~7o+_xL90GQpVeJY&t#65sZa0yGYAmxpFQ@*$_<&XQB zS(AmSqIeOT+mai1uf|f*cr+D@#{kE32yW4SR*P)-zTJ-p#2|U^@8M}NJW{;H>*+QC`RCvh4JcrcFe))fBMKTMg1q== z@k({6!CR5fAZ@4&U$lo#mm9nTRT!ibRT`v=B$Ver!(ZAXLKQjwPL3gR^g1HK33BXn zgh4f4aI~+~7%F>FtwH)wok99hy+H<0gFyz7-ylOMY>;8pxMHBQC}NNi)MSuR6g9{g z@)+bCianC}#ijH0Wy6ic+1VzW|pTna? zx4JX=WX~PPR65->i;`)S$+!t*Jaj0ar=0Xub|y2IUd(2^RP0nv0cjAG7WTX zcza3uT9{6dIUwKc%QlYF1OULVT=gy&+vTeEc^=6792x$m!@iXR=fO|hxm~VppBF(N z*ysLle8|r3`M1}C)o`WG&Hn<$Rqs2O*DrlIu`!{#WEECv0`cFVsMuvC)TzQQ%|c+$ z%317+y<~G-g<;J`MPw4(oK#^%vr};pSuNXis4%2CDdbV8*lbi`t>&VT&uXfb+8!0I z^lENu9%hG|6;SdrI@rud#m}T%sccbUt5!&{t&CbZvlgW-uEGhef>I@;TBUwKg@c+*sftlViC$3Q(^{ww?^TwA zI_#0@7-i$QTuyK6UL#vtp~!72Y}X=`niw@GjiV|Y)1s7OjGC3!=T&$`Yo^q~s6**W zs1Rwbl-iCIwo^Ju=yVpxCElr*i6=3a@MZ3Pj5|niaBt}7(qXprtd56!k1!n7@!%O6 NqxP0FGfkfT{{VW>2SWe= delta 2402 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 E0O3ovUH||9 delta 38742 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 mLEl8->YJ6;F{ 0: - poultry_data = {} + # if int(request.data['GoodSum']) > 0: + poultry_data = {} - same_keys = [ - 'UnitName', 'SystemCode', 'EpidemiologicCode', 'LocationNameProvince', - 'LocationNameCity', 'RegDate', 'RegDateShamsi', 'RegDateShamsiWithTime', - 'RegDateShamsiOnlyTime', 'StringId', 'ModalCss', 'GridContainerParametersModel', - 'MenuUserAccess', 'LogTableName', 'LogTableAlias', 'PageTitle', - 'PartIdCode', 'UnitTypeName' - ] + same_keys = [ + 'UnitName', 'SystemCode', 'EpidemiologicCode', 'LocationNameProvince', + 'LocationNameCity', 'RegDate', 'RegDateShamsi', 'RegDateShamsiWithTime', + 'RegDateShamsiOnlyTime', 'StringId', 'ModalCss', 'GridContainerParametersModel', + 'MenuUserAccess', 'LogTableName', 'LogTableAlias', 'PageTitle', + 'PartIdCode', 'UnitTypeName' + ] - for key in same_keys: - if key in request.data and request.data[key] is not None: - poultry_data[key] = request.data[key] + for key in same_keys: + if key in request.data and request.data[key] is not None: + poultry_data[key] = request.data[key] - bool_keys = ['IsPersisted', 'AllowInsert', 'AllowUpdate', 'UnitIsActive'] - for key in bool_keys: - if key in request.data: - poultry_data[key] = bool(request.data[key]) + bool_keys = ['IsPersisted', 'AllowInsert', 'AllowUpdate', 'UnitIsActive'] + for key in bool_keys: + if key in request.data: + poultry_data[key] = bool(request.data[key]) - if 'MenuUserAccessId' in request.data: - try: - poultry_data['MenuUserAccessId'] = int(request.data['MenuUserAccessId']) - except (ValueError, TypeError): - poultry_data['MenuUserAccessId'] = -1 + if 'MenuUserAccessId' in request.data: + try: + poultry_data['MenuUserAccessId'] = int(request.data['MenuUserAccessId']) + except (ValueError, TypeError): + poultry_data['MenuUserAccessId'] = -1 - if 'UnitPostalCode' in request.data: - poultry_data['PostalCode'] = request.data['UnitPostalCode'] + if 'UnitPostalCode' in request.data: + poultry_data['PostalCode'] = request.data['UnitPostalCode'] - if 'ProvinceName' in request.data: - poultry_data['Province'] = request.data['ProvinceName'] + if 'ProvinceName' in request.data: + poultry_data['Province'] = request.data['ProvinceName'] - if 'CityName' in request.data: - poultry_data['City'] = request.data['CityName'] + if 'CityName' in request.data: + poultry_data['City'] = request.data['CityName'] - if 'PersonFullName' in request.data and 'UserName' not in poultry_data: - poultry_data['UserName'] = request.data['PersonFullName'] - - system_code = request.data.get('SystemCode') - if system_code: - poultry = Poultry.objects.filter(SystemCode=system_code).first() - - if not poultry: - try: - poultry = Poultry.objects.create(**poultry_data) - poultry.save() - except Exception as e: - print(f"Error creating poultry: {e}") - else: - update_fields = [] - for key, value in poultry_data.items(): - setattr(poultry, key, value) - poultry.save() - - # if update_fields: - # try: - # poultry.save(update_fields=update_fields) - # except : - # pass + if 'PersonFullName' in request.data and 'UserName' not in poultry_data: + poultry_data['UserName'] = request.data['PersonFullName'] + system_code = request.data.get('SystemCode') + if system_code: poultry = Poultry.objects.filter(SystemCode=system_code).first() - bars = request.data.get('Transports', []) - if 'Transports' in request.data: - request.data.pop('Transports') - evacuation_details = request.data.get('EvacuationDetail', []) - if 'EvacuationDetail' in request.data: - request.data.pop('EvacuationDetail') - - hatching = Hatching.objects.filter(RequestCode=request.data['RequestCode']).first() - print({'1': request.data['ProvinceName']}) - if hatching: - for key, value in request.data.items(): - setattr(hatching, key, value) - if hatching.poultry is None: - hatching.poultry=poultry - hatching.save() + if not poultry: + try: + poultry = Poultry.objects.create(**poultry_data) + poultry.save() + except Exception as e: + print(f"Error creating poultry: {e}") else: + update_fields = [] + for key, value in poultry_data.items(): + setattr(poultry, key, value) + poultry.save() - hatchings = Hatching.objects.filter(poultry=poultry).order_by('id').last() - period = hatchings.Period + 1 if hatchings else 1 - request.data['Period'] = period - hatching = Hatching.objects.create(**request.data) - hatching.ArchiveDate = hatching.Date + datetime.timedelta(days=76) + # if update_fields: + # try: + # poultry.save(update_fields=update_fields) + # except : + # pass - if poultry: - hatching.poultry = poultry - hatching.save() - allowed_evacuation_fields = { - 'PartIdCode', 'RequestId', 'MoReportId', 'ReportType', 'ReportTypeString', - 'ReportDate', 'ReportDateShamsi', 'MoReason', 'MoDate', 'MoDateShamsi', - 'MoStartDay', 'MoEndDay', 'MoReportSubId', 'ReportStatus', 'GoodCount', - 'Message', 'ErrorCode', 'IsDeleted', 'RegDate', 'RegDateShamsi', - 'RegDateShamsiWithTime', 'RegDateShamsiOnlyTime', 'ExternalId', 'StringId', - 'IsPersisted', 'AllowInsert', 'AllowUpdate', 'ModalCss', - 'GridContainerParametersModel', 'MenuUserAccess', 'MenuUserAccessId', - 'LogTableName', 'LogTableAlias', 'PageTitle' - } + poultry = Poultry.objects.filter(SystemCode=system_code).first() + bars = request.data.get('Transports', []) + if 'Transports' in request.data: + request.data.pop('Transports') + evacuation_details = request.data.get('EvacuationDetail', []) + if 'EvacuationDetail' in request.data: + request.data.pop('EvacuationDetail') - if evacuation_details: - cleaned_payload = [] - external_ids = [] - for evacuation_data in evacuation_details: - clean_data = { - k: v for k, v in evacuation_data.items() - if k in allowed_evacuation_fields or k == 'Id' - } - external_id = clean_data.pop('Id', None) - if external_id is not None: - clean_data['ExternalId'] = external_id - external_ids.append(external_id) - cleaned_payload.append((external_id, clean_data)) - - existing_map = {} - if external_ids: - existing_qs = EvacuationDetail.objects.filter( - ExternalId__in=external_ids, - trash=False - ) - existing_map = {ev.ExternalId: ev for ev in existing_qs} - - bulk_create = [] - for external_id, clean_data in cleaned_payload: - if external_id: - evacuation = existing_map.get(external_id) - if evacuation and 'GoodCount' in clean_data: - evacuation.GoodCount = clean_data['GoodCount'] - evacuation.hatching = hatching - evacuation.save(update_fields=['GoodCount', 'hatching']) - continue - clean_data['hatching'] = hatching - bulk_create.append(EvacuationDetail(**clean_data)) - - if bulk_create: - EvacuationDetail.objects.bulk_create(bulk_create) - - if bars: - for transport_data in bars: - transport = TransportingDetail.objects.filter( - TrackingCode=transport_data['TrackingCode']).first() - if transport: - for key, value in transport_data.items(): - setattr(transport, key, value) - transport.save() - - else: - transport = TransportingDetail.objects.create(**transport_data) - kill_house = KillHouse.objects.filter(PartIdCode=transport.DesPartIdCode, trash=False).first() - transport.hatching = hatching - if kill_house: - transport.Province = kill_house.Province - transport.City = kill_house.City - if hatching.poultry.LocationIdProvince != kill_house.ProvinceId: - transport.Out = True - transport.save() - transport.Age = (transport.Date.date() - transport.hatching.Date.date()).days + 1 - transport.save() - bars = TransportingDetail.objects.filter(trash=False, hatching=hatching) - bars_quantity = bars.filter(TrackingStatusDescription='تایید تخلیه').aggregate(total=Sum('GoodAmount'))[ - 'total'] or 0 - ave_age = int(bars.aggregate(avg_age=Avg('Age'))[ - 'avg_age'] or 0) - hatching.LeftOver = hatching.ChickCountSum - (hatching.Evacuation + bars_quantity) if ( - hatching.ChickCountSum - ( - hatching.Evacuation + bars_quantity)) > 0 else 0 - print({'2': hatching.ProvinceName}) - if hatching.PedigreeName in BREED_STANDARDIZATION: - hatching.PedigreeName = BREED_STANDARDIZATION[hatching.PedigreeName] - hatching.KillingAve = ave_age - hatching.samasat_discharge_percentage = int( - ((hatching.Evacuation + bars_quantity) / hatching.ChickCountSum) * 100) + hatching = Hatching.objects.filter(RequestCode=request.data['RequestCode']).first() + print({'1': request.data['ProvinceName']}) + if hatching: + for key, value in request.data.items(): + setattr(hatching, key, value) + if hatching.poultry is None: + hatching.poultry=poultry hatching.save() + else: - print('تعداد حمل صفر است') + + hatchings = Hatching.objects.filter(poultry=poultry).order_by('id').last() + period = hatchings.Period + 1 if hatchings else 1 + request.data['Period'] = period + hatching = Hatching.objects.create(**request.data) + hatching.ArchiveDate = hatching.Date + datetime.timedelta(days=76) + + if poultry: + hatching.poultry = poultry + hatching.save() + allowed_evacuation_fields = { + 'PartIdCode', 'RequestId', 'MoReportId', 'ReportType', 'ReportTypeString', + 'ReportDate', 'ReportDateShamsi', 'MoReason', 'MoDate', 'MoDateShamsi', + 'MoStartDay', 'MoEndDay', 'MoReportSubId', 'ReportStatus', 'GoodCount', + 'Message', 'ErrorCode', 'IsDeleted', 'RegDate', 'RegDateShamsi', + 'RegDateShamsiWithTime', 'RegDateShamsiOnlyTime', 'ExternalId', 'StringId', + 'IsPersisted', 'AllowInsert', 'AllowUpdate', 'ModalCss', + 'GridContainerParametersModel', 'MenuUserAccess', 'MenuUserAccessId', + 'LogTableName', 'LogTableAlias', 'PageTitle' + } + + if evacuation_details: + cleaned_payload = [] + external_ids = [] + for evacuation_data in evacuation_details: + clean_data = { + k: v for k, v in evacuation_data.items() + if k in allowed_evacuation_fields or k == 'Id' + } + external_id = clean_data.pop('Id', None) + if external_id is not None: + clean_data['ExternalId'] = external_id + external_ids.append(external_id) + cleaned_payload.append((external_id, clean_data)) + + existing_map = {} + if external_ids: + existing_qs = EvacuationDetail.objects.filter( + ExternalId__in=external_ids, + trash=False + ) + existing_map = {ev.ExternalId: ev for ev in existing_qs} + + bulk_create = [] + for external_id, clean_data in cleaned_payload: + if external_id: + evacuation = existing_map.get(external_id) + if evacuation and 'GoodCount' in clean_data: + evacuation.GoodCount = clean_data['GoodCount'] + evacuation.hatching = hatching + evacuation.save(update_fields=['GoodCount', 'hatching']) + continue + clean_data['hatching'] = hatching + bulk_create.append(EvacuationDetail(**clean_data)) + + if bulk_create: + EvacuationDetail.objects.bulk_create(bulk_create) + + if bars: + for transport_data in bars: + transport = TransportingDetail.objects.filter( + TrackingCode=transport_data['TrackingCode']).first() + if transport: + for key, value in transport_data.items(): + setattr(transport, key, value) + transport.save() + + else: + transport = TransportingDetail.objects.create(**transport_data) + kill_house = KillHouse.objects.filter(PartIdCode=transport.DesPartIdCode, trash=False).first() + transport.hatching = hatching + if kill_house: + transport.Province = kill_house.Province + transport.City = kill_house.City + if hatching.poultry.LocationIdProvince != kill_house.ProvinceId: + transport.Out = True + transport.save() + transport.Age = (transport.Date.date() - transport.hatching.Date.date()).days + 1 + transport.save() + bars = TransportingDetail.objects.filter(trash=False, hatching=hatching) + bars_quantity = bars.filter(TrackingStatusDescription='تایید تخلیه').aggregate(total=Sum('GoodAmount'))[ + 'total'] or 0 + ave_age = int(bars.aggregate(avg_age=Avg('Age'))[ + 'avg_age'] or 0) + hatching.LeftOver = hatching.ChickCountSum - (hatching.Evacuation + bars_quantity) if ( + hatching.ChickCountSum - ( + hatching.Evacuation + bars_quantity)) > 0 else 0 + print({'2': hatching.ProvinceName}) + if hatching.PedigreeName in BREED_STANDARDIZATION: + hatching.PedigreeName = BREED_STANDARDIZATION[hatching.PedigreeName] + hatching.KillingAve = ave_age + hatching.samasat_discharge_percentage = int( + ((hatching.Evacuation + bars_quantity) / hatching.ChickCountSum) * 100) + hatching.save() + # else: + # print('تعداد حمل صفر است') return Response({"result": "با موفقیت ثبت شد"}, status=status.HTTP_201_CREATED) def list(self, request, *args, **kwargs):