From 54a353ee6aab0366cfcb26d91062133ebac9f2a9 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Fri, 6 Feb 2026 05:55:06 +0000 Subject: [PATCH] Autosave: 20260206-055506 --- core/__pycache__/models.cpython-311.pyc | Bin 39301 -> 42146 bytes core/__pycache__/urls.cpython-311.pyc | Bin 11585 -> 12281 bytes core/__pycache__/views.cpython-311.pyc | Bin 141968 -> 148418 bytes ...eorder_purchase_purchase_order_and_more.py | 48 ++++ ...se_purchase_order_and_more.cpython-311.pyc | Bin 0 -> 3780 bytes core/models.py | 32 +++ core/templates/base.html | 5 + core/templates/core/lpo_create.html | 261 ++++++++++++++++++ core/templates/core/lpo_detail.html | 217 +++++++++++++++ core/templates/core/lpo_list.html | 123 +++++++++ core/urls.py | 7 + core/views.py | 131 ++++++++- 12 files changed, 823 insertions(+), 1 deletion(-) create mode 100644 core/migrations/0026_purchaseorder_purchase_purchase_order_and_more.py create mode 100644 core/migrations/__pycache__/0026_purchaseorder_purchase_purchase_order_and_more.cpython-311.pyc create mode 100644 core/templates/core/lpo_create.html create mode 100644 core/templates/core/lpo_detail.html create mode 100644 core/templates/core/lpo_list.html diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 2c596167445a7c0c67ee0bd953b2003a8e2a2fc0..125845967dd193bb5b68354d1ceb8c54f11cbfdd 100644 GIT binary patch delta 2700 zcmZ`)eN0=|6@T|(jQxyl9BgB-9ZWH_Bw0vWAQ^;w0jUWAlQ<)uY2tw2%Lg&wJR25h zH@j`JrBPEH4sEHLwj_LJ-*_3AXWKGEG)M|g^uSS@beymc~-FqFE znq>FA`}4c!`<{Ex@hOSD_*Yi*mRij*coarX9lhW^r!k>h?>xL(rg)s;n@%$PrgLet z>JgT~%VxaXjF;XTmJtdCPEf?Q%(4t~8PCk%x1MBX@#p0%f$^;Rzp~rzlU>bkcQG|B z(%Z5RoyZM8IW@>0mca+Ma+Q+jVyamgwk(5JcUqybLMP*uF%5jYvl7G#I~=HxBMwmg zO1U88QOp2aIt<&i*)VVndAxBJVSPL^Lns>1Wxr!3x%=>}z#91jT4<`bhLzY+>1-a> z#WOQJ#gwnluBrX9T>Dtdyv(YBYRR)&f)V>rWLG@)gLi3}&Bvbb%nVOSm@1jF1Z>ut z>&R2euRO_k%J_1eJX=cLJtF#!^aTZ{$P1!q!W$M#36v2q6R=?zH?#~7jS6B&;BBE{ zTUIHh^z{w-1ixS4Q_2?dxrTi2O=$!7%zB53-QaKY#5x?4xPd@DhH-9Jw-eqyT)p-) zLOM?1Q%Y|S21f*2YhOqZ9fY86I}s3k#4({kxqD2OPjoN1AKPQd2127>>-7dhqSt#D zs|8nMh%j?nS2Q&Bi@4T>->dp-)_CRanYv5O$;$e8W&Mq|3?r^^iDoR{Rbz&sE;}SW z#amOHKQQba8X4@zY1xmN;vE9>1P&1(Nf)nUNO4C=$X*_Ymr@J&qMh7a1FOfhu&Y;t zrl8(g>(EF0qJ42wZNj)NX|QI%Ha8|9I%w1z3FI6a!w+Gb3@ z>$&2+Q5Qcj9M=XC+CWkph&W*A*@s|q%ns45CEa~-b$>$LpH%lpcFgH2qQ<1IVun1s zF4SJCy}I$*rnt_L&^eMiM`Y)m-X7hN)Z1rv<0qV`+K{Z;aFxGdkL#TYy)&tIMmpiF zP{)nMb>j)$cv3eG2Ol$+?L}z@;0j5MLFGmq{8n#&u(a!p9p z7a}!GbXctx+O4e1jFRpmA5cSYgH>%2^7#T>^3*Nd>RDUHt75ig@f)c^3H-gm8dk*~ zTGn<`+;yyc6~>i(HSRqRrxe{IFut$V zEUv|en_A(^b{KE=K8Ou)bDs~M{3#F9?jnV_j@*Xz2vDO5l5QQUly1APAYC;fe~CTc zE8=pv?AchbicmKq_{`%kY9!wTI6Q-$EOc&;!soqO_~OwO<}|~MqMa=MF?O&E6c;Jt zYoysyEtNmvLu@00d4);ZFa8|CR|jsQMwke#!g$BK7v}v+^eA*3oQIDF%OpkHD+uoN zr{vp-(+?*bOX0T9gm%F9zV<>INDm2hI|7r#1|k0OqE;eEpqWIs5FpTU3p zH(4hw2y8BjP&)*M&9V;6gAWd$1xvtG@ZX2u2YhI+Yu#6N*!P(Cux?#uXpWVDAxzk=|I_lkOn0D)0F zgP$;X>!r|jTmi?%{=)Vmc*kIp9OI%Ky#nt=8qpEy>qr~o`iT~Sr=_-MK4wur+-fhC z)|~n_k3EE7z1s>c&%J=Iz(1Z#ATL}xQ_GDJ4Fa!8|2p#>V#hM37oPtcLVtp5FLa=3 zP)sy&Q$&uyAE9&N54ds5qEA|;@wz6DlEu?F5h=M(6mYYzk%{Nw)#H?hF`@bBn1 zO)nDt*NMD5Re=9i`$8dcNl|=*u&K-hwu5b+CxjUS7ePO1&nH#$5j0P_(HeMZ@~bfI zfAj>l5+Qn1=;_mwbrBlPG0h`Q3*9N*28l`}2E{URdZao<3x@9$n+AvZ5x=lmd>eD| z%LKo~|7PhtgwPygi7&mspEBfyixFx4560+@sa*?{xAHLSI~B d>Z_4H&D;;CN1uOc0n^p`#U*aHwC&|q_J2J_$twT= delta 1229 zcmZ`%?{8C87{2dqd+YkkR=ZI*+JJ7ub~s&ez*u3#%updJ{XD7;0OI+3>uApfMG@ig`l2u=Ryqexrs4~8+*c6NMK%qV_3c^{o7nU5#33+xr zyZ9h9>Bamgh}Oz=Z4?PbJfPG*9fx_QL8el^@Fq z-DPq)!=-WstEv(=Vqv%6pgzqg>KYEU9KI80Uz8MNN` z$K;Zjtoj@0mN97Zdr_gR#j-9Vb|?yFx*X)gPs*%zZu@=`1B7UcM|1A&BAn^FN~IV~ z1So*nM4P3C3vqY|e20-V~;V=|L7ScYua zgcbdp9<1dC4qmoXKAaDhXy|tl)#_@O2S!8+BAoinQpcGb{8~x+VG`>|i?-Ae6%Bp0{k|JPx%e?7E6yc9d$D2eMS{*gB}jUyG%b7nJm%nru_oapG#0(>3S7 zzow|F+fr%>4ZF{npWuvYLd@@hlvzSy_%iKQy_QbB7GyIX;|9jU`F-n=>@SiU*d-dAvmAfczA>1wYXm@g|L~kN_a2<7N9~^v^EUny=LrnYQ&{raE?r~|~ zj*?OAAk07I#yPbJH}NiwV|e^)+KP^eCoKu?!(p#>Wa2i7i3Rb~lV1`YNB>lWMsR7W z-ZIR2943z*yGXjO_S{SKIUgS+3amT{`*>e_VnS==R*JK zjhr6lptn%(hF+eYAkRge#Lx+^h7yDLtZsyUnansb|pb{k8~_a#2w4_&yTzfI(-%)hfJ zss}830MSDhNz2h65dF!bf#v8CM2}fCxE%e(BG(fZ4J}6tS62PX8w|7Tt6vkwzF73{ z0|u9JeaO^h9?P0iBXa*xBrT@kpL z&5=~hr|+u?-^8Tf;G(Rz*A-u?h{hwsgUK&PA}P(ajjtU)^y87qQwnk9i9;n0jfdWI?A4wdxiB_! zL?JDC(xQ?Utt3dF+v1Z)oOYaC4Ze5Vx5^T&| zM7|N~SzRpxn?+dXun65zOn%0C4*3-MKROmWIDX_ec9=SYoU+3@w=sW)d~X+7Vru|? zg&b%QSUryQEOG()x>MdVv#y%)LxWEA-W@-p&?7uI=&T+<|s;l6j1Py3$Qd9_?2{yg!k z#IFSj3VVuzZMsnvH_g>5q$5u{RMMe!>BiooAx^ie4V&j$71Eg}ohs?nLb}miG~6@o zs&|*t9aBjBXr9DX64&&uUA&3)*0wz(~031b#1oH8}b2$QDLMH*QVwJAkW+Jz(( zVZ0^Y1a?ycp%icOszRX)A>IS;MN}7d(bwGx>LQ5hy#GnKu^-Rg=Q+>&ad>~7e3h|3 zvDwOt%#XM-F}&)#XRlTE*cZYnds*hx;PSDe$jag&N0-BLI5N06;XSJ`TcE3A#H=qi zf4P^HY$y=-Xo^F5OJ(EQgtzv1b8yvBp*d9@B3Duc@`(vq?T< zR5E*gO{opBUB*5K;>|@RRAtDsf`TQ}-9E@dA-aDr1tr;MPCG3G^wh7I$F^H({gbxI3L z8$qN)>kZs9J;Jk#rw(#z*Qs4lyHVI|c)h?gGb+4Ep6=k(sZ*z*P9uU2(e;Ah?5I%p za_u;$UY&XcTWcWm#6LC2b1w<{Ohd3O=qYzfs5>1)MdS-;2^UKyP&$ta)o~*Y(DC? zj4B$t)+l>DgfHO7MmYz?q$=!)$(r-88>c{fsV`9vlz odt8UJa2bAv)`ZN);1QUG58(5J?C=i$PWW+u#w+AEn>DZKKRFa4tpET3 diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index f56ddce278b7510e5a56675f95935fc6aa4ea2a7..7cb98ef2fa51489209adc3e6a1a274d455ac687f 100644 GIT binary patch delta 27989 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

qo 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 literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index 41dcb05..cc3eb67 100644 --- a/core/models.py +++ b/core/models.py @@ -232,6 +232,37 @@ class QuotationItem(models.Model): def __str__(self): return f"{self.product.name_en} x {self.quantity}" +class PurchaseOrder(models.Model): + STATUS_CHOICES = [ + ('draft', _('Draft')), + ('sent', _('Sent')), + ('converted', _('Converted to Purchase')), + ('cancelled', _('Cancelled')), + ] + + supplier = models.ForeignKey(Supplier, on_delete=models.SET_NULL, null=True, related_name="purchase_orders") + lpo_number = models.CharField(_("LPO Number"), max_length=50, blank=True) + total_amount = models.DecimalField(_("Total Amount"), max_digits=15, decimal_places=3) + status = models.CharField(_("Status"), max_length=20, choices=STATUS_CHOICES, default='draft') + issue_date = models.DateField(_("Issue Date"), default=timezone.now) + expected_date = models.DateField(_("Expected Date"), null=True, blank=True) + notes = models.TextField(_("Notes"), blank=True) + created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name="purchase_orders") + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f"LPO #{self.id} - {self.supplier.name if self.supplier else 'N/A'}" + +class PurchaseOrderItem(models.Model): + purchase_order = models.ForeignKey(PurchaseOrder, on_delete=models.CASCADE, related_name="items") + product = models.ForeignKey(Product, on_delete=models.CASCADE) + quantity = models.DecimalField(_("Quantity"), max_digits=15, decimal_places=2) + cost_price = models.DecimalField(_("Cost Price"), max_digits=12, decimal_places=3) + line_total = models.DecimalField(_("Line Total"), max_digits=15, decimal_places=3) + + def __str__(self): + return f"{self.product.name_en} x {self.quantity}" + class Purchase(models.Model): PAYMENT_TYPE_CHOICES = [ ('cash', _('Cash')), @@ -245,6 +276,7 @@ class Purchase(models.Model): ] supplier = models.ForeignKey(Supplier, on_delete=models.SET_NULL, null=True, related_name="purchases") + purchase_order = models.ForeignKey(PurchaseOrder, on_delete=models.SET_NULL, null=True, blank=True, related_name="converted_purchase") invoice_number = models.CharField(_("Invoice Number"), max_length=50, blank=True) total_amount = models.DecimalField(_("Total Amount"), max_digits=15, decimal_places=3) paid_amount = models.DecimalField(_("Paid Amount"), max_digits=15, decimal_places=3, default=0) diff --git a/core/templates/base.html b/core/templates/base.html index ab40dcd..e126f04 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -93,6 +93,11 @@