From 07ac1d3196b71dadddb9fcf59c3831e0231b2522 Mon Sep 17 00:00:00 2001 From: Xuan Loi Date: Fri, 23 Jan 2026 10:51:27 +0700 Subject: [PATCH] changes --- api/__pycache__/settings.cpython-312.pyc | Bin 3432 -> 3432 bytes api/settings.py | 2 +- app/__pycache__/models.cpython-312.pyc | Bin 138144 -> 139163 bytes .../workflow_actions.cpython-312.pyc | Bin 11556 -> 11986 bytes app/migrations/0362_gift.py | 28 ++++++++++++++++++ app/models.py | 12 ++++++++ 6 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 app/migrations/0362_gift.py diff --git a/api/__pycache__/settings.cpython-312.pyc b/api/__pycache__/settings.cpython-312.pyc index 28958eac2f55f27a925a1711baa982435eb4064f..2c44e476b04ced27206ca48c5651264ffe28c081 100644 GIT binary patch delta 20 acmaDM^+JmKG%qg~0}wPmFWSf*%L@QQZw3DV delta 20 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 delta 12143 zcmZu%30#%M7Uz82Meb!4ki`@g7hJ*IQgR_PGdEnHx#1O1F-5$9x#Pa4;E3bXR7}k* z%jMd;E~RGqGPN|#N;0>sTq-Nm)Oz~P|9l{1`TOyAzL|5*oH=vm%$b?HYJY_yZ-v04 z0Ravl{`XVF=!}Ue1%Z*2Tu>*DT5nHI@(Z`W;fppOpZ;wPpN>9hFV6Bw8(%Oa#&gK8 z0+C%^awHYFs(KnaH(2=VyP*2~r78z6D91Qj7*8?dXUwS11P@`#ZXuxb%nW(Uh$`!2 z7D)3cjb;H2kY|JiGx_4MD3EUtTUMTYc?o$fA+HU!rbPTfmI+2&8_(-e|Lvd>68${g zh87rBEBW|zQkT;{R4ZJ8bX;AWo}jL!zowcFjrMFAmTFjon4q5u%Sa6WACK0(4iLh1 z?th_FQKe-(?+Cy*psV^Yc1>s=F%dfkP=oZ<|Se z${5p)vB#J~M>O~WgFHWv`41VN6?Y(`Cw5vi9WqZABMr$np#_kK~a z(`PvQbK742bH|Vhxn0BA4`skkQd4VZtK=E}MnBU)<7ON(jE1E5&!Z^AAl+jQwbCgz z_KSbdZemSgo)bLe_R;0+1Yt7zdl+wL)o4zX%@38yYOE`iYAe^AXB>l20od=^KBqU) zAT~?X(xo4%EAy0f6xSEamP@ENJbjhm{i1@#q=n?{-}Csc)n^Q~@fzbwWF zOBPrF=N_`?pts4Nvc&o~7R_~x=hh!V)*IG$j6)G{MNMDQMPKN{#N&kcz~TkAsoZdz zZB-bmf>(z*CW9F83lsOF$)&o#lRwuwi>rOqvjuU^8K45(BbC(vdbgk%AlB|;a7xPD$3NDO`TErzcAP_`PKlG$Uo*soA$*Q=e zirT)0iC2dO6@VBJ3E~vhvG4=6LeF)q;HuiFlHo=z2N|F`>L%h#ymNW!P&)ow*;aFP zf}y6*ucNxG@UzteX{H*mB33lSYB!Ypyl*Fg?=#wf96eRVv}pI-MQuT3}n zU1*MFA>G`e>b-T5*6my|NS#}kXxoVZ;Th zoy=BiH?=VKn5*jNO|^-`PQ>Oh)(@C$vRb$~KIV}n)E1JZH(5MSNcagl2+@FCjA5KA z*fLVbTqD20m|uO!8e`7lL9>_FUXLeUvubN~#T@3$Z~Mt$XJ)94YK zNY@fpAhEbY+L+XooC#U!?sgc_S=Djp(~d785wO-%xbrchFX2(5-8=uuvtH(g-Kw28 z-gyahfE|Vey&t{)bm<|jW%n}cHE#TXmtdF-=5qRp2}E z&YwUAIBbgD`;I^TB(w+mzU0Y#w=o6W;?}P)#wo0|K5&a_sBPan^!}N=n7`ilxN7~5 zpY0U4XV2livV%(9|D5{pooHTk>(qz?LoDz`wXRuZ$2~4whMZj4K!WxMsv7V0raS1( zlmA`;IqoyX4e3b*-;QX;i zpCY?w`$t#F8Nm#ZoZs*kq?de1F*>CIMZp9Pe>?hFhY1ZdRPrkk%V$xPGZdA8Kwo|Q zJT+I{I@#37W5X#_bh&czH(X@M0EJc@_N;1rriMd;C!nnwbS8tE zD%Tf3C{OWZdwF?nxV>9>c^_ijBJU_lW%8mDp$niB=v(4TCNR-7+E-R1;AyTLh}P$r zSLe;A8u~;ySt(l8I#*L>(_IzTlOQz0%z=_12+&I{IOm}xk@m0iUmMg=HM=z1(UqIV zLS~Hm;8G&}XX!W5@w-?^v0thyb4+GNs%wb-CWy z;bMXU4DguFpGl3>+t-8Z3a5-k0u*|84+Mx0p=0+Tz%J8b(??lY={W%kWw zwrp2-XhyPZawR(4_u@=(Q`l!_yXi*8Oa<&^;jF}IsHdR_<-78x25{m|615y zV#=$&`r>!gC|u@RW>_|DNe6bRFaFouAzLKif{M8RGA)EVsh>BE^t5Y1o*M=51K^z5Q6e^b@fjWFOELb-Kv&*r zR&j-o9_UMnF(N~}MySfXrra`jY6t+__0?B=X)$T(D&InWhIJj+2kSL9igz}EX+>Cq z{?bO7jx}He*mSa;_R<>Rt5t!TlI;zyjRfcXaKmEn{aE~<+;-ba7t#K0WO!^n^N>PnR;gZA;hFiWov zqclAtg0k%gnY1)Ae8}Z={UCy6iT?j2%W(*@0YmhpNEUcVCg^@7Ws<-23$G}Zc#O+g zx-gm&qaV?(8(b5lZa;l3n(8}_pbX%ov@%W8mm?{}yR9-U_-kH$k|}2D!BtD` z9$cOLf)#l4z$LR+>^%`nZn7luoJ$&Yk()Mx=9tJo4@$rq$dA%HYSA#`yzDk=TKD?i zLA9v~Ilg6rtzdd?=@YTeZ@>fCY~kZcgg#$~dK=%EA>G?GjvD!fI6;yCgLUT8Gj4}o zRG+HYB-A(5TkBJ_;pD*7xs|pypakoWO!T2{)qvVlte)C{Vx6Lw%x0qA(tu*B4&?!u z4uW7&Y|qU~bLFJF%kR|s-8$?w9&dC*tllPZ6zx6Oh?-mIn!fuu#rjM3ZG%#kNsaB_ zMh|O3@s8Up?lQ&}q}Mi~maM>;CKMYk39~5hEqa!G___{hN>!3&{NFK~dmn`TEc)cQ z#;1-+OD~CCV38rf?(Qp~{Rto*F4686e3pwpj+>|e9QAH(N&yDl6gU06Iqfx^u%de@ zdgDuvUv|duOjk~> zJKcRpZ)ioW9rr;FxZ=Ief;i7L(~SdtqezcxO&cA4+?B=3R8zETD#b?Gv1(Y;CTk$K2kDCKXtZwAhDVg0#TkAm+@*@%*N!^rzHKOEQ?+eGI`S!6 zVGCpWD6397PoetQEvj76AH850#n!A5uIzO8Nqze%O3-=jc%DObLVKF7?MXb%N88hH zzW&!R3`{co?Py1;VO)ogwbXIXQWGmu*rs~Ov(zRp7L&3cN*@3e0c3*3WY^Jp53O{mEvQBU6if@L89edXer+Nt$xszqUf|+WdJ)}3ywl-$o0s2~RimxWJ#7^}gRhHWCu#<$>FAbd>N!1;V&<5zE z)B4anYGjJE^(CvNiX6A9fT!e?^*DxR9<}7sLA&}>OKT#tzo^&tr}k|g8K9hl?9Ll&hsMb>K*3h4k=8>h;zH z&Pop*39XPGk!C4j3D@~U__8pvl%=%3q=Pz*=`kIgLJn(X!-xCG&k0v2KDFp-F0Oj4 zd{s;cawGif&sOCN|B8HXANsJasvhp5$Lsyo>dzG0-Rarma>i%6S2Cmf-+!V*=Q7`> z*kv$7z-=Cp&2)MIDgZC*gprg-10L$^Wu3!I4)jpERNr(izo|!$D%Dr~ScHo+ms#&g z?YhBF21C&UV3WQ%il)&}*%Camm%N%uuQ^6?+aAo%DA`MbMt}jZ16G~Gd&CPWIX+Sy zZ{SZO#JjysvglsPL9wbK2UG2KQxn@5<~q!G!kk|3b5rHkkJwTMZYdS-mgAwBV-j~6 z59=oY8UuFeO4-!hF&gB6eY$TpU8B*k_cHQ-1~la^CamL_=A^!#%l0l?=|WZB-q{cb zIHvQ)(G<#ty`wZAV0y8mgn6gDNWI85g$d4;?0l1bsdBl%E)sdi;427#slGXv6CoS$ zh3-9pme54VmQ1;;ZrGY4WaXWhNXzZxnW%I=XK?w7UNDLEmN+O=`8U0%K{nu$c21^= zoZVt$H)nCz6k2PW%Wb!;deBs!^4TB;{HPaCWn;}QC5|TDcN*{PFL4{k5`Iz8SyL%2 zY9SZ^ci{&=VPKLzEEMZ_yH2N;hHWXg2iatD*UqGt!M!nQcR?%cf2i)SMB=tAC?C=Q zR*nVP2TNap{8Z(U;rhi{G@0^C72e9E_OV}@t7 ztAKJHZ$SW{t-eq|uhLt><}F%EJIMAn*Y_?ru^tcuy1L*uG`?_*3A)eBm zD@`+rQe_h%UG3Dbt)kc@Sx!Bfve=%HnU#wJg%}m~G}9^BIAnRqDwjN~Y%8~G|Cc#e zc^Bk>G#L4PYz%SU!k1|S(YrDLb>Yl$U1Keugv&3*kC|hp-n*8UqDT-O%PmE@7&rpi zfT_Ag5uaXRq>qG7U0x@ar_edXee2>BX;8duLw=l5@@z`t0lU1WnT6Z}4h92T_1mU@`}(f>xFF zgg5ASI_Kq3bCB%Mfs^leoHOZJJ>xB^@4U|B`{5tvHG0j54+%~K(suC>`D}jsEovWh z6%~M;5Wf#G;c2~SE6t>_g{1S)BEc!(TbC7EuD`jT_a{5{mr@h6M=4dNT?1A8dG%Oi)IvNJ&u zIREij3%kjI=R26Z+%ZQd?xh;7? z0?v4k?j@H&_snH+Riq zH%`Lg3UJ4!_Z^^B23hpM$;y8evrj&rj%sAko?e_gDkCs*) ze1oj|wbK+*sTy>u&QNU0a^;Np%S}!^x&|aK|C|mR@fN(@XucDvukvpv>kFgFU+rHI zrDuFW+0L?+Z7lziW?5S@Uz(o(CCvzG0Xcxdm?2!ABNc6sWhUy#EBqqq# zUw=i<^32vgOYIzO!3P+jv(C~Hqpet89r>vLrnkN(en8S&&+&fInJK30cIT<*-+%Yh z5h4ID>QBzo2BV_|uL!!)MdnN9>VId0kfi_k+i9rryoc03P(fK@v6dnz=ZH>aZ8H98dL z=rG!qF)F1?Ms|+eP(0Jyoggpsy4F>`WpOdr7If!wq(BPbRekI#jWALkN;zFYuA3fm zreEi5WEfMvtv6ri9JZ%n-nyhg0$?j7RM*XZppHhGIXYetb1)}WexhzAPa3g0|0n8V z9mNdqBQ$gf76I!pGPz&()6H*CJ^E30VrK@V19sbW&;klqZ!YoE+i%cDBg5<>>t{~N zD?>4vvyivH~;hj0JE{EM}giGg~t#du8La2hUe_upv&Rg~rAW$iYT+ZSup(AV#< zseE;%yPQ1b>1lUqkaaGLyQVMQ<=2`Udd)o=RS6qdv0p}ZiYqlIV_ZoFAEK-MLA9$E zK!a)+v4rnXl=4sq_*$p^LGK!Q=8{bOlkO5t_cpuFi9q;6W!%$1&b|tL3LntEDx%v+ zuH9_7lTj}fvp_bRCoMLzaGsG&^9s)xUHro^j)iDiWKq+XM_AwBvO{+zWAD?8QN4tr zuCIF@%IzTREtK*ZvYFMVnp;%HFeX;)m6M*8#A6(j*(fE2T|XryM0YWa?nz6*!wyjr zYB9EAd;6qb?USDFV2YM2IuR|M$O4q-hT2f@O?}odYR5h)e6Zq}%xu2V%1F&Aw(%46 zu#DkmkX&ZLyhg&z;M;uw2^j)-P8uYW&^M?=oFO{apoPOUvzC zWE+FiwDEqF{?W$%Jy~$6b(`p;enyYhk62d*x&snKpjcJ}K4Mv>@Nqw>pLZBl!b2q1 z<(7<2GOiL^{-cNPhIBxfKH%V+@ZF||9&#FmM0>ph0*oLscONVl_cWawXmp^ldT*eS z;9L*pR{@*#?LebW$ZIJ7&6pkUQcP|C5`#DDnx5lwe*nV048?wCeMWkAH}?Y5agTC+ zSG_67SVoKWlfg#4+W%<4pi+q?9@_)V;ZFmHCIQ1 zo?OxJJQV=Pl5|HNgykoo&!A3zv?_=Fe)yE1evU*b3os5a88AbS4K*6)?Lqk<;4t80 zfc%O~ZjmnGQ=TT|2M#y!c?Tdr9+5+uJT!!|Z^#dI+)YtR1SA3Eha~+_N&%z;&#~AZ|HH1rf^7prgjn9byxvG+r ztK198ZBQW^Rs!VyL+&u-8bA*Ja@dx0^{08Dk+Y~A_vBzFrx(fp34UM)Nak4)B}sN` zq9iG%BzuynwMCsIPTf$FWafF4QUGZH*{R{MvY}!B2r%QFEL8Viy)E3R;yBF&JjXuS zTfAR{8;8leHNv=P@eifA6;*!o;s1VXpkIE>xF7Ocq#xDH@2dwE4E)W9i?_UQR55<0 F{{z$5%FF-& diff --git a/app/__pycache__/workflow_actions.cpython-312.pyc b/app/__pycache__/workflow_actions.cpython-312.pyc index 645a5d264c845adc62fab85237ffd1186e1435c0..bc11e27a23c53cba12a29732e96aa080d25f4078 100644 GIT binary patch delta 1513 zcmZuxUrbw77(eH>y|=e5w70jne<&<1Q0N85Hs&Izo03uH3?SLaqz**fy~RQ) z<^oWRN!zgn=%i4kfvM zUtYidMBc~q{bkrz>1fWkABT#VGHy7YBWc`xJS~t)9!rJDLxEN?;Zt5bzv|H zJsGQrgU(%qd&POkk>Rap>*smzuU6?y>Qrj#;9aX9-*8q`Et!DPvcS3K zIM>w9d2UOl{+Vwr-&m&fA6eeFEV!%Z+|^h1-E%*2yA(fg297@}pH?o%W@3wW?^MUE zP=Dmz7i5-5uA_*(r3sL2w@8vE3^ih4D5 zQ{Peiw7&%Q;;_HTaE8c!PS5ziU}ha6;Uu!;3?!rL98qjRb<14@lMiDTdtvV z*cp%w7s>uF+!XknSpn(QKnG)+riza#gec75&R{J&LCpw09lYF5Z?kO9m0T;nHkwE3 zvSgr|in4}C6eToNO2a>-;HA<0hK{E3Nx7B1Mrb2U|0MqocOIm=T@)H9(0>r3R{_yi ziRf?2~OB>VNILZ2%&vN2bd6CVyL~`#^Ax4wEhy2{0Ff( BXKnxh delta 1136 zcmZWoZ%7ki7{9x1cekBRw>fusYo$~3T4|;I5we2Ppim1cEB~zJZMs@IUe734R9c|@ zA?tximL?G>7?tc>eTnE(5orb4@`K;%TZIKtUwWSnW75I<E#ZNcQ`SE@T$=%;+|R5E3%S*>(N-+*F)q$%0t9S|Q;hL(W`vt$v4~+< zCdO%IxM5QrmIuvp5Jo3FjGo%Eq8I4v!d=;)HPd7Tso-k{ioTNYJDsnpah1Nx#5#TVjb|= zQN*cv;Lke>&+;Nr89dS=OIw?%b+noD$&W92wgp+EWFIGV|lQ-s^NgE zlCnY9LHOw^UNJ979|YHo;JRJ;R`ATq?z>sTSs!HIjO?4(^-ivW9dgO~`E1+u!-I#f zG@q}VGn%KfO2$HCho&v%?~N571?#L*I3NrOGom~z+0NH5;6@U^&-V-%9cUOgO1N+-Lu-bm0N4d|UD1dU3ADN5CN;+_)X90ZM0 zdv})}JgxhqCwfQ#6i*G0d7?v`X9eGhGz=F#UfOrUQ_A+j8_#ajIhvkKc$WX*_zP*X zT(o|5n$kFFh-#svF%*sj$tfDEM$(VAiwKw?8k{Ps-`0SXr;rpof?Yup(1S~MqM^P8 zp$1I`9I-aVsGT$e=iO<#Oyg&XJ>JKh# zm#U^=8qdME(uW*rO^mJF&*jF^aR&i6MMl85s+_-sGyt1djTd%Ms!HjWsphHk%IJI3 zC%bN=UqPoiqk9}GeD(Y|O@Cz)eZDX3-bVCoK&VE*%S`Yt5d4+|Pm$n+1ZxO(Canln r6n=|a()Va9c|=2&t{y8qS<_%EW9TR7_sm#CuI$D diff --git a/app/migrations/0362_gift.py b/app/migrations/0362_gift.py new file mode 100644 index 00000000..140cdbe9 --- /dev/null +++ b/app/migrations/0362_gift.py @@ -0,0 +1,28 @@ +# Generated by Django 5.1.7 on 2026-01-23 03:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0361_remove_transaction_customer_new_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Gift', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', models.CharField(max_length=30, unique=True)), + ('name', models.CharField(max_length=100)), + ('detail', models.TextField(null=True)), + ('index', models.IntegerField(default=1, null=True)), + ('create_time', models.DateTimeField(auto_now_add=True, null=True)), + ('update_time', models.DateTimeField(auto_now=True, null=True)), + ], + options={ + 'db_table': 'gift', + }, + ), + ] diff --git a/app/models.py b/app/models.py index d19bf8d2..0b75d56a 100644 --- a/app/models.py +++ b/app/models.py @@ -315,6 +315,18 @@ class Discount_Type(models.Model): db_table = 'discount_type' +class Gift(models.Model): + code = models.CharField(max_length=30, null=False, unique=True) + name = models.CharField(max_length=100, null=False) + detail = models.TextField(null=True) + index = models.IntegerField(null=True, default=1) + create_time = models.DateTimeField(null=True, auto_now_add=True) + update_time = models.DateTimeField(null=True, auto_now=True) + + class Meta: + db_table = 'gift' + + class Sale_Policy(models.Model): code = models.CharField(max_length=30, null=False, unique=True) name = models.CharField(max_length=100, null=False)