Skip to content

Commit 5024b75

Browse files
danielalvaro1999AdrianaSaiz
authored andcommitted
[FIX] mrp_multi_level : Fix MRP wizard logic for action selection, quantity reset, and missing company/currency data
1 parent 352289a commit 5024b75

11 files changed

Lines changed: 1053 additions & 30 deletions

mrp_multi_level/i18n/es.po

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ msgstr "AV-22 negro"
4141
msgid "Action"
4242
msgstr "Acción"
4343

44+
#. module: mrp_multi_level
45+
#: model:ir.model.fields,field_description:mrp_multi_level.field_mrp_inventory_procure_item__mrp_action
46+
msgid "Procurement Method"
47+
msgstr "Método de aprovisionamiento"
48+
49+
#. module: mrp_multi_level
50+
#: model:ir.model.fields,help:mrp_multi_level.field_mrp_inventory_procure_item__mrp_action
51+
msgid "Method to use for procurement. Can be modified before executing."
52+
msgstr "Método que se usará para el aprovisionamiento. Puede modificarse antes de ejecutar."
53+
4454
#. module: mrp_multi_level
4555
#: model:ir.model.fields,field_description:mrp_multi_level.field_mrp_area__active
4656
#: model:ir.model.fields,field_description:mrp_multi_level.field_product_mrp_area__active
@@ -102,6 +112,7 @@ msgstr "Confirmado"
102112

103113
#. module: mrp_multi_level
104114
#: model_terms:ir.ui.view,arch_db:mrp_multi_level.mrp_inventory_tree
115+
#: model_terms:ir.ui.view,arch_db:mrp_multi_level.mrp_planned_order_view_form
105116
msgid "Create Procurement"
106117
msgstr "Crear Aprovisionamiento"
107118

@@ -482,8 +493,9 @@ msgstr "Crear Aprovisionamiento desde Proyecciones de Stock MRP"
482493
#: model:ir.model.fields,field_description:mrp_multi_level.field_mrp_move__production_id
483494
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_move__mrp_origin__mo
484495
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__manufacture
496+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__manufacture
485497
msgid "Manufacturing Order"
486-
msgstr "Order de Fabricación"
498+
msgstr "Orden de Fabricación"
487499

488500
#. module: mrp_multi_level
489501
#: model:ir.model.fields,field_description:mrp_multi_level.field_mrp_planned_order__mrp_production_ids
@@ -566,6 +578,7 @@ msgstr "No se encontró producto MRP"
566578

567579
#. module: mrp_multi_level
568580
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__none
581+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__none
569582
msgid "None"
570583
msgstr "Ninguno/a"
571584

@@ -749,13 +762,15 @@ msgstr "Orden de producción"
749762
#. module: mrp_multi_level
750763
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__supply_method__pull_push
751764
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__pull_push
765+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__pull_push
752766
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__product_mrp_area__supply_method__pull_push
753767
msgid "Pull & Push"
754768
msgstr "Tira y Empuja"
755769

756770
#. module: mrp_multi_level
757771
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__supply_method__pull
758772
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__pull
773+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__pull
759774
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__product_mrp_area__supply_method__pull
760775
msgid "Pull From"
761776
msgstr "Tirar desde"
@@ -764,6 +779,7 @@ msgstr "Tirar desde"
764779
#: model:ir.model.fields,field_description:mrp_multi_level.field_mrp_move__purchase_order_id
765780
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_move__mrp_origin__po
766781
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__buy
782+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__buy
767783
msgid "Purchase Order"
768784
msgstr "Orden de Compra"
769785

@@ -780,6 +796,7 @@ msgstr "Órdenes de Compra"
780796
#. module: mrp_multi_level
781797
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__supply_method__push
782798
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__push
799+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__push
783800
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__product_mrp_area__supply_method__push
784801
msgid "Push To"
785802
msgstr "Empujar a"
@@ -950,8 +967,8 @@ msgstr ""
950967
#: model:ir.model.fields,field_description:mrp_multi_level.field_mrp_inventory_procure_item__supply_method
951968
#: model:ir.model.fields,field_description:mrp_multi_level.field_product_mrp_area__supply_method
952969
#: model_terms:ir.ui.view,arch_db:mrp_multi_level.mrp_inventory_search
953-
msgid "Supply Method"
954-
msgstr "Método de Suministro"
970+
msgid "Default Supply Method"
971+
msgstr "Método de Suministro por defecto"
955972

956973
#. module: mrp_multi_level
957974
#: model:ir.model.fields,help:mrp_multi_level.field_mrp_area__company_id

mrp_multi_level/i18n/mrp_multi_level.pot

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,16 @@ msgstr ""
3838
msgid "Action"
3939
msgstr ""
4040

41+
#. module: mrp_multi_level
42+
#: model:ir.model.fields,field_description:mrp_multi_level.field_mrp_inventory_procure_item__mrp_action
43+
msgid "Procurement Method"
44+
msgstr ""
45+
46+
#. module: mrp_multi_level
47+
#: model:ir.model.fields,help:mrp_multi_level.field_mrp_inventory_procure_item__mrp_action
48+
msgid "Method to use for procurement. Can be modified before executing."
49+
msgstr ""
50+
4151
#. module: mrp_multi_level
4252
#: model:ir.model.fields,field_description:mrp_multi_level.field_mrp_area__active
4353
#: model:ir.model.fields,field_description:mrp_multi_level.field_product_mrp_area__active
@@ -99,6 +109,7 @@ msgstr ""
99109

100110
#. module: mrp_multi_level
101111
#: model_terms:ir.ui.view,arch_db:mrp_multi_level.mrp_inventory_tree
112+
#: model_terms:ir.ui.view,arch_db:mrp_multi_level.mrp_planned_order_view_form
102113
msgid "Create Procurement"
103114
msgstr ""
104115

@@ -480,6 +491,7 @@ msgstr ""
480491
#: model:ir.model.fields,field_description:mrp_multi_level.field_mrp_move__production_id
481492
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_move__mrp_origin__mo
482493
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__manufacture
494+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__manufacture
483495
msgid "Manufacturing Order"
484496
msgstr ""
485497

@@ -564,6 +576,7 @@ msgstr ""
564576

565577
#. module: mrp_multi_level
566578
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__none
579+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__none
567580
msgid "None"
568581
msgstr ""
569582

@@ -745,13 +758,15 @@ msgstr ""
745758
#. module: mrp_multi_level
746759
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__supply_method__pull_push
747760
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__pull_push
761+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__pull_push
748762
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__product_mrp_area__supply_method__pull_push
749763
msgid "Pull & Push"
750764
msgstr ""
751765

752766
#. module: mrp_multi_level
753767
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__supply_method__pull
754768
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__pull
769+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__pull
755770
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__product_mrp_area__supply_method__pull
756771
msgid "Pull From"
757772
msgstr ""
@@ -760,6 +775,7 @@ msgstr ""
760775
#: model:ir.model.fields,field_description:mrp_multi_level.field_mrp_move__purchase_order_id
761776
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_move__mrp_origin__po
762777
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__buy
778+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__buy
763779
msgid "Purchase Order"
764780
msgstr ""
765781

@@ -776,6 +792,7 @@ msgstr ""
776792
#. module: mrp_multi_level
777793
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__supply_method__push
778794
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_planned_order__mrp_action__push
795+
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__mrp_inventory_procure_item__mrp_action__push
779796
#: model:ir.model.fields.selection,name:mrp_multi_level.selection__product_mrp_area__supply_method__push
780797
msgid "Push To"
781798
msgstr ""
@@ -947,7 +964,7 @@ msgstr ""
947964
#: model:ir.model.fields,field_description:mrp_multi_level.field_mrp_inventory_procure_item__supply_method
948965
#: model:ir.model.fields,field_description:mrp_multi_level.field_product_mrp_area__supply_method
949966
#: model_terms:ir.ui.view,arch_db:mrp_multi_level.mrp_inventory_search
950-
msgid "Supply Method"
967+
msgid "Default Supply Method"
951968
msgstr ""
952969

953970
#. module: mrp_multi_level

mrp_multi_level/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
from . import stock_rule
1010
from . import mrp_production
1111
from . import stock_quant
12+
from . import procurement_group

mrp_multi_level/models/mrp_inventory.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,15 @@ class MrpInventory(models.Model):
7171
comodel_name="mrp.planned.order", inverse_name="mrp_inventory_id", readonly=True
7272
)
7373
supply_method = fields.Selection(
74-
string="Supply Method",
74+
string="Default Supply Method",
7575
related="product_mrp_area_id.supply_method",
7676
readonly=True,
7777
store=True,
78+
help=(
79+
"Supply method derived from routes/stock rules. "
80+
"Used as default when procuring from MRP projections if the procurement "
81+
"method is not explicitly specified."
82+
),
7883
)
7984
main_supplier_id = fields.Many2one(
8085
string="Main Supplier",
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from odoo import api, models
2+
3+
4+
class ProcurementGroup(models.Model):
5+
_inherit = "procurement.group"
6+
7+
@api.model
8+
def _get_rule(self, product_id, location_id, values):
9+
"""Override to respect mrp_action from MRP Multi Level wizard."""
10+
mrp_action = values.get("mrp_action")
11+
12+
if not mrp_action or mrp_action in ("none", False):
13+
return super()._get_rule(product_id, location_id, values)
14+
15+
company = values.get("company_id", self.env.company)
16+
company_id = company.id if hasattr(company, "id") else company
17+
18+
domain = [
19+
("action", "=", mrp_action),
20+
("company_id", "in", [company_id, False]),
21+
]
22+
23+
rule = self.env["stock.rule"].search(
24+
domain + [("location_dest_id", "=", location_id.id)],
25+
order="sequence",
26+
limit=1,
27+
)
28+
29+
if not rule:
30+
warehouse = values.get("warehouse_id")
31+
if warehouse:
32+
warehouse_id = warehouse.id if hasattr(warehouse, "id") else warehouse
33+
rule = self.env["stock.rule"].search(
34+
domain + [("warehouse_id", "=", warehouse_id)],
35+
order="sequence",
36+
limit=1,
37+
)
38+
39+
return rule or super()._get_rule(product_id, location_id, values)

mrp_multi_level/models/product_mrp_area.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@ class ProductMRPArea(models.Model):
8787
("pull_push", "Pull & Push"),
8888
],
8989
compute="_compute_supply_method",
90+
string="Default Supply Method",
91+
help=(
92+
"Supply method derived from routes/stock rules. "
93+
"This default strategy is used to create procurements from MRP when the "
94+
"procurement method is not explicitly specified."
95+
),
9096
)
9197
supply_bom_id = fields.Many2one(
9298
comodel_name="mrp.bom",

mrp_multi_level/models/stock_rule.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,31 @@
77
class StockRule(models.Model):
88
_inherit = "stock.rule"
99

10+
def _make_po_get_domain(self, company_id, values, partner):
11+
domain = super()._make_po_get_domain(company_id, values, partner)
12+
if isinstance(domain, list):
13+
domain = tuple(domain)
14+
currency_id = values.get("currency_id")
15+
if currency_id:
16+
domain = tuple(domain) + (("currency_id", "=", currency_id),)
17+
return domain
18+
19+
def _prepare_purchase_order(self, company_id, origins, values):
20+
res = super()._prepare_purchase_order(company_id, origins, values)
21+
22+
currency_id = False
23+
if isinstance(values, dict):
24+
currency_id = values.get("currency_id")
25+
elif isinstance(values, (list, tuple)):
26+
for v in values:
27+
if isinstance(v, dict) and v.get("currency_id"):
28+
currency_id = v.get("currency_id")
29+
break
30+
31+
if currency_id:
32+
res["currency_id"] = currency_id
33+
return res
34+
1035
def _prepare_mo_vals(
1136
self,
1237
product_id,

0 commit comments

Comments
 (0)