From 661bb2ba7ab4a3ef4228bf69f6be79b5ba8422a9 Mon Sep 17 00:00:00 2001 From: Xuan Loi Date: Tue, 6 Jan 2026 09:56:57 +0700 Subject: [PATCH] changes --- api/__pycache__/settings.cpython-312.pyc | Bin 3432 -> 3432 bytes api/__pycache__/urls.cpython-312.pyc | Bin 4596 -> 4571 bytes .../document_generator.cpython-312.pyc | Bin 20645 -> 21539 bytes app/__pycache__/models.cpython-312.pyc | Bin 135224 -> 135599 bytes app/__pycache__/payment.cpython-312.pyc | Bin 6519 -> 6557 bytes .../workflow_actions.cpython-312.pyc | Bin 10545 -> 11556 bytes .../workflow_engine.cpython-312.pyc | Bin 4284 -> 4326 bytes .../workflow_utils.cpython-312.pyc | Bin 4009 -> 4846 bytes .../0348_remove_payment_schedule_entry.py | 17 +++++++++++ ...ternal_entry_allocation_amount_and_more.py | 28 ++++++++++++++++++ app/models.py | 4 ++- 11 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 app/migrations/0348_remove_payment_schedule_entry.py create mode 100644 app/migrations/0349_internal_entry_allocation_amount_and_more.py diff --git a/api/__pycache__/settings.cpython-312.pyc b/api/__pycache__/settings.cpython-312.pyc index 616382cf81a509405fd54314529c6c01fe536135..ca73c951372dac40cc4864ad9260265d78f3c5e4 100644 GIT binary patch delta 20 acmaDM^+JmKG%qg~0}wo_jM>N?%L@QQ6b0M> delta 20 acmaDM^+JmKG%qg~0}vEAM{neg7%Q6vub$+0?Puc3SGRNu2dpH+CG`O&fo#oy2yMCQVYOhYDI$6sS;F&^-bX zNIh8GdLz~z>RiZj!kj?Lr3VhZa6*EP<}gAWxN@9Ga7D~}sYEJPyVC#tes7+3XLtX~ z{ho{d9F2xGb;P#bdvbjcogzOD@*6RteWV36C-9g$hMV*rk&Lc8)HNZIvBB4tenFL4 z6d{$ap&0ijh^2>BT~M{m>(Ow%fDdoP0)*~L2PTyT4sW}T3G z7gEr4#=S+F(^F2^y@xKXCcO=bWIUf*de(`!?|PD2iHERJZyxTxSJcboeOzfdQTGw1 zIh8)dlvnAoO3A>(rISDPuL30OeGyte`6)CWBvtR%$i0&}V zoCacq{%vX`{fG9kz*EwEJn$QhyfV^$Nn|@L+u^h;gNmMpG~IZ%H>@3Zjuc#w;{d}7 zzA_pw5~A5-%^s(FG6LK{zVgBm?fa~KpVR&W83hqTk@0KacD_+#mSi001k&0M2cogf z8rz)i$cw-)DgNxvFmY@inVc5nTL3Qu+&MgW{&et^)0|8IoWu!*ktK@DthmhSio62+ z>TBLVC#FD5!<5~jery~WoLX`QU=m<&XdPFMDxA*CS%4OGJ-)@1JgXy;q-+8`2*oUXd11tbMcXRUq zivZ8PfCYdh9BcUpBHv{BCZ{b~23|p~?m`r7R~se!s;@s%jue20$xR)@s~u-W;vUyIW^#Q_aZFz8q0_0?Z@9&UGoqv~;Y^4id+p}Qef`AE?eTf0x}pc8Wk)ud{4k1b=sCQb^= zbFQgchELWRSzBrrso(ul(txCSs0~x5BATEpqzTFTDw?oNB}{`dRos?lsWt2za=+Is z>!2MNE8{@X&w6P;xyymK2<-1a-~U`ohITdqee^$yf}$_}`L#&GvVcr-25d$6ywm-D`xF$(Gj zc-*o>&WD&XGTnDQBdv#=2a-g!yQQPwjc+tH;C}8~_MhK>wDa+UPaf^>9{uR^>uT9O z4&2suLPue9RqM>l?@;Au_X}N7gs!UUi561HpD{&E{G#k~ys5G)NH(nfMgp(QgqP>3 zCQUUNX$eEp6Tf1ZPd0kx!{&j6(;@)Sl<<{VeHr2PHm$cA*$_eCA><1$ZQj_Tjm{P$ z+ae5N5Jl1}f7kq0j+qq~fDR!ozu4o|HCkO`WL;bYJ}mi@TfN9(>>$QSRzv`f09=2% z_v~@^F(YYl3E*X%knLMMH&1i(j4X&z;A6l$<{2>#A_`M(_KZXGz+}V{698iX+db>B zcu-_yO2h#s0B-hHcr;I=c}5B%2{;9l&8dEwPcPExMMfGT4g3w{nZEHu_<5L-ny|7R zi8KFipM>@-OuzB;-Dmf@_uy@&0OkO`_Hfex^8jD_0SW+%IM(v^_+*_<))|=-Zvvk| zE}w#DYqXQCF;W*-KwL#J(c9 zs=#Z=W1f#EYBYho4tx%IwD*w5$~0DHq$1`!AQq%JyT(Ppjeq70@I-|sDvVS`6L?ES z5%(fIS*6J;Y;s8jvwUjueVZ3oXmN#+RdEf?^?%Qd{C8$W8eKbCbvG_VcWz+Y+G$(T zvv{gbQ@FHsG&fI8wx8pqE OcnieWft|Yi$NdeFBXR-& diff --git a/app/__pycache__/document_generator.cpython-312.pyc b/app/__pycache__/document_generator.cpython-312.pyc index 98f68219601c3cbce5f3dc037fdb25ad9b2d2b47..c52c6c0c402f78ce2149658c770d680f3141e425 100644 GIT binary patch delta 3609 zcmZu!YitzP6`s4hvrn&g?cMeIv1`^3z+-F&NB}9|CO9^Yfj|=63Kr-vc*gcRvk%=F z1E%YmM1(k$q;~F)07-+Rq$w#>McGPC)Kr8vKiVcz6PYN^K%%s%RMD!6<)VtB{OCD% zFt2vB`sUnw?&Hik-#Pd0PhKUjohIcU1cQD7p5^AQ%x`#X zf=YBT?S{8Y_hh|kFYgm|U)G=YbJ?v2vSsPAY%m?E*fJ6Uwt4BO6gcG4IQO#oOfI+8OCCy1%kA^N{dY>qeZVZ-@M&TbB*VfQ3o6A#{*0FZnH} zn(wD;af$m8ma$Jmi)tT6aUFnx)Jg5xlj6^VG|s}|8nTtOhOdy$QnaGgMIxmKVs8=B z#OAA-z^6@Y~g$Yx$Hr~@=xdOQA@*trAOO(UoX3PLwR55fk7hY-+PR!~t@ zxu8&GkSc{C>Sh~~?GX=ZTzm7nN(VrcLUbcLl3W(vgwr-7Jc6){T}XBioy{eyNu2rW zQ)Il=jAF)WCDMRqI%OvDt6p9=$<^rq zB9kMr@46RE9usrHJB)?ecgxuSzokKroxfurOk#Z4TyN}V9iilyRTPIC*oB_j@iFn( zKV00+O@fKp$RD$6K^ky03ls|Q4uJ@x!hYd^bBC~>NS-Yevz8)#4wkp<+P_TNwXhCQG+r)md!D9uyL*Ed?wY|*7=`c2L~>f+NL!D48M0~uTDUyDL(c;|VcJ$&C@-n?>iTr zNvxj4b~rvca$Nf))O)O>t zLQT`_y&uIp<^@ubvg#JiIpKZX!1{J!WqWtP@qQrGT`#_$B!K;dt#?FA&r6C!c^QM` zG9kv6+b(9D60{Ebr2st*FM0&Wc(Y2OkjV`iw*D+CUPL&Bz)RC}ILkD&^rQg(qCe$o4Zcr`T26Rb&Vj5+&#|Aae!%@1F7O)rdi6T#2^4h%%oqcU z!A-W`5)Q$6)3@efM~swSS))65E`eciPVk7_`Xn?M-3%}K7JwBT$WurxILUGYnL&CE z6{;2y&3GIt-aS#LD?y0G1EP zt-&qC9HIw!8(9LCG+Thk9K#+LFJy2-(>2-$9a2609lWRmDi=M%KHOM0z60C*+S7zH zf-v9A^veUbfhuYTQQ_5cs!KILrPKZWEq#?H1w&% zN^UUUq3*qLbmc~}g;C3qD?mQO&6J{#ta21PG|+XJ=xsN4@|$aiF+QYFO{JJO)NA+K zOF~&R_yf*AAE(F+ zT8^IK!GZ{N+acp#xyxPGz3X845ncNhT?SL&Cm485ghPOkOM>r`Q1Q8t{9H&}VvUcQ Op~qarKQAD1xBV9)(TqX> delta 2892 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 delta 1751 zcmZ9MeM}p57{~9fy7ZkQu6Jz;r6s=}GDtg? z>2!08z<$0Z#snARMwrS{HTu_#`^UtXl%ayBiTlSy|C6wP_MgA!x z=bqo)eHyrX!u(TFk&z<5!M{#NdukTVZaTbpFg?dml14O&Ch>q+6k($D9rFqU7)6Pe zH>j1Iqyoh%XC)jTq4!Y51(Z#tY=pA!qZ|d4U8S6aaz*C$CUX~H4izgQSgBaHueI_5 z&Z%-0qA5a&l{fe1t194JGkU@EFWitoE4q$YREo<&<~D6N;U6tcxPmdzwb*F=r>K-Vr6q)=jVd_DRzvsZaM&MVQ9&;JqiF_YJqXp*6hFu2y{_8L=K#HNfXI;CwPzLfDK6=G;A zq)F@3+%zRv@r12i*F-|78Gmi_W7hs$Rdj*$J%ZA}Kkk=!l()$w?Clc<=>>*Z3+?L*$>F#>&-nImfpMeRerT?fqu7jiC;RpZu6~KeOXKI73~8{FMirtjfb7m=tIu5 z!MWBr*N2B5aFu_WUD?ux+nrw?Up~I!JF@0G@;$fiJC<$e$+~;j&3##Y-@_t)e(37Z zwKEsHf9K4bW!@{?0=K4jZ<_dv{g1aBDQh2{)RC5caJsq==rS+4-lpk6thisK2XI-* z>GBa0L)~ClVgw@^0Ig2q41TA?#RH&d!&C7PIsu`R_?wa!*eH>gGLK8bjBOkMlRDe; z^2p?P5(O|SZ}ov6O+ZkagxA7|O2M;J3mIS;1al7mQC?HOQ(4i=ld+L_a6)=g5|VJ> zgY0qqR7Ed)p7?HLrYasWrddb6qKbsBRLE4+!z4TKtJkZq9HhX1rK>U+1E+rR_3O6mC;=W zydMwN9-a#TZ|;iAXlA5?q>Uud40;pd!w}IRDJ*bE&7a!^q3aORhw}JU@XZrLNI0$B zK=q&sW=WO`6BPxv;3zM{XBzc`xr&{20(*nV`?$023uc?jJgPgzSl@%-`(WUP&Rh=?W?OJvz8^Ku;D05%Ia%}79j^rS1=TG1myseVj?-V zd7+K{gm`|-{3^85v>Uq{KJy=gjfcU&dxfH4;MfsN7{MJN*n>vFV7%2}GcFTJJ`hyW zfX%*VgsoEy#qbNIOM%t;Z@aS3wr6WQexWn3=BnVHOw_EWsF5k zj0}|=HLNKtU{Q9EXtp^}9wyE?*^pD%8l-{?NrejoLorMRH%Ppgv1bZcFB4ENW6vy* zsVoeYJes_d>p9I>ZZUcKP2S3xD|!&P0E- zjjlH)PvWv+6X#~N`XIIW3Re!Zloe1%ku`|m1`@Y8%JYk|({l35iyS9M@tL!_0|lKn zPvc`|WVD<-i@#F_B(Rd9$P%PO2T1(lu*uC&Da}c>EApRgFW@W8$0#s^q56?{B$g9G^=rP%dLyfV2awNz8dX{Vr28JT`8s-|7Y;z!s ziIJg_y@oY~14$gD0w&IhB<{k%Pz)320*Mzh_H=?xVgl-5?CA%Y#lld@t;yqeizO#D zt>hMKQD%BZ$t{ljg4CkKlKi5{YdPg6pXbaK-3WAH1H%n5sp^Dl{MuMqmgz%@CL zD`oOgE@L)PE>^1#5}W^Vbz6QLE0y9`XFaW6qC7(gm a2L&NU;RVbe7=YA@WH7bEUrZcD7@yhMz1uzh9tYfUcfj#4+*0||6e&<*BrV1U+h{c;Ae3zH7T9CC!`Y$S z;Sr3{1QTK)Yty4X^d9;^Z69j-ViOaMf1cC?ax|qYO?YUGz9_aNR-%bB;88TjdHCix z-}n9I_wCHLbG`ECy8LhQ@*IGU7BZ-{l`Q3ZUTUDL%ODKGPzM8S=5#m#2Owk^>D&Yw zKos-ufB`-MW#K1AKPy8^3@bz>+Js86Z6X#{b>ri~_qk3Yunabmd>k4aCFk9M`<_|b zp{Vfh=!{5(4zj1cJtY2cAmA9yn`%6^0PR*yOBqnSzi(*ZDvHQ z8L}O)kpzhAX*?`sdDup??PWAHi=x6I-2DG~xX8RHR`XFRYn~TN`)1L9?{C0`@BXoq zH(N!-pG8mSgR0=dk4Y4%G$%Rl+$>u7od-$uDyRXZIGapL50EE|Mo=xlJOup!f&`cb zanui{p=>+53!7&0gM-sY>dOi<*+q!<@)Sec)j%4YG41o zzM-|gq1E%FnZB__w9VO^flYTs%1HOjt-BjGDyq_T%aLWYwGUG0$&LdQSENGMTGw5{ z4R86?`sMm`)rSpBCm(vN(lzNfR%$ce=Eak=)I#^7k?OfyP<^xWR_N2V&${k(-97T+ zMrqk)ZAml7m(ccc`gPl#pwKn%c(UUIWi{7M-;A%i+aCew3F|w=a5JCV%C_rgaw2VJ*E(gzYvS*_!)B~ zN6y8pygf}^Y+lK!5U`Ir%rA3lTXPx3L7NK`V_G9)mNZGBMzmNI7c!Qc8P@EyS$Q=+ ziE+K@%RN`w$ox&zSa6s%l&Xg`9of#tyXaDoP(w({}*nYGo^yQAz}X;5EGQb5hXerYYJc3>*_s)>i{=1 rAtt#icG1^&N>`u5XXui>v<5qTdRGvB52Od6`~mPk=3n4o;U4QRJsXPd delta 802 zcmY*XOGs2v7(VAd=5@RCGIey)nHqJtSqh<6qx3Wa7ZRElZe;S_Z0L@6I`@n@b_Iik z5hRFXGMbR!O6KxT$I>%u^&*D4(|NW2eKaZ`(rI>$BRegZ1 z+uv?wegvQSBOUe3djWKyLlX?~T`*x54nYWX@d+3b3Q&`N@{(Q+Qjea-2F_%SSLmsb za-_!!mU)aXM_Ps@YYgh@l*^G1MdgFhm6SLqg@3X1=a7j*2aH1$nw3f1Q%Qci&p>W9 zcD4a9B{|}>06_s9P!h4Lqy)gSP_k?ld&`_7Iudbt6Xc~=iOzLMz!Cd_CiL#X7EPw& zsDY_$=gbUQ^&Jy57pYQWs(Zv5!^Q-*d1s<4lY#@tcctt4W~g!ph~5EMyu29*7ax79 zj(%x9|2pvoZ?tyLCl?Y64;C9X!pZlEkI4_o^}hbKle1U1-MnJk1A-Mr-!7kvq|}+S zZe~z636)2YmCsSp#z>Q>oK54AdsMt{6i^jQLA4BQi9tLbpGGxgM?D7zNVC8F5{fc* z@<@Z3w(&4B?7WGQ$|$NFV6<8kxBKA?m$Z$dyd;&))zQQWuCu{Jb*6An=96!W T5W>&E`xVsfx=aXz`z8MY?pMt( diff --git a/app/migrations/0348_remove_payment_schedule_entry.py b/app/migrations/0348_remove_payment_schedule_entry.py new file mode 100644 index 00000000..442ed189 --- /dev/null +++ b/app/migrations/0348_remove_payment_schedule_entry.py @@ -0,0 +1,17 @@ +# Generated by Django 5.1.7 on 2026-01-06 02:47 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0347_merge_20260105_1342'), + ] + + operations = [ + migrations.RemoveField( + model_name='payment_schedule', + name='entry', + ), + ] diff --git a/app/migrations/0349_internal_entry_allocation_amount_and_more.py b/app/migrations/0349_internal_entry_allocation_amount_and_more.py new file mode 100644 index 00000000..98d02c77 --- /dev/null +++ b/app/migrations/0349_internal_entry_allocation_amount_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 5.1.7 on 2026-01-06 02:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0348_remove_payment_schedule_entry'), + ] + + operations = [ + migrations.AddField( + model_name='internal_entry', + name='allocation_amount', + field=models.DecimalField(decimal_places=2, max_digits=15, null=True), + ), + migrations.AddField( + model_name='internal_entry', + name='allocation_detail', + field=models.JSONField(null=True), + ), + migrations.AddField( + model_name='payment_schedule', + name='entry', + field=models.JSONField(null=True), + ), + ] diff --git a/app/models.py b/app/models.py index 619b2e9e..2ca1fcd9 100644 --- a/app/models.py +++ b/app/models.py @@ -1615,6 +1615,8 @@ class Internal_Entry(AutoCodeModel): ref = models.CharField(max_length=30, null=True) customer = models.ForeignKey(Customer, null=True, related_name='+', on_delete=models.PROTECT) product = models.ForeignKey(Product, null=True, related_name='+', on_delete=models.PROTECT) + allocation_amount = models.DecimalField(null=True, max_digits=15, decimal_places=2) + allocation_detail = models.JSONField(null=True) create_time = models.DateTimeField(null=True, auto_now_add=True) update_time = models.DateTimeField(null=True, auto_now=True) @@ -1647,7 +1649,7 @@ class Payment_Schedule(AutoCodeModel): type = models.ForeignKey(Payment_Type, null=False, related_name='+', on_delete=models.PROTECT) status = models.ForeignKey(Payment_Status, null=False, related_name='+', on_delete=models.PROTECT) updater = models.ForeignKey(User, null=False, related_name='+', on_delete=models.PROTECT) - entry = models.ForeignKey(Internal_Entry, null=True, related_name='+', on_delete=models.PROTECT) + entry = models.JSONField(null=True) detail = models.JSONField(null=True) ovd_days = models.IntegerField(null=True) penalty_amount = models.DecimalField(null=True, max_digits=15, decimal_places=2)