From 20d73262c4a57c039ab7f1be62ffea4024dce179 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 10 Dec 2014 23:35:21 +0100 Subject: [PATCH 01/30] [IMP] Total refactorization of quality control modules with new API, README files, and new concepts. WIP of quality_control_tolerance [FIX] quality_control: Triggers for product category --- quality_control_mrp_oca/README.rst | 11 +++ quality_control_mrp_oca/__init__.py | 6 ++ quality_control_mrp_oca/__openerp__.py | 42 +++++++++++ .../data/quality_control_mrp_data.xml | 16 +++++ quality_control_mrp_oca/i18n/es.po | 39 ++++++++++ .../i18n/quality_control_mrp.pot | 39 ++++++++++ quality_control_mrp_oca/models/__init__.py | 7 ++ .../models/mrp_production.py | 58 +++++++++++++++ .../models/qc_inspection.py | 45 ++++++++++++ .../static/description/icon.png | Bin 0 -> 11357 bytes .../views/qc_inspection_view.xml | 68 ++++++++++++++++++ 11 files changed, 331 insertions(+) create mode 100644 quality_control_mrp_oca/README.rst create mode 100644 quality_control_mrp_oca/__init__.py create mode 100644 quality_control_mrp_oca/__openerp__.py create mode 100644 quality_control_mrp_oca/data/quality_control_mrp_data.xml create mode 100644 quality_control_mrp_oca/i18n/es.po create mode 100644 quality_control_mrp_oca/i18n/quality_control_mrp.pot create mode 100644 quality_control_mrp_oca/models/__init__.py create mode 100644 quality_control_mrp_oca/models/mrp_production.py create mode 100644 quality_control_mrp_oca/models/qc_inspection.py create mode 100644 quality_control_mrp_oca/static/description/icon.png create mode 100644 quality_control_mrp_oca/views/qc_inspection_view.xml diff --git a/quality_control_mrp_oca/README.rst b/quality_control_mrp_oca/README.rst new file mode 100644 index 000000000..22a06a73f --- /dev/null +++ b/quality_control_mrp_oca/README.rst @@ -0,0 +1,11 @@ +MRP extension for quality control +================================= + +This module defines a trigger that creates inspections when a production order +is made. + +It also adds some shortcuts on production orders to these inspections. + +Contributors +------------ +* Pedro M. Baeza diff --git a/quality_control_mrp_oca/__init__.py b/quality_control_mrp_oca/__init__.py new file mode 100644 index 000000000..ad6c8186c --- /dev/null +++ b/quality_control_mrp_oca/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import models diff --git a/quality_control_mrp_oca/__openerp__.py b/quality_control_mrp_oca/__openerp__.py new file mode 100644 index 000000000..3d98666dd --- /dev/null +++ b/quality_control_mrp_oca/__openerp__.py @@ -0,0 +1,42 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Copyright (c) +# 2014 Serv. Tec. Avanzados - Pedro M. Baeza (http://www.serviciosbaeza.com) +# 2014 AvanzOsc (http://www.avanzosc.es) +# +# 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": "Quality control - MRP", + "version": "1.0", + "author": "OdooMRP team", + "website": "http://www.odoomrp.com", + "contributors": [ + "Pedro M. Baeza + + + + + Production done + + + + + Manufacturing Order + mrp.production + + + + diff --git a/quality_control_mrp_oca/i18n/es.po b/quality_control_mrp_oca/i18n/es.po new file mode 100644 index 000000000..04e8522a7 --- /dev/null +++ b/quality_control_mrp_oca/i18n/es.po @@ -0,0 +1,39 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * quality_control_mrp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-12-10 17:45+0000\n" +"PO-Revision-Date: 2014-12-10 17:45+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: quality_control_mrp +#: help:mrp.production,qc_inspections:0 +msgid "Inspections related to this production." +msgstr "Inspecciones relativas a esta producción." + +#. module: quality_control_mrp +#: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production +#: field:qc.inspection,production:0 +msgid "Production" +msgstr "Producción" + +#. module: quality_control_mrp +#: model:qc.trigger,name:quality_control_mrp.qc_trigger_mrp +msgid "Production done" +msgstr "Producción realizada" + +#. module: quality_control_mrp +#: view:qc.inspection.line:quality_control_mrp.qc_inspection_line_search_production_view +#: field:qc.inspection.line,production:0 +msgid "Production order" +msgstr "Orden de producción" + diff --git a/quality_control_mrp_oca/i18n/quality_control_mrp.pot b/quality_control_mrp_oca/i18n/quality_control_mrp.pot new file mode 100644 index 000000000..65cb98ce8 --- /dev/null +++ b/quality_control_mrp_oca/i18n/quality_control_mrp.pot @@ -0,0 +1,39 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * quality_control_mrp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-12-10 17:45+0000\n" +"PO-Revision-Date: 2014-12-10 17:45+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: quality_control_mrp +#: help:mrp.production,qc_inspections:0 +msgid "Inspections related to this production." +msgstr "" + +#. module: quality_control_mrp +#: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production +#: field:qc.inspection,production:0 +msgid "Production" +msgstr "" + +#. module: quality_control_mrp +#: model:qc.trigger,name:quality_control_mrp.qc_trigger_mrp +msgid "Production done" +msgstr "" + +#. module: quality_control_mrp +#: view:qc.inspection.line:quality_control_mrp.qc_inspection_line_search_production_view +#: field:qc.inspection.line,production:0 +msgid "Production order" +msgstr "" + diff --git a/quality_control_mrp_oca/models/__init__.py b/quality_control_mrp_oca/models/__init__.py new file mode 100644 index 000000000..adf4739b2 --- /dev/null +++ b/quality_control_mrp_oca/models/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import qc_inspection +from . import mrp_production diff --git a/quality_control_mrp_oca/models/mrp_production.py b/quality_control_mrp_oca/models/mrp_production.py new file mode 100644 index 000000000..58b1707b3 --- /dev/null +++ b/quality_control_mrp_oca/models/mrp_production.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields, api + + +class MrpProduction(models.Model): + _inherit = 'mrp.production' + + @api.one + @api.depends('qc_inspections', 'qc_inspections.state') + def _count_inspections(self): + self.created_inspections = len(self.qc_inspections) + self.passed_inspections = len([x for x in self.qc_inspections if + x.state == 'success']) + self.failed_inspections = len([x for x in self.qc_inspections if + x.state == 'failed']) + self.done_inspections = (self.passed_inspections + + self.failed_inspections) + + qc_inspections = fields.One2many( + comodel_name='qc.inspection', inverse_name='picking', copy=False, + string='Inspections', help="Inspections related to this production.") + created_inspections = fields.Integer( + compute="_count_inspections", string="Created inspections") + done_inspections = fields.Integer( + compute="_count_inspections", string="Done inspections") + passed_inspections = fields.Integer( + compute="_count_inspections", string="Inspections OK") + failed_inspections = fields.Integer( + compute="_count_inspections", string="Inspections failed") + + @api.v7 + def action_produce(self, cr, uid, production_id, production_qty, + production_mode, wiz=False, context=None): + production = self.browse(cr, uid, production_id, context=context) + production.action_produce( + production_id, production_qty, production_mode, wiz=wiz) + + @api.v8 + def action_produce(self, production_id, production_qty, production_mode, + wiz=False): + res = super(MrpProduction, self).action_produce( + production_id, production_qty, production_mode, wiz=wiz) + if production_mode == 'consume_produce': + inspection_model = self.env['qc.inspection'] + for move in self.move_created_ids2: + qc_trigger = self.env.ref('quality_control_mrp.qc_trigger_mrp') + tests = set() + for model in ['qc.trigger.product_category_line', + 'qc.trigger.product_template_line', + 'qc.trigger.product_line']: + tests = tests.union(self.env[model].get_test_for_product( + qc_trigger, move.product_id)) + for test in tests: + inspection_model._make_inspection(move, test) + return res diff --git a/quality_control_mrp_oca/models/qc_inspection.py b/quality_control_mrp_oca/models/qc_inspection.py new file mode 100644 index 000000000..cf7cc96bd --- /dev/null +++ b/quality_control_mrp_oca/models/qc_inspection.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields, api + + +class QcInspection(models.Model): + _inherit = 'qc.inspection' + + @api.one + @api.depends('object_id') + def get_production(self): + self.production = False + if self.object_id: + if self.object_id._name == 'mrp.production': + self.production = self.object_id + + @api.one + @api.depends('object_id') + def _get_product(self): + """Overriden for getting the product from a mrp.production.""" + super(QcInspection, self)._get_product() + if self.object_id: + if self.object_id._name == 'mrp.production': + self.product = self.object_id.product_id + + @api.one + @api.depends('object_id') + def _get_qty(self): + super(QcInspection, self)._get_qty() + if self.object_id: + if self.object_id._name == 'mrp.production': + self.qty = self.object_id.product_qty + + production = fields.Many2one( + comodel_name="mrp.production", compute="get_production", store=True) + + +class QcInspectionLine(models.Model): + _inherit = 'qc.inspection.line' + + production = fields.Many2one( + comodel_name="mrp.production", related="inspection_id.production", + store=True, string="Production order") diff --git a/quality_control_mrp_oca/static/description/icon.png b/quality_control_mrp_oca/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..10f1f876f701f5263215071b2497ae85b408aab4 GIT binary patch literal 11357 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 literal 0 HcmV?d00001 diff --git a/quality_control_mrp_oca/views/qc_inspection_view.xml b/quality_control_mrp_oca/views/qc_inspection_view.xml new file mode 100644 index 000000000..8f1ee8c8c --- /dev/null +++ b/quality_control_mrp_oca/views/qc_inspection_view.xml @@ -0,0 +1,68 @@ + + + + + + qc.inspection.form.view.production + qc.inspection + + + + + + + + + + qc.inspection.tree.view.production + qc.inspection + + + + + + + + + + qc.inspection.search.view.production + qc.inspection + + + + + + + + + + qc.inspection.line.tree.production + qc.inspection.line + + + + + + + + + + qc.inspection.line.search.production + qc.inspection.line + + + + + + + + + + + + + From f9b4b95280524249d491dd5c34b14346a57fba3a Mon Sep 17 00:00:00 2001 From: oihane Date: Fri, 19 Dec 2014 11:17:08 +0100 Subject: [PATCH 02/30] [FIX] Little changes in quality modules --- quality_control_mrp_oca/__openerp__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/quality_control_mrp_oca/__openerp__.py b/quality_control_mrp_oca/__openerp__.py index 3d98666dd..536336a38 100644 --- a/quality_control_mrp_oca/__openerp__.py +++ b/quality_control_mrp_oca/__openerp__.py @@ -31,6 +31,7 @@ "category": "Quality control", "depends": [ 'quality_control', + 'quality_control_stock', 'mrp', ], "data": [ From cc047aa8e4ca1d6d30ffbefd4cfba1d79d8d4e7b Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Mon, 5 Jan 2015 05:18:56 +0100 Subject: [PATCH 03/30] [FIX] quality_control_mrp: Some problems [IMP] quality_control_mrp: Smartbutton to inspections --- quality_control_mrp_oca/__openerp__.py | 1 + quality_control_mrp_oca/i18n/es.po | 4 +++ .../i18n/quality_control_mrp.pot | 5 +++ .../models/mrp_production.py | 16 ++-------- .../models/qc_inspection.py | 21 ++---------- .../views/mrp_production_view.xml | 32 +++++++++++++++++++ 6 files changed, 46 insertions(+), 33 deletions(-) create mode 100644 quality_control_mrp_oca/views/mrp_production_view.xml diff --git a/quality_control_mrp_oca/__openerp__.py b/quality_control_mrp_oca/__openerp__.py index 536336a38..3b6060d7f 100644 --- a/quality_control_mrp_oca/__openerp__.py +++ b/quality_control_mrp_oca/__openerp__.py @@ -37,6 +37,7 @@ "data": [ 'data/quality_control_mrp_data.xml', 'views/qc_inspection_view.xml', + 'views/mrp_production_view.xml', ], "installable": True, "auto_install": True, diff --git a/quality_control_mrp_oca/i18n/es.po b/quality_control_mrp_oca/i18n/es.po index 04e8522a7..890fdabda 100644 --- a/quality_control_mrp_oca/i18n/es.po +++ b/quality_control_mrp_oca/i18n/es.po @@ -37,3 +37,7 @@ msgstr "Producción realizada" msgid "Production order" msgstr "Orden de producción" +#. module: quality_control_mrp +#: view:mrp.production:quality_control_mrp.mrp_production_qc_view +msgid "inspections" +msgstr "inspecciones" diff --git a/quality_control_mrp_oca/i18n/quality_control_mrp.pot b/quality_control_mrp_oca/i18n/quality_control_mrp.pot index 65cb98ce8..d7bb4f7bd 100644 --- a/quality_control_mrp_oca/i18n/quality_control_mrp.pot +++ b/quality_control_mrp_oca/i18n/quality_control_mrp.pot @@ -37,3 +37,8 @@ msgstr "" msgid "Production order" msgstr "" +#. module: quality_control_mrp +#: view:mrp.production:quality_control_mrp.mrp_production_qc_view +msgid "inspections" +msgstr "" + diff --git a/quality_control_mrp_oca/models/mrp_production.py b/quality_control_mrp_oca/models/mrp_production.py index 58b1707b3..f0cee7251 100644 --- a/quality_control_mrp_oca/models/mrp_production.py +++ b/quality_control_mrp_oca/models/mrp_production.py @@ -9,27 +9,15 @@ class MrpProduction(models.Model): _inherit = 'mrp.production' @api.one - @api.depends('qc_inspections', 'qc_inspections.state') + @api.depends('qc_inspections') def _count_inspections(self): self.created_inspections = len(self.qc_inspections) - self.passed_inspections = len([x for x in self.qc_inspections if - x.state == 'success']) - self.failed_inspections = len([x for x in self.qc_inspections if - x.state == 'failed']) - self.done_inspections = (self.passed_inspections + - self.failed_inspections) qc_inspections = fields.One2many( - comodel_name='qc.inspection', inverse_name='picking', copy=False, + comodel_name='qc.inspection', inverse_name='production', copy=False, string='Inspections', help="Inspections related to this production.") created_inspections = fields.Integer( compute="_count_inspections", string="Created inspections") - done_inspections = fields.Integer( - compute="_count_inspections", string="Done inspections") - passed_inspections = fields.Integer( - compute="_count_inspections", string="Inspections OK") - failed_inspections = fields.Integer( - compute="_count_inspections", string="Inspections failed") @api.v7 def action_produce(self, cr, uid, production_id, production_qty, diff --git a/quality_control_mrp_oca/models/qc_inspection.py b/quality_control_mrp_oca/models/qc_inspection.py index cf7cc96bd..7dcf425c9 100644 --- a/quality_control_mrp_oca/models/qc_inspection.py +++ b/quality_control_mrp_oca/models/qc_inspection.py @@ -13,25 +13,8 @@ class QcInspection(models.Model): def get_production(self): self.production = False if self.object_id: - if self.object_id._name == 'mrp.production': - self.production = self.object_id - - @api.one - @api.depends('object_id') - def _get_product(self): - """Overriden for getting the product from a mrp.production.""" - super(QcInspection, self)._get_product() - if self.object_id: - if self.object_id._name == 'mrp.production': - self.product = self.object_id.product_id - - @api.one - @api.depends('object_id') - def _get_qty(self): - super(QcInspection, self)._get_qty() - if self.object_id: - if self.object_id._name == 'mrp.production': - self.qty = self.object_id.product_qty + if self.object_id._name == 'stock.move': + self.production = self.object_id.production_id production = fields.Many2one( comodel_name="mrp.production", compute="get_production", store=True) diff --git a/quality_control_mrp_oca/views/mrp_production_view.xml b/quality_control_mrp_oca/views/mrp_production_view.xml new file mode 100644 index 000000000..5f9020cc0 --- /dev/null +++ b/quality_control_mrp_oca/views/mrp_production_view.xml @@ -0,0 +1,32 @@ + + + + + Quality inspections from production order + qc.inspection + tree,form + [('production', '=', active_id)] + + + + mrp.production.form.qc + mrp.production + + +
+
+ +
+
+
+
+ +
+
\ No newline at end of file From 17fc185bb9b99e30ad346497895eb54a3f7d2f66 Mon Sep 17 00:00:00 2001 From: oihane Date: Mon, 5 Jan 2015 10:46:31 +0100 Subject: [PATCH 04/30] [MOD] Fixed MO view --- .../views/mrp_production_view.xml | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/quality_control_mrp_oca/views/mrp_production_view.xml b/quality_control_mrp_oca/views/mrp_production_view.xml index 5f9020cc0..8e44eb648 100644 --- a/quality_control_mrp_oca/views/mrp_production_view.xml +++ b/quality_control_mrp_oca/views/mrp_production_view.xml @@ -8,25 +8,35 @@ [('production', '=', active_id)] - - mrp.production.form.qc + + mrp.production.buttons mrp.production
-
- +
+ + mrp.production.form.qc + mrp.production + + +
+ +
+
+
+ \ No newline at end of file From e3d77d482ae3f0da33cd8ca4df69d395252cca3e Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Mon, 16 Feb 2015 20:51:19 +0100 Subject: [PATCH 05/30] [IMP] quality_control*: Change icon set --- .../static/description/icon.png | Bin 11357 -> 9558 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/quality_control_mrp_oca/static/description/icon.png b/quality_control_mrp_oca/static/description/icon.png index 10f1f876f701f5263215071b2497ae85b408aab4..a86ac2216b01150494b9681168e2b605d9da0084 100644 GIT binary patch literal 9558 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 From 354a068427bf163ac71e678e9f81c6f80f450fd3 Mon Sep 17 00:00:00 2001 From: oihane Date: Fri, 20 Feb 2015 13:43:32 +0100 Subject: [PATCH 06/30] [MOD] Trigger lines instead of test --- quality_control_mrp_oca/models/mrp_production.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/quality_control_mrp_oca/models/mrp_production.py b/quality_control_mrp_oca/models/mrp_production.py index f0cee7251..bb50d1387 100644 --- a/quality_control_mrp_oca/models/mrp_production.py +++ b/quality_control_mrp_oca/models/mrp_production.py @@ -35,12 +35,13 @@ class MrpProduction(models.Model): inspection_model = self.env['qc.inspection'] for move in self.move_created_ids2: qc_trigger = self.env.ref('quality_control_mrp.qc_trigger_mrp') - tests = set() + trigger_lines = set() for model in ['qc.trigger.product_category_line', 'qc.trigger.product_template_line', 'qc.trigger.product_line']: - tests = tests.union(self.env[model].get_test_for_product( - qc_trigger, move.product_id)) - for test in tests: - inspection_model._make_inspection(move, test) + trigger_lines = trigger_lines.union( + self.env[model].get_trigger_line_for_product( + qc_trigger, move.product_id)) + for trigger_line in trigger_lines: + inspection_model._make_inspection(move, trigger_line) return res From 34e32493b12af54c4cf68ba710de586bfef038d9 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 25 Mar 2015 20:48:43 +0100 Subject: [PATCH 07/30] [IMP] Expand AUTHORS --- quality_control_mrp_oca/__openerp__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/quality_control_mrp_oca/__openerp__.py b/quality_control_mrp_oca/__openerp__.py index 3b6060d7f..bb9b6d7f7 100644 --- a/quality_control_mrp_oca/__openerp__.py +++ b/quality_control_mrp_oca/__openerp__.py @@ -23,7 +23,9 @@ { "name": "Quality control - MRP", "version": "1.0", - "author": "OdooMRP team", + "author": "OdooMRP team," + "AvanzOSC," + "Serv. Tecnol. Avanzados - Pedro M. Baeza", "website": "http://www.odoomrp.com", "contributors": [ "Pedro M. Baeza Date: Wed, 20 May 2015 01:40:42 +0200 Subject: [PATCH 08/30] [IMP] Improve some README files --- quality_control_mrp_oca/README.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/quality_control_mrp_oca/README.rst b/quality_control_mrp_oca/README.rst index 22a06a73f..8ebfd491f 100644 --- a/quality_control_mrp_oca/README.rst +++ b/quality_control_mrp_oca/README.rst @@ -1,11 +1,12 @@ MRP extension for quality control ================================= -This module defines a trigger that creates inspections when a production order -is made. +This module defines a trigger that creates quality control inspections when a +production order is finished. -It also adds some shortcuts on production orders to these inspections. +It also adds the shortcuts related to these inspections on production orders. Contributors ------------ + * Pedro M. Baeza From 0deafafad769a7fcf7e1c4264cfb1f16a1f94fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matja=C5=BE=20Mozeti=C4=8D?= Date: Sat, 1 Aug 2015 21:08:11 +0200 Subject: [PATCH 09/30] Slovene translations added --- quality_control_mrp_oca/i18n/sl.po | 45 ++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 quality_control_mrp_oca/i18n/sl.po diff --git a/quality_control_mrp_oca/i18n/sl.po b/quality_control_mrp_oca/i18n/sl.po new file mode 100644 index 000000000..600045945 --- /dev/null +++ b/quality_control_mrp_oca/i18n/sl.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * quality_control_mrp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-08-01 20:38+0200\n" +"PO-Revision-Date: 2015-08-01 20:39+0200\n" +"Last-Translator: Matjaz Mozetic \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Poedit 1.8.2\n" +"Language: sl\n" + +#. module: quality_control_mrp +#: help:mrp.production,qc_inspections:0 +msgid "Inspections related to this production." +msgstr "Inšpekcije vezane na to proizvodnjo." + +#. module: quality_control_mrp +#: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production +#: field:qc.inspection,production:0 +msgid "Production" +msgstr "Proizvodnja" + +#. module: quality_control_mrp +#: model:qc.trigger,name:quality_control_mrp.qc_trigger_mrp +msgid "Production done" +msgstr "Proizvodnja opravljena" + +#. module: quality_control_mrp +#: view:qc.inspection.line:quality_control_mrp.qc_inspection_line_search_production_view +#: field:qc.inspection.line,production:0 +msgid "Production order" +msgstr "Proizvodni nalog" + +#. module: quality_control_mrp +#: view:mrp.production:quality_control_mrp.mrp_production_qc_view +msgid "inspections" +msgstr "inšpekcije" From e95eaf0b7625c01e64c394a1300617b35b6d2dc5 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 9 Oct 2015 18:18:26 +0200 Subject: [PATCH 10/30] OCA Transbot updated translations from Transifex --- quality_control_mrp_oca/i18n/es.po | 50 ++++++++++++++--- quality_control_mrp_oca/i18n/fr.po | 77 +++++++++++++++++++++++++++ quality_control_mrp_oca/i18n/pt_BR.po | 77 +++++++++++++++++++++++++++ quality_control_mrp_oca/i18n/sl.po | 53 ++++++++++++++---- 4 files changed, 239 insertions(+), 18 deletions(-) create mode 100644 quality_control_mrp_oca/i18n/fr.po create mode 100644 quality_control_mrp_oca/i18n/pt_BR.po diff --git a/quality_control_mrp_oca/i18n/es.po b/quality_control_mrp_oca/i18n/es.po index 890fdabda..5110a9a94 100644 --- a/quality_control_mrp_oca/i18n/es.po +++ b/quality_control_mrp_oca/i18n/es.po @@ -1,25 +1,44 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * quality_control_mrp -# +# * quality_control_mrp +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"Project-Id-Version: odoomrp-wip (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-10 17:45+0000\n" -"PO-Revision-Date: 2014-12-10 17:45+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" +"POT-Creation-Date: 2015-10-07 10:44+0000\n" +"PO-Revision-Date: 2015-10-09 10:50+0000\n" +"Last-Translator: Pedro M. Baeza \n" +"Language-Team: Spanish (http://www.transifex.com/oca/odoomrp-wip-8-0/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: quality_control_mrp +#: field:mrp.production,qc_inspections:0 +msgid "Inspections" +msgstr "Inspecciones" #. module: quality_control_mrp #: help:mrp.production,qc_inspections:0 msgid "Inspections related to this production." msgstr "Inspecciones relativas a esta producción." +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_mrp_production +#: model:res.request.link,name:quality_control_mrp.req_link_mrp_production +msgid "Manufacturing Order" +msgstr "Órden de producción" + +#. module: quality_control_mrp +#: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production +#: view:qc.inspection.line:quality_control_mrp.qc_inspection_line_search_production_view +msgid "Product" +msgstr "Product" + #. module: quality_control_mrp #: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production #: field:qc.inspection,production:0 @@ -37,6 +56,21 @@ msgstr "Producción realizada" msgid "Production order" msgstr "Orden de producción" +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_qc_inspection +msgid "Quality control inspection" +msgstr "Inspección del control de calidad" + +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_qc_inspection_line +msgid "Quality control inspection line" +msgstr "Línea de inspección de control de calidad" + +#. module: quality_control_mrp +#: model:ir.actions.act_window,name:quality_control_mrp.action_qc_inspection_per_production +msgid "Quality inspections from production order" +msgstr "" + #. module: quality_control_mrp #: view:mrp.production:quality_control_mrp.mrp_production_qc_view msgid "inspections" diff --git a/quality_control_mrp_oca/i18n/fr.po b/quality_control_mrp_oca/i18n/fr.po new file mode 100644 index 000000000..0613425f0 --- /dev/null +++ b/quality_control_mrp_oca/i18n/fr.po @@ -0,0 +1,77 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * quality_control_mrp +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: odoomrp-wip (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-07 10:44+0000\n" +"PO-Revision-Date: 2015-09-10 16:41+0000\n" +"Last-Translator: <>\n" +"Language-Team: French (http://www.transifex.com/oca/odoomrp-wip-8-0/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: quality_control_mrp +#: field:mrp.production,qc_inspections:0 +msgid "Inspections" +msgstr "" + +#. module: quality_control_mrp +#: help:mrp.production,qc_inspections:0 +msgid "Inspections related to this production." +msgstr "" + +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_mrp_production +#: model:res.request.link,name:quality_control_mrp.req_link_mrp_production +msgid "Manufacturing Order" +msgstr "" + +#. module: quality_control_mrp +#: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production +#: view:qc.inspection.line:quality_control_mrp.qc_inspection_line_search_production_view +msgid "Product" +msgstr "Article" + +#. module: quality_control_mrp +#: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production +#: field:qc.inspection,production:0 +msgid "Production" +msgstr "" + +#. module: quality_control_mrp +#: model:qc.trigger,name:quality_control_mrp.qc_trigger_mrp +msgid "Production done" +msgstr "" + +#. module: quality_control_mrp +#: view:qc.inspection.line:quality_control_mrp.qc_inspection_line_search_production_view +#: field:qc.inspection.line,production:0 +msgid "Production order" +msgstr "" + +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_qc_inspection +msgid "Quality control inspection" +msgstr "" + +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_qc_inspection_line +msgid "Quality control inspection line" +msgstr "" + +#. module: quality_control_mrp +#: model:ir.actions.act_window,name:quality_control_mrp.action_qc_inspection_per_production +msgid "Quality inspections from production order" +msgstr "" + +#. module: quality_control_mrp +#: view:mrp.production:quality_control_mrp.mrp_production_qc_view +msgid "inspections" +msgstr "" diff --git a/quality_control_mrp_oca/i18n/pt_BR.po b/quality_control_mrp_oca/i18n/pt_BR.po new file mode 100644 index 000000000..060b0ceba --- /dev/null +++ b/quality_control_mrp_oca/i18n/pt_BR.po @@ -0,0 +1,77 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * quality_control_mrp +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: odoomrp-wip (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-07 10:44+0000\n" +"PO-Revision-Date: 2015-10-09 03:43+0000\n" +"Last-Translator: danimaribeiro \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/odoomrp-wip-8-0/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: quality_control_mrp +#: field:mrp.production,qc_inspections:0 +msgid "Inspections" +msgstr "" + +#. module: quality_control_mrp +#: help:mrp.production,qc_inspections:0 +msgid "Inspections related to this production." +msgstr "" + +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_mrp_production +#: model:res.request.link,name:quality_control_mrp.req_link_mrp_production +msgid "Manufacturing Order" +msgstr "Ordem de Produção" + +#. module: quality_control_mrp +#: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production +#: view:qc.inspection.line:quality_control_mrp.qc_inspection_line_search_production_view +msgid "Product" +msgstr "Produto" + +#. module: quality_control_mrp +#: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production +#: field:qc.inspection,production:0 +msgid "Production" +msgstr "Produção" + +#. module: quality_control_mrp +#: model:qc.trigger,name:quality_control_mrp.qc_trigger_mrp +msgid "Production done" +msgstr "" + +#. module: quality_control_mrp +#: view:qc.inspection.line:quality_control_mrp.qc_inspection_line_search_production_view +#: field:qc.inspection.line,production:0 +msgid "Production order" +msgstr "" + +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_qc_inspection +msgid "Quality control inspection" +msgstr "" + +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_qc_inspection_line +msgid "Quality control inspection line" +msgstr "" + +#. module: quality_control_mrp +#: model:ir.actions.act_window,name:quality_control_mrp.action_qc_inspection_per_production +msgid "Quality inspections from production order" +msgstr "" + +#. module: quality_control_mrp +#: view:mrp.production:quality_control_mrp.mrp_production_qc_view +msgid "inspections" +msgstr "" diff --git a/quality_control_mrp_oca/i18n/sl.po b/quality_control_mrp_oca/i18n/sl.po index 600045945..21dc60e70 100644 --- a/quality_control_mrp_oca/i18n/sl.po +++ b/quality_control_mrp_oca/i18n/sl.po @@ -1,27 +1,45 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * quality_control_mrp -# +# * quality_control_mrp +# +# Translators: +# Matjaž Mozetič , 2015 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"Project-Id-Version: odoomrp-wip (8.0)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-08-01 20:38+0200\n" -"PO-Revision-Date: 2015-08-01 20:39+0200\n" -"Last-Translator: Matjaz Mozetic \n" -"Language-Team: \n" +"POT-Creation-Date: 2015-10-07 10:44+0000\n" +"PO-Revision-Date: 2015-09-20 19:04+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/odoomrp-wip-8-0/language/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -"X-Generator: Poedit 1.8.2\n" +"Content-Transfer-Encoding: \n" "Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: quality_control_mrp +#: field:mrp.production,qc_inspections:0 +msgid "Inspections" +msgstr "Inšpekcije" #. module: quality_control_mrp #: help:mrp.production,qc_inspections:0 msgid "Inspections related to this production." msgstr "Inšpekcije vezane na to proizvodnjo." +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_mrp_production +#: model:res.request.link,name:quality_control_mrp.req_link_mrp_production +msgid "Manufacturing Order" +msgstr "Proizvodni nalog" + +#. module: quality_control_mrp +#: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production +#: view:qc.inspection.line:quality_control_mrp.qc_inspection_line_search_production_view +msgid "Product" +msgstr "Proizvod" + #. module: quality_control_mrp #: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production #: field:qc.inspection,production:0 @@ -39,6 +57,21 @@ msgstr "Proizvodnja opravljena" msgid "Production order" msgstr "Proizvodni nalog" +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_qc_inspection +msgid "Quality control inspection" +msgstr "Inšpekcija nadzora kvalitete" + +#. module: quality_control_mrp +#: model:ir.model,name:quality_control_mrp.model_qc_inspection_line +msgid "Quality control inspection line" +msgstr "Inšpekcijska postavka kontrole kakovosti" + +#. module: quality_control_mrp +#: model:ir.actions.act_window,name:quality_control_mrp.action_qc_inspection_per_production +msgid "Quality inspections from production order" +msgstr "Inšpekcije kvalitete iz proizvodnega naloga" + #. module: quality_control_mrp #: view:mrp.production:quality_control_mrp.mrp_production_qc_view msgid "inspections" From 38269ca2e04fb4a59e4beaa43c009681cc03aa0c Mon Sep 17 00:00:00 2001 From: oihane Date: Mon, 26 Oct 2015 12:31:55 +0100 Subject: [PATCH 11/30] [MIG] quality_control_mrp: migrated from odoomrp/odoomrp-wip [IMP] quality_control_mrp: required changes * Limit access by groups in views * Use api.model --- quality_control_mrp_oca/README.rst | 42 +++++++++- quality_control_mrp_oca/__init__.py | 5 +- quality_control_mrp_oca/__openerp__.py | 46 ++++------- .../i18n/quality_control_mrp.pot | 44 ---------- quality_control_mrp_oca/models/__init__.py | 5 +- .../models/mrp_production.py | 19 ++--- .../models/qc_inspection.py | 6 +- quality_control_mrp_oca/tests/__init__.py | 5 ++ .../tests/test_quality_control_mrp.py | 80 +++++++++++++++++++ .../views/mrp_production_view.xml | 2 + .../views/qc_inspection_view.xml | 16 +++- 11 files changed, 170 insertions(+), 100 deletions(-) delete mode 100644 quality_control_mrp_oca/i18n/quality_control_mrp.pot create mode 100644 quality_control_mrp_oca/tests/__init__.py create mode 100644 quality_control_mrp_oca/tests/test_quality_control_mrp.py diff --git a/quality_control_mrp_oca/README.rst b/quality_control_mrp_oca/README.rst index 8ebfd491f..297ba3160 100644 --- a/quality_control_mrp_oca/README.rst +++ b/quality_control_mrp_oca/README.rst @@ -1,3 +1,8 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +================================= MRP extension for quality control ================================= @@ -6,7 +11,42 @@ production order is finished. It also adds the shortcuts related to these inspections on production orders. + +Usage +===== + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/129/8.0 + + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here `_. + + +Credits +======= + Contributors ------------ - * Pedro M. Baeza +* Oihane Crucelaegui + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +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/quality_control_mrp_oca/__init__.py b/quality_control_mrp_oca/__init__.py index ad6c8186c..7a3b0b9a1 100644 --- a/quality_control_mrp_oca/__init__.py +++ b/quality_control_mrp_oca/__init__.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html from . import models diff --git a/quality_control_mrp_oca/__openerp__.py b/quality_control_mrp_oca/__openerp__.py index bb9b6d7f7..c88440fbe 100644 --- a/quality_control_mrp_oca/__openerp__.py +++ b/quality_control_mrp_oca/__openerp__.py @@ -1,40 +1,26 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# Copyright (c) -# 2014 Serv. Tec. Avanzados - Pedro M. Baeza (http://www.serviciosbaeza.com) -# 2014 AvanzOsc (http://www.avanzosc.es) -# -# 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 . -# -############################################################################## +# -*- coding: utf-8 -*- +# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# (c) 2014 Oihane Crucelaegui - AvanzOSC +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html { "name": "Quality control - MRP", - "version": "1.0", - "author": "OdooMRP team," - "AvanzOSC," - "Serv. Tecnol. Avanzados - Pedro M. Baeza", + "version": "8.0.1.0.0", + "category": "Quality control", + "license": "AGPL-3", + "author": "OdooMRP team, " + "AvanzOSC, " + "Serv. Tecnol. Avanzados - Pedro M. Baeza, " + "Odoo Community Association (OCA)", "website": "http://www.odoomrp.com", "contributors": [ - "Pedro M. Baeza ", + "Oihane Crucelaegui ", ], - "category": "Quality control", "depends": [ - 'quality_control', - 'quality_control_stock', - 'mrp', + "quality_control", + "quality_control_stock", + "mrp", ], "data": [ 'data/quality_control_mrp_data.xml', diff --git a/quality_control_mrp_oca/i18n/quality_control_mrp.pot b/quality_control_mrp_oca/i18n/quality_control_mrp.pot deleted file mode 100644 index d7bb4f7bd..000000000 --- a/quality_control_mrp_oca/i18n/quality_control_mrp.pot +++ /dev/null @@ -1,44 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * quality_control_mrp -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-10 17:45+0000\n" -"PO-Revision-Date: 2014-12-10 17:45+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: quality_control_mrp -#: help:mrp.production,qc_inspections:0 -msgid "Inspections related to this production." -msgstr "" - -#. module: quality_control_mrp -#: view:qc.inspection:quality_control_mrp.qc_inspection_search_view_production -#: field:qc.inspection,production:0 -msgid "Production" -msgstr "" - -#. module: quality_control_mrp -#: model:qc.trigger,name:quality_control_mrp.qc_trigger_mrp -msgid "Production done" -msgstr "" - -#. module: quality_control_mrp -#: view:qc.inspection.line:quality_control_mrp.qc_inspection_line_search_production_view -#: field:qc.inspection.line,production:0 -msgid "Production order" -msgstr "" - -#. module: quality_control_mrp -#: view:mrp.production:quality_control_mrp.mrp_production_qc_view -msgid "inspections" -msgstr "" - diff --git a/quality_control_mrp_oca/models/__init__.py b/quality_control_mrp_oca/models/__init__.py index adf4739b2..01f09e84b 100644 --- a/quality_control_mrp_oca/models/__init__.py +++ b/quality_control_mrp_oca/models/__init__.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html from . import qc_inspection from . import mrp_production diff --git a/quality_control_mrp_oca/models/mrp_production.py b/quality_control_mrp_oca/models/mrp_production.py index bb50d1387..fe12c123f 100644 --- a/quality_control_mrp_oca/models/mrp_production.py +++ b/quality_control_mrp_oca/models/mrp_production.py @@ -1,8 +1,10 @@ # -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + from openerp import models, fields, api +from openerp.addons.quality_control.models.qc_trigger_line import\ + _filter_trigger_lines class MrpProduction(models.Model): @@ -19,14 +21,7 @@ class MrpProduction(models.Model): created_inspections = fields.Integer( compute="_count_inspections", string="Created inspections") - @api.v7 - def action_produce(self, cr, uid, production_id, production_qty, - production_mode, wiz=False, context=None): - production = self.browse(cr, uid, production_id, context=context) - production.action_produce( - production_id, production_qty, production_mode, wiz=wiz) - - @api.v8 + @api.model def action_produce(self, production_id, production_qty, production_mode, wiz=False): res = super(MrpProduction, self).action_produce( @@ -42,6 +37,6 @@ class MrpProduction(models.Model): trigger_lines = trigger_lines.union( self.env[model].get_trigger_line_for_product( qc_trigger, move.product_id)) - for trigger_line in trigger_lines: + for trigger_line in _filter_trigger_lines(trigger_lines): inspection_model._make_inspection(move, trigger_line) return res diff --git a/quality_control_mrp_oca/models/qc_inspection.py b/quality_control_mrp_oca/models/qc_inspection.py index 7dcf425c9..15c9a6ede 100644 --- a/quality_control_mrp_oca/models/qc_inspection.py +++ b/quality_control_mrp_oca/models/qc_inspection.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + from openerp import models, fields, api diff --git a/quality_control_mrp_oca/tests/__init__.py b/quality_control_mrp_oca/tests/__init__.py new file mode 100644 index 000000000..bb13e6fe1 --- /dev/null +++ b/quality_control_mrp_oca/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# (c) 2015 Oihane Crucelaegui - AvanzOSC +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from . import test_quality_control_mrp diff --git a/quality_control_mrp_oca/tests/test_quality_control_mrp.py b/quality_control_mrp_oca/tests/test_quality_control_mrp.py new file mode 100644 index 000000000..7aefdabd9 --- /dev/null +++ b/quality_control_mrp_oca/tests/test_quality_control_mrp.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +# (c) 2015 Oihane Crucelaegui - AvanzOSC +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from openerp.tests.common import TransactionCase + + +class TestQualityControlMrp(TransactionCase): + + def setUp(self): + super(TestQualityControlMrp, self).setUp() + self.production_model = self.env['mrp.production'] + self.qc_trigger_model = self.env['qc.trigger'] + self.product = self.env.ref('product.product_product_4') + self.test = self.env.ref('quality_control.qc_test_1') + self.trigger = self.env.ref('quality_control_mrp.qc_trigger_mrp') + self.production1 = self.production_model.create({ + 'product_id': self.product.id, + 'product_uom': self.product.uom_id.id, + }) + self.production1.action_confirm() + self.production1.action_assign() + + def test_inspection_create_for_product(self): + self.product.qc_triggers = [( + 0, 0, { + 'trigger': self.trigger.id, + 'test': self.test.id, + } + )] + self.production1.action_produce( + self.production1.id, self.production1.product_qty, + 'consume_produce') + self.assertEqual(self.production1.created_inspections, 1, + 'Only one inspection must be created') + + def test_inspection_create_for_template(self): + self.product.product_tmpl_id.qc_triggers = [( + 0, 0, { + 'trigger': self.trigger.id, + 'test': self.test.id, + } + )] + self.production1.action_produce( + self.production1.id, self.production1.product_qty, + 'consume_produce') + self.assertEqual(self.production1.created_inspections, 1, + 'Only one inspection must be created') + + def test_inspection_create_for_category(self): + self.product.categ_id.qc_triggers = [( + 0, 0, { + 'trigger': self.trigger.id, + 'test': self.test.id, + } + )] + self.production1.action_produce( + self.production1.id, self.production1.product_qty, + 'consume_produce') + self.assertEqual(self.production1.created_inspections, 1, + 'Only one inspection must be created') + + def test_inspection_create_only_one(self): + self.product.qc_triggers = [( + 0, 0, { + 'trigger': self.trigger.id, + 'test': self.test.id, + } + )] + self.product.categ_id.qc_triggers = [( + 0, 0, { + 'trigger': self.trigger.id, + 'test': self.test.id, + } + )] + self.production1.action_produce( + self.production1.id, self.production1.product_qty, + 'consume_produce') + self.assertEqual(self.production1.created_inspections, 1, + 'Only one inspection must be created') diff --git a/quality_control_mrp_oca/views/mrp_production_view.xml b/quality_control_mrp_oca/views/mrp_production_view.xml index 8e44eb648..2b4e9b8e6 100644 --- a/quality_control_mrp_oca/views/mrp_production_view.xml +++ b/quality_control_mrp_oca/views/mrp_production_view.xml @@ -24,6 +24,8 @@ mrp.production.form.qc mrp.production +
-
- - - - - \ No newline at end of file + + mrp.production.form.qc + mrp.production + + + +
+ +
+
+
+ \ No newline at end of file diff --git a/quality_control_mrp_oca/views/qc_inspection_view.xml b/quality_control_mrp_oca/views/qc_inspection_view.xml index 5bc886ef3..7f5ba5a75 100644 --- a/quality_control_mrp_oca/views/qc_inspection_view.xml +++ b/quality_control_mrp_oca/views/qc_inspection_view.xml @@ -1,79 +1,79 @@ - - - - - qc.inspection.form.view.production - qc.inspection - - - - - - + + + + qc.inspection.form.view.production + qc.inspection + + + + + - + + - - qc.inspection.tree.view.production - qc.inspection - - - - - - + + qc.inspection.tree.view.production + qc.inspection + + + + + - + + - - qc.inspection.search.view.production - qc.inspection - - - - - - - - - + + qc.inspection.search.view.production + qc.inspection + + + + + - + + + + + - - qc.inspection.line.tree.production - qc.inspection.line - - - - - - + + qc.inspection.line.tree.production + qc.inspection.line + + + + + - + + - - qc.inspection.line.search.production - qc.inspection.line - - - - - - - - - + + qc.inspection.line.search.production + qc.inspection.line + + + + + - - - - + + + + + + From 76d42c51021b1ddf631a8aba8f16280fe1cb7b57 Mon Sep 17 00:00:00 2001 From: Maria Sparenberg Date: Wed, 12 Dec 2018 12:15:52 +0000 Subject: [PATCH 25/30] Translated using Weblate (German) Currently translated at 100.0% (12 of 12 strings) Translation: manufacture-10.0/manufacture-10.0-quality_control_mrp Translate-URL: https://translation.odoo-community.org/projects/manufacture-10-0/manufacture-10-0-quality_control_mrp/de/ --- quality_control_mrp_oca/i18n/de.po | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/quality_control_mrp_oca/i18n/de.po b/quality_control_mrp_oca/i18n/de.po index f360b820a..577f969cb 100644 --- a/quality_control_mrp_oca/i18n/de.po +++ b/quality_control_mrp_oca/i18n/de.po @@ -10,15 +10,16 @@ msgstr "" "Project-Id-Version: manufacture (8.0)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-04-24 14:00+0000\n" -"PO-Revision-Date: 2017-03-24 14:12+0000\n" -"Last-Translator: OCA Transbot \n" +"PO-Revision-Date: 2018-12-13 09:58+0000\n" +"Last-Translator: Maria Sparenberg \n" "Language-Team: German (http://www.transifex.com/oca/OCA-manufacture-8-0/" "language/de/)\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.3\n" #. module: quality_control_mrp #: model:ir.model.fields,field_description:quality_control_mrp.field_mrp_production_created_inspections @@ -61,7 +62,7 @@ msgstr "Fertigungsauftrag" #. module: quality_control_mrp #: model:ir.model,name:quality_control_mrp.model_qc_inspection msgid "Quality control inspection" -msgstr "Prüfung der Qualitätskontrolle" +msgstr "Qualitätskontrollinspektion" #. module: quality_control_mrp #: model:ir.model,name:quality_control_mrp.model_qc_inspection_line From 925951471bff060af91ab1e8ad87630c2759200e Mon Sep 17 00:00:00 2001 From: Pedro Castro Silva Date: Fri, 15 Feb 2019 12:04:09 +0000 Subject: [PATCH 26/30] Translated using Weblate (Portuguese) Currently translated at 100.0% (11 of 11 strings) Translation: manufacture-10.0/manufacture-10.0-quality_control_mrp Translate-URL: https://translation.odoo-community.org/projects/manufacture-10-0/manufacture-10-0-quality_control_mrp/pt/ --- quality_control_mrp_oca/i18n/pt.po | 27 ++++++++++--------- .../static/description/index.html | 2 +- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/quality_control_mrp_oca/i18n/pt.po b/quality_control_mrp_oca/i18n/pt.po index d7ee1ae00..67797f311 100644 --- a/quality_control_mrp_oca/i18n/pt.po +++ b/quality_control_mrp_oca/i18n/pt.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: manufacture (8.0)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-12-16 03:46+0000\n" -"PO-Revision-Date: 2016-12-22 14:05+0000\n" -"Last-Translator: OCA Transbot \n" +"PO-Revision-Date: 2019-02-15 14:50+0000\n" +"Last-Translator: Pedro Castro Silva \n" "Language-Team: Portuguese (http://www.transifex.com/oca/OCA-manufacture-8-0/" "language/pt/)\n" "Language: pt\n" @@ -17,64 +17,65 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 3.4\n" #. module: quality_control_mrp #: model:ir.model.fields,field_description:quality_control_mrp.field_mrp_production_created_inspections msgid "Created inspections" -msgstr "" +msgstr "Inspeções criadas" #. module: quality_control_mrp #: model:ir.model.fields,field_description:quality_control_mrp.field_mrp_production_qc_inspections msgid "Inspections" -msgstr "" +msgstr "Inspeções" #. module: quality_control_mrp #: model:ir.model.fields,help:quality_control_mrp.field_mrp_production_qc_inspections msgid "Inspections related to this production." -msgstr "" +msgstr "Inspeções relacionadas com esta produção." #. module: quality_control_mrp #: model:ir.model,name:quality_control_mrp.model_mrp_production #: model:res.request.link,name:quality_control_mrp.req_link_mrp_production msgid "Manufacturing Order" -msgstr "" +msgstr "Ordem de Fabrico" #. module: quality_control_mrp #: model:ir.model.fields,field_description:quality_control_mrp.field_qc_inspection_production #: model:ir.ui.view,arch_db:quality_control_mrp.qc_inspection_search_view_production msgid "Production" -msgstr "" +msgstr "Produção" #. module: quality_control_mrp #: model:qc.trigger,name:quality_control_mrp.qc_trigger_mrp msgid "Production done" -msgstr "" +msgstr "Produção efetuada" #. module: quality_control_mrp #: model:ir.model.fields,field_description:quality_control_mrp.field_qc_inspection_line_production #: model:ir.ui.view,arch_db:quality_control_mrp.qc_inspection_line_search_production_view msgid "Production order" -msgstr "" +msgstr "Ordem de produção" #. module: quality_control_mrp #: model:ir.model,name:quality_control_mrp.model_qc_inspection msgid "Quality control inspection" -msgstr "" +msgstr "Inspeção de controlo de qualidade" #. module: quality_control_mrp #: model:ir.model,name:quality_control_mrp.model_qc_inspection_line msgid "Quality control inspection line" -msgstr "" +msgstr "Linha de inspeção de controlo de qualidade" #. module: quality_control_mrp #: model:ir.actions.act_window,name:quality_control_mrp.action_qc_inspection_per_production msgid "Quality inspections from production order" -msgstr "" +msgstr "Inspeções de qualidade da ordem de fabrico" #. module: quality_control_mrp #: model:ir.ui.view,arch_db:quality_control_mrp.mrp_production_qc_view msgid "inspections" -msgstr "" +msgstr "inspeções" #~ msgid "Product" #~ msgstr "Produto" diff --git a/quality_control_mrp_oca/static/description/index.html b/quality_control_mrp_oca/static/description/index.html index 371f1c9da..20423f495 100644 --- a/quality_control_mrp_oca/static/description/index.html +++ b/quality_control_mrp_oca/static/description/index.html @@ -3,7 +3,7 @@ - + MRP extension for quality control -
-

MRP extension for quality control

+
+

MRP extension for quality control (OCA)

-

Beta License: AGPL-3 OCA/manufacture Translate me on Weblate Try me on Runbot

+

Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runbot

This module defines a trigger that creates quality control inspections when a production order is finished.

It also adds the shortcuts related to these inspections on production orders.

@@ -385,10 +385,10 @@ production order is finished.

Bug Tracker

-

Bugs are tracked on GitHub Issues. +

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -405,9 +405,13 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

Contributors

@@ -417,7 +421,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

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.

-

This module is part of the OCA/manufacture project on GitHub.

+

This module is part of the OCA/product-attribute project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

diff --git a/quality_control_mrp_oca/tests/test_quality_control_mrp.py b/quality_control_mrp_oca/tests/test_quality_control_mrp.py index 55d2c62e6..1fc2be4cf 100644 --- a/quality_control_mrp_oca/tests/test_quality_control_mrp.py +++ b/quality_control_mrp_oca/tests/test_quality_control_mrp.py @@ -2,45 +2,71 @@ # Copyright 2018 Simone Rubino - Agile Business Group # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo.tests.common import TransactionCase +from odoo.tests.common import Form, TransactionCase class TestQualityControlMrp(TransactionCase): def setUp(self): - super(TestQualityControlMrp, self).setUp() - self.production_model = self.env["mrp.production"] + super().setUp() self.inspection_model = self.env["qc.inspection"] self.qc_trigger_model = self.env["qc.trigger"] - self.product = self.env.ref("mrp.product_product_wood_panel") - self.test = self.env.ref("quality_control.qc_test_1") - self.trigger = self.env.ref("quality_control_mrp.qc_trigger_mrp") - self.bom = self.env["mrp.bom"]._bom_find(product=self.product) - self.production1 = self.production_model.create( - { - "product_id": self.product.id, - "product_qty": 2.0, - "product_uom_id": self.product.uom_id.id, - "bom_id": self.bom.id, - } - ) + self.test = self.env.ref("quality_control_oca.qc_test_1") + self.trigger = self.env.ref("quality_control_mrp_oca.qc_trigger_mrp") + # Category + category_form = Form(self.env["product.category"]) + category_form.name = "Test category" + self.category = category_form.save() + # Product + product_form = Form(self.env["product.template"]) + product_form.name = "Test Product" + product_form.type = "product" + self.product = product_form.save() + # Materials + product_form = Form(self.env["product.product"]) + product_form.name = "Part 1 Product" + product_form.type = "product" + self.mat1 = product_form.save() + product_form = Form(self.env["product.product"]) + product_form.name = "Part 2 Product" + product_form.type = "product" + self.mat2 = product_form.save() + # Bom + bom_form = Form(self.env["mrp.bom"]) + bom_form.product_tmpl_id = self.product + bom_form.product_qty = 1.0 + bom_form.type = "normal" + with bom_form.bom_line_ids.new() as material_form: + material_form.product_id = self.mat1 + material_form.product_qty = 1 + with bom_form.bom_line_ids.new() as material_form: + material_form.product_id = self.mat2 + material_form.product_qty = 1 + self.bom = bom_form.save() + # Production + production_form = Form(self.env["mrp.production"]) + production_form.product_id = self.product.product_variant_id + production_form.bom_id = self.bom + production_form.product_qty = 2.0 + self.production1 = production_form.save() + self.production1.action_confirm() self.production1.action_assign() + # Inspection inspection_lines = self.inspection_model._prepare_inspection_lines(self.test) self.inspection1 = self.inspection_model.create( - {"name": "Test Inspection", "inspection_lines": inspection_lines,} + {"name": "Test Inspection", "inspection_lines": inspection_lines} ) def test_inspection_create_for_product(self): - self.product.qc_triggers = [ - (0, 0, {"trigger": self.trigger.id, "test": self.test.id,}) + self.product.product_variant_id.qc_triggers = [ + (0, 0, {"trigger": self.trigger.id, "test": self.test.id}) ] - produce_wizard = ( - self.env["mrp.product.produce"] - .with_context( - {"active_id": self.production1.id, "active_ids": [self.production1.id],} + produce_wizard = Form( + self.env["mrp.product.produce"].with_context( + {"active_id": self.production1.id, "active_ids": self.production1.ids} ) - .create({"product_qty": self.production1.product_qty}) ) - produce_wizard.do_produce() + produce_wizard.qty_producing = self.production1.product_qty + produce_wizard.save().do_produce() self.production1.post_inventory() self.assertEqual( self.production1.created_inspections, @@ -49,17 +75,16 @@ class TestQualityControlMrp(TransactionCase): ) def test_inspection_create_for_template(self): - self.product.product_tmpl_id.qc_triggers = [ - (0, 0, {"trigger": self.trigger.id, "test": self.test.id,}) + self.product.qc_triggers = [ + (0, 0, {"trigger": self.trigger.id, "test": self.test.id}) ] - produce_wizard = ( - self.env["mrp.product.produce"] - .with_context( - {"active_id": self.production1.id, "active_ids": [self.production1.id]} + produce_wizard = Form( + self.env["mrp.product.produce"].with_context( + {"active_id": self.production1.id, "active_ids": self.production1.ids} ) - .create({"product_qty": self.production1.product_qty}) ) - produce_wizard.do_produce() + produce_wizard.qty_producing = self.production1.product_qty + produce_wizard.save().do_produce() self.production1.post_inventory() self.assertEqual( self.production1.created_inspections, @@ -69,16 +94,15 @@ class TestQualityControlMrp(TransactionCase): def test_inspection_create_for_category(self): self.product.categ_id.qc_triggers = [ - (0, 0, {"trigger": self.trigger.id, "test": self.test.id,}) + (0, 0, {"trigger": self.trigger.id, "test": self.test.id}) ] - produce_wizard = ( - self.env["mrp.product.produce"] - .with_context( - {"active_id": self.production1.id, "active_ids": [self.production1.id],} + produce_wizard = Form( + self.env["mrp.product.produce"].with_context( + {"active_id": self.production1.id, "active_ids": self.production1.ids} ) - .create({"product_qty": self.production1.product_qty}) ) - produce_wizard.do_produce() + produce_wizard.qty_producing = self.production1.product_qty + produce_wizard.save().do_produce() self.production1.post_inventory() self.assertEqual( self.production1.created_inspections, @@ -88,19 +112,18 @@ class TestQualityControlMrp(TransactionCase): def test_inspection_create_only_one(self): self.product.qc_triggers = [ - (0, 0, {"trigger": self.trigger.id, "test": self.test.id,}) + (0, 0, {"trigger": self.trigger.id, "test": self.test.id}) ] self.product.categ_id.qc_triggers = [ - (0, 0, {"trigger": self.trigger.id, "test": self.test.id,}) + (0, 0, {"trigger": self.trigger.id, "test": self.test.id}) ] - produce_wizard = ( - self.env["mrp.product.produce"] - .with_context( - {"active_id": self.production1.id, "active_ids": [self.production1.id]} + produce_wizard = Form( + self.env["mrp.product.produce"].with_context( + {"active_id": self.production1.id, "active_ids": self.production1.ids} ) - .create({"product_qty": self.production1.product_qty}) ) - produce_wizard.do_produce() + produce_wizard.qty_producing = self.production1.product_qty + produce_wizard.save().do_produce() self.production1.post_inventory() self.assertEqual( self.production1.created_inspections, @@ -110,30 +133,28 @@ class TestQualityControlMrp(TransactionCase): def test_inspection_with_partial_fabrication(self): self.product.qc_triggers = [ - (0, 0, {"trigger": self.trigger.id, "test": self.test.id,}) + (0, 0, {"trigger": self.trigger.id, "test": self.test.id}) ] - produce_wizard = ( - self.env["mrp.product.produce"] - .with_context( - {"active_id": self.production1.id, "active_ids": [self.production1.id],} + produce_wizard = Form( + self.env["mrp.product.produce"].with_context( + {"active_id": self.production1.id, "active_ids": self.production1.ids} ) - .create({"product_qty": 1.0}) ) - produce_wizard.do_produce() + produce_wizard.qty_producing = 1.0 + produce_wizard.save().do_produce() self.production1.post_inventory() self.assertEqual( self.production1.created_inspections, 1, "Only one inspection must be created.", ) - produce_wizard = ( - self.env["mrp.product.produce"] - .with_context( - {"active_id": self.production1.id, "active_ids": [self.production1.id],} + produce_wizard = Form( + self.env["mrp.product.produce"].with_context( + {"active_id": self.production1.id, "active_ids": self.production1.ids} ) - .create({"product_qty": 1.0}) ) - produce_wizard.do_produce() + produce_wizard.qty_producing = 1.0 + produce_wizard.save().do_produce() self.production1.post_inventory() self.assertEqual( self.production1.created_inspections, 2, "There must be only 2 inspections." @@ -141,6 +162,6 @@ class TestQualityControlMrp(TransactionCase): def test_qc_inspection_mo(self): self.inspection1.write( - {"object_id": "%s,%d" % (self.production1._name, self.production1.id),} + {"object_id": "%s,%d" % (self.production1._name, self.production1.id)} ) self.assertEquals(self.inspection1.production_id, self.production1) diff --git a/quality_control_mrp_oca/views/mrp_production_view.xml b/quality_control_mrp_oca/views/mrp_production_view.xml index 82dff685b..dc5ad3960 100644 --- a/quality_control_mrp_oca/views/mrp_production_view.xml +++ b/quality_control_mrp_oca/views/mrp_production_view.xml @@ -7,6 +7,9 @@ qc.inspection tree,form [('production_id', '=', active_id)] + {'default_object_id': 'mrp.production,' + str(active_id)} mrp.production.form.qc @@ -14,7 +17,7 @@
diff --git a/quality_control_mrp_oca/views/qc_inspection_view.xml b/quality_control_mrp_oca/views/qc_inspection_view.xml index 5a3402534..31c1a2666 100644 --- a/quality_control_mrp_oca/views/qc_inspection_view.xml +++ b/quality_control_mrp_oca/views/qc_inspection_view.xml @@ -5,7 +5,7 @@ qc.inspection.form.view.production qc.inspection - + @@ -16,7 +16,7 @@ qc.inspection.tree.view.production qc.inspection - + @@ -27,7 +27,7 @@ qc.inspection.search.view.production qc.inspection - + @@ -46,7 +46,10 @@ qc.inspection.line.tree.production qc.inspection.line - + @@ -57,7 +60,10 @@ qc.inspection.line.search.production qc.inspection.line - + diff --git a/setup/quality_control_mrp/odoo/addons/quality_control_mrp b/setup/quality_control_mrp/odoo/addons/quality_control_mrp deleted file mode 120000 index 0e59bd91a..000000000 --- a/setup/quality_control_mrp/odoo/addons/quality_control_mrp +++ /dev/null @@ -1 +0,0 @@ -../../../../quality_control_mrp \ No newline at end of file diff --git a/setup/quality_control_mrp_oca/odoo/addons/quality_control_mrp_oca b/setup/quality_control_mrp_oca/odoo/addons/quality_control_mrp_oca new file mode 120000 index 000000000..d3f51b3bf --- /dev/null +++ b/setup/quality_control_mrp_oca/odoo/addons/quality_control_mrp_oca @@ -0,0 +1 @@ +../../../../quality_control_mrp_oca \ No newline at end of file diff --git a/setup/quality_control_mrp/setup.py b/setup/quality_control_mrp_oca/setup.py similarity index 100% rename from setup/quality_control_mrp/setup.py rename to setup/quality_control_mrp_oca/setup.py