From 0c8a19f7f47e209754bcb64053f5c9b22b467157 Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Wed, 21 Jan 2026 09:08:34 +0700 Subject: [PATCH] Fix product_lot_sequence_per_product: Add missing action, cleanup .pyc files --- .gitignore | 2 ++ __pycache__/__init__.cpython-310.pyc | Bin 231 -> 0 bytes __pycache__/__init__.cpython-312.pyc | Bin 209 -> 0 bytes models/__init__.py | 3 +- models/__pycache__/__init__.cpython-310.pyc | Bin 388 -> 0 bytes models/__pycache__/__init__.cpython-312.pyc | Bin 370 -> 0 bytes .../mrp_production.cpython-310.pyc | Bin 1430 -> 0 bytes .../mrp_production.cpython-312.pyc | Bin 2311 -> 0 bytes .../product_template.cpython-310.pyc | Bin 2522 -> 0 bytes .../product_template.cpython-312.pyc | Bin 3546 -> 0 bytes models/__pycache__/stock_lot.cpython-310.pyc | Bin 949 -> 0 bytes models/__pycache__/stock_lot.cpython-312.pyc | Bin 1392 -> 0 bytes models/__pycache__/stock_move.cpython-310.pyc | Bin 2816 -> 0 bytes models/__pycache__/stock_move.cpython-312.pyc | Bin 3861 -> 0 bytes .../stock_move_line.cpython-310.pyc | Bin 1139 -> 0 bytes .../stock_move_line.cpython-312.pyc | Bin 1612 -> 0 bytes models/stock_picking.py | 34 ++++++++++++++++++ 17 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 .gitignore delete mode 100644 __pycache__/__init__.cpython-310.pyc delete mode 100644 __pycache__/__init__.cpython-312.pyc delete mode 100644 models/__pycache__/__init__.cpython-310.pyc delete mode 100644 models/__pycache__/__init__.cpython-312.pyc delete mode 100644 models/__pycache__/mrp_production.cpython-310.pyc delete mode 100644 models/__pycache__/mrp_production.cpython-312.pyc delete mode 100644 models/__pycache__/product_template.cpython-310.pyc delete mode 100644 models/__pycache__/product_template.cpython-312.pyc delete mode 100644 models/__pycache__/stock_lot.cpython-310.pyc delete mode 100644 models/__pycache__/stock_lot.cpython-312.pyc delete mode 100644 models/__pycache__/stock_move.cpython-310.pyc delete mode 100644 models/__pycache__/stock_move.cpython-312.pyc delete mode 100644 models/__pycache__/stock_move_line.cpython-310.pyc delete mode 100644 models/__pycache__/stock_move_line.cpython-312.pyc create mode 100644 models/stock_picking.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a60b85 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +*.pyc diff --git a/__pycache__/__init__.cpython-310.pyc b/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 026e5af0bb3adb3b3194013a7ab61e44cc36dfd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmYjLy9&ZU5WI^bA_x}#M4B9S79xIu2zE9{yj@5zcN_0fk&O2MSr7H{-HK;=uD{_W^C<3C@TA36g*%E+UP^~9OChCTw j4tP!I4C)rW{vDLowX37nMceh$4R=WmZii}N=&}$W*&ROb diff --git a/__pycache__/__init__.cpython-312.pyc b/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 39e3b777f001c6adb6f20a6ded52da9ff0a9b0ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmX@j%ge<81gSsnWQYLi#~=<2FhLog1%Qm{3@HpLj5!Rsj8Tk?43$ip%r6;%!kUb? z*mCnzQge#^G?{KO6fpzERx*4B>HOuFVii+RS(1^Tmkd-9lb@2GZ)g#dTv}X`pPQJH zlAl)`Q&5zjQkq;6pOaq_Uz}Q4nwpoK8efoF6c3e%iI30B%PfhH*DI*J#bE=qsWd0m au80F@JjnK95aRr{y47y diff --git a/models/__init__.py b/models/__init__.py index 23e3486..ede103c 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -2,4 +2,5 @@ from . import product_template from . import stock_move from . import stock_lot from . import stock_move_line -from . import mrp_production \ No newline at end of file +from . import mrp_production +from . import stock_picking \ No newline at end of file diff --git a/models/__pycache__/__init__.cpython-310.pyc b/models/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 86288cc46dcf782bfe1a4bd8104bf08f2bf26337..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmYk2%}&H16osKb<2aeod5vyL+_^Ajp1_#6>xNVyX(MneP?Nrd@8K(T>&mUVa^=0% ziC)6tI}mOTz;3r;SRbG7-7~JQWd2u%=72MjXr{SkjyIeWXUJKTEu16gO}=n}Tr|bP zC34x6$g4Y6oxE{uQ}KB}1kj^OG8s46HW}R8#02U=I(Q;?`r|AlH0OUu()OOt&s-Sf zZYhseGAUbeH#IZ9$PxaI)xIegdXnn1q?zOm`QU_jv zHUc!j#idXq25_y`;G;N3$7nK|$I*CYVI`y^#OO!N8*H%Du(>HU$u Le9N|+#-4uz-D_$4 diff --git a/models/__pycache__/__init__.cpython-312.pyc b/models/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 93ddb1c0b0bb41b5701938747e268f5daa0cc066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmYL_y-EZz6oqf*Z*_6iLRbs6pGL3~5%CG^Y=%HsCV?HypP7s>FJbF5_$0umR@wugk$~m2qk$EdNXY7GJChFmH@16} zM4by+j`Ic_k|VEVapN>^fJU&Q+%s8a4oEn1#Z}e*>Z>Z-Ww#q57~-!#X39tCPpcdb z3d$)=^*IQRIL=UxCpae)f~`(6C#MsN(RYYDoW4e!3Osi=&cx&HD>U?OVILY2@QYO}YI0z`GFx7h?1e#!uCWPaO!wGj@qY32{U|rLFDXVi?@;cFJ zS*(t8S&gc&le<6=R8d}7;xV4>uBj9Ffp6b<6 zDo1<2Gdk3J$ThR2WNGDA>^QxgLuHjG_ErZAKp_P z5*a`s8QExk6N*CBQn0cRt=;tYv~^x(z|;7bLdRN5<3KFq%DA``CM?84vkRMuabgZa z6xYU6B9_U_5J<00EZTpTz!^7v22iXu-De@~C6bP1(lJztY}(Q?{sRX?EeRX=%D7sl zf*Zn8(@Eljr##lebi^W6nnAsPNAd#zx?7BAWiH05o(aj9qh*|w7pHj)RUakgDCOhx zrJj|AB{VL1S$_6>oYYX>9I_}2HQuNHsJ)et?7=aN)a~Ow_zpeqfCms9 zg1tAZj~`w4(SLF{gQp>2%$_vHOvo7IQD=4?F?LnQ*@GuwX#u56wR{SM+nOGT53S7w zVW;vy1PI8G)^;}Z4Yf6u_N{9BYI;^5iA5qR`y8pZ<;Hz!-@JCy0l4j-v=L13#XY;P O?44-C^ihQ0b^Zm!KZY>? diff --git a/models/__pycache__/mrp_production.cpython-312.pyc b/models/__pycache__/mrp_production.cpython-312.pyc deleted file mode 100644 index a6a86fd8c74315aef1445a509669771dd6aac31e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2311 zcmd5;O>7fK6rR~1|7?D2uoEZ5QA`R+7llL-LZr0x0EC|uA|zT-Ifm8ZnGn0S*UYYI zlCCRMaY&^~O;iaRsS-h|1Sm-5*q%yHrRt%!f|SiDRS)fjTOh4e_0$>Ln*bvB&SBo~ zy!qa|eb4@-r9}a3;eXbqOfLX`aKT-2gV`8kObH->UXif^iWEH$YsP5mkw{oF(~l#6X3ll`?X(tyz*E%x}s`Hwcf#(Qz~zy=*T5 z8>C;fau2qa>IASXVG%MPp`mzz6a`yIOD`xIY*Dn>OV*doKqBa7UzBW#+_e0z)xD)C zTTQMGiAxPU$HB!<0VsNGDc#~)x9H|sukAHiHF9a&Ys=RFfnP*zIUU&YbUEAWMut4= zpsU}aNa|!lI<%#6IV2+w%Qo!FTXa%HUgSf5W(R3rqgU28XB6h|ofNOgsOdrTQsZ@t zKHJCe+qSm|Sw>I-HZ&h@gSDlGm2a;s)avHRDhHdvG&IlrPcnwD%~;(g!+JHkUP+IM zuYYM<*nCHpw;8s&-IG?2%b|e#HZJ`PzP_$DM8U6x^FZA(eu4%vhNYSKY60hxSWBU& zyoqN0re!2Q8e}%AG@6asC_F-;t%_7h8ri&_n_)WA%=}M~R<=_qr)Tj~{*AMymouqs z%9?FTkwG{7Y;ZFy(~*>(nH@Qo!McfKCbnYM6pl@%h-t;n*Nn08LiREyF@wbP7{Zf! zA!9MeI#g94ys-%H1~o_(oHGjqYeo*&^fchYwzByQ$L_s?E#0yR71>=>CVK7)rb-S^ zTiRuw2o-h2Hk`XgJto#ka*7Hpy;@?;u3M5#H5$}dD6OWdXF>QlC463}ekz$bGg*U0 zy$uXh;vo3NSE+1~6h>6gQq-T+b0~#$3sXOyPMMa*-rM9OB<8MvC(z+Ue#V+Ia{TIq zfed4KB#|tzhs-j(M$SyQiM~|GJSJMhkf@L11RI>LiVf1i{0!}6GS2Jl*=lv+*K61G zOaYs-{Vz@3!EGIV46XTqmHawze9d15J`X(cbvl9YoaF3mFAXgW&3T_-H8Zjav@UycsU`&T2e)o`a1 ziZ064&|W7Tb%Jdr|AN1)J_+t|qOsejZk<}3s78lZq9fJlh|{)v@xVRrx5|B`5OOBJr4ic^K;M2>51y;iORu*)7Di!zo=Hi1M6Pt@XmD~*wwY}2iIi9PED!LSpGltvat%4e&geJi0u)zG2J$k=k|y}9E~_wI7X zb0BqgETX$pcc$)rQtf+trSE99@2In*yKF9=ygPPhtP&h@f}u*=(8Ga8;-mL}(tgxd zMlV!HFI0v>p{&+cZVP0AdMb_GTzJZnA#B%K7a{Hx9@Y1>mboJiecWa*$?sz7P zL1i6?er1Cd4UDTY^=TS!Sxuvgrm@eYkl}o@rd=)QnTExurE*iOA1%_)PTdFOO-4u` z-}rA~ZR6j+$p^s=-~@WEpW2XAS*bg6pK;YoCI0CW{_9+86dK_2Af8U*JpWxcYdu8e zv;1#EJ@9_+yLlP)y;BGHE*WM9K4eTjKi5SF;qPGAZ(#3Vo&l)LpD3MKIP*7PZ0+!W D>Odje diff --git a/models/__pycache__/product_template.cpython-310.pyc b/models/__pycache__/product_template.cpython-310.pyc deleted file mode 100644 index 04d2d22bf6b2da925b2885d7dc6b30cc79e8e31d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2522 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 O@#}ak{u?+zs0%J7?sS_B|ecM+TI8ymc1zTf#Z; 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 HSiAoN5g_j= diff --git a/models/__pycache__/stock_move_line.cpython-310.pyc b/models/__pycache__/stock_move_line.cpython-310.pyc deleted file mode 100644 index 3069864e39553757852f1cdabe067f041723c690..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1139 zcmZuwOK;RL5VoD{c3E1AXhA(%LZV#>lER5Yg(?srB#MxF+l!Tr-6q>44t7$MYI}m8 z!J$3!mwe^KmB)nxVkX&b_rOSg%-HkI%;&LQTN@IPpTB-2zdb^}p|UJKDElz%1DGU{ zG$T13)0~YNC9jEO()&!Lr`Xi{207?K28Nh|`$8~VsDiwJVH22UIb8?N%QYIvqAQAD}o zQY*^~UGdncs8T$_BXFpciL$KWcuAsfa24du(Y1SO=YWX(p^h?(cOUXhRlH*i;DQc& zXT*mHYkBrW*kkMKiE$g`2w!Bp4(Olyez*P||zLP|S%pj#n!*y-0gK&5m zV^XO`*O@xv=r)hH?C(Zla^)x59(Md z%?;eF0WBg<(oBM@9r@0;DmyYa@oc@&CXcf8Ov#pA=br*2Ux~Q`r+=C-(YXq3ohT!l zpowBV+0P@$B8YX6%J6+tCAx^AZ$mA$e*83yYalU?q|}8C7ujQe3qAypB<2TU*YRP? zyTDEr*r`F;xVvyim61`RP#*;XU}7tfmBrKs{ab94GOthjf4RR(eR_8PaJl`1|N6fh z_1r+Tl?vg80%FQKQ?OqZ0-FI@2W=qI0%}exvkAdkGM1(dwBZlJVf!!*h)-8pYr_ye ll40=Q8vJCgcYr^;Jzj#rIt*gD!CsfgGyI|!QE!ub-aq@^K5YO1 diff --git a/models/__pycache__/stock_move_line.cpython-312.pyc b/models/__pycache__/stock_move_line.cpython-312.pyc deleted file mode 100644 index 6901acd10b9705aa48d7dae171917b64a1ec6bf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1612 zcma)6O>A355Z?FW#5guCiUVmBH5<{8SOh1i2P#xKm$rbEa3Gh;vh?)wc3nT`y|-rf zImD48_0WTRq3y}4gan+R>Vb+=IdMhef(w$3)95?3-(M|y8(c4oer zo!Qx+Q>g?2>OT9s{M;bqPZWj}8!+8GFfGCe(>&s91jS_;DwuUM8~Y2{tR5M5)r}^6!MLX!+#8ZMV7jjZ(;}P{G)4+K(+UPg0Td%^Myc&k zIJ;Y7k8ipGKS(PSb3Vv94>p`33W8yL{JNjRZi_TXWmJn6Ko9y0(NM1sgpp-mQ*c(M zRfg3V(G7hMwT31q8yeGh-y=lo4K2`^ai}+Rz#LPVN_+%lz%ug-{m}Ry`(BS;^pQod z9kc)P2$kfEh$y|h_rW9~dqkccpT)QnHVhWKgfWb5lAW+;p&1D}peuo@NlwGE9nu|f zy{71ntvL1ET~3$Rm#L7H`_-^cJrP=g?Q_ZmS2PeIbtJb#PHj|yL&&A=d3B0L41IGa zK|U&-y1Qxsh{&JTY)_%>D)o3s`*#Z9a((QTEWOSHz=bejnfIV+Necf28F#Bvu$mJt zD_Z69oqQvO^X%Gr`S4x-h>}jSEiL~{rFfAq?BT5X=ESE(I zNBC7cr~{v!j1s(8I7EGgK|H#a?w(f2{&MbfRNoP9Op3eO`z21yJc`Ntu;v@C_#=VuFV$JmN z1erO1Gxwxz+aE>eHBUCebvH<0N_J_QtJ^&eYQ5sikkvf46pj?GgJ?{2)5{ zYwi5CPQKL6mws{mj=SG>_x~aAv|QGoo-7+Z;q5E>(c;oK3tumE7B93HFElUTnQtf0 z9i^w6Q(efJe4LF%ajREx%Zd^fl!eti4t&zG@KR#;L5f>$Q0CGNCBBXKiF^YVIfFlZ zU3x$4mBL2fBu8m_mlcV&5dbh!U-%*cQIReTaG7J%Nqlm-?yXCCV0)hb0SwZChX4Qo diff --git a/models/stock_picking.py b/models/stock_picking.py new file mode 100644 index 0000000..7a8f31b --- /dev/null +++ b/models/stock_picking.py @@ -0,0 +1,34 @@ +from odoo import models + +class StockPicking(models.Model): + _inherit = 'stock.picking' + + def action_auto_generate_lots_subcontract(self): + """ + Auto-generate lot names for move lines in this picking that: + 1. Have a product with tracking enabled (serial or lot). + 2. Have an empty 'lot_name' and no 'lot_id'. + 3. Have a product template with a configured 'lot_sequence_id'. + """ + for picking in self: + # We iterate over move_line_ids (operations) + # Filter for lines that need a lot generated + lines_to_process = picking.move_line_ids.filtered( + lambda ml: ( + ml.product_id + and ml.product_id.tracking in ('serial', 'lot') + and not ml.lot_name + and not ml.lot_id + and getattr(ml.product_id.product_tmpl_id, 'lot_sequence_id', False) + ) + ) + + for line in lines_to_process: + # Get the sequence from the product template + seq = line.product_id.product_tmpl_id.lot_sequence_id + if seq: + # strict=True ensures we skip if next_by_id fails, though usually it returns None/False + new_lot_name = seq.next_by_id() + if new_lot_name: + line.lot_name = new_lot_name + return True