From f9bd7c17a14ce4bfaf5faa70b1a726c150bd94d2 Mon Sep 17 00:00:00 2001 From: Jordi Ballester Alomar Date: Mon, 11 Jun 2018 17:58:55 +0200 Subject: [PATCH] refactor --- multi_level_mrp/__manifest__.py | 10 +- multi_level_mrp/data/mrp_area_data.xml | 8 + multi_level_mrp/demo/initial_on_hand_demo.xml | 32 ++++ multi_level_mrp/demo/mrp_bom_demo.xml | 81 ++++++++++ .../demo/product_category_demo.xml | 6 + multi_level_mrp/demo/product_product_demo.xml | 59 ++++++++ .../demo/product_supplierinfo_demo.xml | 18 +++ multi_level_mrp/demo/res_partner_demo.xml | 10 ++ multi_level_mrp/models/mrp_move.py | 37 ----- multi_level_mrp/models/mrp_product.py | 4 +- multi_level_mrp/models/product.py | 1 - multi_level_mrp/tests/__init__.py | 2 + multi_level_mrp/tests/test_multi_level_mrp.py | 60 ++++++++ multi_level_mrp/views/mrp_product_view.xml | 2 - multi_level_mrp/views/product_view.xml | 1 - multi_level_mrp/wizards/__init__.py | 1 - multi_level_mrp/wizards/mrp_move_create_po.py | 139 ------------------ .../wizards/mrp_move_create_po_view.xml | 33 ----- multi_level_mrp/wizards/multi_level_mrp.py | 18 +-- 19 files changed, 291 insertions(+), 231 deletions(-) create mode 100644 multi_level_mrp/data/mrp_area_data.xml create mode 100644 multi_level_mrp/demo/initial_on_hand_demo.xml create mode 100644 multi_level_mrp/demo/mrp_bom_demo.xml create mode 100644 multi_level_mrp/demo/product_category_demo.xml create mode 100644 multi_level_mrp/demo/product_product_demo.xml create mode 100644 multi_level_mrp/demo/product_supplierinfo_demo.xml create mode 100644 multi_level_mrp/demo/res_partner_demo.xml create mode 100644 multi_level_mrp/tests/__init__.py create mode 100644 multi_level_mrp/tests/test_multi_level_mrp.py delete mode 100644 multi_level_mrp/wizards/mrp_move_create_po.py delete mode 100644 multi_level_mrp/wizards/mrp_move_create_po_view.xml diff --git a/multi_level_mrp/__manifest__.py b/multi_level_mrp/__manifest__.py index 02199d1fb..6d009ae06 100644 --- a/multi_level_mrp/__manifest__.py +++ b/multi_level_mrp/__manifest__.py @@ -26,9 +26,17 @@ 'wizards/mrp_inventory_procure_view.xml', 'views/mrp_inventory_view.xml', 'wizards/multi_level_mrp_view.xml', - 'wizards/mrp_move_create_po_view.xml', 'views/mrp_menuitem.xml', 'data/multi_level_mrp_cron.xml', + 'data/mrp_area_data.xml', + ], + 'demo': [ + 'demo/product_category_demo.xml', + 'demo/product_product_demo.xml', + 'demo/res_partner_demo.xml', + 'demo/product_supplierinfo_demo.xml', + 'demo/mrp_bom_demo.xml', + 'demo/initial_on_hand_demo.xml', ], 'installable': True, 'application': True, diff --git a/multi_level_mrp/data/mrp_area_data.xml b/multi_level_mrp/data/mrp_area_data.xml new file mode 100644 index 000000000..6ce02c128 --- /dev/null +++ b/multi_level_mrp/data/mrp_area_data.xml @@ -0,0 +1,8 @@ + + + + WH/Stock + + + + diff --git a/multi_level_mrp/demo/initial_on_hand_demo.xml b/multi_level_mrp/demo/initial_on_hand_demo.xml new file mode 100644 index 000000000..a2cd4991c --- /dev/null +++ b/multi_level_mrp/demo/initial_on_hand_demo.xml @@ -0,0 +1,32 @@ + + + + + Simulating MRP + + + + + + 10 + + + + + + + 20 + + + + + + + 15 + + + + + + + \ No newline at end of file diff --git a/multi_level_mrp/demo/mrp_bom_demo.xml b/multi_level_mrp/demo/mrp_bom_demo.xml new file mode 100644 index 000000000..1b1e9f7b5 --- /dev/null +++ b/multi_level_mrp/demo/mrp_bom_demo.xml @@ -0,0 +1,81 @@ + + + + + + + 5 + + + + 2 + + 5 + + + + + 3 + + 5 + + + + + + + + 5 + + + + 2 + + 5 + + + + + 3 + + 5 + + + + + + + 5 + + + + 3 + + 5 + + + + + 2 + + 5 + + + + + + + 5 + + + + 3 + + 5 + + + diff --git a/multi_level_mrp/demo/product_category_demo.xml b/multi_level_mrp/demo/product_category_demo.xml new file mode 100644 index 000000000..bf989ea45 --- /dev/null +++ b/multi_level_mrp/demo/product_category_demo.xml @@ -0,0 +1,6 @@ + + + + MRP + + diff --git a/multi_level_mrp/demo/product_product_demo.xml b/multi_level_mrp/demo/product_product_demo.xml new file mode 100644 index 000000000..358d70978 --- /dev/null +++ b/multi_level_mrp/demo/product_product_demo.xml @@ -0,0 +1,59 @@ + + + + FP-1 + + product + + + 2 + + + + + FP-2 + + product + + + 1 + + + + + SF-1 + + product + + + 1 + + + + SF-2 + + product + + + 3 + + + + + PP-1 + + product + + + + + + + PP-2 + + product + + + + + diff --git a/multi_level_mrp/demo/product_supplierinfo_demo.xml b/multi_level_mrp/demo/product_supplierinfo_demo.xml new file mode 100644 index 000000000..ab223f04c --- /dev/null +++ b/multi_level_mrp/demo/product_supplierinfo_demo.xml @@ -0,0 +1,18 @@ + + + + + + 4 + 0 + 100 + + + + + + 2 + 0 + 100 + + diff --git a/multi_level_mrp/demo/res_partner_demo.xml b/multi_level_mrp/demo/res_partner_demo.xml new file mode 100644 index 000000000..ecb86d323 --- /dev/null +++ b/multi_level_mrp/demo/res_partner_demo.xml @@ -0,0 +1,10 @@ + + + + Lazer Tech + 1 + + + + + diff --git a/multi_level_mrp/models/mrp_move.py b/multi_level_mrp/models/mrp_move.py index 474f57934..511f7a70c 100644 --- a/multi_level_mrp/models/mrp_move.py +++ b/multi_level_mrp/models/mrp_move.py @@ -152,40 +152,3 @@ class MrpMove(models.Model): self.current_date = self.mrp_date self.mrp_processed = True self.name = seqnbr - - @api.one - def mrp_process(self): - self.mrp_process_mo() - self.mrp_process_pr() - return True - - # TODO: move to new API - @api.v7 - def mrp_process_po(self, cr, uid, ids, context=None): - view_id = self.pool.get('ir.ui.view').search( - cr, uid, [('model', '=', 'mrp.move.create.po'), - ('name', '=', 'mrp.move.create.po.form')]) - move = self.browse(cr, uid, ids)[0] - context['move_id'] = move.id - context['default_move_id'] = move.id - context['default_mrp_qty'] = move.mrp_qty - context['default_mrp_date'] = move.mrp_date - context['default_qty_po'] = move.mrp_qty - context['default_date_po'] = move.mrp_date - context['default_main_supplier_id'] = \ - move.mrp_product_id.main_supplier_id.id - context['default_product_id'] = move.mrp_product_id.product_id.id - context['default_purchase_line_warn_msg'] = \ - move.mrp_product_id.product_id.purchase_line_warn_msg - context['default_purchase_line_warn'] = \ - move.mrp_product_id.product_id.purchase_line_warn - return { - 'type': 'ir.actions.act_window', - 'name': 'Create PO', - 'view_mode': 'form', - 'view_type': 'form', - 'view_id': view_id[0], - 'res_model': 'mrp.move.create.po', - 'target': 'new', - 'context': context, - } diff --git a/multi_level_mrp/models/mrp_product.py b/multi_level_mrp/models/mrp_product.py index 4871061a8..37cf6ee4f 100644 --- a/multi_level_mrp/models/mrp_product.py +++ b/multi_level_mrp/models/mrp_product.py @@ -16,8 +16,8 @@ class MrpProduct(models.Model): select=True) mrp_inspection_delay = fields.Integer( string='Inspection Delay', related='product_id.mrp_inspection_delay') - mrp_lead_time = fields.Integer(string='Lead Time', - related='product_id.mrp_lead_time') + mrp_lead_time = fields.Float(string='Lead Time', + related='product_id.produce_delay') mrp_llc = fields.Integer('Low Level Code', select=True) mrp_maximum_order_qty = fields.Float( string='Maximum Order Qty', related='product_id.mrp_maximum_order_qty') diff --git a/multi_level_mrp/models/product.py b/multi_level_mrp/models/product.py index 5b9d9ecfd..95007bc23 100644 --- a/multi_level_mrp/models/product.py +++ b/multi_level_mrp/models/product.py @@ -19,7 +19,6 @@ class Product(models.Model): mrp_applicable = fields.Boolean('MRP Applicable') mrp_exclude = fields.Boolean('Exclude from MRP') mrp_inspection_delay = fields.Integer('Inspection Delay', default=0) - mrp_lead_time = fields.Integer('Lead Time', default=1) mrp_maximum_order_qty = fields.Float('Maximum Order Qty', default=0.00) mrp_minimum_order_qty = fields.Float('Minimum Order Qty', default=0.00) mrp_minimum_stock = fields.Float('Minimum Stock') diff --git a/multi_level_mrp/tests/__init__.py b/multi_level_mrp/tests/__init__.py new file mode 100644 index 000000000..5aafb933a --- /dev/null +++ b/multi_level_mrp/tests/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import test_multi_level_mrp diff --git a/multi_level_mrp/tests/test_multi_level_mrp.py b/multi_level_mrp/tests/test_multi_level_mrp.py new file mode 100644 index 000000000..c6424bb36 --- /dev/null +++ b/multi_level_mrp/tests/test_multi_level_mrp.py @@ -0,0 +1,60 @@ +# Copyright 2018 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo.tests.common import SavepointCase +from datetime import datetime, timedelta + + +class TestMultiLevelMRP(SavepointCase): + def setUp(self): + super(TestMultiLevelMRP, self).setUp() + self.wiz_multi_level_mrp_model = self.env['multi.level.mrp'] + self.stock_picking_model = self.env['stock.picking'] + self.mrp_inventory_model = self.env['mrp.inventory'] + self.fp_1 = self.env.ref('multi_level_mrp.product_product_fp_1') + self.fp_2 = self.env.ref('multi_level_mrp.product_product_fp_2') + self.sf_1 = self.env.ref('multi_level_mrp.product_product_sf_1') + self.sf_2 = self.env.ref('multi_level_mrp.product_product_sf_2') + self.pp_1 = self.env.ref('multi_level_mrp.product_product_pp_1') + self.pp_2 = self.env.ref('multi_level_mrp.product_product_pp_2') + self.wh = self.env.ref('stock.warehouse0') + self.stock_location = self.wh.lot_stock_id + self.customer_location = self.env.ref( + 'stock.stock_location_customers') + date_move = datetime.today() + timedelta(days=7) + self.picking_1 = self.stock_picking_model.create({ + 'picking_type_id': self.ref('stock.picking_type_out'), + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'move_lines': [ + (0, 0, { + 'name': 'Test move pf-1', + 'product_id': self.fp_1.id, + 'date_expected': date_move, + 'date': date_move, + 'product_uom': self.fp_1.uom_id.id, + 'product_uom_qty': 100, + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id + }), + (0, 0, { + 'name': 'Test move fp-2', + 'product_id': self.fp_2.id, + 'date_expected': date_move, + 'date': date_move, + 'product_uom': self.fp_2.uom_id.id, + 'product_uom_qty': 15, + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id + })] + }) + self.picking_1.action_confirm() + + def test_mrp_1(self): + self.wiz_multi_level_mrp_model.create({}).run_multi_level_mrp() + pp_1_inventory_lines = self.mrp_inventory_model.search( + [('mrp_product_id.product_id', '=', self.pp_1.id)]) + self.assertEqual(len(pp_1_inventory_lines), 1) + self.assertEqual(pp_1_inventory_lines.demand_qty, 290) + self.assertEqual(pp_1_inventory_lines.to_procure, 250) diff --git a/multi_level_mrp/views/mrp_product_view.xml b/multi_level_mrp/views/mrp_product_view.xml index 4b7cff0d7..647d5f741 100644 --- a/multi_level_mrp/views/mrp_product_view.xml +++ b/multi_level_mrp/views/mrp_product_view.xml @@ -72,8 +72,6 @@ -