From 611cb5e418004ff4db8851eab869a6ca443c43c5 Mon Sep 17 00:00:00 2001 From: Deena Date: Mon, 11 Aug 2025 16:26:29 +0530 Subject: [PATCH] Reference #9 --- sos_inventory/__manifest__.py | 1 + .../sos_deliverables_boq.cpython-310.pyc | Bin 12598 -> 14117 bytes .../sos_dock_audit.cpython-310.pyc | Bin 20128 -> 20283 bytes .../__pycache__/sos_fir.cpython-310.pyc | Bin 10711 -> 11361 bytes .../sos_inventory_customers.cpython-310.pyc | Bin 1280 -> 1644 bytes .../models/__pycache__/sos_ir.cpython-310.pyc | Bin 13254 -> 13422 bytes .../sos_sales_order.cpython-310.pyc | Bin 5815 -> 5493 bytes sos_inventory/models/sos_deliverables_boq.py | 48 +++ sos_inventory/models/sos_dock_audit.py | 15 +- sos_inventory/models/sos_fir.py | 32 +- .../models/sos_inventory_customers.py | 24 +- sos_inventory/models/sos_ir.py | 9 + sos_inventory/models/sos_sales_order.py | 20 +- sos_inventory/report/sos_boq_labels.xml | 303 +++++++++++------- sos_inventory/report/sos_boq_report.xml | 100 ++++++ sos_inventory/report/sos_fir_report.xml | 26 +- .../views/sos_deliverables_boq_view.xml | 58 +++- sos_inventory/views/sos_dock_audit_view.xml | 2 + sos_inventory/views/sos_fir_view.xml | 12 +- .../views/sos_order_delivery_plan_view.xml | 2 +- 20 files changed, 489 insertions(+), 163 deletions(-) create mode 100755 sos_inventory/report/sos_boq_report.xml diff --git a/sos_inventory/__manifest__.py b/sos_inventory/__manifest__.py index 90f48b2..5408d67 100755 --- a/sos_inventory/__manifest__.py +++ b/sos_inventory/__manifest__.py @@ -114,6 +114,7 @@ 'report/mme_history_card_report.xml', 'report/sos_boq_labels.xml', 'report/shelflife_report.xml', + 'report/sos_boq_report.xml', 'data/send_indent_plan_email_template.xml', 'data/selection_item.xml' diff --git a/sos_inventory/models/__pycache__/sos_deliverables_boq.cpython-310.pyc b/sos_inventory/models/__pycache__/sos_deliverables_boq.cpython-310.pyc index 36ffa6638c1e115df553ac5d1599f0f20bc1aeb2..bb729ebc4f951fc13c42b9ced37913b111cb8f49 100644 GIT binary patch delta 5417 zcmc&&YfxLq71kB9Brq?5KnMg#0t*C2U6sv~iqH+?mFmG)>d=AvY;)oxT%0cIzL^IMZ`hLJ~4$ zNc*GG-0z+}d-m+^dF@J>xL(sC34P+xpCAKpu!;R3+BM(5IFx(WCtml%=TyhiH9F^S0CAV4C!=1p|!CBi$3$TRYF49WcK)9Q4x_%vXk_{yO-=Dz3}cMeWV}W{bYa)!h3-1CPVNZBzuMw_Pt>}YtiZF zZl@Sjd7;d<4)Z>VdJcIcVs-^XC2q;dKGYO-hH{ton1?(gKF;itL=qpnb%F|KNFNS`DS(Z#v#ZywPoK@Z4c#+I{(U zzwCEhT4fUeP6a{Z3cFH;7_e07C0wMiZM!JuEb^^faqw0}fMD$t_coq>UCp-~PG&wC4p7 zzPI+h(gsx1j?jV7iLe8q3!$1Vq(8i+8_AsrxJ}xR&NxRWGWuJRg^o>Z)LnBU~I3_*9Ze-jLs@dzArR99(8GdPEQu0AeO$I#P zqz#0PY%t3xJjHBTgVX5SRCu^=Hv@4@aachFqvBD>%14#QgbM=aqyQ?3imW-NBZoFi189Cu1%BG_&p zuqgqUO^NvA5Xz;xWD<0a2F8{cm%W-*QgjCT?_>j{2`Xh_ib|;z@TeK_Wi}s_3p~1IHk09j*2$kKxcue%jD#t{hI3m$-ChP}H%nORs6`3lj;UN1_uC0k@fZ9zZ5e@T61{q zh=OE(TOe5^o9KX-4m>r@mqk8*-cZ2nyc)GX^K1ljy?YXfVD^1 zK!?``qTl z5(K`#=YR^QlZa*c9fk6fqz5I!EU(0Be-_E5I}B@k!Sn%<1|!S9i6Y-(2TLm3d71qS zwqHQNZPR xZAqxuqb+3R6VsSn<4>oT5m7>HZuz|9U>D7h=w+i22JP3G%X#H@5b<0Ew za|+XqE)y5@4(^OcGGAaME)-Dp>A$e&-v}y%iwLU?le-|S5!h$SHw$;?&X!Ls6BRm} z`TnSAv6bzMM@3QuEEgonQGttGIVi5%%FECv^v?*(xd1oV#HOK=BI z@PP^yd$&Rt4~oQy`f#Nc%tJ?4B%+!txBl;epozu-ZNM3M2=FM3*N1orM74fcBY%?hU(J7IrY{UT2P5__boa6_anV4J&&`*0qbkgI9PeGj1!AgprB z{s7!uAR8NEUH~xx4aB#>m%N-O=VAQA5j)fgRorZRvD{*O zW}X@^;24~5*^+q=I(pg5)uqBcezdFqUq^c>F~^Q}3;ZLrzl@Z}j&?ZMNd-UJ4HpVX zCH#G3Csq8v8lz;mP)MrD`WYpuAr8(f;=Ec?2R!&QiStb40r<6AAGWiD4m&f~R8B`+ zj&}J0!VdxV&^#ph_53nYuK?K9^i`z!4gAMQ{RH6}fL$40Ga$N;_^AqgnQ(%jL_CmE zvH1&xw-I;^+4ByP%T Z%rJ_>?#n-xzQK}uAg3&6U5+JR_aD}4Lb(6{ delta 4058 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 AfdBvi delta 6186 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 ZUA{(q99Wz?;@aZc$=x*k_XU^-M z*S+&){M_2Glb^5p;P>E5PxkzF*QxLumQqj9=wRH3WseS*J$uAyteq54|&?xi~I1Q&~Gf>KzQP=j{C+DyA?53EbUsGgeOrk8FKCd;Tr zlOSoKcH9?rGINw$1H;>j;s!HytHyRFxix90CZ#jiNDxf=`p*w*4m=CtaW?}D`VRX> zeFWBC;^tCc+(!wOc8K@G(x|TyQXe89m8o3j8$g4FEMP zcgfun&7r|P(vUK!xOWdqhXbfEDAQc39+XE3@%5GCCecvrZ*fTwiULm@o7U9arY*Ovf$5@Dnk(w3*^WDXuH__j%dH3Eh6gqetl4CMD`cLR zdsF#GtZ+xylDtY1=|Ii~1Px&$Pv?I~OkN+pL|XWaF`dNae9V!Ottdo4 zo}5Z0k4d6x%;M*23;lNjdw_RE_QI%wLM7i9DdLfWT(V7wX8?1A&n!5UjYD`sMJB}R zG$422>jRnJ3+f4Zh|ej!i)_uX!aanv>@O~vjTT-3GkT%_2Gy{knn_)@9QnacJ)P*$ zVvZN=>(}kHnI2#}(OrzMEH=mj{#tPZ*`2vktdPhE@%)J=;$#fM5Jk(2yr$;TC9F4@DVl1~lG+-$G`jlxK=5x&24DtU&# zU0U8Cyknqj6hUl(1I_j#$N-+w2u7Yi?NEJyiS6a=_HC&06t6CuLeB7|Wh0YEkb&`g zG8{XW2UJvIVvEPJG|n=ZU{}IGe!|uABstEvmN%0x_&enn1IJNeA%CsnNpg|5R_c(< z$;ygChG#pP&xBYwY~>d!r?!cBPohl*;WPrOvULDA&d%7h;igTy8;_lyG@t@5YX`Yk z;5rOD_80yuBDNDCJ^|a7!ZGx<>+Z9ChI}aVUO~Q)ul7{pn8}YTO76t)Dup>on{A- z8S2xu&H>F#>fHuAgcbt`&+&W4RfLWpxgTMaYvbyM#W8st-;V-#c`mrp8O4U{;`n%K z!gBhrGw>*R`CTSUZqea(5=tAngI(DK*w_*SF_^Kux8*XGB?mCu2r7g(K zp+<^d9#>R;09nr>ynuiWW-lU~;9u32^7%EnWEXF)iB*sYQArUXt~Z`MxOsvVnU`xS z2sHhp@n#WQjK&D?1yGt6G`Fzt_>$T?H@=SiHxS-LcnjeS0?sRYA7Ki@2MA(1UPbCY zgf$4_jK7DJ7?!h0i2?c?snZy)|7#%s;FoL1ldt*JNmcyrTTceQ0iIXFPX$W2GU1nT z{}Bf-tE(bs`RuwV43J(oD{vmn^9VmsS5D5O&&+3alL^_$f16l!{Vw_mG-~)AlNPu9 zhi}l!etmE#vx)9Q>Rp7N5wL;mD}RIyyUNU~G77=$7!Gj^CxJ delta 1995 zcma)+U2IfU5P*BO+fugOb-M++?H1bIQs_bz1fo$|N?Tee(3VnB1aY~&=g__M?%wv? zZL$89pQ??BA_Jm{@)H__X!vmxf=XiWNun_bO7+SMfk2E8#DphbaONx$V|bv=emgre zXJ+oq+;eU1c$d%edOcbA2a9*c_su`;o6lT#T3x9DT-3$k`=U?g zQAnwRCrEmb^P^}m$w+v)3VtuDN`EtH5@R;}JoyP`r1PijVkOJa=oIz{?1+{UFv00jGMDs5{e*ohUmVTO@f*Bs9a6qo{!1UxS*6;BP7(+z-(Hfo6S5JGdkH;M zPRioiP^Ok_RSV6U(#TQxEHs-Ph4IkV>if^*WVf`gmIW9f>XItUa7I=`9fjetVs;kx zmnCu!P?8|ro)(12)EagUI;P%MN?8v}rtM?n;7rrl5vVN>RXRmR((V&_%CM3#E_B02 zA?lSBBa@{SHka3ws^>UD%1;T$2*(M_;Z%7!TLBl#i%Z5x@xRSFh`Jy5RJ5T>d&LI! z5qw@zQb@ydCUyxklUN>rD;3l8)mo`G?S-6h-K^#0RiO3tNo!E>SU*mkmd?p(F)b}6 z)$UoSkgtIm4z7KjY(6QrSh5%0b!#A*lJAl-zh8@W55Vw+KXL&=3$eVpZQ&$`=30PeyTFWaOP{K8T%%k)SSxFG*6%afT$dFyE1M z4C@T$Tte|C?5GN}OHf}u6~3)H$u6hmi~y^9i2T)f+6m~IX>{YAk=fco1MiG8aDHYK z_v_D@^TSus=?;Eux?S_K+|12<*chMs4={N(U0>bIo>Xg?ZE)KOXoL9fYu%=ZZR&|7 zwS=%Ac&*)_c<^;}>B@&JHFHm?e(k`s@+{#dfmT8OM7Tk1$-R!^-7GL?m9p!qFJrUb z(l3*J1|dlJg)mO|jX)EW^APRP0{O57shOx7DKjTZ9=e4=ybK#g_shQxD_}t;Z^8N5 dtNk=HNnMpxCMr)vis9*+iV0f47s#LD`v;Ax7c2k( diff --git a/sos_inventory/models/__pycache__/sos_inventory_customers.cpython-310.pyc b/sos_inventory/models/__pycache__/sos_inventory_customers.cpython-310.pyc index 2d548e467efc3716f6f4628249bc15bc572e7977..7fc552896dc8dc495ac19a7cd22d226b0567941e 100644 GIT binary patch delta 750 zcmYLHJ#W)M7`_jGoRc&ZT1rzy6a=b>ge*WXQFUVOQcx!pjL%J-UTo)VQiyB?ks`{7 zEG9ro*ce$EnfMJiut(xY@Lt-gC%uo~kLTX6^V`b5T0LG`svtO*|9n39YW=MD@VE*l z1EC=4FMu3R5yvx}Se#7p3>73NaxVj%U``KBxz|P9_>MoK4`?5AlUv8EpgGm?!pPB- zcF_zMW^O(~&+iphZuN}h?pZDycsB4@Ws<#EagjsvpZFmR=Udk&hwk z`5~a_Dk~sq6W|2F6s*9o0$3ufkQ8V@z=9=0Z)8X6-M5LdWsnHZ50sf^O&KQOG9s@Z zDB~!W{0COfO9&r|FwM$M`t*jX_#*J4j^=FWY8C*)b`5IXt}I&vL+r{HR>QTB`j_rkf*bTP%Y`Z0ecf^GdSss4*sp-v62(f`Ug!8!l{ delta 392 zcmYL@&q~8U5XN`*Ut+K&TESW*^`M7>6ny|swnuxZR|%zwmKtlj2`$J5#puc7-V`By z1h0ax(LAq~mKNE{zU++%tC1$kT=n#LuO_sv-f2aZ$mxM7 z>4dEn?r5xI8(U!FB5V*FOu%4i@daJr1^%|p8%LdxvZ}L(-8`2ST(=u^!m#THf$IuK V@BXlzcU3iGJ^O$8+f`MIJ3ld{TW$aV diff --git a/sos_inventory/models/__pycache__/sos_ir.cpython-310.pyc b/sos_inventory/models/__pycache__/sos_ir.cpython-310.pyc index b1577ced1ff0889b998025119dafae45556ccc4f..1cb55d4d457740040442d6e35405c488e850e1cb 100644 GIT binary patch delta 2344 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 DmO&WD diff --git a/sos_inventory/models/__pycache__/sos_sales_order.cpython-310.pyc b/sos_inventory/models/__pycache__/sos_sales_order.cpython-310.pyc index b4a5ee00a19d6452455af113431d737b428e1a85..b5bd074ec6f67e914fa6b9b560815c8c5fbc96d5 100644 GIT binary patch delta 962 zcmY+B-%C?r7{~YQwByljXTLW$bGkX*51r0AZJMQ(wYwGiLScnVpmdEb<`$ zK;H|%R#eckE#bT&TfCg$p;hm~dSUE{>5++9c8-6JlXExgP8lCyr9KpcPg6qJ5Yo_HWC% z7}+=uV2aila|voHwL#H(sr6wRhiGkvc1TjUW_51`DpJLCTLQ!SH0x+S zwocH%KXC2`&^=zYv>ZWztD3Z~mrED;ZWlQ&aZIr<=6RT`rY+3?a&_Dq2I+DUccsv-M%U@MNfpqWoSfrVESL8eQ)!u~q^ zpfbO6)M&|6=bR~kPIlkb2G7_lSJM8HuYO9XNwYK4r4jbcH3p-s-Cc%5_Sl_)1NPZ{ z)&80p4LE_#~F@W9ETi7 t99!(WCl)`TSW}9H#pQ*NaA>VEaQ#C9=qm^5$}0Z{{Yld@K^u< delta 1284 zcmY+DO>7%Q6vy}NuAPlzI~#vHO~_Z1X48B%P12;$lu|wp&;}7&iiKoZep}nYwcFWk zRF^FVB~m1$2&$2gK$V)d5~32QQVo<4=FQss z*Tkc#Xgv}MDRlk#L%IA@|IO%!L6MxfoA)j>4K%T52XaxnW4#+=(wpQBj7#4mc|!Ua z`8Xz}Pmm9l6inR(OrwF}9W9q^vkb9po27`Qu~#NFmyzi}J7w(-lP3Gxv6m(d{w`Qe zQFxGw4B;@2P~oTAh4qIDOo+ve;72gi`XqP{V3D6N`ZJ!g9;DGh!$9>`#~ru<9x%pTV+a`k*m%GDbvNaK zr+I-*4U{Xd@UhNcBP&$yZ#eNA(EWZZ9{K`$1@g5kZi78bj-3+noRHJ}m##dVY%Pa7 z0rb}C$S^dED$P8(bTVRSG@RE+JlItbs1?;y*$}k`sAiRQ6#+F*y{MG{bqwsNH#ARk z{+-{|5InU)&w=9VZopGE)m_b_yrx*ev$8Ee?bMxorCHmsYi^x2^2Mu;Tfby8hrK`> zvloTDL}CSftz^6GyZ|{NZ;=ifcYZb?>)Jpfk@66|m z)q>;X^Q=oe9u^{MT&6MMh!|3J=mQ-RV5--XYpZMdwL;Z)RvFrCy2$K;YglYe%X7iWL3oGKC`hiPzw5xmFN7_9V?P~Q& zU$VIkTDjMuIGOnVo%8%VGYet<*jx@8^SYjbR;p(f`Uhyz3RtSI)#{F~ovl0M1Fsf} zZ#(RBUW`qdUy5R%k@(uV)iZ2?@5YY95`P?Pz(am6J`WH02k|$}mRM#8`AWz){LlC# zJmQ0i*@0^UG=y9i@{SNsi1>%FPkB9&>3vVwRUunK9t!zd$Tq)|7&jk~^^JP1ST58` bHv5*}HZyRS|BBelow Deliverables/BOQ is waiting for your Approval

+ """ + sequence_util.send_group_email(self.env,'sos_deliverables_boq',self.id,"deenalaura.m@sosaley.in","Deliverables/BOQ Approval Request",body_html,'sos_inventory.sos_ce_head') + # Email part ends return sequence_util.action_assign_signature( self, 'prepared_by', 'prepared_on' ) + def action_ce_verified_esign_btn(self): + sequence_util = self.env['sos_common_scripts'] + # Email part + body_html = f""" +

Below Deliverables/BOQ is waiting for your Approval

+ """ + sequence_util.send_group_email(self.env,'sos_deliverables_boq',self.id,"deenalaura.m@sosaley.in","Deliverables/BOQ Approval Request",body_html,'sos_inventory.sos_scg_group_manager') + # Email part ends + return sequence_util.action_assign_signature( + self, + 'ce_verified_by', + 'ce_verified_on' + ) + def action_scg_head_verified_esign_btn(self): + sequence_util = self.env['sos_common_scripts'] + # Email part + body_html = f""" +

Below Deliverables/BOQ is waiting for your Approval

+ """ + sequence_util.send_group_email(self.env,'sos_deliverables_boq',self.id,"deenalaura.m@sosaley.in","Deliverables/BOQ Approval Request",body_html,'sos_inventory.sos_qa_user') + # Email part ends + return sequence_util.action_assign_signature( + self, + 'scg_head_verified_by', + 'scg_head_verified_on' + ) + def action_scg_esign_btn(self): sequence_util = self.env['sos_common_scripts'] return sequence_util.action_assign_signature( @@ -185,6 +231,7 @@ class sos_deliverables_boq_Line_Material(models.Model): ref_id = fields.Many2one('sos_deliverables_boq', string="Materials", ondelete="cascade") component_id = fields.Many2one('sos_material', string="Material Name", required=True) + display_name = fields.Char(string="Display Name", related="component_id.name", store=True) uom = fields.Selection([('meters', 'Meters'),('Nos', 'Nos'),('coils', 'Coils'), ('litre', 'litre'), ('kg', 'Kilogram')], default="Nos",string="Uom") currency_id = fields.Many2one('res.currency', string='Currency') material_code = fields.Char(related="component_id.material_code",string="Material Code") @@ -306,6 +353,7 @@ class sos_deliverables_Material_installationkit(models.Model): ref_id = fields.Many2one('sos_deliverables_boq', string="Materials", ondelete="cascade") component_id = fields.Many2one('sos_material', string="Material Name", required=True) + display_name = fields.Char(string="Display Name", related="component_id.name", store=True) uom = fields.Selection([('meters', 'Meters'),('Nos', 'Nos'),('coils', 'Coils'), ('litre', 'litre'), ('kg', 'Kilogram'), ('Packs', 'Packs')], default="Nos",string="Uom") currency_id = fields.Many2one('res.currency', string='Currency') material_code = fields.Char(related="component_id.material_code",string="Material Code") diff --git a/sos_inventory/models/sos_dock_audit.py b/sos_inventory/models/sos_dock_audit.py index 1e55618..83d6754 100755 --- a/sos_inventory/models/sos_dock_audit.py +++ b/sos_inventory/models/sos_dock_audit.py @@ -17,12 +17,15 @@ class SOS_Dock_Audit(models.Model): deliverables_boq_id = fields.Many2one('sos_deliverables_boq', string="Deliverables/BOQ Id") fg_name = fields.Selection( [ - ('BHMS 1.2V', 'BHMS 1.2V'), - ('BHMS 2V', 'BHMS 2V'), - ('BHMS 12V', 'BHMS 12V'), + ('BHMS 1.2V', 'BHMS 1.2V'), + ('BHMS 2V', 'BHMS 2V'), + ('BHMS 12V', 'BHMS 12V'), + ('BHMS 48V', 'BHMS 48V'), + ('BMS-HV', 'BMS-HV'), ('BMS-LV 100A', 'BMS-LV 100A'), - ('BMS-LV 40A', 'BMS-LV 40A'), - ('MC 250W', 'MC 250W'), + ('BMS-LV 40A', 'BMS-LV 40A'), + ('SBMS 55A', 'SBMS 55A'), + ('MC 250W', 'MC 250W'), ('HeartTarang', 'HeartTarang') ], string="Product Type",required=True) @@ -384,6 +387,7 @@ class sos_dock_audit_Line_Material(models.Model): ref_id = fields.Many2one('sos_dock_audit', string="Materials", ondelete="cascade") component_id = fields.Many2one('sos_material', string="Material Name", required=True) + display_name = fields.Char(string="Display Name", related="component_id.name", store=True) uom = fields.Selection([('meters', 'Meters'),('Nos', 'Nos'),('coils', 'Coils'), ('litre', 'litre'), ('kg', 'Kilogram')], default="Nos",string="Uom") currency_id = fields.Many2one('res.currency', string='Currency') material_code = fields.Char(related="component_id.material_code",string="Material Code") @@ -689,6 +693,7 @@ class sos_dock_audit_Material_installationkit(models.Model): ref_id = fields.Many2one('sos_dock_audit', string="Materials", ondelete="cascade") component_id = fields.Many2one('sos_material', string="Material Name", required=True) + display_name = fields.Char(string="Display Name", related="component_id.name", store=True) uom = fields.Selection([('meters', 'Meters'),('Nos', 'Nos'),('coils', 'Coils'), ('litre', 'litre'), ('kg', 'Kilogram')], default="Nos",string="Uom") currency_id = fields.Many2one('res.currency', string='Currency') material_code = fields.Char(related="component_id.material_code",string="Material Code") diff --git a/sos_inventory/models/sos_fir.py b/sos_inventory/models/sos_fir.py index e2302b6..9ab45da 100755 --- a/sos_inventory/models/sos_fir.py +++ b/sos_inventory/models/sos_fir.py @@ -51,21 +51,45 @@ class FIR_Only(models.Model): stores_received_on = fields.Date(string="Stores Received On") ncmr_ref = fields.Many2one('sos_ncmr',string="NCMR Reference (If any Rejected)") customer_name = fields.Many2one('sos_inventory_customers', string="Customer Name", required=True) - remarks = fields.Text(string="Remarks") test_log = fields.Binary("Test Log", required=False, attachment=True) test_log_filename = fields.Char("Test Log Filename") rejected_line_ids = fields.One2many('sos_fir_rejected_lines', 'ref_id', string="Finished Goods",copy=True, ondelete='cascade') serial_no_line_ids = fields.One2many('sos_fir_serial_no_lines', 'ref_id',copy=True) - sd_card_data = fields.Binary("SD Card Data", required=False, attachment=True) sd_card_data_filename = fields.Char("SD Card Data Filename") - cloud_data = fields.Binary("Cloud Data", required=False, attachment=True) cloud_data_filename = fields.Char("Cloud Data Filename") - firmware_data = fields.Binary("Firmware Data", required=False, attachment=True) firmware_data_filename = fields.Char("Firmware Data Filename") + serial_no_parse = fields.Text(string="Serial no's to parse") + def parse_serial_nos(self): + self.ensure_one() + if not self.serial_no_parse: + return + + # Split into clean serial numbers + serial_numbers = [ + line.strip() for line in self.serial_no_parse.splitlines() if line.strip() + ] + + SerialLine = self.env['sos_fir_serial_no_lines'] + + for serial in serial_numbers: + # Check if already exists for this ref_id + exists = SerialLine.search([ + ('ref_id', '=', self.id), + ('serial_no', '=', serial) + ], limit=1) + + if not exists: + SerialLine.create({ + 'ref_id': self.id, + 'serial_no': serial, + 'inspection_decision': 'PASS', # default + }) + + @api.onchange('batch_size') def _onchange_batch_size(self): if self._origin and self.batch_size is not False: diff --git a/sos_inventory/models/sos_inventory_customers.py b/sos_inventory/models/sos_inventory_customers.py index b9c0615..b54768a 100755 --- a/sos_inventory/models/sos_inventory_customers.py +++ b/sos_inventory/models/sos_inventory_customers.py @@ -18,18 +18,30 @@ class sos_inventory_customers(models.Model): new_name = (vals.get('customer_name') or '').lower() if new_name and len(new_name) >= 5: - existing_customers = self.search([]) + # Words/phrases to exclude + blacklist = [ + 'private limited', 'pvt ltd', 'pvt. ltd.', 'ltd', 'llp', 'inc', 'co', 'company', 'corporation' + ] + def clean_name(name): + for word in blacklist: + name = name.replace(word, '') + return name.strip() + + new_name_clean = clean_name(new_name) + + existing_customers = self.search([]) for customer in existing_customers: existing_name = (customer.customer_name or '').lower() + existing_name_clean = clean_name(existing_name) - # Check all substrings of length 5 or more - for i in range(len(new_name) - 4): - substring = new_name[i:i+5] - if substring in existing_name: + # Check all substrings of length 7 or more + for i in range(len(new_name_clean) - 6): + substring = new_name_clean[i:i+7] + if substring in existing_name_clean: raise UserError( f"A customer with a similar name already exists: '{customer.customer_name}' " f"(matched substring: '{substring}')" ) - return super(sos_inventory_customers, self).create(vals) \ No newline at end of file + return super().create(vals) \ No newline at end of file diff --git a/sos_inventory/models/sos_ir.py b/sos_inventory/models/sos_ir.py index ed8d164..6a19daa 100755 --- a/sos_inventory/models/sos_ir.py +++ b/sos_inventory/models/sos_ir.py @@ -217,6 +217,11 @@ class SOS_IR(models.Model): for item in self.line_ids_material: # Fetch the component related to the current item component = self.env['sos_material'].browse(item.component_id.id) + if self.supplier_name and self.supplier_name.id not in component.suppliers.ids: + component.write({ + 'suppliers': [(4, self.supplier_name.id)] + }) + if component.shelf_life == "yes": shelflife_line_values = { 'ir_ref_no':self.id, @@ -301,6 +306,10 @@ class SOS_IR(models.Model): for item in self.line_ids_sfg: # PO update part sfg_component = self.env['sos_sfg'].browse(item.component_id.id) + if self.service_provider_name and self.service_provider_name.id not in sfg_component.service_providers.ids: + sfg_component.write({ + 'service_providers': [(4, self.service_provider_name.id)] + }) if self.wo_planned_at == "outsource": if self.wo_no: if not self.orr_no: diff --git a/sos_inventory/models/sos_sales_order.py b/sos_inventory/models/sos_sales_order.py index d7a1ab4..3ee5d5b 100755 --- a/sos_inventory/models/sos_sales_order.py +++ b/sos_inventory/models/sos_sales_order.py @@ -25,7 +25,7 @@ class SOS_SalesOrder(models.Model): ], string="Product Name",required=True) line_ids = fields.One2many('sos_sales_order_line', 'ref_id',copy=True) - customer_name = fields.Char(string="Customer Name") + customer_name = fields.Many2one('sos_inventory_customers',string="Customer Name") lead_time = fields.Datetime(string="Lead Time") customer_po_no = fields.Char(string="PO No") customer_po_date = fields.Datetime(string="PO Date") @@ -58,7 +58,7 @@ class SOS_SalesOrder(models.Model): 'sales_id':self.id, 'fg_name':self.fg_name, 'quantity':self.qty, - 'customer_name':self.customer_name, + 'customer_name':self.customer_name.customer_name, 'lead_time':self.lead_time, 'customer_po_no':self.customer_po_no, 'customer_po_date':self.customer_po_date @@ -109,15 +109,15 @@ class SOS_SalesOrder(models.Model): sequence_util = self.env['sos_common_scripts'] return sequence_util.generate_sequence('sos_sales_order','SALES', 'order_id') - @api.model - def create(self, vals): - customer_name = vals.get('customer_name') - if customer_name: - existing = self.env['sos_inventory_customers'].search([('customer_name', '=', customer_name)], limit=1) - if not existing: - self.env['sos_inventory_customers'].create({'customer_name': customer_name}) + # @api.model + # def create(self, vals): + # customer_name = vals.get('customer_name') + # if customer_name: + # existing = self.env['sos_inventory_customers'].search([('customer_name', '=', customer_name)], limit=1) + # if not existing: + # self.env['sos_inventory_customers'].create({'customer_name': customer_name}) - return super(SOS_SalesOrder, self).create(vals) + # return super(SOS_SalesOrder, self).create(vals) class SOS_SalesOrder_Line(models.Model): _name = 'sos_sales_order_line' diff --git a/sos_inventory/report/sos_boq_labels.xml b/sos_inventory/report/sos_boq_labels.xml index 86ae22f..c7a8ea7 100755 --- a/sos_inventory/report/sos_boq_labels.xml +++ b/sos_inventory/report/sos_boq_labels.xml @@ -86,131 +86,192 @@ } -
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Set No#/
Battery
No.
Name + + + + + + +
UOM + + + + + + +
Qty + + + + + + +
S.No
+
+
- - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Set No#/
Battery
No.
Name
UOM
Qty
S.No
-
-
- - -
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Set No#/
Battery
No.
Name
UOM
Qty
S.No
-
-
- -
-
-
-
-
+ +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Set No#/
Battery
No.
Name + + + + + + +
UOM + + + + + + +
Qty + + + + + + +
S.No
+ +
+
-
+
-
- +
+
+
+
+
+
+ \ No newline at end of file diff --git a/sos_inventory/report/sos_boq_report.xml b/sos_inventory/report/sos_boq_report.xml new file mode 100755 index 0000000..4ab3776 --- /dev/null +++ b/sos_inventory/report/sos_boq_report.xml @@ -0,0 +1,100 @@ + + + + + + BOQ Report + sos_deliverables_boq + qweb-pdf + sos_inventory.report_boq + + \ No newline at end of file diff --git a/sos_inventory/report/sos_fir_report.xml b/sos_inventory/report/sos_fir_report.xml index 88073d7..f99c570 100755 --- a/sos_inventory/report/sos_fir_report.xml +++ b/sos_inventory/report/sos_fir_report.xml @@ -45,10 +45,7 @@ Sampling Size - - Serial No - - + @@ -56,10 +53,7 @@ Sampling Size - - Serial No - - + @@ -74,7 +68,21 @@ -

+ + + + + + + + + + + + + +
Serial No's
+ - @@ -307,6 +353,8 @@
Verified By + QA Verified By



+
+
diff --git a/sos_inventory/views/sos_dock_audit_view.xml b/sos_inventory/views/sos_dock_audit_view.xml index f2d52c0..db5c7a5 100755 --- a/sos_inventory/views/sos_dock_audit_view.xml +++ b/sos_inventory/views/sos_dock_audit_view.xml @@ -108,6 +108,7 @@ + @@ -122,6 +123,7 @@ + diff --git a/sos_inventory/views/sos_fir_view.xml b/sos_inventory/views/sos_fir_view.xml index f31eb38..de4fe21 100755 --- a/sos_inventory/views/sos_fir_view.xml +++ b/sos_inventory/views/sos_fir_view.xml @@ -20,11 +20,12 @@ - + + - + @@ -61,6 +62,13 @@ + + + +
Parse Serial No's
+

+ + diff --git a/sos_inventory/views/sos_order_delivery_plan_view.xml b/sos_inventory/views/sos_order_delivery_plan_view.xml index 77bbb78..bc79c39 100755 --- a/sos_inventory/views/sos_order_delivery_plan_view.xml +++ b/sos_inventory/views/sos_order_delivery_plan_view.xml @@ -62,7 +62,7 @@
- +
Finished Goods