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 4fbc9389b..e3ea1f67b 100644 --- a/mrp_multi_level/models/mrp_planned_order.py +++ b/mrp_multi_level/models/mrp_planned_order.py @@ -38,12 +38,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.", + required=True, ) qty_released = fields.Float() fixed = fields.Boolean() 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 9ad15df03..053612457 100644 --- a/mrp_multi_level/models/product_mrp_area.py +++ b/mrp_multi_level/models/product_mrp_area.py @@ -190,9 +190,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 @api.multi def _adjust_qty_to_order(self, qty_to_order): @@ -209,3 +214,9 @@ class ProductMRPArea(models.Model): 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..8d24460c1 --- /dev/null +++ b/mrp_multi_level/models/stock_rule.py @@ -0,0 +1,33 @@ +# 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, + values, + bom, + ): + res = super()._prepare_mo_vals( + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + values, + bom, + ) + if "planned_order_id" in values: + res["planned_order_id"] = values["planned_order_id"] + return res diff --git a/mrp_multi_level/tests/test_mrp_multi_level.py b/mrp_multi_level/tests/test_mrp_multi_level.py index 027d796a0..312232406 100644 --- a/mrp_multi_level/tests/test_mrp_multi_level.py +++ b/mrp_multi_level/tests/test_mrp_multi_level.py @@ -24,9 +24,12 @@ class TestMrpMultiLevel(TestMrpMultiLevelCommon): self.assertEqual(product_mrp_area.supply_method, 'buy') self.assertEqual(product_mrp_area.main_supplier_id, self.vendor) self.assertEqual(product_mrp_area.qty_available, 10.0) - product_mrp_area = self.product_mrp_area_obj.search([ - ('product_id', '=', self.sf_1.id)]) - self.assertEqual(product_mrp_area.supply_method, 'manufacture') + product_mrp_area = self.product_mrp_area_obj.search( + [("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 2c315c2b7..e4d1f7510 100644 --- a/mrp_multi_level/views/product_mrp_area_views.xml +++ b/mrp_multi_level/views/product_mrp_area_views.xml @@ -57,7 +57,17 @@ - +