From 0268cbc9e7909c888ac814044fe9ace20e34cc07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Thu, 10 Sep 2015 09:49:04 +0200 Subject: [PATCH 1/9] [ADD] add mrp_workcenter_hierarchical --- mrp_workcenter_hierarchical/README.rst | 17 +++ mrp_workcenter_hierarchical/__init__.py | 22 ++++ mrp_workcenter_hierarchical/__openerp__.py | 93 +++++++++++++++ .../i18n/mrp_workcenter_group.pot | 62 ++++++++++ .../static/description/group.png | Bin 0 -> 38266 bytes .../static/description/index.html | 22 ++++ .../static/description/workc.png | Bin 0 -> 21221 bytes .../static/src/img/icon.png | Bin 0 -> 6745 bytes mrp_workcenter_hierarchical/workcenter.py | 108 ++++++++++++++++++ .../workcenter_view.xml | 33 ++++++ 10 files changed, 357 insertions(+) create mode 100644 mrp_workcenter_hierarchical/README.rst create mode 100644 mrp_workcenter_hierarchical/__init__.py create mode 100644 mrp_workcenter_hierarchical/__openerp__.py create mode 100644 mrp_workcenter_hierarchical/i18n/mrp_workcenter_group.pot create mode 100644 mrp_workcenter_hierarchical/static/description/group.png create mode 100644 mrp_workcenter_hierarchical/static/description/index.html create mode 100644 mrp_workcenter_hierarchical/static/description/workc.png create mode 100644 mrp_workcenter_hierarchical/static/src/img/icon.png create mode 100644 mrp_workcenter_hierarchical/workcenter.py create mode 100644 mrp_workcenter_hierarchical/workcenter_view.xml diff --git a/mrp_workcenter_hierarchical/README.rst b/mrp_workcenter_hierarchical/README.rst new file mode 100644 index 000000000..9e2514ac3 --- /dev/null +++ b/mrp_workcenter_hierarchical/README.rst @@ -0,0 +1,17 @@ +Description +=========== + +See __openerp__.py + +Define your workcenter groups +----------------------------- + + .. image:: static/description/group.png + :alt: Define your workcenter groups on Odoo ERP + + +Attach a group to your workcenter +--------------------------------- + + .. image:: static/description/workc.png + :alt: Attach a group to your workcenter with Odoo ERP diff --git a/mrp_workcenter_hierarchical/__init__.py b/mrp_workcenter_hierarchical/__init__.py new file mode 100644 index 000000000..d6571b201 --- /dev/null +++ b/mrp_workcenter_hierarchical/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) All Rights Reserved 2015 Akretion +# @author David BEAL +# +# 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 workcenter diff --git a/mrp_workcenter_hierarchical/__openerp__.py b/mrp_workcenter_hierarchical/__openerp__.py new file mode 100644 index 000000000..0dc0392f3 --- /dev/null +++ b/mrp_workcenter_hierarchical/__openerp__.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) All Rights Reserved 2015 Akretion +# @author David BEAL +# +# 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': 'MRP Workcenter Hierarchical', + 'version': '0.5', + 'author': 'Akretion,Odoo Community Association (OCA)', + 'summary': "Organise Workcenters by section", + 'category': 'Manufacturing', + 'depends': [ + 'mrp_operations', + ], + 'description': """ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License + +MRP Workcenter Hierarchical +=============================== + +* Add the possibility to define a parent workcenter to a workcenter + +Configuration +============= + +To visualize features offered by this module, you need to: + + * go to Settings > Configuration > Manufacturing + * in the section Manufacturing Order / Planning, + check "Manage routings and work orders" and Validate + +Usage +===== + +To use this module, you need to go to: + + * Manufacturing > Configuration > Workcenter Hierarchical + + +Credits +======= + +Contributors +------------ + +* David BEAL +* Sébastien BEAU + +Maintainer +---------- + +.. image:: http://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: http://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. +""", + 'website': 'http://www.akretion.com/', + 'data': [ + 'workcenter_view.xml', + ], + 'demo': [ + ], + 'license': 'AGPL-3', + 'tests': [], + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/mrp_workcenter_hierarchical/i18n/mrp_workcenter_group.pot b/mrp_workcenter_hierarchical/i18n/mrp_workcenter_group.pot new file mode 100644 index 000000000..b404fd8d9 --- /dev/null +++ b/mrp_workcenter_hierarchical/i18n/mrp_workcenter_group.pot @@ -0,0 +1,62 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * mrp_workcenter_group +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-19 10:15+0000\n" +"PO-Revision-Date: 2015-03-19 10:15+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_workcenter_group +#: field:workcenter.group,active:0 +msgid "Active" +msgstr "" + +#. module: mrp_workcenter_group +#: view:mrp.workcenter:0 +#: field:mrp.workcenter,workcenter_group_id:0 +#: view:workcenter.group:0 +msgid "Group" +msgstr "" + +#. module: mrp_workcenter_group +#: view:workcenter.group:0 +#: field:workcenter.group,workcenter_ids:0 +msgid "Linked Workcenters" +msgstr "" + +#. module: mrp_workcenter_group +#: field:workcenter.group,name:0 +msgid "Name" +msgstr "" + +#. module: mrp_workcenter_group +#: field:workcenter.group,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: mrp_workcenter_group +#: code:_description:0 +#: model:ir.model,name:mrp_workcenter_group.model_mrp_workcenter +#, python-format +msgid "Work Center" +msgstr "" + +#. module: mrp_workcenter_group +#: code:_description:0 +#: model:ir.actions.act_window,name:mrp_workcenter_group.act_open_workcenter_group_view +#: model:ir.model,name:mrp_workcenter_group.model_workcenter_group +#: model:ir.ui.menu,name:mrp_workcenter_group.menu_mrp_workcenter_group +#: view:workcenter.group:0 +#, python-format +msgid "Workcenter Groups" +msgstr "" + diff --git a/mrp_workcenter_hierarchical/static/description/group.png b/mrp_workcenter_hierarchical/static/description/group.png new file mode 100644 index 0000000000000000000000000000000000000000..f61dcd09793b9cdbe5cc6db8d332e9dbbde7eb3b GIT binary patch literal 38266 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 literal 0 HcmV?d00001 diff --git a/mrp_workcenter_hierarchical/static/description/index.html b/mrp_workcenter_hierarchical/static/description/index.html new file mode 100644 index 000000000..3b1eb19c4 --- /dev/null +++ b/mrp_workcenter_hierarchical/static/description/index.html @@ -0,0 +1,22 @@ + +
+ +
+

Workcenter Groups

+

An OCA module : validated by Odoo community experts

+

By Akretion

+
+ +

Workcenter Groups

+ + + + +

Define your workcenter groups



Attach a group to your workcenter



+ + + +
diff --git a/mrp_workcenter_hierarchical/static/description/workc.png b/mrp_workcenter_hierarchical/static/description/workc.png new file mode 100644 index 0000000000000000000000000000000000000000..d201971767746cb5f92065a8879b74ec5ae80696 GIT binary patch literal 21221 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 Q{i8~N8c18ILeVPtKixwmCIA2c literal 0 HcmV?d00001 diff --git a/mrp_workcenter_hierarchical/static/src/img/icon.png b/mrp_workcenter_hierarchical/static/src/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..99ee2157886de801b80c5a0c7f019f826d6df47c GIT binary patch literal 6745 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 literal 0 HcmV?d00001 diff --git a/mrp_workcenter_hierarchical/workcenter.py b/mrp_workcenter_hierarchical/workcenter.py new file mode 100644 index 000000000..9d21bad29 --- /dev/null +++ b/mrp_workcenter_hierarchical/workcenter.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Author: David BEAL +# Copyright 2015 Akretion +# +# 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.osv import orm, fields + +class MrpWorkcenter(orm.Model): + _inherit = 'mrp.workcenter' + _order = 'parent_left' + + def _get_workcenter_ids_to_recompute_level(self, cr, uid, ids, context=None): + return self.search(cr, uid, [ + '|', + ('parent_id', 'child_of', ids), + ('id', 'in', ids), + ]) + + def _get_parent_ids(self, workcenter): + if workcenter.parent_id: + ids = self._get_parent_ids(workcenter.parent_id) + ids.append(workcenter.parent_id.id) + else: + ids = [] + return ids + + def _get_parent_level(self, cr, uid, ids, field_name, args, context=None): + result = {} + def get_next_level(parent_ids, workcenter): + return parent_ids and parent_ids.pop(0) or ( + workcenter.child_ids and workcenter.id + or workcenter.parent_id.id) + + for workcenter in self.browse(cr, uid, ids, context=context): + parent_ids = self._get_parent_ids(workcenter) + parent_level_1_id = get_next_level(parent_ids, workcenter) + parent_level_2_id = get_next_level(parent_ids, workcenter) + parent_level_3_id = get_next_level(parent_ids, workcenter) + result[workcenter.id] = { + 'parent_level_1_id': parent_level_1_id, + 'parent_level_2_id': parent_level_2_id, + 'parent_level_3_id': parent_level_3_id, + } + return result + + _columns = { + 'parent_id': fields.many2one( + 'mrp.workcenter', + string='Parent'), + 'child_ids': fields.one2many( + 'mrp.workcenter', + 'parent_id', + string='Children'), + 'parent_level_1_id': fields.function( + _get_parent_level, + relation='mrp.workcenter', + type='many2one', + string='Parent Level 1', + multi='parent_level', + store={ + 'mrp.workcenter': ( + _get_workcenter_ids_to_recompute_level, + ['parent_id'], + 10), + },), + 'parent_level_2_id': fields.function( + _get_parent_level, + relation='mrp.workcenter', + type='many2one', + string='Parent Level 2', + multi='parent_level', + store={ + 'mrp.workcenter': ( + _get_workcenter_ids_to_recompute_level, + ['parent_id'], + 10), + },), + 'parent_level_3_id': fields.function( + _get_parent_level, + relation='mrp.workcenter', + type='many2one', + string='Parent Level 3', + multi='parent_level', + store={ + 'mrp.workcenter': ( + _get_workcenter_ids_to_recompute_level, + ['parent_id'], + 10), + },), + 'parent_left': fields.integer('Left Parent', select=1), + 'parent_right': fields.integer('Right Parent', select=1), + } diff --git a/mrp_workcenter_hierarchical/workcenter_view.xml b/mrp_workcenter_hierarchical/workcenter_view.xml new file mode 100644 index 000000000..ba87ef4ac --- /dev/null +++ b/mrp_workcenter_hierarchical/workcenter_view.xml @@ -0,0 +1,33 @@ + + + + + + + + mrp.workcenter + + + + + + + + + + + + mrp.workcenter + + + + + + + + + + From f21153f2945fcb588d0bcb1769b32c2c7f5f13fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Thu, 10 Sep 2015 14:25:20 +0200 Subject: [PATCH 2/9] [IMP] add default group by --- mrp_workcenter_hierarchical/workcenter_view.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mrp_workcenter_hierarchical/workcenter_view.xml b/mrp_workcenter_hierarchical/workcenter_view.xml index ba87ef4ac..1e5611d6e 100644 --- a/mrp_workcenter_hierarchical/workcenter_view.xml +++ b/mrp_workcenter_hierarchical/workcenter_view.xml @@ -29,5 +29,9 @@ + + {'search_default_group_by_level_1': 1} + + From 7fba14c041737679119b788b919dc1f30bd4392c Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Thu, 29 Oct 2015 09:49:44 +0100 Subject: [PATCH 3/9] recompute parent_level if a child change of parent --- mrp_workcenter_hierarchical/workcenter.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mrp_workcenter_hierarchical/workcenter.py b/mrp_workcenter_hierarchical/workcenter.py index 9d21bad29..b37ff116d 100644 --- a/mrp_workcenter_hierarchical/workcenter.py +++ b/mrp_workcenter_hierarchical/workcenter.py @@ -27,9 +27,11 @@ class MrpWorkcenter(orm.Model): def _get_workcenter_ids_to_recompute_level(self, cr, uid, ids, context=None): return self.search(cr, uid, [ + '|', '|', ('parent_id', 'child_of', ids), ('id', 'in', ids), + ('child_ids', 'in', ids), ]) def _get_parent_ids(self, workcenter): From 23a0071fef85aaf3084252e61d41a00e4928af95 Mon Sep 17 00:00:00 2001 From: Thibault Rey Date: Mon, 25 Jan 2016 17:51:09 +0100 Subject: [PATCH 4/9] [IMP] Port workcenter hierarchical to version 9.0 --- mrp_workcenter_hierarchical/__openerp__.py | 1 + mrp_workcenter_hierarchical/demo/mrp_demo.xml | 96 ++++++++++++++ mrp_workcenter_hierarchical/tests/__init__.py | 1 + .../tests/test_compute_level.py | 58 +++++++++ mrp_workcenter_hierarchical/workcenter.py | 121 +++++++----------- .../workcenter_view.xml | 2 +- 6 files changed, 201 insertions(+), 78 deletions(-) create mode 100644 mrp_workcenter_hierarchical/demo/mrp_demo.xml create mode 100644 mrp_workcenter_hierarchical/tests/__init__.py create mode 100644 mrp_workcenter_hierarchical/tests/test_compute_level.py diff --git a/mrp_workcenter_hierarchical/__openerp__.py b/mrp_workcenter_hierarchical/__openerp__.py index 0dc0392f3..5ef023c3e 100644 --- a/mrp_workcenter_hierarchical/__openerp__.py +++ b/mrp_workcenter_hierarchical/__openerp__.py @@ -84,6 +84,7 @@ To contribute to this module, please visit http://odoo-community.org. 'workcenter_view.xml', ], 'demo': [ + 'demo/mrp_demo.xml', ], 'license': 'AGPL-3', 'tests': [], diff --git a/mrp_workcenter_hierarchical/demo/mrp_demo.xml b/mrp_workcenter_hierarchical/demo/mrp_demo.xml new file mode 100644 index 000000000..ab9f5fac7 --- /dev/null +++ b/mrp_workcenter_hierarchical/demo/mrp_demo.xml @@ -0,0 +1,96 @@ + + + + + Assembly 1 + + 5 + 1 + 0.1 + 0.1 + 0.87 + + 0.1 + + 0.05 + + + + Assembly workshop 2 + + 5 + 1 + 0.1 + 0.1 + 0.87 + + 0.1 + + 0.05 + + + + + Assembly A + + 5 + 1 + 0.1 + 0.1 + 0.87 + + 0.1 + + 0.05 + + + + + Assembly B + + 5 + 1 + 0.1 + 0.1 + 0.87 + + 0.1 + + 0.05 + + + + + Assembly C + + 5 + 1 + 0.1 + 0.1 + 0.87 + + 0.1 + + 0.05 + + + + + Assembly E + + 5 + 1 + 0.1 + 0.1 + 0.87 + + 0.1 + + 0.05 + + + + + + + diff --git a/mrp_workcenter_hierarchical/tests/__init__.py b/mrp_workcenter_hierarchical/tests/__init__.py new file mode 100644 index 000000000..f1f7bc77c --- /dev/null +++ b/mrp_workcenter_hierarchical/tests/__init__.py @@ -0,0 +1 @@ +from . import test_compute_level diff --git a/mrp_workcenter_hierarchical/tests/test_compute_level.py b/mrp_workcenter_hierarchical/tests/test_compute_level.py new file mode 100644 index 000000000..22d305945 --- /dev/null +++ b/mrp_workcenter_hierarchical/tests/test_compute_level.py @@ -0,0 +1,58 @@ +from openerp.tests.common import TransactionCase + +class ComputeParentLevel(TransactionCase): + def test_compute_parent_level0(self): + workcenter = self.env['mrp.workcenter'].create({ + 'name': 'New Assembly', + 'calendar_id': self.env.ref('resource.timesheet_group1').id, + 'capacity_per_cycle': 5, + 'time_cycle': 1, + 'time_start': 0.1, + 'time_stop': 0.1, + 'time_efficiency': 0.87, + 'product_id': self.env.ref('product.product_assembly').id, + 'costs_hour': 0, + 'costs_hour_account_id': self.env.ref('mrp.account_assembly_hours').id, + 'costs_cycle': 0.05, + 'costs_cycle_account_id': self.env.ref('mrp.account_assembly_cycle').id, + }) + workcenter_child = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_A') + workcenter_child.write({'parent_id': workcenter.id}) + self.assertEqual(workcenter.parent_level_1_id, workcenter) + + def test_compute_parent_level1(self): + workcenter_child = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_E') + workcenter_parent = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_top') + workcenter_child.write({'parent_id': workcenter_parent.id}) + self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent) + + def test_compute_parent_level2(self): + workcenter_child = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_A') + workcenter_parent1 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_top') + workcenter_parent2 = self.env.ref('mrp.mrp_workcenter_0') + + workcenter_child.write({'parent_id': workcenter_parent2.id}) + import pdb; pdb.set_trace() + self.assertEqual(workcenter_child.parent_level_2_id, workcenter_parent2) + self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent1) + + def test_compute_parent_level3(self): + workcenter_child = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_B') + workcenter_parent1 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_top') + workcenter_parent2 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_2') + workcenter_parent3 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_A') + workcenter_child.write({'parent_id': workcenter_parent3.id}) + self.assertEqual(workcenter_child.parent_level_3_id, workcenter_parent3) + self.assertEqual(workcenter_child.parent_level_2_id, workcenter_parent2) + self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent1) + + def test_compute_parent_level3(self): + workcenter_child = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_C') + workcenter_parent1 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_top') + workcenter_parent2 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_2') + workcenter_parent3 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_A') + workcenter_parent4 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_B') + workcenter_parent4.write({'parent_id': workcenter_parent3.id}) + workcenter_child.write({'parent_id': workcenter_parent4.id}) + self.assertEqual(workcenter_child.parent_id, workcenter_parent4) + diff --git a/mrp_workcenter_hierarchical/workcenter.py b/mrp_workcenter_hierarchical/workcenter.py index b37ff116d..e9d036450 100644 --- a/mrp_workcenter_hierarchical/workcenter.py +++ b/mrp_workcenter_hierarchical/workcenter.py @@ -19,92 +19,59 @@ # ############################################################################## -from openerp.osv import orm, fields -class MrpWorkcenter(orm.Model): +from openerp import api, fields, models + +class MrpWorkcenter(models.Model): _inherit = 'mrp.workcenter' _order = 'parent_left' - - def _get_workcenter_ids_to_recompute_level(self, cr, uid, ids, context=None): - return self.search(cr, uid, [ - '|', - '|', - ('parent_id', 'child_of', ids), - ('id', 'in', ids), - ('child_ids', 'in', ids), - ]) - - def _get_parent_ids(self, workcenter): - if workcenter.parent_id: - ids = self._get_parent_ids(workcenter.parent_id) - ids.append(workcenter.parent_id.id) + _parent_store = True + + parent_id = fields.Many2one('mrp.workcenter', string='Parent') + child_ids = fields.One2many( + 'mrp.workcenter', + 'parent_id', + string='Children') + parent_level_1_id = fields.Many2one( + 'mrp.workcenter', + compute='_compute_parent_level', + string='Parent Level 1', + store=True) + parent_level_2_id = fields.Many2one( + 'mrp.workcenter', + compute='_compute_parent_level', + string='Parent Level 2', + store=True) + parent_level_3_id = fields.Many2one( + 'mrp.workcenter', + compute='_compute_parent_level', + string='Parent Level 3', + store=True) + parent_left=fields.Integer(select=1) + parent_right=fields.Integer(select=1) + + @api.multi + def _get_parent_ids(self): + self.ensure_one() + if self.parent_id: + ids = self.parent_id._get_parent_ids() + ids.append(self.parent_id.id) else: ids = [] return ids - - def _get_parent_level(self, cr, uid, ids, field_name, args, context=None): - result = {} + + @api.multi + @api.depends('parent_id.parent_id.parent_id', 'child_ids') + def _compute_parent_level(self): def get_next_level(parent_ids, workcenter): return parent_ids and parent_ids.pop(0) or ( workcenter.child_ids and workcenter.id or workcenter.parent_id.id) - for workcenter in self.browse(cr, uid, ids, context=context): - parent_ids = self._get_parent_ids(workcenter) - parent_level_1_id = get_next_level(parent_ids, workcenter) - parent_level_2_id = get_next_level(parent_ids, workcenter) - parent_level_3_id = get_next_level(parent_ids, workcenter) - result[workcenter.id] = { - 'parent_level_1_id': parent_level_1_id, - 'parent_level_2_id': parent_level_2_id, - 'parent_level_3_id': parent_level_3_id, - } - return result + for workcenter in self: + parent_ids = workcenter._get_parent_ids() + workcenter.parent_level_1_id = get_next_level(parent_ids, workcenter) + workcenter.parent_level_2_id = get_next_level(parent_ids, workcenter) + workcenter.parent_level_3_id = get_next_level(parent_ids, workcenter) - _columns = { - 'parent_id': fields.many2one( - 'mrp.workcenter', - string='Parent'), - 'child_ids': fields.one2many( - 'mrp.workcenter', - 'parent_id', - string='Children'), - 'parent_level_1_id': fields.function( - _get_parent_level, - relation='mrp.workcenter', - type='many2one', - string='Parent Level 1', - multi='parent_level', - store={ - 'mrp.workcenter': ( - _get_workcenter_ids_to_recompute_level, - ['parent_id'], - 10), - },), - 'parent_level_2_id': fields.function( - _get_parent_level, - relation='mrp.workcenter', - type='many2one', - string='Parent Level 2', - multi='parent_level', - store={ - 'mrp.workcenter': ( - _get_workcenter_ids_to_recompute_level, - ['parent_id'], - 10), - },), - 'parent_level_3_id': fields.function( - _get_parent_level, - relation='mrp.workcenter', - type='many2one', - string='Parent Level 3', - multi='parent_level', - store={ - 'mrp.workcenter': ( - _get_workcenter_ids_to_recompute_level, - ['parent_id'], - 10), - },), - 'parent_left': fields.integer('Left Parent', select=1), - 'parent_right': fields.integer('Right Parent', select=1), - } + diff --git a/mrp_workcenter_hierarchical/workcenter_view.xml b/mrp_workcenter_hierarchical/workcenter_view.xml index 1e5611d6e..0b7473f3b 100644 --- a/mrp_workcenter_hierarchical/workcenter_view.xml +++ b/mrp_workcenter_hierarchical/workcenter_view.xml @@ -8,7 +8,7 @@ mrp.workcenter - + Date: Mon, 28 Mar 2016 18:02:06 +0200 Subject: [PATCH 5/9] [FIX] fix comment done by the community --- mrp_workcenter_hierarchical/README.rst | 88 ++++++++++++++++-- mrp_workcenter_hierarchical/__init__.py | 22 +---- mrp_workcenter_hierarchical/__openerp__.py | 75 +-------------- .../i18n/mrp_workcenter_group.pot | 62 ------------ .../static/description/group.png | Bin 38266 -> 0 bytes .../static/description/index.html | 22 ----- .../static/description/workc.png | Bin 21221 -> 0 bytes mrp_workcenter_hierarchical/tests/__init__.py | 5 + .../tests/test_compute_level.py | 74 +++++++++------ mrp_workcenter_hierarchical/workcenter.py | 47 ++++------ 10 files changed, 153 insertions(+), 242 deletions(-) delete mode 100644 mrp_workcenter_hierarchical/i18n/mrp_workcenter_group.pot delete mode 100644 mrp_workcenter_hierarchical/static/description/group.png delete mode 100644 mrp_workcenter_hierarchical/static/description/index.html delete mode 100644 mrp_workcenter_hierarchical/static/description/workc.png diff --git a/mrp_workcenter_hierarchical/README.rst b/mrp_workcenter_hierarchical/README.rst index 9e2514ac3..c2b5afa83 100644 --- a/mrp_workcenter_hierarchical/README.rst +++ b/mrp_workcenter_hierarchical/README.rst @@ -1,17 +1,85 @@ -Description +.. 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 Workcenter Hierarchical +=========================== + +* Add the possibility to define a parent workcenter to a workcenter + +Installation +============ + +Just install this module. + +Configuration +============= + +To visualize features offered by this module, you need to: + + * go to Settings > Configuration > Manufacturing + * in the section Manufacturing Order / Planning, + check "Manage routings and work orders" and Validate + +Usage +===== + +To use this module, you need to go to: + + * Manufacturing > Configuration > Workcenter Hierarchical + +.. 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/9.0 + +.. repo_id is available in https://github.com/OCA/maintainer-tools/blob/master/tools/repos_with_ids.txt +.. branch is "8.0" for example + +Known issues / Roadmap +====================== + +* ... + +Bug Tracker =========== -See __openerp__.py +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 +`_. -Define your workcenter groups ------------------------------ +Credits +======= - .. image:: static/description/group.png - :alt: Define your workcenter groups on Odoo ERP +Images +------ +* Odoo Community Association: `Icon `_. -Attach a group to your workcenter ---------------------------------- +Contributors +------------ + +* David BEAL +* Sébastien BEAU +* Thibault REY + +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 https://odoo-community.org. - .. image:: static/description/workc.png - :alt: Attach a group to your workcenter with Odoo ERP diff --git a/mrp_workcenter_hierarchical/__init__.py b/mrp_workcenter_hierarchical/__init__.py index d6571b201..f605ba5bb 100644 --- a/mrp_workcenter_hierarchical/__init__.py +++ b/mrp_workcenter_hierarchical/__init__.py @@ -1,22 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (C) All Rights Reserved 2015 Akretion -# @author David BEAL -# -# 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 . -# -############################################################################### +# © 2016 Akretion (http://www.akretion.com) +# David BEAL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import workcenter diff --git a/mrp_workcenter_hierarchical/__openerp__.py b/mrp_workcenter_hierarchical/__openerp__.py index 5ef023c3e..cc30e602f 100644 --- a/mrp_workcenter_hierarchical/__openerp__.py +++ b/mrp_workcenter_hierarchical/__openerp__.py @@ -1,84 +1,17 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (C) All Rights Reserved 2015 Akretion -# @author David BEAL -# -# 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 . -# -############################################################################### - +# © 2016 Akretion (http://www.akretion.com) +# David BEAL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { 'name': 'MRP Workcenter Hierarchical', - 'version': '0.5', + 'version': '9.0.1.0.0', 'author': 'Akretion,Odoo Community Association (OCA)', 'summary': "Organise Workcenters by section", 'category': 'Manufacturing', 'depends': [ 'mrp_operations', ], - 'description': """ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :alt: License - -MRP Workcenter Hierarchical -=============================== - -* Add the possibility to define a parent workcenter to a workcenter - -Configuration -============= - -To visualize features offered by this module, you need to: - - * go to Settings > Configuration > Manufacturing - * in the section Manufacturing Order / Planning, - check "Manage routings and work orders" and Validate - -Usage -===== - -To use this module, you need to go to: - - * Manufacturing > Configuration > Workcenter Hierarchical - - -Credits -======= - -Contributors ------------- - -* David BEAL -* Sébastien BEAU - -Maintainer ----------- - -.. image:: http://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: http://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. -""", 'website': 'http://www.akretion.com/', 'data': [ 'workcenter_view.xml', diff --git a/mrp_workcenter_hierarchical/i18n/mrp_workcenter_group.pot b/mrp_workcenter_hierarchical/i18n/mrp_workcenter_group.pot deleted file mode 100644 index b404fd8d9..000000000 --- a/mrp_workcenter_hierarchical/i18n/mrp_workcenter_group.pot +++ /dev/null @@ -1,62 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * mrp_workcenter_group -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 7.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-19 10:15+0000\n" -"PO-Revision-Date: 2015-03-19 10:15+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_workcenter_group -#: field:workcenter.group,active:0 -msgid "Active" -msgstr "" - -#. module: mrp_workcenter_group -#: view:mrp.workcenter:0 -#: field:mrp.workcenter,workcenter_group_id:0 -#: view:workcenter.group:0 -msgid "Group" -msgstr "" - -#. module: mrp_workcenter_group -#: view:workcenter.group:0 -#: field:workcenter.group,workcenter_ids:0 -msgid "Linked Workcenters" -msgstr "" - -#. module: mrp_workcenter_group -#: field:workcenter.group,name:0 -msgid "Name" -msgstr "" - -#. module: mrp_workcenter_group -#: field:workcenter.group,sequence:0 -msgid "Sequence" -msgstr "" - -#. module: mrp_workcenter_group -#: code:_description:0 -#: model:ir.model,name:mrp_workcenter_group.model_mrp_workcenter -#, python-format -msgid "Work Center" -msgstr "" - -#. module: mrp_workcenter_group -#: code:_description:0 -#: model:ir.actions.act_window,name:mrp_workcenter_group.act_open_workcenter_group_view -#: model:ir.model,name:mrp_workcenter_group.model_workcenter_group -#: model:ir.ui.menu,name:mrp_workcenter_group.menu_mrp_workcenter_group -#: view:workcenter.group:0 -#, python-format -msgid "Workcenter Groups" -msgstr "" - diff --git a/mrp_workcenter_hierarchical/static/description/group.png b/mrp_workcenter_hierarchical/static/description/group.png deleted file mode 100644 index f61dcd09793b9cdbe5cc6db8d332e9dbbde7eb3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38266 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 diff --git a/mrp_workcenter_hierarchical/static/description/index.html b/mrp_workcenter_hierarchical/static/description/index.html deleted file mode 100644 index 3b1eb19c4..000000000 --- a/mrp_workcenter_hierarchical/static/description/index.html +++ /dev/null @@ -1,22 +0,0 @@ - -
- -
-

Workcenter Groups

-

An OCA module : validated by Odoo community experts

-

By Akretion

-
- -

Workcenter Groups

- - - - -

Define your workcenter groups



Attach a group to your workcenter



- - - -
diff --git a/mrp_workcenter_hierarchical/static/description/workc.png b/mrp_workcenter_hierarchical/static/description/workc.png deleted file mode 100644 index d201971767746cb5f92065a8879b74ec5ae80696..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21221 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 Q{i8~N8c18ILeVPtKixwmCIA2c diff --git a/mrp_workcenter_hierarchical/tests/__init__.py b/mrp_workcenter_hierarchical/tests/__init__.py index f1f7bc77c..ccccde2c7 100644 --- a/mrp_workcenter_hierarchical/tests/__init__.py +++ b/mrp_workcenter_hierarchical/tests/__init__.py @@ -1 +1,6 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (http://www.akretion.com) +# David BEAL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from . import test_compute_level diff --git a/mrp_workcenter_hierarchical/tests/test_compute_level.py b/mrp_workcenter_hierarchical/tests/test_compute_level.py index 22d305945..b28cde6f9 100644 --- a/mrp_workcenter_hierarchical/tests/test_compute_level.py +++ b/mrp_workcenter_hierarchical/tests/test_compute_level.py @@ -1,5 +1,11 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (http://www.akretion.com) +# David BEAL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from openerp.tests.common import TransactionCase + class ComputeParentLevel(TransactionCase): def test_compute_parent_level0(self): workcenter = self.env['mrp.workcenter'].create({ @@ -8,51 +14,65 @@ class ComputeParentLevel(TransactionCase): 'capacity_per_cycle': 5, 'time_cycle': 1, 'time_start': 0.1, - 'time_stop': 0.1, + 'time_stop': 0.1, 'time_efficiency': 0.87, 'product_id': self.env.ref('product.product_assembly').id, 'costs_hour': 0, - 'costs_hour_account_id': self.env.ref('mrp.account_assembly_hours').id, + 'costs_hour_account_id': self.env.ref( + 'mrp.account_assembly_hours').id, 'costs_cycle': 0.05, - 'costs_cycle_account_id': self.env.ref('mrp.account_assembly_cycle').id, + 'costs_cycle_account_id': self.env.ref( + 'mrp.account_assembly_cycle').id, }) - workcenter_child = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_A') + workcenter_child = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_A') workcenter_child.write({'parent_id': workcenter.id}) self.assertEqual(workcenter.parent_level_1_id, workcenter) - + def test_compute_parent_level1(self): - workcenter_child = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_E') - workcenter_parent = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_top') + workcenter_child = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_E') + workcenter_parent = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_top') workcenter_child.write({'parent_id': workcenter_parent.id}) self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent) def test_compute_parent_level2(self): - workcenter_child = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_A') - workcenter_parent1 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_top') + workcenter_child = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_A') + workcenter_parent1 = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_top') workcenter_parent2 = self.env.ref('mrp.mrp_workcenter_0') - workcenter_child.write({'parent_id': workcenter_parent2.id}) - import pdb; pdb.set_trace() - self.assertEqual(workcenter_child.parent_level_2_id, workcenter_parent2) - self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent1) + self.assertEqual( + workcenter_child.parent_level_2_id, workcenter_parent2) + self.assertEqual( + workcenter_child.parent_level_1_id, workcenter_parent1) def test_compute_parent_level3(self): - workcenter_child = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_B') - workcenter_parent1 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_top') - workcenter_parent2 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_2') - workcenter_parent3 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_A') + workcenter_child = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_B') + workcenter_parent1 = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_top') + workcenter_parent2 = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_2') + workcenter_parent3 = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_A') workcenter_child.write({'parent_id': workcenter_parent3.id}) - self.assertEqual(workcenter_child.parent_level_3_id, workcenter_parent3) - self.assertEqual(workcenter_child.parent_level_2_id, workcenter_parent2) - self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent1) - + self.assertEqual( + workcenter_child.parent_level_3_id, workcenter_parent3) + self.assertEqual( + workcenter_child.parent_level_2_id, workcenter_parent2) + self.assertEqual( + workcenter_child.parent_level_1_id, workcenter_parent1) + def test_compute_parent_level3(self): - workcenter_child = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_C') - workcenter_parent1 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_top') - workcenter_parent2 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_2') - workcenter_parent3 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_A') - workcenter_parent4 = self.env.ref('mrp_workcenter_hierarchical.mrp_workcenter_B') + workcenter_child = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_C') + workcenter_parent3 = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_A') + workcenter_parent4 = self.env.ref( + 'mrp_workcenter_hierarchical.mrp_workcenter_B') workcenter_parent4.write({'parent_id': workcenter_parent3.id}) workcenter_child.write({'parent_id': workcenter_parent4.id}) self.assertEqual(workcenter_child.parent_id, workcenter_parent4) - diff --git a/mrp_workcenter_hierarchical/workcenter.py b/mrp_workcenter_hierarchical/workcenter.py index e9d036450..30d4ed68b 100644 --- a/mrp_workcenter_hierarchical/workcenter.py +++ b/mrp_workcenter_hierarchical/workcenter.py @@ -1,33 +1,17 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: David BEAL -# Copyright 2015 Akretion -# -# 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 . -# -############################################################################## - +# © 2016 Akretion (http://www.akretion.com) +# David BEAL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from openerp import api, fields, models + class MrpWorkcenter(models.Model): _inherit = 'mrp.workcenter' _order = 'parent_left' _parent_store = True - - parent_id = fields.Many2one('mrp.workcenter', string='Parent') + + parent_id = fields.Many2one('mrp.workcenter', string='Parent') child_ids = fields.One2many( 'mrp.workcenter', 'parent_id', @@ -47,9 +31,9 @@ class MrpWorkcenter(models.Model): compute='_compute_parent_level', string='Parent Level 3', store=True) - parent_left=fields.Integer(select=1) - parent_right=fields.Integer(select=1) - + parent_left = fields.Integer(select=1) + parent_right = fields.Integer(select=1) + @api.multi def _get_parent_ids(self): self.ensure_one() @@ -59,7 +43,7 @@ class MrpWorkcenter(models.Model): else: ids = [] return ids - + @api.multi @api.depends('parent_id.parent_id.parent_id', 'child_ids') def _compute_parent_level(self): @@ -70,8 +54,9 @@ class MrpWorkcenter(models.Model): for workcenter in self: parent_ids = workcenter._get_parent_ids() - workcenter.parent_level_1_id = get_next_level(parent_ids, workcenter) - workcenter.parent_level_2_id = get_next_level(parent_ids, workcenter) - workcenter.parent_level_3_id = get_next_level(parent_ids, workcenter) - - + workcenter.parent_level_1_id = get_next_level( + parent_ids, workcenter) + workcenter.parent_level_2_id = get_next_level( + parent_ids, workcenter) + workcenter.parent_level_3_id = get_next_level( + parent_ids, workcenter) From 31ba5cd75e828256fbc74a730d0c80a4696ebf35 Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Fri, 15 Jul 2016 18:14:52 +0200 Subject: [PATCH 6/9] Minor fixes --- mrp_workcenter_hierarchical/__init__.py | 2 +- mrp_workcenter_hierarchical/__openerp__.py | 2 +- mrp_workcenter_hierarchical/model/__init__.py | 6 ++++++ mrp_workcenter_hierarchical/{ => model}/workcenter.py | 4 ++-- mrp_workcenter_hierarchical/tests/test_compute_level.py | 2 +- mrp_workcenter_hierarchical/{ => views}/workcenter_view.xml | 0 6 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 mrp_workcenter_hierarchical/model/__init__.py rename mrp_workcenter_hierarchical/{ => model}/workcenter.py (95%) rename mrp_workcenter_hierarchical/{ => views}/workcenter_view.xml (100%) diff --git a/mrp_workcenter_hierarchical/__init__.py b/mrp_workcenter_hierarchical/__init__.py index f605ba5bb..d8dfddcf3 100644 --- a/mrp_workcenter_hierarchical/__init__.py +++ b/mrp_workcenter_hierarchical/__init__.py @@ -3,4 +3,4 @@ # David BEAL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import workcenter +from . import model diff --git a/mrp_workcenter_hierarchical/__openerp__.py b/mrp_workcenter_hierarchical/__openerp__.py index cc30e602f..b6130c0c2 100644 --- a/mrp_workcenter_hierarchical/__openerp__.py +++ b/mrp_workcenter_hierarchical/__openerp__.py @@ -14,7 +14,7 @@ ], 'website': 'http://www.akretion.com/', 'data': [ - 'workcenter_view.xml', + 'views/workcenter_view.xml', ], 'demo': [ 'demo/mrp_demo.xml', diff --git a/mrp_workcenter_hierarchical/model/__init__.py b/mrp_workcenter_hierarchical/model/__init__.py new file mode 100644 index 000000000..f605ba5bb --- /dev/null +++ b/mrp_workcenter_hierarchical/model/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (http://www.akretion.com) +# David BEAL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import workcenter diff --git a/mrp_workcenter_hierarchical/workcenter.py b/mrp_workcenter_hierarchical/model/workcenter.py similarity index 95% rename from mrp_workcenter_hierarchical/workcenter.py rename to mrp_workcenter_hierarchical/model/workcenter.py index 30d4ed68b..bdc47f4f9 100644 --- a/mrp_workcenter_hierarchical/workcenter.py +++ b/mrp_workcenter_hierarchical/model/workcenter.py @@ -31,8 +31,8 @@ class MrpWorkcenter(models.Model): compute='_compute_parent_level', string='Parent Level 3', store=True) - parent_left = fields.Integer(select=1) - parent_right = fields.Integer(select=1) + parent_left = fields.Integer(select=True) + parent_right = fields.Integer(select=True) @api.multi def _get_parent_ids(self): diff --git a/mrp_workcenter_hierarchical/tests/test_compute_level.py b/mrp_workcenter_hierarchical/tests/test_compute_level.py index b28cde6f9..3446c9376 100644 --- a/mrp_workcenter_hierarchical/tests/test_compute_level.py +++ b/mrp_workcenter_hierarchical/tests/test_compute_level.py @@ -66,7 +66,7 @@ class ComputeParentLevel(TransactionCase): self.assertEqual( workcenter_child.parent_level_1_id, workcenter_parent1) - def test_compute_parent_level3(self): + def test_compute_parent_level3_bis(self): workcenter_child = self.env.ref( 'mrp_workcenter_hierarchical.mrp_workcenter_C') workcenter_parent3 = self.env.ref( diff --git a/mrp_workcenter_hierarchical/workcenter_view.xml b/mrp_workcenter_hierarchical/views/workcenter_view.xml similarity index 100% rename from mrp_workcenter_hierarchical/workcenter_view.xml rename to mrp_workcenter_hierarchical/views/workcenter_view.xml From 70213101cb5b3e5b51ac046025f9f266953cf7df Mon Sep 17 00:00:00 2001 From: David Beal Date: Sat, 17 Oct 2020 18:54:15 +0200 Subject: [PATCH 7/9] FIX mrp_work_hierachical: restructure files --- mrp_workcenter_hierarchical/README.rst | 81 ++-- mrp_workcenter_hierarchical/__openerp__.py | 5 +- .../{demo => data}/mrp_demo.xml | 0 .../readme/CONFIGURE.rst | 5 + .../readme/CONTRIBUTORS.rst | 5 + .../readme/DESCRIPTION.rst | 2 + mrp_workcenter_hierarchical/readme/USAGE.rst | 3 + .../static/description/index.html | 446 ++++++++++++++++++ 8 files changed, 508 insertions(+), 39 deletions(-) rename mrp_workcenter_hierarchical/{demo => data}/mrp_demo.xml (100%) create mode 100644 mrp_workcenter_hierarchical/readme/CONFIGURE.rst create mode 100644 mrp_workcenter_hierarchical/readme/CONTRIBUTORS.rst create mode 100644 mrp_workcenter_hierarchical/readme/DESCRIPTION.rst create mode 100644 mrp_workcenter_hierarchical/readme/USAGE.rst create mode 100644 mrp_workcenter_hierarchical/static/description/index.html diff --git a/mrp_workcenter_hierarchical/README.rst b/mrp_workcenter_hierarchical/README.rst index c2b5afa83..030a42816 100644 --- a/mrp_workcenter_hierarchical/README.rst +++ b/mrp_workcenter_hierarchical/README.rst @@ -1,17 +1,37 @@ -.. 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 Workcenter Hierarchical =========================== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github + :target: https://github.com/OCA/manufacture/tree/9.0/mrp_workcenter_hierarchical + :alt: OCA/manufacture +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/manufacture-9-0/manufacture-9-0-mrp_workcenter_hierarchical + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/129/9.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + + * Add the possibility to define a parent workcenter to a workcenter -Installation -============ +**Table of contents** -Just install this module. +.. contents:: + :local: Configuration ============= @@ -29,57 +49,46 @@ To use this module, you need to go to: * Manufacturing > Configuration > Workcenter Hierarchical -.. 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/9.0 - -.. repo_id is available in https://github.com/OCA/maintainer-tools/blob/master/tools/repos_with_ids.txt -.. branch is "8.0" for example - -Known issues / Roadmap -====================== - -* ... - 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 -`_. +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 `_. + +Do not contact contributors directly about support or help with technical issues. Credits ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* Akretion Contributors ------------- +~~~~~~~~~~~~ + +Akretion: * David BEAL * Sébastien BEAU * Thibault REY -Maintainer ----------- +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. .. 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 https://odoo-community.org. +This module is part of the `OCA/manufacture `_ project on GitHub. +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mrp_workcenter_hierarchical/__openerp__.py b/mrp_workcenter_hierarchical/__openerp__.py index b6130c0c2..44f8231c0 100644 --- a/mrp_workcenter_hierarchical/__openerp__.py +++ b/mrp_workcenter_hierarchical/__openerp__.py @@ -12,15 +12,14 @@ 'depends': [ 'mrp_operations', ], - 'website': 'http://www.akretion.com/', + 'website': 'https://github.com/OCA/manufacture', 'data': [ 'views/workcenter_view.xml', ], 'demo': [ - 'demo/mrp_demo.xml', + 'data/mrp_demo.xml', ], 'license': 'AGPL-3', - 'tests': [], 'installable': True, 'auto_install': False, 'application': False, diff --git a/mrp_workcenter_hierarchical/demo/mrp_demo.xml b/mrp_workcenter_hierarchical/data/mrp_demo.xml similarity index 100% rename from mrp_workcenter_hierarchical/demo/mrp_demo.xml rename to mrp_workcenter_hierarchical/data/mrp_demo.xml diff --git a/mrp_workcenter_hierarchical/readme/CONFIGURE.rst b/mrp_workcenter_hierarchical/readme/CONFIGURE.rst new file mode 100644 index 000000000..e476e55a7 --- /dev/null +++ b/mrp_workcenter_hierarchical/readme/CONFIGURE.rst @@ -0,0 +1,5 @@ +To visualize features offered by this module, you need to: + + * go to Settings > Configuration > Manufacturing + * in the section Manufacturing Order / Planning, + check "Manage routings and work orders" and Validate diff --git a/mrp_workcenter_hierarchical/readme/CONTRIBUTORS.rst b/mrp_workcenter_hierarchical/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..e42616dc2 --- /dev/null +++ b/mrp_workcenter_hierarchical/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +Akretion: + +* David BEAL +* Sébastien BEAU +* Thibault REY diff --git a/mrp_workcenter_hierarchical/readme/DESCRIPTION.rst b/mrp_workcenter_hierarchical/readme/DESCRIPTION.rst new file mode 100644 index 000000000..2d03560dd --- /dev/null +++ b/mrp_workcenter_hierarchical/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ + +* Add the possibility to define a parent workcenter to a workcenter diff --git a/mrp_workcenter_hierarchical/readme/USAGE.rst b/mrp_workcenter_hierarchical/readme/USAGE.rst new file mode 100644 index 000000000..6b7ee7572 --- /dev/null +++ b/mrp_workcenter_hierarchical/readme/USAGE.rst @@ -0,0 +1,3 @@ +To use this module, you need to go to: + + * Manufacturing > Configuration > Workcenter Hierarchical diff --git a/mrp_workcenter_hierarchical/static/description/index.html b/mrp_workcenter_hierarchical/static/description/index.html new file mode 100644 index 000000000..81edc9e02 --- /dev/null +++ b/mrp_workcenter_hierarchical/static/description/index.html @@ -0,0 +1,446 @@ + + + + + + +MRP Workcenter Hierarchical + + + +
+

MRP Workcenter Hierarchical

+ + +

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

+
    +
  • Add the possibility to define a parent workcenter to a workcenter
  • +
+

Table of contents

+ +
+

Configuration

+

To visualize features offered by this module, you need to:

+
+
    +
  • go to Settings > Configuration > Manufacturing
  • +
  • in the section Manufacturing Order / Planning, +check “Manage routings and work orders” and Validate
  • +
+
+
+
+

Usage

+

To use this module, you need to go to:

+
+
    +
  • Manufacturing > Configuration > Workcenter Hierarchical
  • +
+
+
+
+

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.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Akretion
  • +
+
+
+

Contributors

+

Akretion:

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

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

+
+
+
+ + From ccaddbd3ec023ef0fd7d726b690b623127505510 Mon Sep 17 00:00:00 2001 From: David Beal Date: Sat, 17 Oct 2020 19:02:26 +0200 Subject: [PATCH 8/9] mrp_work_hierachical: pre-commit execution --- mrp_workcenter_hierarchical/__init__.py | 1 - mrp_workcenter_hierarchical/__manifest__.py | 23 +++++ mrp_workcenter_hierarchical/__openerp__.py | 26 ----- mrp_workcenter_hierarchical/data/mrp_demo.xml | 60 ++++++------ mrp_workcenter_hierarchical/model/__init__.py | 1 - .../model/workcenter.py | 58 ++++++----- mrp_workcenter_hierarchical/tests/__init__.py | 1 - .../tests/test_compute_level.py | 98 +++++++++---------- .../views/workcenter_view.xml | 73 +++++++------- .../odoo/addons/mrp_workcenter_hierarchical | 1 + setup/mrp_workcenter_hierarchical/setup.py | 6 ++ 11 files changed, 175 insertions(+), 173 deletions(-) create mode 100644 mrp_workcenter_hierarchical/__manifest__.py delete mode 100644 mrp_workcenter_hierarchical/__openerp__.py create mode 120000 setup/mrp_workcenter_hierarchical/odoo/addons/mrp_workcenter_hierarchical create mode 100644 setup/mrp_workcenter_hierarchical/setup.py diff --git a/mrp_workcenter_hierarchical/__init__.py b/mrp_workcenter_hierarchical/__init__.py index d8dfddcf3..f68a77f44 100644 --- a/mrp_workcenter_hierarchical/__init__.py +++ b/mrp_workcenter_hierarchical/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Akretion (http://www.akretion.com) # David BEAL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). diff --git a/mrp_workcenter_hierarchical/__manifest__.py b/mrp_workcenter_hierarchical/__manifest__.py new file mode 100644 index 000000000..f8903196d --- /dev/null +++ b/mrp_workcenter_hierarchical/__manifest__.py @@ -0,0 +1,23 @@ +# © 2016 Akretion (http://www.akretion.com) +# David BEAL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "MRP Workcenter Hierarchical", + "version": "14.0.0.0.0", + "author": "Akretion,Odoo Community Association (OCA)", + "summary": "Organise Workcenters by section", + "category": "Manufacturing", + "depends": [ + "mrp", + ], + "website": "https://github.com/OCA/manufacture", + "data": [ + "views/workcenter_view.xml", + ], + "demo": [ + "data/mrp_demo.xml", + ], + "license": "AGPL-3", + "installable": True, +} diff --git a/mrp_workcenter_hierarchical/__openerp__.py b/mrp_workcenter_hierarchical/__openerp__.py deleted file mode 100644 index 44f8231c0..000000000 --- a/mrp_workcenter_hierarchical/__openerp__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# © 2016 Akretion (http://www.akretion.com) -# David BEAL -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -{ - 'name': 'MRP Workcenter Hierarchical', - 'version': '9.0.1.0.0', - 'author': 'Akretion,Odoo Community Association (OCA)', - 'summary': "Organise Workcenters by section", - 'category': 'Manufacturing', - 'depends': [ - 'mrp_operations', - ], - 'website': 'https://github.com/OCA/manufacture', - 'data': [ - 'views/workcenter_view.xml', - ], - 'demo': [ - 'data/mrp_demo.xml', - ], - 'license': 'AGPL-3', - 'installable': True, - 'auto_install': False, - 'application': False, -} diff --git a/mrp_workcenter_hierarchical/data/mrp_demo.xml b/mrp_workcenter_hierarchical/data/mrp_demo.xml index ab9f5fac7..f39fc8fd8 100644 --- a/mrp_workcenter_hierarchical/data/mrp_demo.xml +++ b/mrp_workcenter_hierarchical/data/mrp_demo.xml @@ -1,96 +1,96 @@ - + Assembly 1 - + 5 1 0.1 0.1 0.87 - + 0.1 - + 0.05 - + Assembly workshop 2 - + 5 1 0.1 0.1 0.87 - + 0.1 - + 0.05 - - + + Assembly A - + 5 1 0.1 0.1 0.87 - + 0.1 - + 0.05 - - + + Assembly B - + 5 1 0.1 0.1 0.87 - + 0.1 - + 0.05 - - + + Assembly C - + 5 1 0.1 0.1 0.87 - + 0.1 - + 0.05 - - + + Assembly E - + 5 1 0.1 0.1 0.87 - + 0.1 - + 0.05 - + - + diff --git a/mrp_workcenter_hierarchical/model/__init__.py b/mrp_workcenter_hierarchical/model/__init__.py index f605ba5bb..ec36a0176 100644 --- a/mrp_workcenter_hierarchical/model/__init__.py +++ b/mrp_workcenter_hierarchical/model/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Akretion (http://www.akretion.com) # David BEAL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). diff --git a/mrp_workcenter_hierarchical/model/workcenter.py b/mrp_workcenter_hierarchical/model/workcenter.py index bdc47f4f9..35dc12000 100644 --- a/mrp_workcenter_hierarchical/model/workcenter.py +++ b/mrp_workcenter_hierarchical/model/workcenter.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Akretion (http://www.akretion.com) # David BEAL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). @@ -7,30 +6,30 @@ from openerp import api, fields, models class MrpWorkcenter(models.Model): - _inherit = 'mrp.workcenter' - _order = 'parent_left' + _inherit = "mrp.workcenter" + _order = "parent_left" _parent_store = True - parent_id = fields.Many2one('mrp.workcenter', string='Parent') - child_ids = fields.One2many( - 'mrp.workcenter', - 'parent_id', - string='Children') + parent_id = fields.Many2one("mrp.workcenter", string="Parent") + child_ids = fields.One2many("mrp.workcenter", "parent_id", string="Children") parent_level_1_id = fields.Many2one( - 'mrp.workcenter', - compute='_compute_parent_level', - string='Parent Level 1', - store=True) + "mrp.workcenter", + compute="_compute_parent_level", + string="Parent Level 1", + store=True, + ) parent_level_2_id = fields.Many2one( - 'mrp.workcenter', - compute='_compute_parent_level', - string='Parent Level 2', - store=True) + "mrp.workcenter", + compute="_compute_parent_level", + string="Parent Level 2", + store=True, + ) parent_level_3_id = fields.Many2one( - 'mrp.workcenter', - compute='_compute_parent_level', - string='Parent Level 3', - store=True) + "mrp.workcenter", + compute="_compute_parent_level", + string="Parent Level 3", + store=True, + ) parent_left = fields.Integer(select=True) parent_right = fields.Integer(select=True) @@ -45,18 +44,17 @@ class MrpWorkcenter(models.Model): return ids @api.multi - @api.depends('parent_id.parent_id.parent_id', 'child_ids') + @api.depends("parent_id.parent_id.parent_id", "child_ids") def _compute_parent_level(self): def get_next_level(parent_ids, workcenter): - return parent_ids and parent_ids.pop(0) or ( - workcenter.child_ids and workcenter.id - or workcenter.parent_id.id) + return ( + parent_ids + and parent_ids.pop(0) + or (workcenter.child_ids and workcenter.id or workcenter.parent_id.id) + ) for workcenter in self: parent_ids = workcenter._get_parent_ids() - workcenter.parent_level_1_id = get_next_level( - parent_ids, workcenter) - workcenter.parent_level_2_id = get_next_level( - parent_ids, workcenter) - workcenter.parent_level_3_id = get_next_level( - parent_ids, workcenter) + workcenter.parent_level_1_id = get_next_level(parent_ids, workcenter) + workcenter.parent_level_2_id = get_next_level(parent_ids, workcenter) + workcenter.parent_level_3_id = get_next_level(parent_ids, workcenter) diff --git a/mrp_workcenter_hierarchical/tests/__init__.py b/mrp_workcenter_hierarchical/tests/__init__.py index ccccde2c7..0a9f921b9 100644 --- a/mrp_workcenter_hierarchical/tests/__init__.py +++ b/mrp_workcenter_hierarchical/tests/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Akretion (http://www.akretion.com) # David BEAL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). diff --git a/mrp_workcenter_hierarchical/tests/test_compute_level.py b/mrp_workcenter_hierarchical/tests/test_compute_level.py index 3446c9376..c711fdf2b 100644 --- a/mrp_workcenter_hierarchical/tests/test_compute_level.py +++ b/mrp_workcenter_hierarchical/tests/test_compute_level.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Akretion (http://www.akretion.com) # David BEAL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). @@ -8,71 +7,68 @@ from openerp.tests.common import TransactionCase class ComputeParentLevel(TransactionCase): def test_compute_parent_level0(self): - workcenter = self.env['mrp.workcenter'].create({ - 'name': 'New Assembly', - 'calendar_id': self.env.ref('resource.timesheet_group1').id, - 'capacity_per_cycle': 5, - 'time_cycle': 1, - 'time_start': 0.1, - 'time_stop': 0.1, - 'time_efficiency': 0.87, - 'product_id': self.env.ref('product.product_assembly').id, - 'costs_hour': 0, - 'costs_hour_account_id': self.env.ref( - 'mrp.account_assembly_hours').id, - 'costs_cycle': 0.05, - 'costs_cycle_account_id': self.env.ref( - 'mrp.account_assembly_cycle').id, - }) - workcenter_child = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_A') - workcenter_child.write({'parent_id': workcenter.id}) + workcenter = self.env["mrp.workcenter"].create( + { + "name": "New Assembly", + "calendar_id": self.env.ref("resource.timesheet_group1").id, + "capacity_per_cycle": 5, + "time_cycle": 1, + "time_start": 0.1, + "time_stop": 0.1, + "time_efficiency": 0.87, + "product_id": self.env.ref("product.product_assembly").id, + "costs_hour": 0, + "costs_hour_account_id": self.env.ref("mrp.account_assembly_hours").id, + "costs_cycle": 0.05, + "costs_cycle_account_id": self.env.ref("mrp.account_assembly_cycle").id, + } + ) + workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_A") + workcenter_child.write({"parent_id": workcenter.id}) self.assertEqual(workcenter.parent_level_1_id, workcenter) def test_compute_parent_level1(self): - workcenter_child = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_E') + workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_E") workcenter_parent = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_top') - workcenter_child.write({'parent_id': workcenter_parent.id}) + "mrp_workcenter_hierarchical.mrp_workcenter_top" + ) + workcenter_child.write({"parent_id": workcenter_parent.id}) self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent) def test_compute_parent_level2(self): - workcenter_child = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_A') + workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_A") workcenter_parent1 = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_top') - workcenter_parent2 = self.env.ref('mrp.mrp_workcenter_0') - workcenter_child.write({'parent_id': workcenter_parent2.id}) - self.assertEqual( - workcenter_child.parent_level_2_id, workcenter_parent2) - self.assertEqual( - workcenter_child.parent_level_1_id, workcenter_parent1) + "mrp_workcenter_hierarchical.mrp_workcenter_top" + ) + workcenter_parent2 = self.env.ref("mrp.mrp_workcenter_0") + workcenter_child.write({"parent_id": workcenter_parent2.id}) + self.assertEqual(workcenter_child.parent_level_2_id, workcenter_parent2) + self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent1) def test_compute_parent_level3(self): - workcenter_child = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_B') + workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_B") workcenter_parent1 = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_top') + "mrp_workcenter_hierarchical.mrp_workcenter_top" + ) workcenter_parent2 = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_2') + "mrp_workcenter_hierarchical.mrp_workcenter_2" + ) workcenter_parent3 = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_A') - workcenter_child.write({'parent_id': workcenter_parent3.id}) - self.assertEqual( - workcenter_child.parent_level_3_id, workcenter_parent3) - self.assertEqual( - workcenter_child.parent_level_2_id, workcenter_parent2) - self.assertEqual( - workcenter_child.parent_level_1_id, workcenter_parent1) + "mrp_workcenter_hierarchical.mrp_workcenter_A" + ) + workcenter_child.write({"parent_id": workcenter_parent3.id}) + self.assertEqual(workcenter_child.parent_level_3_id, workcenter_parent3) + self.assertEqual(workcenter_child.parent_level_2_id, workcenter_parent2) + self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent1) def test_compute_parent_level3_bis(self): - workcenter_child = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_C') + workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_C") workcenter_parent3 = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_A') + "mrp_workcenter_hierarchical.mrp_workcenter_A" + ) workcenter_parent4 = self.env.ref( - 'mrp_workcenter_hierarchical.mrp_workcenter_B') - workcenter_parent4.write({'parent_id': workcenter_parent3.id}) - workcenter_child.write({'parent_id': workcenter_parent4.id}) + "mrp_workcenter_hierarchical.mrp_workcenter_B" + ) + workcenter_parent4.write({"parent_id": workcenter_parent3.id}) + workcenter_child.write({"parent_id": workcenter_parent4.id}) self.assertEqual(workcenter_child.parent_id, workcenter_parent4) diff --git a/mrp_workcenter_hierarchical/views/workcenter_view.xml b/mrp_workcenter_hierarchical/views/workcenter_view.xml index 0b7473f3b..15314e909 100644 --- a/mrp_workcenter_hierarchical/views/workcenter_view.xml +++ b/mrp_workcenter_hierarchical/views/workcenter_view.xml @@ -1,37 +1,44 @@ - + - - - - - mrp.workcenter - - - - - - - - - - - - mrp.workcenter - - - - - - - - - - {'search_default_group_by_level_1': 1} - - + + + mrp.workcenter + + + + + + + + + + + mrp.workcenter + + + + + + + + + {'search_default_group_by_level_1': 1} + diff --git a/setup/mrp_workcenter_hierarchical/odoo/addons/mrp_workcenter_hierarchical b/setup/mrp_workcenter_hierarchical/odoo/addons/mrp_workcenter_hierarchical new file mode 120000 index 000000000..c788014eb --- /dev/null +++ b/setup/mrp_workcenter_hierarchical/odoo/addons/mrp_workcenter_hierarchical @@ -0,0 +1 @@ +../../../../mrp_workcenter_hierarchical \ No newline at end of file diff --git a/setup/mrp_workcenter_hierarchical/setup.py b/setup/mrp_workcenter_hierarchical/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/mrp_workcenter_hierarchical/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 21300dbeda2e077f801b81e7dd0fa1c7f2abc87a Mon Sep 17 00:00:00 2001 From: David Beal Date: Tue, 19 Jan 2021 13:04:54 +0100 Subject: [PATCH 9/9] MIG mrp_workcenter_hierarchical: migration v14.0 --- mrp_workcenter_hierarchical/README.rst | 26 ++-- mrp_workcenter_hierarchical/__init__.py | 6 +- mrp_workcenter_hierarchical/__manifest__.py | 4 +- mrp_workcenter_hierarchical/data/mrp_demo.xml | 133 +++++------------- mrp_workcenter_hierarchical/model/__init__.py | 5 - .../models/__init__.py | 1 + .../mrp_workcenter.py} | 25 ++-- .../readme/CONFIGURE.rst | 8 +- .../readme/DESCRIPTION.rst | 3 +- mrp_workcenter_hierarchical/readme/USAGE.rst | 5 +- .../static/description/index.html | 30 ++-- .../static/src/img/img1.png | Bin 0 -> 65288 bytes .../tests/test_compute_level.py | 74 ++-------- .../views/workcenter_view.xml | 92 ++++++------ 14 files changed, 149 insertions(+), 263 deletions(-) delete mode 100644 mrp_workcenter_hierarchical/model/__init__.py create mode 100644 mrp_workcenter_hierarchical/models/__init__.py rename mrp_workcenter_hierarchical/{model/workcenter.py => models/mrp_workcenter.py} (75%) create mode 100644 mrp_workcenter_hierarchical/static/src/img/img1.png diff --git a/mrp_workcenter_hierarchical/README.rst b/mrp_workcenter_hierarchical/README.rst index 030a42816..fb994b535 100644 --- a/mrp_workcenter_hierarchical/README.rst +++ b/mrp_workcenter_hierarchical/README.rst @@ -14,19 +14,18 @@ MRP Workcenter Hierarchical :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github - :target: https://github.com/OCA/manufacture/tree/9.0/mrp_workcenter_hierarchical + :target: https://github.com/OCA/manufacture/tree/14.0/mrp_workcenter_hierarchical :alt: OCA/manufacture .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/manufacture-9-0/manufacture-9-0-mrp_workcenter_hierarchical + :target: https://translation.odoo-community.org/projects/manufacture-14-0/manufacture-14-0-mrp_workcenter_hierarchical :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/129/9.0 + :target: https://runbot.odoo-community.org/runbot/129/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| - -* Add the possibility to define a parent workcenter to a workcenter +Allow to define a parent workcenter to a workcenter **Table of contents** @@ -36,18 +35,17 @@ MRP Workcenter Hierarchical Configuration ============= -To visualize features offered by this module, you need to: - - * go to Settings > Configuration > Manufacturing - * in the section Manufacturing Order / Planning, - check "Manage routings and work orders" and Validate +Activate workcenters: + * Manufacturing > Configuration > Settings > Configuration + * Check Work Orders and save Usage ===== -To use this module, you need to go to: + * Go to Manufacturing > Configuration > Work Centers + * Set parent field on workcenters - * Manufacturing > Configuration > Workcenter Hierarchical + ../static/src/img/img1.png Bug Tracker =========== @@ -55,7 +53,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -89,6 +87,6 @@ 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/manufacture `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mrp_workcenter_hierarchical/__init__.py b/mrp_workcenter_hierarchical/__init__.py index f68a77f44..0650744f6 100644 --- a/mrp_workcenter_hierarchical/__init__.py +++ b/mrp_workcenter_hierarchical/__init__.py @@ -1,5 +1 @@ -# © 2016 Akretion (http://www.akretion.com) -# David BEAL -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from . import model +from . import models diff --git a/mrp_workcenter_hierarchical/__manifest__.py b/mrp_workcenter_hierarchical/__manifest__.py index f8903196d..2bccd24e4 100644 --- a/mrp_workcenter_hierarchical/__manifest__.py +++ b/mrp_workcenter_hierarchical/__manifest__.py @@ -1,10 +1,10 @@ -# © 2016 Akretion (http://www.akretion.com) +# 2016 Akretion (http://www.akretion.com) # David BEAL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "MRP Workcenter Hierarchical", - "version": "14.0.0.0.0", + "version": "14.0.1.0.0", "author": "Akretion,Odoo Community Association (OCA)", "summary": "Organise Workcenters by section", "category": "Manufacturing", diff --git a/mrp_workcenter_hierarchical/data/mrp_demo.xml b/mrp_workcenter_hierarchical/data/mrp_demo.xml index f39fc8fd8..beb6f1cca 100644 --- a/mrp_workcenter_hierarchical/data/mrp_demo.xml +++ b/mrp_workcenter_hierarchical/data/mrp_demo.xml @@ -1,96 +1,39 @@ - - - - Assembly 1 - - 5 - 1 - 0.1 - 0.1 - 0.87 - - 0.1 - - 0.05 - - - - Assembly workshop 2 - - 5 - 1 - 0.1 - 0.1 - 0.87 - - 0.1 - - 0.05 - - - - - Assembly A - - 5 - 1 - 0.1 - 0.1 - 0.87 - - 0.1 - - 0.05 - - - - - Assembly B - - 5 - 1 - 0.1 - 0.1 - 0.87 - - 0.1 - - 0.05 - - - - - Assembly C - - 5 - 1 - 0.1 - 0.1 - 0.87 - - 0.1 - - 0.05 - - - - - Assembly E - - 5 - 1 - 0.1 - 0.1 - 0.87 - - 0.1 - - 0.05 - - - - - - - + + + + 12345 + + + 1234 + + + + 123 + + + + 12 + + + + 1 + + + + + + + mrp.workcenter + + + + + + + + + + + + diff --git a/mrp_workcenter_hierarchical/model/__init__.py b/mrp_workcenter_hierarchical/model/__init__.py deleted file mode 100644 index ec36a0176..000000000 --- a/mrp_workcenter_hierarchical/model/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# © 2016 Akretion (http://www.akretion.com) -# David BEAL -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from . import workcenter diff --git a/mrp_workcenter_hierarchical/models/__init__.py b/mrp_workcenter_hierarchical/models/__init__.py new file mode 100644 index 000000000..567663b3b --- /dev/null +++ b/mrp_workcenter_hierarchical/models/__init__.py @@ -0,0 +1 @@ +from . import mrp_workcenter diff --git a/mrp_workcenter_hierarchical/model/workcenter.py b/mrp_workcenter_hierarchical/models/mrp_workcenter.py similarity index 75% rename from mrp_workcenter_hierarchical/model/workcenter.py rename to mrp_workcenter_hierarchical/models/mrp_workcenter.py index 35dc12000..33e4f2a1b 100644 --- a/mrp_workcenter_hierarchical/model/workcenter.py +++ b/mrp_workcenter_hierarchical/models/mrp_workcenter.py @@ -1,39 +1,41 @@ -# © 2016 Akretion (http://www.akretion.com) +# 2016 Akretion (http://www.akretion.com) # David BEAL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import api, fields, models +from odoo import api, fields, models class MrpWorkcenter(models.Model): _inherit = "mrp.workcenter" - _order = "parent_left" + _parent_name = "parent_id" _parent_store = True - parent_id = fields.Many2one("mrp.workcenter", string="Parent") - child_ids = fields.One2many("mrp.workcenter", "parent_id", string="Children") + parent_id = fields.Many2one( + comodel_name="mrp.workcenter", string="Parent", index=True + ) + parent_path = fields.Char(index=True) + child_ids = fields.One2many( + comodel_name="mrp.workcenter", inverse_name="parent_id", string="Children" + ) parent_level_1_id = fields.Many2one( - "mrp.workcenter", + comodel_name="mrp.workcenter", compute="_compute_parent_level", string="Parent Level 1", store=True, ) parent_level_2_id = fields.Many2one( - "mrp.workcenter", + comodel_name="mrp.workcenter", compute="_compute_parent_level", string="Parent Level 2", store=True, ) parent_level_3_id = fields.Many2one( - "mrp.workcenter", + comodel_name="mrp.workcenter", compute="_compute_parent_level", string="Parent Level 3", store=True, ) - parent_left = fields.Integer(select=True) - parent_right = fields.Integer(select=True) - @api.multi def _get_parent_ids(self): self.ensure_one() if self.parent_id: @@ -43,7 +45,6 @@ class MrpWorkcenter(models.Model): ids = [] return ids - @api.multi @api.depends("parent_id.parent_id.parent_id", "child_ids") def _compute_parent_level(self): def get_next_level(parent_ids, workcenter): diff --git a/mrp_workcenter_hierarchical/readme/CONFIGURE.rst b/mrp_workcenter_hierarchical/readme/CONFIGURE.rst index e476e55a7..eef187384 100644 --- a/mrp_workcenter_hierarchical/readme/CONFIGURE.rst +++ b/mrp_workcenter_hierarchical/readme/CONFIGURE.rst @@ -1,5 +1,3 @@ -To visualize features offered by this module, you need to: - - * go to Settings > Configuration > Manufacturing - * in the section Manufacturing Order / Planning, - check "Manage routings and work orders" and Validate +Activate workcenters: + * Manufacturing > Configuration > Settings > Configuration + * Check Work Orders and save diff --git a/mrp_workcenter_hierarchical/readme/DESCRIPTION.rst b/mrp_workcenter_hierarchical/readme/DESCRIPTION.rst index 2d03560dd..8dc1024b2 100644 --- a/mrp_workcenter_hierarchical/readme/DESCRIPTION.rst +++ b/mrp_workcenter_hierarchical/readme/DESCRIPTION.rst @@ -1,2 +1 @@ - -* Add the possibility to define a parent workcenter to a workcenter +Allow to define a parent workcenter to a workcenter diff --git a/mrp_workcenter_hierarchical/readme/USAGE.rst b/mrp_workcenter_hierarchical/readme/USAGE.rst index 6b7ee7572..e475d34a2 100644 --- a/mrp_workcenter_hierarchical/readme/USAGE.rst +++ b/mrp_workcenter_hierarchical/readme/USAGE.rst @@ -1,3 +1,4 @@ -To use this module, you need to go to: + * Go to Manufacturing > Configuration > Work Centers + * Set parent field on workcenters - * Manufacturing > Configuration > Workcenter Hierarchical + ../static/src/img/img1.png diff --git a/mrp_workcenter_hierarchical/static/description/index.html b/mrp_workcenter_hierarchical/static/description/index.html index 81edc9e02..369c713a1 100644 --- a/mrp_workcenter_hierarchical/static/description/index.html +++ b/mrp_workcenter_hierarchical/static/description/index.html @@ -367,10 +367,8 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

-
    -
  • Add the possibility to define a parent workcenter to a workcenter
  • -
+

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

+

Allow to define a parent workcenter to a workcenter

Table of contents

    @@ -387,22 +385,24 @@ ul.auto-toc {

Configuration

-

To visualize features offered by this module, you need to:

-
-
    -
  • go to Settings > Configuration > Manufacturing
  • -
  • in the section Manufacturing Order / Planning, -check “Manage routings and work orders” and Validate
  • +
    +
    Activate workcenters:
    +
      +
    • Manufacturing > Configuration > Settings > Configuration
    • +
    • Check Work Orders and save
    -
+ +

Usage

-

To use this module, you need to go to:

    -
  • Manufacturing > Configuration > Workcenter Hierarchical
  • +
  • Go to Manufacturing > Configuration > Work Centers
  • +
  • Set parent field on workcenters
+
+../static/src/img/img1.png
@@ -410,7 +410,7 @@ check “Manage routings and work orders” and Validate

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.

@@ -437,7 +437,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/manufacture project on GitHub.

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

diff --git a/mrp_workcenter_hierarchical/static/src/img/img1.png b/mrp_workcenter_hierarchical/static/src/img/img1.png new file mode 100644 index 0000000000000000000000000000000000000000..16a3cccfc89a011ca3f1c8bd17eee1d5153a739a GIT binary patch literal 65288 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 F{y&s-uoeIS literal 0 HcmV?d00001 diff --git a/mrp_workcenter_hierarchical/tests/test_compute_level.py b/mrp_workcenter_hierarchical/tests/test_compute_level.py index c711fdf2b..2f5bcaca8 100644 --- a/mrp_workcenter_hierarchical/tests/test_compute_level.py +++ b/mrp_workcenter_hierarchical/tests/test_compute_level.py @@ -2,73 +2,17 @@ # David BEAL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp.tests.common import TransactionCase +from odoo.tests.common import TransactionCase class ComputeParentLevel(TransactionCase): - def test_compute_parent_level0(self): - workcenter = self.env["mrp.workcenter"].create( - { - "name": "New Assembly", - "calendar_id": self.env.ref("resource.timesheet_group1").id, - "capacity_per_cycle": 5, - "time_cycle": 1, - "time_start": 0.1, - "time_stop": 0.1, - "time_efficiency": 0.87, - "product_id": self.env.ref("product.product_assembly").id, - "costs_hour": 0, - "costs_hour_account_id": self.env.ref("mrp.account_assembly_hours").id, - "costs_cycle": 0.05, - "costs_cycle_account_id": self.env.ref("mrp.account_assembly_cycle").id, - } - ) - workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_A") - workcenter_child.write({"parent_id": workcenter.id}) - self.assertEqual(workcenter.parent_level_1_id, workcenter) + def test_compute_low_level_workcenter(self): + workcenter = self.env["mrp.workcenter"].create({"name": "any"}) - def test_compute_parent_level1(self): - workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_E") - workcenter_parent = self.env.ref( - "mrp_workcenter_hierarchical.mrp_workcenter_top" - ) - workcenter_child.write({"parent_id": workcenter_parent.id}) - self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent) + def get_record(string): + return self.env.ref("mrp_workcenter_hierarchical.%s" % string) - def test_compute_parent_level2(self): - workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_A") - workcenter_parent1 = self.env.ref( - "mrp_workcenter_hierarchical.mrp_workcenter_top" - ) - workcenter_parent2 = self.env.ref("mrp.mrp_workcenter_0") - workcenter_child.write({"parent_id": workcenter_parent2.id}) - self.assertEqual(workcenter_child.parent_level_2_id, workcenter_parent2) - self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent1) - - def test_compute_parent_level3(self): - workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_B") - workcenter_parent1 = self.env.ref( - "mrp_workcenter_hierarchical.mrp_workcenter_top" - ) - workcenter_parent2 = self.env.ref( - "mrp_workcenter_hierarchical.mrp_workcenter_2" - ) - workcenter_parent3 = self.env.ref( - "mrp_workcenter_hierarchical.mrp_workcenter_A" - ) - workcenter_child.write({"parent_id": workcenter_parent3.id}) - self.assertEqual(workcenter_child.parent_level_3_id, workcenter_parent3) - self.assertEqual(workcenter_child.parent_level_2_id, workcenter_parent2) - self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent1) - - def test_compute_parent_level3_bis(self): - workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_C") - workcenter_parent3 = self.env.ref( - "mrp_workcenter_hierarchical.mrp_workcenter_A" - ) - workcenter_parent4 = self.env.ref( - "mrp_workcenter_hierarchical.mrp_workcenter_B" - ) - workcenter_parent4.write({"parent_id": workcenter_parent3.id}) - workcenter_child.write({"parent_id": workcenter_parent4.id}) - self.assertEqual(workcenter_child.parent_id, workcenter_parent4) + workcenter.write({"parent_id": get_record("workc_12").id}) + assert workcenter.parent_level_3_id == get_record("workc_123") + assert workcenter.parent_level_2_id == get_record("workc_1234") + assert workcenter.parent_level_1_id == get_record("workc_12345") diff --git a/mrp_workcenter_hierarchical/views/workcenter_view.xml b/mrp_workcenter_hierarchical/views/workcenter_view.xml index 15314e909..0be32e6aa 100644 --- a/mrp_workcenter_hierarchical/views/workcenter_view.xml +++ b/mrp_workcenter_hierarchical/views/workcenter_view.xml @@ -1,44 +1,54 @@ - - - - - mrp.workcenter - - - - - - - + + + mrp.workcenter + + + + + + + + + + + + mrp.workcenter + + + + - - - mrp.workcenter - - - - - + + + + + mrp.workcenter + + + + - - - {'search_default_group_by_level_1': 1} - - - + + + + + {'search_default_group_by_level_1': 1} + + +