From 5e6367cdeb2b47c2f92cce3282c34dbafe00a6b6 Mon Sep 17 00:00:00 2001 From: dufresnedavid Date: Wed, 25 Feb 2015 09:57:20 -0500 Subject: [PATCH] [Add] mrp_bom_reference_selection --- mrp_bom_reference_selection/README.rst | 56 +++++++++++++++ mrp_bom_reference_selection/__init__.py | 33 +++++++++ mrp_bom_reference_selection/__openerp__.py | 43 +++++++++++ mrp_bom_reference_selection/i18n/fr.po | 68 ++++++++++++++++++ .../i18n/mrp_bom_reference_selection.pot | 68 ++++++++++++++++++ .../models/__init__.py | 27 +++++++ mrp_bom_reference_selection/models/mrp_bom.py | 37 ++++++++++ .../models/mrp_bom_line.py | 71 +++++++++++++++++++ .../models/mrp_bom_reference.py | 34 +++++++++ .../security/ir.model.access.csv | 2 + .../views/mrp_bom_view.xml | 36 ++++++++++ 11 files changed, 475 insertions(+) create mode 100644 mrp_bom_reference_selection/README.rst create mode 100644 mrp_bom_reference_selection/__init__.py create mode 100644 mrp_bom_reference_selection/__openerp__.py create mode 100644 mrp_bom_reference_selection/i18n/fr.po create mode 100644 mrp_bom_reference_selection/i18n/mrp_bom_reference_selection.pot create mode 100644 mrp_bom_reference_selection/models/__init__.py create mode 100644 mrp_bom_reference_selection/models/mrp_bom.py create mode 100644 mrp_bom_reference_selection/models/mrp_bom_line.py create mode 100644 mrp_bom_reference_selection/models/mrp_bom_reference.py create mode 100644 mrp_bom_reference_selection/security/ir.model.access.csv create mode 100644 mrp_bom_reference_selection/views/mrp_bom_view.xml diff --git a/mrp_bom_reference_selection/README.rst b/mrp_bom_reference_selection/README.rst new file mode 100644 index 000000000..88410ab57 --- /dev/null +++ b/mrp_bom_reference_selection/README.rst @@ -0,0 +1,56 @@ +MRP Bill of Material Reference Selection +======================================== + +This module was written to extend mrp features. +It delivers new feature to select the component in a bom when you have several bom for one product. + +Installation +============ + +To install this module, you just need to select the module and insure yourself dependancies are available. + +Configuration +============= + +No particular configuration to use this module. + + +Usage +===== + +To use this module, you need to : +- create a product +- create a bom from this product (ie : AA), give a reference to this bom (ie : A1) +- create an other bom for the same product, give a reference to this bom (ie : A2) +- now, you can create an other bom for an other product (ie : BB) with products AA as component. You will have to choose the bom you want between A1 or A2 + +Known issues / Roadmap +====================== + +Credits +======= + +Module developed and tested with Odoo version 8.0 +For questions, please contact our support services + +Contributors +------------ + +* David DUFRESNE +* Jordi RIERA +* Bruno JOLIVEAU + +Icon +---- +* http://en.wikipedia.org/wiki/File:People%27s_Action_Party_of_Singapore_logo.svg + +Maintainer +---------- + +Odoo Community Association + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. + +To contribute to this module, please visit http://odoo-community.org. diff --git a/mrp_bom_reference_selection/__init__.py b/mrp_bom_reference_selection/__init__.py new file mode 100644 index 000000000..7f4f3afdc --- /dev/null +++ b/mrp_bom_reference_selection/__init__.py @@ -0,0 +1,33 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2015 Savoir-faire Linux +# (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from . import models +from openerp import SUPERUSER_ID + + +def set_bill_of_material_references(cr, registry): + bom_obj = registry['mrp.bom'] + ref_obj = registry['mrp.bom.reference'] + bom_ids = bom_obj.search(cr, SUPERUSER_ID, []) + for bom in bom_obj.browse(cr, SUPERUSER_ID, bom_ids): + if not bom.reference_id: + ref_obj.create(cr, SUPERUSER_ID, {'bom_id': bom.id}) diff --git a/mrp_bom_reference_selection/__openerp__.py b/mrp_bom_reference_selection/__openerp__.py new file mode 100644 index 000000000..1c665c779 --- /dev/null +++ b/mrp_bom_reference_selection/__openerp__.py @@ -0,0 +1,43 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2015 Savoir-faire Linux +# (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +{ + 'name': 'Bill of Material Selection Reference', + 'version': '1.0', + 'author': 'Savoir-faire Linux', + 'license': 'AGPL-3', + 'category': 'Others', + 'summary': 'Bill of Material Selection Reference', + 'depends': [ + 'mrp', + ], + 'external_dependencies': { + 'python': [], + }, + 'data': [ + 'views/mrp_bom_view.xml', + 'security/ir.model.access.csv', + ], + 'post_init_hook': 'set_bill_of_material_references', + 'installable': True, + 'application': True, +} diff --git a/mrp_bom_reference_selection/i18n/fr.po b/mrp_bom_reference_selection/i18n/fr.po new file mode 100644 index 000000000..ac4a25004 --- /dev/null +++ b/mrp_bom_reference_selection/i18n/fr.po @@ -0,0 +1,68 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_bom_reference_selection +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-02-25 13:19+0000\n" +"PO-Revision-Date: 2015-02-25 08:24-0500\n" +"Last-Translator: David Dufresne \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 1.5.4\n" + +#. module: mrp_bom_reference_selection +#: model:ir.model,name:mrp_bom_reference_selection.model_mrp_bom +#: field:mrp.bom.reference,bom_id:0 +msgid "Bill of Material" +msgstr "Nomenclature" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom,reference_id:0 +msgid "BoM Reference" +msgstr "Référence de nomenclature" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,create_uid:0 +msgid "Created by" +msgstr "Créé par" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,create_date:0 +msgid "Created on" +msgstr "Créé le" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,id:0 +msgid "ID" +msgstr "ID" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,write_uid:0 +msgid "Last Updated by" +msgstr "Dernière mise-à-jour par" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,write_date:0 +msgid "Last Updated on" +msgstr "Dernière mise-à-jour le" + +#. module: mrp_bom_reference_selection +#: model:ir.model,name:mrp_bom_reference_selection.model_mrp_bom_reference +msgid "MRP Bill of Material Reference" +msgstr "Référence de nomenclature" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.line,product_tmpl_id:0 +msgid "Product Template" +msgstr "Modèle d'article" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,name:0 +msgid "Reference" +msgstr "Référence" diff --git a/mrp_bom_reference_selection/i18n/mrp_bom_reference_selection.pot b/mrp_bom_reference_selection/i18n/mrp_bom_reference_selection.pot new file mode 100644 index 000000000..ff58455bf --- /dev/null +++ b/mrp_bom_reference_selection/i18n/mrp_bom_reference_selection.pot @@ -0,0 +1,68 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_bom_reference_selection +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-02-25 13:19+0000\n" +"PO-Revision-Date: 2015-02-25 13:19+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mrp_bom_reference_selection +#: model:ir.model,name:mrp_bom_reference_selection.model_mrp_bom +#: field:mrp.bom.reference,bom_id:0 +msgid "Bill of Material" +msgstr "" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom,reference_id:0 +msgid "BoM Reference" +msgstr "" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,create_date:0 +msgid "Created on" +msgstr "" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,id:0 +msgid "ID" +msgstr "" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: mrp_bom_reference_selection +#: model:ir.model,name:mrp_bom_reference_selection.model_mrp_bom_reference +msgid "MRP Bill of Material Reference" +msgstr "" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.line,product_tmpl_id:0 +msgid "Product Template" +msgstr "" + +#. module: mrp_bom_reference_selection +#: field:mrp.bom.reference,name:0 +msgid "Reference" +msgstr "" + diff --git a/mrp_bom_reference_selection/models/__init__.py b/mrp_bom_reference_selection/models/__init__.py new file mode 100644 index 000000000..7143231a8 --- /dev/null +++ b/mrp_bom_reference_selection/models/__init__.py @@ -0,0 +1,27 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2015 Savoir-faire Linux +# (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from . import ( + mrp_bom, + mrp_bom_line, + mrp_bom_reference, +) diff --git a/mrp_bom_reference_selection/models/mrp_bom.py b/mrp_bom_reference_selection/models/mrp_bom.py new file mode 100644 index 000000000..555dd0bb9 --- /dev/null +++ b/mrp_bom_reference_selection/models/mrp_bom.py @@ -0,0 +1,37 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2015 Savoir-faire Linux +# (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp import models, fields, api + + +class BillOfMaterial(models.Model): + _inherit = 'mrp.bom' + + @api.model + def create(self, vals): + res = super(BillOfMaterial, self).create(vals) + if not res.reference_id: + self.env['mrp.bom.reference'].create({'bom_id': res.id}) + return res + + reference_id = fields.One2many( + 'mrp.bom.reference', 'bom_id', string="BoM Reference") diff --git a/mrp_bom_reference_selection/models/mrp_bom_line.py b/mrp_bom_reference_selection/models/mrp_bom_line.py new file mode 100644 index 000000000..7737fd469 --- /dev/null +++ b/mrp_bom_reference_selection/models/mrp_bom_line.py @@ -0,0 +1,71 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2015 Savoir-faire Linux +# (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp import models, fields, api + + +class BillOfMaterialLine(models.Model): + _inherit = 'mrp.bom.line' + + reference_id = fields.Many2one('mrp.bom.reference', 'Ref') + product_tmpl_id = fields.Many2one( + 'product.template', 'Product Template', + related='product_id.product_tmpl_id', store=True) + + product_id = fields.Many2one( + 'product.product', required=True, string='Product') + + @api.multi + def onchange_product_id(self, product_id): + product = self.env['product.product'].browse(product_id) + + res = {'value': {}} + + if not product: + res['value']['reference_id'] = False + else: + refs = self.env['mrp.bom.reference'].search( + [('bom_id.product_tmpl_id', '=', product.product_tmpl_id.id)]) + res['value']['reference_id'] = refs and refs[0] + + return res + + @api.one + @api.depends('product_id') + def _get_child_bom_lines(self): + if self.reference_id: + self.child_line_ids = self.reference_id.bom_id.bom_line_ids.ids + else: + bom_obj = self.env['mrp.bom'] + bom_id = bom_obj._bom_find( + product_tmpl_id=self.product_id.product_tmpl_id.id, + product_id=self.product_id.id) + self.child_line_ids = bom_id and [ + (6, 0, child_id) for child_id in + bom_obj.browse(bom_id).bom_line_ids.ids + ] or False + + child_line_ids = fields.One2many( + relation='mrp.bom.line', + compute='_get_child_bom_lines', + string="BOM lines of the referred bom", + ) diff --git a/mrp_bom_reference_selection/models/mrp_bom_reference.py b/mrp_bom_reference_selection/models/mrp_bom_reference.py new file mode 100644 index 000000000..9d7cdee2c --- /dev/null +++ b/mrp_bom_reference_selection/models/mrp_bom_reference.py @@ -0,0 +1,34 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2015 Savoir-faire Linux +# (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp import models, fields + + +class BillOfMaterialReference(models.Model): + + _name = 'mrp.bom.reference' + _description = 'MRP Bill of Material Reference' + + bom_id = fields.Many2one( + 'mrp.bom', required=True, ondelete='cascade', + string='Bill of Material') + name = fields.Char(related='bom_id.code', store=True) diff --git a/mrp_bom_reference_selection/security/ir.model.access.csv b/mrp_bom_reference_selection/security/ir.model.access.csv new file mode 100644 index 000000000..2ccaa9f4a --- /dev/null +++ b/mrp_bom_reference_selection/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_mrp_bom_reference_user,mrp.bom.reference,model_mrp_bom_reference,mrp.group_mrp_user,1,1,1,1 diff --git a/mrp_bom_reference_selection/views/mrp_bom_view.xml b/mrp_bom_reference_selection/views/mrp_bom_view.xml new file mode 100644 index 000000000..04ed63a7e --- /dev/null +++ b/mrp_bom_reference_selection/views/mrp_bom_view.xml @@ -0,0 +1,36 @@ + + + + + + mrp.bom.tree + mrp.bom + + + + + + + + + + + mrp.bom.form + mrp.bom + + + + + + + + + + + + \ No newline at end of file