diff --git a/mrp_sale_info/README.rst b/mrp_sale_info/README.rst index 20a237040..43809bb93 100644 --- a/mrp_sale_info/README.rst +++ b/mrp_sale_info/README.rst @@ -51,6 +51,7 @@ Contributors * Pedro M. Baeza ", * Ana Juaristi " * Victor M. Martin +* Bima Jati Wijaya Maintainer ---------- diff --git a/mrp_sale_info/__manifest__.py b/mrp_sale_info/__manifest__.py index 20539473b..156b5fdad 100644 --- a/mrp_sale_info/__manifest__.py +++ b/mrp_sale_info/__manifest__.py @@ -4,7 +4,7 @@ { "name": "MRP Sale Info", "summary": "Adds sale information to Manufacturing models", - "version": "9.0.1.0.0", + "version": "10.0.1.0.0", "category": "Manufacturing", "website": "http://www.antiun.com", "author": "Antiun Ingeniería S.L., " @@ -14,15 +14,14 @@ "Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, - 'installable': False, + 'installable': True, "depends": [ - "mrp_operations", "sale_mrp", "sale_order_dates", "stock" ], "data": [ "views/mrp_production.xml", - "views/mrp_production_workcenter_line.xml" + "views/mrp_workorder.xml" ] } diff --git a/mrp_sale_info/models/__init__.py b/mrp_sale_info/models/__init__.py index cb18640f5..2a095e3da 100644 --- a/mrp_sale_info/models/__init__.py +++ b/mrp_sale_info/models/__init__.py @@ -3,4 +3,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import mrp_production -from . import mrp_production_workcenter_line +from . import mrp_workorder diff --git a/mrp_sale_info/models/mrp_production.py b/mrp_sale_info/models/mrp_production.py index 24ddb0aa2..d840d54c7 100644 --- a/mrp_sale_info/models/mrp_production.py +++ b/mrp_sale_info/models/mrp_production.py @@ -2,16 +2,29 @@ # © 2016 Antiun Ingenieria S.L. - Javier Iniesta # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, fields +from odoo import api, fields, models class MrpProduction(models.Model): _inherit = "mrp.production" - sale_id = fields.Many2one( - 'sale.order', string='Sale order', readonly=True, store=True, - related='move_prod_id.procurement_id.sale_line_id.order_id') - partner_id = fields.Many2one(related='sale_id.partner_id', - string='Customer', store=True) - commitment_date = fields.Datetime(related='sale_id.commitment_date', - string='Commitment Date', store=True) + sale_id = fields.Many2one('sale.order', compute='_compute_sale_info', string='Sale order', + readonly=True) + partner_id = fields.Many2one('res.partner', compute='_compute_sale_info', + string='Customer') + commitment_date = fields.Datetime(compute='_compute_sale_info', + string='Commitment Date') + + @api.multi + def _compute_sale_info(self): + def get_parent_move(move): + if move.move_dest_id: + return get_parent_move(move.move_dest_id) + return move + + for production in self: + move = get_parent_move(production.move_finished_ids) + production.sale_id = move.procurement_id and move.procurement_id.sale_line_id and \ + move.procurement_id.sale_line_id.order_id.id or False + production.partner_id = production.sale_id and production.sale_id.partner_id and production.sale_id.partner_id.id or False + production.commitment_date = production.sale_id and production.sale_id.commitment_date or '' diff --git a/mrp_sale_info/models/mrp_production_workcenter_line.py b/mrp_sale_info/models/mrp_workorder.py similarity index 82% rename from mrp_sale_info/models/mrp_production_workcenter_line.py rename to mrp_sale_info/models/mrp_workorder.py index 9991efe81..b9894c0fc 100644 --- a/mrp_sale_info/models/mrp_production_workcenter_line.py +++ b/mrp_sale_info/models/mrp_workorder.py @@ -2,11 +2,11 @@ # © 2016 Antiun Ingenieria S.L. - Javier Iniesta # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, fields +from odoo import models, fields -class MrpProductionWorkcenterLine(models.Model): - _inherit = "mrp.production.workcenter.line" +class MrpWorkorder(models.Model): + _inherit = "mrp.workorder" sale_id = fields.Many2one(related='production_id.sale_id', string='Sale order', readonly=True, store=True) diff --git a/mrp_sale_info/tests/__init__.py b/mrp_sale_info/tests/__init__.py new file mode 100644 index 000000000..bd6af4bbe --- /dev/null +++ b/mrp_sale_info/tests/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# © 2017 Bima Jati Wijaya +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +from . import test_sale_manufacture diff --git a/mrp_sale_info/tests/test_sale_manufacture.py b/mrp_sale_info/tests/test_sale_manufacture.py new file mode 100644 index 000000000..c150e29b3 --- /dev/null +++ b/mrp_sale_info/tests/test_sale_manufacture.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# © 2017 Bima Jati Wijaya +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests import TransactionCase + + +class TestManufactureSale(TransactionCase): + + def setUp(self): + super(TestManufactureSale, self).setUp() + self.partner = self.env.ref('base.res_partner_1') + self.mrp_production = self.env['mrp.production'] + + def test_manufacture(self): + product = self.browse_ref('product.product_product_27') + route1 = self.browse_ref('mrp.route_warehouse0_manufacture') + route2 = self.browse_ref('stock.route_warehouse0_mto') + # add make to order and manufacture routes + product.write({'route_ids': [(6, 0, [route1.id, route2.id])]}) + self.assertTrue(product.route_ids) + + so = self.env['sale.order'].create({ + 'partner_id': self.partner.id, + 'partner_invoice_id': self.partner.id, + 'partner_shipping_id': self.partner.id, + 'order_line': [(0, 0, {'name': product.name, 'product_id': product.id, 'product_uom_qty': 1, 'product_uom': product.uom_id.id, + 'price_unit': product.list_price}) + ], + 'pricelist_id': self.env.ref('product.list0').id, + }) + so.action_confirm() + mrp = self.mrp_production.search([('origin', 'like', so.name+'%')], limit=1) + # checking sale info filled correctly on manufacture + self.assertEqual(so.id, mrp.sale_id.id) + self.assertEqual(self.partner.id, mrp.partner_id.id) + self.assertEqual(so.commitment_date, mrp.commitment_date) diff --git a/mrp_sale_info/views/mrp_production.xml b/mrp_sale_info/views/mrp_production.xml index 4fee03f44..7528b2694 100644 --- a/mrp_sale_info/views/mrp_production.xml +++ b/mrp_sale_info/views/mrp_production.xml @@ -1,32 +1,32 @@ - - + + - - MRP Production Form with Sale Order - mrp.production - - - - - - + + MRP Production Form with Sale Order + mrp.production + + + + + + + - - + - - MRP Production Tree with Sale Order - mrp.production - - - - - - + + MRP Production Tree with Sale Order + mrp.production + + + + + + + - - + - - + + diff --git a/mrp_sale_info/views/mrp_production_workcenter_line.xml b/mrp_sale_info/views/mrp_production_workcenter_line.xml deleted file mode 100644 index 1af6ac649..000000000 --- a/mrp_sale_info/views/mrp_production_workcenter_line.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - MRP Production Work Order Tree with Sale Order - mrp.production.workcenter.line - - - - - - - - - - - - MRP Production Work Order Form with Sale Order - mrp.production.workcenter.line - - - - - - - - - - - - - - - - diff --git a/mrp_sale_info/views/mrp_workorder.xml b/mrp_sale_info/views/mrp_workorder.xml new file mode 100644 index 000000000..c63a93a28 --- /dev/null +++ b/mrp_sale_info/views/mrp_workorder.xml @@ -0,0 +1,36 @@ + + + + + + MRP Production Work Order Tree with Sale Order + mrp.workorder + + + + + + + + + + + + MRP Production Work Order Form with Sale Order + mrp.workorder + + + + + + + + + + + + + + + +