From 9e0e5ad977064658381ab14bad6295a43c791d75 Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Thu, 4 Jun 2026 10:14:37 +0700 Subject: [PATCH] feat: add stock dependency and dynamically update stock record rules for multi-company access --- __manifest__.py | 2 +- .../__pycache__/hr_employee.cpython-312.pyc | Bin 7288 -> 8869 bytes models/hr_employee.py | 27 ++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/__manifest__.py b/__manifest__.py index 1c64679..ba8e071 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -8,7 +8,7 @@ It allows an employee to be associated with multiple branch companies. """, 'author': 'Suherdy Yacob', - 'depends': ['hr', 'pos_hr', 'hr_attendance', 'product'], + 'depends': ['hr', 'pos_hr', 'hr_attendance', 'product', 'stock'], 'data': [ 'security/hr_security.xml', 'security/hr_attendance_security.xml', diff --git a/models/__pycache__/hr_employee.cpython-312.pyc b/models/__pycache__/hr_employee.cpython-312.pyc index 4c07b77c523f9b69bdd79c5f2e3bf688a3417dba..433cc6d7a5dc5820f79f635aa52f294d30327008 100644 GIT binary patch delta 2703 zcma)7U2Gd!6~5Q@jO`?2J9ca*&Y#<+Nxa*dZGK9cMr{^$!=JWl=~8yvhN!PgMZa6uJC;+Z zKlp5s0@b=V19w~E%ON3&ZU!!gwb&-P9PtpaJbcg!k=An;{0lC=N%rica5~YHw^J?I zD;y^_gL_9~c$9xgdlGH-JzL}ky&S(tGJW@^Je<~BL4-32s26^ZUjyk6=nkpu#keKa z$oD}1%sV9p(WnLAC5xk!6|xy(h*$kYdT2M~nTe=Ps!5x#_FI zsIFFWYq@oyX{v|!%u&rOt(vbGR!KFjO7pDMhN zLB$H1o`>2)n^rz20`KeN?fRm%+A1jZKVs7;p{@?SOSCJ$Rn3)JRUB=X?O@)2fC(4{wFJ{GSk;o| zbZJ&GXOsZ3yq*a-l3gw9%n7MXUoz~9&eZFcwch9G+~ojm#{&t6I9i_nX_$GwPlc|)BHVOzTOM$ zM&B3N%f+&3t?PRBU>3umw$H%*@$?Py&wz5ve?Ktv$3WWkboY1cc8xa1FS%Y|KkRzG zar}xa0qe>{IflTGAV8FC<11_aOG-)=N$}_Cw#p-pu{p%ug>p=$+h+^y~z;gS_)$Bd2bl4R@azSlVtRYXYtKTW-A1G>q*%*&KINaMBloKQVLCPe zM;>9K8Hr87A436~L?WVk3@szGA^z*Ymt|4LIPVOO(gi*d{63wy_q(7@PwbnVLOc90 zJAS;hAmfaunddABZESBk&7i){ae9Hj)%h-@k?y+V8N`4Nt%>N5@FV#M&wffrGhQ~q z{~Eg141S(}K0HmY@%8X-eFP3roQ6lCR01oB`&wOikuYzPF+SW+b=8cF%7x|weXP}07_p}d& z_m%j7ELt$di}5VX@kjBq^ez6E_z4-aWv6&7QBL3jIX+k>%?T6?6IM#s*cJY6;(SrofkxoS_@{-b;Ro(ggok@7V~p-3hz`O`fnyI-BID`_gr( zXlc61@Y-;qf>)b+rWUJa#SmL4CM&kc@oRcnFF`E)P%|u(t)i*Yx{UI=X{u_5HXDP3 znQv}0_J|?D-LXFb@^q8zhWYz_h4|aAf9Lhbo}@JQ*h}QFi<~>fXHu(lg#RM-+qpHg zy@6yM$p#X1!@i9~Y}0Y%M9;+1y@?RXkNMC0v(09{$^X$mofDdar#}tMLE&(vo?%;H zf=SyafVf^t>7PmHZ)EHN8GGXUx`z(jPV5Y94?H2rKdJZvRKC5sQ`@e6LVy(s{0DW~ B{YwA< delta 1206 zcmZuw&2JM|5Z~vuolS`C#EG2`+p$Xp&bC!Ps6ZT|Btk?45K>#9hfuLtyU)e2_PX<& z&{&~~R9B)mqE{7hLqZ%7obX>z^$6n9L(vPUoGL{EfkcoH>VcWvs7<84!*6Hj{pMqT zGka(5-QoDdSgcFKGt)P8>1b*_{)nAf-}r6ynpS2`Z_8MSImwo`5D#g*>(U4jcOR$k z9t%89e@nZ!eYwzs?7h30^yUosc~h;0}W7V8{T)COK^a1|Ddjwc^?4S$9vcgw1CspJaFt%!!|CME#sYGLzWPK9xrjzp!Ha&je?a|AmZGh|X(E zs>AlGb?n#-1$|E7jR+wW3NRw8y`$`q{I&NcwlR^s70OXT#a8_4n>6lC;=X75O&yBz zW&ees_%V4pb&$=;pHoj(^GGmt74^zx!5b>#R;m?zc;Ilrs=jm`mf$6@FPcWsMK{L4 zJi&2-69_7L`AP}C6>y9^zK8}|1^>)$3waVf&EyUtEg_$$BkYL$J3SqxPHbJi*8AJj z1KBXn@mwYwB`v^|S2JTc()*bic3Hm2O!{OPmmg>AX&R;q<7zp|C|BGD2kyXE@^1Ev z1kF};0JrgT1e}pZ?kt;-=X1lDYdLqAS?ve8;|wePGcwad`YYoUs(rw#aTt{+^M%!9 z)pNLO1#4zi7u`k$XbJtX`YWV59A4)&%%7kH5kCOvQ=v+Z*!CLR+;uI>WPvy|oY`Q# zNGBkm{SnU)-nFzRiR{|^^Q3&0FUgAq!SeEH;rFQ;Q9Xh>!FL1{1wi005dF+RQU=MJ zWD)!*H$EB*WNXUA-h(CoW;gr2F@@bPx_lZ|F@$;)lL)VM#@L1y|4S?Wp%u5nD~x5Y dr*CA}vs)V3TR-Rqi(X&4v9iAMRzuTo-~-HSAtL|) diff --git a/models/hr_employee.py b/models/hr_employee.py index 252478d..a8a0766 100644 --- a/models/hr_employee.py +++ b/models/hr_employee.py @@ -28,6 +28,33 @@ class HrEmployee(models.Model): domain="[('share', '=', False), ('company_ids', 'in', company_ids)]" ) + @api.model + def _register_hook(self): + super()._register_hook() + rules_to_update = { + 'stock.stock_picking_rule': "[('company_id', 'in', user.company_ids.ids)]", + 'stock.stock_picking_type_rule': "[('company_id', 'in', user.company_ids.ids)]", + 'stock.stock_putaway_rule_rule': "[('company_id', 'in', user.company_ids.ids)]", + 'stock.stock_production_lot_rule': "[('company_id', 'in', user.company_ids.ids + [False])]", + 'stock.stock_warehouse_comp_rule': "[('company_id', 'in', user.company_ids.ids)]", + 'stock.stock_location_comp_rule': "[('company_id', 'in', user.company_ids.ids + [False])]", + 'stock.stock_move_rule': "[('company_id', 'in', user.company_ids.ids)]", + 'stock.stock_move_line_rule': "[('company_id', 'in', user.company_ids.ids + [False])]", + 'stock.stock_quant_rule': "[('company_id', 'in', user.company_ids.ids + [False])]", + 'stock.stock_warehouse_orderpoint_rule': "[('company_id', 'in', user.company_ids.ids)]", + 'stock.product_pulled_flow_comp_rule': "[('company_id', 'in', user.company_ids.ids + [False])]", + 'stock.stock_location_route_comp_rule': "[('company_id', 'in', user.company_ids.ids + [False])]", + 'stock.stock_package_comp_rule': "[('company_id', 'in', user.company_ids.ids + [False])]", + 'stock.stock_scrap_company_rule': "[('company_id', 'in', user.company_ids.ids)]", + 'stock.report_stock_quantity_flow_comp_rule': "[('company_id', 'in', user.company_ids.ids)]", + 'stock.stock_storage_category_rule': "[('company_id', 'in', user.company_ids.ids + [False])]", + } + for xml_id, domain in rules_to_update.items(): + rule = self.env.ref(xml_id, raise_if_not_found=False) + if rule and rule.domain_force != domain: + rule.sudo().write({'domain_force': domain}) + + @api.model_create_multi def create(self, vals_list): employees = super().create(vals_list)