From ae95609b34ba79b8bd1c51b642290af69fb5c3cf Mon Sep 17 00:00:00 2001 From: hveficent Date: Mon, 2 Mar 2020 17:13:45 +0100 Subject: [PATCH] [IMP] mrp_multi_level: * Planned Order release and due date become required. * Add button to Product MRP Area to update MOQ from Supplier Info. * Link Manufacturing Orders with Planned Orders. * Allow Mrp Inventory Procure Wizard to be used from other models. * Make MRP Inventory creation more extensible. * Main Supplier computation (v13 requires explicit False definitions). --- mrp_multi_level/models/__init__.py | 2 + mrp_multi_level/models/mrp_planned_order.py | 6 ++- mrp_multi_level/models/mrp_production.py | 12 +++++ mrp_multi_level/models/product_mrp_area.py | 11 ++++ mrp_multi_level/models/stock_rule.py | 35 +++++++++++++ mrp_multi_level/readme/HISTORY.rst | 13 +++++ mrp_multi_level/tests/test_mrp_multi_level.py | 2 + .../views/product_mrp_area_views.xml | 12 ++++- .../wizards/mrp_inventory_procure.py | 29 +++++------ mrp_multi_level/wizards/mrp_multi_level.py | 51 +++++++++++++------ 10 files changed, 139 insertions(+), 34 deletions(-) create mode 100644 mrp_multi_level/models/mrp_production.py create mode 100644 mrp_multi_level/models/stock_rule.py diff --git a/mrp_multi_level/models/__init__.py b/mrp_multi_level/models/__init__.py index 486079907..0ebdf3353 100644 --- a/mrp_multi_level/models/__init__.py +++ b/mrp_multi_level/models/__init__.py @@ -6,3 +6,5 @@ from . import mrp_move from . import mrp_planned_order from . import mrp_inventory from . import product_mrp_area +from . import stock_rule +from . import mrp_production diff --git a/mrp_multi_level/models/mrp_planned_order.py b/mrp_multi_level/models/mrp_planned_order.py index a40796a26..2307d409e 100644 --- a/mrp_multi_level/models/mrp_planned_order.py +++ b/mrp_multi_level/models/mrp_planned_order.py @@ -37,10 +37,12 @@ class MrpPlannedOrder(models.Model): readonly=True, ) order_release_date = fields.Date( - string="Release Date", help="Order release date planned by MRP." + string="Release Date", help="Order release date planned by MRP.", required=True ) due_date = fields.Date( - string="Due Date", help="Date in which the supply must have been completed." + string="Due Date", + help="Date in which the supply must have been completed.", + required=True, ) qty_released = fields.Float(readonly=True) fixed = fields.Boolean(default=True) diff --git a/mrp_multi_level/models/mrp_production.py b/mrp_multi_level/models/mrp_production.py new file mode 100644 index 000000000..53601bf21 --- /dev/null +++ b/mrp_multi_level/models/mrp_production.py @@ -0,0 +1,12 @@ +# Copyright 2020 ForgeFlow S.L. (https://www.forgeflow.com) +# - Héctor Villarreal +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). +from odoo import fields, models + + +class MrpProduction(models.Model): + """ Manufacturing Orders """ + + _inherit = "mrp.production" + + planned_order_id = fields.Many2one(comodel_name="mrp.planned.order") diff --git a/mrp_multi_level/models/product_mrp_area.py b/mrp_multi_level/models/product_mrp_area.py index 1338b3cdc..6d14eca0c 100644 --- a/mrp_multi_level/models/product_mrp_area.py +++ b/mrp_multi_level/models/product_mrp_area.py @@ -171,9 +171,14 @@ class ProductMRPArea(models.Model): and (not r.company_id or r.company_id == rec.company_id) ) if not suppliers: + rec.main_supplierinfo_id = False + rec.main_supplier_id = False continue rec.main_supplierinfo_id = suppliers[0] rec.main_supplier_id = suppliers[0].name + for rec in self.filtered(lambda r: r.supply_method != "buy"): + rec.main_supplierinfo_id = False + rec.main_supplier_id = False def _adjust_qty_to_order(self, qty_to_order): self.ensure_one() @@ -191,3 +196,9 @@ class ProductMRPArea(models.Model): if self.mrp_maximum_order_qty and qty_to_order > self.mrp_maximum_order_qty: return self.mrp_maximum_order_qty return qty_to_order + + def update_min_qty_from_main_supplier(self): + for rec in self.filtered( + lambda r: r.main_supplierinfo_id and r.supply_method == "buy" + ): + rec.mrp_minimum_order_qty = rec.main_supplierinfo_id.min_qty diff --git a/mrp_multi_level/models/stock_rule.py b/mrp_multi_level/models/stock_rule.py new file mode 100644 index 000000000..9abb680df --- /dev/null +++ b/mrp_multi_level/models/stock_rule.py @@ -0,0 +1,35 @@ +# Copyright 2020 ForgeFlow S.L. (https://www.forgeflow.com) +# - Héctor Villarreal +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). +from odoo import models + + +class StockRule(models.Model): + _inherit = "stock.rule" + + def _prepare_mo_vals( + self, + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + company_id, + values, + bom, + ): + res = super()._prepare_mo_vals( + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + company_id, + values, + bom, + ) + if "planned_order_id" in values: + res["planned_order_id"] = values["planned_order_id"] + return res diff --git a/mrp_multi_level/readme/HISTORY.rst b/mrp_multi_level/readme/HISTORY.rst index a117144f1..d0ed96ffa 100644 --- a/mrp_multi_level/readme/HISTORY.rst +++ b/mrp_multi_level/readme/HISTORY.rst @@ -1,3 +1,16 @@ +13.0.1.3.0 (2020-03-02) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [IMP] Minor changes" + (`#470 `_). + + * Planned Order release and due date become required. + * Add button to Product MRP Area to update MOQ from Supplier Info. + * Link Manufacturing Orders with Planned Orders. + * Allow Mrp Inventory Procure Wizard to be used from other models. + * Make MRP Inventory creation more extensible. + * Main Supplier computation (v13 requires explicit False definitions) + 13.0.1.2.0 (2020-02-20) ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/mrp_multi_level/tests/test_mrp_multi_level.py b/mrp_multi_level/tests/test_mrp_multi_level.py index 2d54f6ad0..64c61527c 100644 --- a/mrp_multi_level/tests/test_mrp_multi_level.py +++ b/mrp_multi_level/tests/test_mrp_multi_level.py @@ -28,6 +28,8 @@ class TestMrpMultiLevel(TestMrpMultiLevelCommon): [("product_id", "=", self.sf_1.id)] ) self.assertEqual(product_mrp_area.supply_method, "manufacture") + self.assertFalse(product_mrp_area.main_supplier_id) + self.assertFalse(product_mrp_area.main_supplierinfo_id) def test_03_mrp_moves(self): """Tests for mrp moves generated.""" diff --git a/mrp_multi_level/views/product_mrp_area_views.xml b/mrp_multi_level/views/product_mrp_area_views.xml index 17cbde767..5708a3153 100644 --- a/mrp_multi_level/views/product_mrp_area_views.xml +++ b/mrp_multi_level/views/product_mrp_area_views.xml @@ -53,7 +53,17 @@ - +