From ab9abc40c30e92bb517c6bee5e693f419dc3352b Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 10 Dec 2014 23:35:21 +0100 Subject: [PATCH 01/12] [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/README.rst | 11 +++ quality_control_mrp/__init__.py | 6 ++ quality_control_mrp/__openerp__.py | 42 +++++++++++ .../data/quality_control_mrp_data.xml | 16 +++++ quality_control_mrp/i18n/es.po | 39 ++++++++++ .../i18n/quality_control_mrp.pot | 39 ++++++++++ quality_control_mrp/models/__init__.py | 7 ++ quality_control_mrp/models/mrp_production.py | 58 +++++++++++++++ quality_control_mrp/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/README.rst create mode 100644 quality_control_mrp/__init__.py create mode 100644 quality_control_mrp/__openerp__.py create mode 100644 quality_control_mrp/data/quality_control_mrp_data.xml create mode 100644 quality_control_mrp/i18n/es.po create mode 100644 quality_control_mrp/i18n/quality_control_mrp.pot create mode 100644 quality_control_mrp/models/__init__.py create mode 100644 quality_control_mrp/models/mrp_production.py create mode 100644 quality_control_mrp/models/qc_inspection.py create mode 100644 quality_control_mrp/static/description/icon.png create mode 100644 quality_control_mrp/views/qc_inspection_view.xml diff --git a/quality_control_mrp/README.rst b/quality_control_mrp/README.rst new file mode 100644 index 000000000..22a06a73f --- /dev/null +++ b/quality_control_mrp/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/__init__.py b/quality_control_mrp/__init__.py new file mode 100644 index 000000000..ad6c8186c --- /dev/null +++ b/quality_control_mrp/__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/__openerp__.py b/quality_control_mrp/__openerp__.py new file mode 100644 index 000000000..3d98666dd --- /dev/null +++ b/quality_control_mrp/__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/i18n/es.po b/quality_control_mrp/i18n/es.po new file mode 100644 index 000000000..04e8522a7 --- /dev/null +++ b/quality_control_mrp/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/i18n/quality_control_mrp.pot b/quality_control_mrp/i18n/quality_control_mrp.pot new file mode 100644 index 000000000..65cb98ce8 --- /dev/null +++ b/quality_control_mrp/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/models/__init__.py b/quality_control_mrp/models/__init__.py new file mode 100644 index 000000000..adf4739b2 --- /dev/null +++ b/quality_control_mrp/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/models/mrp_production.py b/quality_control_mrp/models/mrp_production.py new file mode 100644 index 000000000..58b1707b3 --- /dev/null +++ b/quality_control_mrp/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/models/qc_inspection.py b/quality_control_mrp/models/qc_inspection.py new file mode 100644 index 000000000..cf7cc96bd --- /dev/null +++ b/quality_control_mrp/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/static/description/icon.png b/quality_control_mrp/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/views/qc_inspection_view.xml b/quality_control_mrp/views/qc_inspection_view.xml new file mode 100644 index 000000000..8f1ee8c8c --- /dev/null +++ b/quality_control_mrp/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 25fbcec0ee6209cd007c97830897e410889ce9a8 Mon Sep 17 00:00:00 2001 From: oihane Date: Fri, 19 Dec 2014 11:17:08 +0100 Subject: [PATCH 02/12] [FIX] Little changes in quality modules --- quality_control_mrp/__openerp__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/quality_control_mrp/__openerp__.py b/quality_control_mrp/__openerp__.py index 3d98666dd..536336a38 100644 --- a/quality_control_mrp/__openerp__.py +++ b/quality_control_mrp/__openerp__.py @@ -31,6 +31,7 @@ "category": "Quality control", "depends": [ 'quality_control', + 'quality_control_stock', 'mrp', ], "data": [ From 05b6f6c292ca04ac2cb23633bc395bc3d5f2f9d0 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Mon, 5 Jan 2015 05:18:56 +0100 Subject: [PATCH 03/12] [FIX] quality_control_mrp: Some problems [IMP] quality_control_mrp: Smartbutton to inspections --- quality_control_mrp/__openerp__.py | 1 + quality_control_mrp/i18n/es.po | 4 +++ .../i18n/quality_control_mrp.pot | 5 +++ quality_control_mrp/models/mrp_production.py | 16 ++-------- quality_control_mrp/models/qc_inspection.py | 21 ++---------- .../views/mrp_production_view.xml | 32 +++++++++++++++++++ 6 files changed, 46 insertions(+), 33 deletions(-) create mode 100644 quality_control_mrp/views/mrp_production_view.xml diff --git a/quality_control_mrp/__openerp__.py b/quality_control_mrp/__openerp__.py index 536336a38..3b6060d7f 100644 --- a/quality_control_mrp/__openerp__.py +++ b/quality_control_mrp/__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/i18n/es.po b/quality_control_mrp/i18n/es.po index 04e8522a7..890fdabda 100644 --- a/quality_control_mrp/i18n/es.po +++ b/quality_control_mrp/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/i18n/quality_control_mrp.pot b/quality_control_mrp/i18n/quality_control_mrp.pot index 65cb98ce8..d7bb4f7bd 100644 --- a/quality_control_mrp/i18n/quality_control_mrp.pot +++ b/quality_control_mrp/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/models/mrp_production.py b/quality_control_mrp/models/mrp_production.py index 58b1707b3..f0cee7251 100644 --- a/quality_control_mrp/models/mrp_production.py +++ b/quality_control_mrp/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/models/qc_inspection.py b/quality_control_mrp/models/qc_inspection.py index cf7cc96bd..7dcf425c9 100644 --- a/quality_control_mrp/models/qc_inspection.py +++ b/quality_control_mrp/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/views/mrp_production_view.xml b/quality_control_mrp/views/mrp_production_view.xml new file mode 100644 index 000000000..5f9020cc0 --- /dev/null +++ b/quality_control_mrp/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 8a3947ba18781713958698bf5e0f7139f9988680 Mon Sep 17 00:00:00 2001 From: oihane Date: Mon, 5 Jan 2015 10:46:31 +0100 Subject: [PATCH 04/12] [MOD] Fixed MO view --- .../views/mrp_production_view.xml | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/quality_control_mrp/views/mrp_production_view.xml b/quality_control_mrp/views/mrp_production_view.xml index 5f9020cc0..8e44eb648 100644 --- a/quality_control_mrp/views/mrp_production_view.xml +++ b/quality_control_mrp/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 9844086ee98c1df8c5de914684d69fba52a4fb5b Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Mon, 16 Feb 2015 20:51:19 +0100 Subject: [PATCH 05/12] [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/static/description/icon.png b/quality_control_mrp/static/description/icon.png index 10f1f876f701f5263215071b2497ae85b408aab4..a86ac2216b01150494b9681168e2b605d9da0084 100644 GIT binary patch literal 9558 zcmV-cC8^qpP)|mTdU7b+Tu`))fTMN zdwq4NW3|uPngXp>6c9xqAoDy!2qb|pWFpg@&e`ve8!(c4!@V~*;gZMte9k9u&e{8( zv)AveX|KIDT%t>Ki7wG4`hQBIJ-*b)Yp11IG&vikCZMQBijQ2Td}ZS&c~zmbA3b`e zLnQd_LW$`Dx&X_RP>-!%vhc(u0K_a{Mv-yOKouK?cGa3s^GYrOAVz8Ql$oj0H1dG~!S7P1l@iZs8n3Keyxl%*o$&v#GdFKoUZn5<;C)rZ}afc}gk_giKLN zeH$2m0iMt&gm@Fvd>iD^2Az^5rI{|2Ojn9DC6p6Efz^}v?^v}PVio{7lc&F-;Ct;v zLmic-n7VS={B5!JU@{g*Ys{qSH?$+>17s@6|1xKeyaa%dwhiP)OofC({ zPWP@|=$e&D*Djf)r=?)ASg_ly02ro8U0pqO^)8A_j!{%{l*30#I8|02?U(B@K6hr% z6-)9CT>?M=8h7oC%S_bO(dcVn|2~W!Ih+y0hA?PAKXg6(m{;-9QZ{bh#`;ZLS+i~v zZnvk!0?tszFM%IkiUXWOqoz*J(tRwY*@>LyDLpNf8>UQT%A^T&%gT)E^VQbXv3%th zEL!|2TX*bkX?Jri-o)R;LU8DU17J+vf5e1wp}W*IE+1=I z#4)m065Z1sA^%3{@sm70_j$JO+8d4GDg)nT`AgqF+AaW)lY7f>rR0W|_R}>hleu$# zNsn$>=e@V0*2~A+PO@n0NwyYMW18Vh)y!lYlLn`A)3A;V%#1(p{T`2(=l=LA|NeMc z%bj5*9$o#({NJ`VZ`wq0X7w60MZhgB>0?Ot0RHgw96EJq-cCGlypE?A74WP1`&hoG zoYE>cDngA~?K0SUq?){Sr7YiFPJ%i$UD4j$B>=jT0!(-B-BFWhjP z``+Hgj^gT8f0xQSFCT0^K~b5Dt9mD6)dM>)g9r9U({wgPC<%ljuc%=67wrN7#Rqql zck4ay2S7qN?K*er$n*0aBQYU9sB!mj-acMkUWCWjwr=#k(po;+c8bfpCDJJ=a7y9O zA%i%1s+@fX3L>%2UMecsy|=aBqYWp6#Hw)aw%M#a^~6I#-Mk}Z^?dz*HuLeelMy{l zl2hl`)B5uKw+E7yYLBRok_s2Mzr2q~>)^T7RgGbB6w;HD|HU2UYE+lCZ`CC=`< zdltQVbPIT`@Kil_zP6p>^2q(}U)|h?nIkipJUE>PZ|D_qKZdDzeBpln_QkQFhT-Fn z{EVc;u!Nt_<~~{2t^gnu#i8CiYQ#`(xiL53wWF18zW?erj#auNewIF+oJ<+g;me@X zz%+VybVeQwQt;dN53q2<@qpJmrl)cLJ>L(fOV9G<%YE$&08)h%=eOH!{Ng9~1a!6P zJqG{z_D)WmZrQBdtZ`X1?p_GEBd1FX{dV}xKliiYP~hc z4FD!gn4l{aT9W6tX5K=lj)AfA==}ZcJyzSIXUR;qapTaAP0rsmtRv|O))w{cH55O6 zXLnG5-uHu9SoF|5Z$oMKv2G zm!3R`L?SvaaddK8Rze-;QdX3SCZd;>$Fg% zfJG^_Fei8VoYqVyZ?%rcPM-b)Dby-LOz?0z96=4gKYntUs=AijMBf^niQOWbbq#MB z-YF{Y|NO^?sPh<24Z;rTOc*~p?2z ztHxY2y?aapVE9cpIW1Bw6(anJpQ)241U&!tsuB#d<-z@#BRiAiJiqAel49rDL1|GL zkN?dt!R>7tp&XJufUL}naQ%#-LStRdq#3Ccbu@GE4At#b9J1VLE6iuE*bv96`@R<)Va`@1I ze*dzaWz+}Iqe0OuAU(lK=VTk55^ZE8+sI6|(YvFQj)|eWc!RSNc;}v>6qnaiQsJh! z+(k)+i{f$@rB&{*B+>_)kMp%Fn!24=T{(=m{`!vy2AOMfb8nAZvg9wdF$Vyl#6cy( z7uQz|9USod(jBLQw&~j`j_WV)K<8u|ol|UNB-!YgXv3mKC&%UTZV6o8t!enyFcqa$ zZb~X#l$5(Eu5fYaL>U>Sq&%pkDaX9Req>&lb)h;t8C4laefA(37 z*$R@v8tlP?nw;|)inRwT1Kyut*ZIpmmlJPm`$SMp3c94&>5^iHM%wu44-0r}Rnz)W zrm6ViU?o$Ad^NbG>l)bu`>|nDxGTohr)$>a)yJd_uzY!5sY1;Tr%h5~0v*y*o1EW$ zw1!%DVDX=kWV;~DZ;lcj!M~+o;o;sr!ZzwnA^Am2yMdX>`l~?5^>czP;Mmhl$oEKD zJ;$ruF~j_$m2UpN_E^yCyN}ice)q0nE?!Z*yK3>mtuYONyu3U^6WVPkLQ2oc>Jm6I zS9r26XdAcBjOhAc{))r3=wS+bnR`I=8woz8&ZT7y(I&VOAmYkFr#@8?A ztzGv1@rwcg0Hz^d4=HwF51frt>pp+zx2(p?tXHIlV8m#(T6H0Q@CY)p=wQGvtLQ8}i?OzxtvAK+X*}q=Zy`Gf0koIH}$B9)tVd-pP_?;s(*8w^o(# z*!+DFEi`EXmyFiyy0yq_pBBn(b#;Laq_{BMJg=d6;N3ke*ihPPuk`%Khj{wKf{4}~ z#M||d-#vf|7%_VEOvgn7fZ@aMwkQ=^<<5Fn;7FJ=0zcn06>}Es=e=fJvPkKfMTdC( z^Wuox2YR2n`jEYtWG&vj`=SAWJ>}$&2{8}g^y$E=Eh{CmRBcnivmYIb`s$!hc1EsV zlAV@-fvaHe9#|!+C&o_xT4u}xVDyxksR;2bO&{bC)#x)28FOV zG#K^h5LkL2E(&Ao0YQQgmN_vG0AUzU0I8wgA8Zi%c8VMT*tvS-ux@c9h3 z?c5V~e+q8Qo;lMRlK?;wQO???Ejt39pL%(Ru=`4|>vT(tzQ>fFV2x zCU)=LA8AP$dzUJ^B_;u&P|G3%K;R|Rld{urhMA_F-3kU^OQgU}!vbd+Z`d4R0SUpH zXk`OM9RRCyE`JL|UbyXwkCw7MfH-tmHLed+3JeTU{QC^WJFAcK+((B(j_3F99G+@P zc3PM;I4zJd$D$>lMl!_Z($M}RcD;Z(bIkm)Lv970Ak0!{A1z%T@ca+1=@xJ$PcRys zm2loTLEgGjraZl#xgQ+ljTOb@KDD0LKQG38p4fi4p1^mEN@rr0^ke?mM(Zqzzm=!)MlTqSRF7j);Y*pzTf}|&ZKn(mE8KmW*%R-|0@Y4 z)h-{;e|(4=pWVO*n}e5_2}cE_#94waHT!UJSYN-P6i>R!(?+gYoOdAR;{a!9)zSqE zg;Y7fkx=fhsi|fDzdj0h?Sboik`i}*yC>eJk(t~yf>>1M;^%+e&7H4pXIDvZOdhLr z^U!;H`Qe{;u>W{dHJg>{2zid;!RvdG5Fq}4?Dz>5FZ(>yVLW6CIezsg3x2h6<160Q z;8Uxv4P3Q&;Z|js*8m~KQQuqeZ(MG7KwWx&ZjbY}clk_;%DY0^AhxSx->oq_jMDBSR=yDSu9~ZEsN_Llcj+DFDS6bVwe*bh=8JZM)aiEe1 z|F(y91yw{cbE_2WEU6)HeJQ2_T@$>x>@b@PPoLLaeB-Vm0VTz;(i1%OUoT-8=LdjL zYDWIjg}YmuKW$Pd@~TPG25LftWV|>WcHVjIzv&pD9$<~j$E`1Hp)dw=0RxItDfr_Z zgBagGa3uT}znaVHwIS8ZEX!ZIpaX4CGg!9Gz=U4&uD;&If4%rdU>$GQdE>6j=$vee zIpzxiznj@FDDzk3uML&?G#Jlql5x@|01#3StD^IY{Ix9nU~#}}9TTnm@s8|((X|Un z_fPH-)LS`r`~-8KeKDNwI!%}`L2owzz%YA<+vE=~zZtX)d;iXHy!)e}L8n>Ul5|Zl z?;HKOYhvJ%K0cqpub+I5>YAExy0sfx+MxCW07ckKn!R2xkI#Lcsvt=dT~h44efQ<$ z^t*87;?onXyfkZYP>Ubn<=6khuD#)JF>Gq)koE%r8QCP!;i3|L_RteSQ>RknExa^q zFb`bcGbHycnsoJmROa75jM069*9?B^uk-oa{0}1hXheIG04m}PjlKI1^4OEl;qiEb z8eg-u}&w{Z2?QP}N)J%B`q&W%GmGP-XHNOaFx}zn1oGL44{ibb<9(e`valzBYIw#w> zVQ5EgzM>N;P77rkK_-HA={_S(@-G49|!*$Y>+L+du{JCHN$euaVnq1+#A0h6f z1$zUYp_^~W<(@mgLwtN37m}1xEctXL|NY|YoUX2EX?Mqz;sZ>6xBAlshub7Zb0G$8 z?BuUyqO_|JVgxV_7#qp6q^2Zu?_GD0d+qq3+qkqQ6&^0;*+0I*=B+y;W;lu!3i6Ta zv(-x$?r7_Gh>4v;b8=^lQc5iZBC6HeB{PF>f8!Re&%Gw1En>r^-Fpx4=Xdg0vvwn9 zWGhfgq!9P595dwo3$k?3g1SZBvNHMF^^=)=&A6!VC+PM0ShIE` ziMu4#%6NcELoFOGaOO8=oa*V$Rn@PI4Pd(|iN3oZd5 zsDU_rFVK(nNr&>6F6b3Y52VN12r0#TLhxui1;FPKjmaUL2;%VP2&fi(xCSOQq8Hwn z1%NKKHwsl(?3Npv7NEs5LS1GRUdwMwwTe>Dc2<_rN$pWsT(iPE1o`b zXzgt%=_@Ze&BjklxpHzQ$(?)I(Rx}D_Aixo#CC}ZW+iyGSK!cHNeB31`2XY%xS72F!* zysa0o*+kU~A$p+b2}mIX4!a%0F!1`kTt1+OCuj7?O1InXNlZ$jva$jc9)KQ$b|s2q4;Z0@wpDDjuJvuVVF%q02EhG#rWOP2hlcEN&$CpBHWX7Hfw z)Vlh5`jixRIdS4dT5?hnN*Sc2BvDgSjm>J+wpDGrZuhR;(q~9gP07ea9o*g~Z&6nX zpRa}6ra*l?cgfT~ zOw(xxl)q%*J2{hQj8sInLwT5V*rnw6&t?7@DkvzB_4V~)!@3RlOq0`9RfCESA7a^( zC4PJg|BfLw)iu&k>hi*a2XT2}M2{@!C-I$AB3TH~-Ox1^EOn3;=l_4aRWNO|-ySrS zqI*Y0olBj?Pof1>H8`vd{*(Z#72Nf(X)g@Q0G~&Rb^!nY-76pQT8tYZqy*G@Q1g|N zdxTInU@9T(YY3PKb=StFc~!w~ShrzAU2Sb`Rh+}wLDO`KijRCzeY!fs>oa-?DKQKK zo6SnusdC@x)2CN<>e%sWw-;&Ct<;?~X;L*$fZGk-lEJKiD|>;(4P_OubQ63z_w`k= z@xxq2T{-m5fI6>Vv!o_Nx9%_~6RM7bsTA!70Lz!>)#T*P_?A*?h2Pu_NIs=_1*sli zy<}nI_1TY&ojl`ug!%)D=2F;yo4;h?(&nDyy}!L%oRFAsZ(Lmby-vGBtEjA8l+~@< z9WIZjhpuUOeLjSgxIAup^z6C5b7tl^k55R4qnu+W4Lshaip(%zXjiDHgzPSUK=f|V?12Z7m~v*n$D#jD0%c734f z+sl6OS(Yi~SQGZ?KG(i&&rE5&fKenQCcG5qjLUX7on~!qEvc!gs;H>QJ^YFhE4ugS z@wmqj+NjPYjEY-=*Eqw)vl;`X{ERkC{~=|AW#61D-Ox@-uvkFoepR5naPTl3J_+N8 z+BS%bh4B`Pwi{@?VDRrd=Zz2OCg$YM7-cGTuMl)baZm{J)m2OWxiQq=8=re~S5s+^ zE5TG0nh^X$_ay#o`SL#pEb5azd&Nh;vPNzCueVPs( zGbkx8@(dkz#Uvr*hdx6vuKP)*^eDt_e3h|26Li@K6fJgMK#PY8pGM!LxH%UE00utv z`SntX51YP>n7(7)xP=$;*#^&E`F(|IS{h$!!*>2|?3U)*rlqB4E2W;S_hL-HtZu-B zKCbLDE5`-k^1&B{Ft8JJPV#^KjkUcBmE&g~Nk~IT&Es%rm1$|Vg(s?Pvo8u8K$>Di zAbF=yFI@h}>UCRxJEr7g_LEQlm~TP z+g7#tL93#U0$vNX zzl4<3_uU@zV-yOZ@R@=uIvh*cRU&>@RKp#1>M5;;f^x~S10aQB#t=6h;{4%WP5KWh z{VGFBjv=&fI1`gMp`-i*mJ$ma6?d)PxOW^A52{$yJ` zPxgbKWtgZ1G@rLHJe)pnf9{|cIClX<9dx@lD@$zepK|)gxxFg0tQLb>cP&;8I>v*| z(!g{9QuBjAmmoE^TcmH(58pi1D6(*(ISmn``u~yq?$R&{L%8*bQtH87PmRy>Pnkxa zX3l(1+tsVnHxc3~;C%bbdK2Ax(wgVTL}iImN=DE7_4=dF+&9*3Nlk!ypWg_O^2@JZ zlm57X|F767g_wB9>t?ebMa)Y8X&P6CcxyKy#NV@Lubc~?uTsbY0WMHh0gfH>#yt`$ zFtX=-7LQB67iHEUq!*!_m<-w_xDE(4!O&7|^$r7~QsXB*UMoIQA$)JH!7}?gFfE{o zFByLJ(EJiWx7mB?*0>&U>f#1~G8q+S%6~5qy~J0;BRfDm9BKzU=S-;0{^iQq2$2jb z;v5_$#HeTiz~OXOCnm&KoTxEfC#rqcZs}$m0yIsaNriq60IW`{!<4xc z7=Tx{7(}QIVg9NDHb&v`uZ-3>)YR0hNJ&kdl9-$}F~M$`9%toayA|T?ig+8u*&*Hz zaW+VBKt{5pN7u|T=asOr%>0=%-_yc1rUD}%TmS$ff;LSptdY?gi-Ljz_r87mc9fPL z+xpXgxR>lb!GD~r;dq=wlAa3bX^@rz>B-PJ1(NI@Z1G7~R<3!{cF_W0XRpiwK#Oa? zD=9aGFEwP#C4i#WfQLRwYmKpa^q-UnDOL&1LY!6Lv_PUAIwXM82EwdEYFZD?X76+H zssO2?@dbJ7Y`(Df+coj6kA?=*OzVi&8lE^COEuj>f>V+d2Z?cDvHA~9D)7}>G<))} zixvO^6%8G_qj1i|unY6=nK!Wzh(cUJUD;aW6K_*%bX}fy*sa(b;sHW{ru*mqai2h1 zoFgt`BQP3+r&{tQw_FVf(P{v&StvsJ_A4#UZ~a^Rhtxo~f^;86n8pyLl)UHw(C0rF z*-+xLDCm)mEnwb;D7?zZ)*2&SrxxYj;uE$;QuE6L&qE$yNMfHgj0D8Umu zLf7Roa%*0hDjERD82rfRU0Y*}u73uPRK_~5VR&?l9ZmS-0Gb9;2PxdBx{_4fBc+B$S6LN9L;Zt*^}3fXD^P;fw)bwxBx2A!D@lKu%Hs4vlRm0XMfkS*7pQPJU1 zPyko=g-nIo z!TV3{Zt0dAcEoy5H0(fA9|`PfX+OSQ&&Ekh+#rOw3ez)IonDnAjKi5&K*&amLC^Yw zCU}Zc@RiQPbM%L5Y1coYJ6{qL_twQO0FYNkAq94GUfws17I!jt{K@RuD~%jD!UHa98`Hlar!N;G1iHE5Zyklb41{nD8iq3?db<>RgS5X6iicW68&_4gU zD6+k7RGEX?byriih$PE4;!{g;SSrEl0lNgd4t6WpZD6ze|Jto!)4?Xe23R4f6C`GU z=0vI2{qTr62_OwIA{r@ux~WAG0Ajspxk|D*;t~cE0hk`0`-!NpIbl&gf!&dW(`n_2 zA}bb~6W!{-VsW5Ztq5sBAW#^XJ|Bk9jn`X`*IkFlQ;)!n*Xv>7av#om6Y#{K3Xp0< zkg;|FUnswDY04vn&v@DA5!{@MJVN8ByK8&X_^>@iD^naUK^%q!Q=7Z z@p!P{j!^*k^XUPqfR!LtN%&;I!DCw*8+F+atyqs@DUcb^cb_AoR)TfU+(~8GvsWAh z0wq@zOJPjjK6m0-3;(hQ7RPyY=V%Qx2gF$AuZL`th*9|K9falMBq!Jafz@V3({z#& z6WF(JKk4b|AT$g^p`;+r>7=mmFsZ4jNKN|J1`0?_h@+_J1P+ITxI{ZHm*T|n@)&gk z6^l*8Gful>^~O0P&gQhA8_?f5cl@qFzg(3ogt?S+Y78sX#;8A*5SxTj=K`QeGv(xM zzaRgV1*Z**LqBOa#Gs%4Jw=JsabRTOFZLn>m}&t`k2A7RNUPPV+3gOjRx9!G2^fYC ztIdYhYDFo96at6CiDCG#*=$%E&I=$eE)LT)(KH>W(~03LRXzbQUADHGk5Z^fKs33MI!#8=`)8k8-lfGffWrOTpCU7 zb`ga63ZS;O))t=-uRH8^tX3PMVGjel&4$fxN0|yCMS~g;*d2bLDAOMo&~*!-uvo3w z?GD^7w?;#%-9=v?VCPdgM+QIq$v94|M2f4~1s6T3vR#1Bb(jlzxWV?G7AHCw7Me zyTgGdHNOO~+s~eNIGk84{!KP5RvUJQ1B=B{)$k0~c2gl_`@C@#**{%bQ!8K=yKJ2JRbMobX`xhSoB1%*R23_ zUBhCrV45aE2fo8@{&2 zQsB)0wR6C5u03$}-%?7IoSYJ8v08M)=cBy5oYd4*G)?y}CQhNl$n&2M@&EpA1M6aqaPn1uCU zg@U+7wN_P>1D^lein=S(5O**vJO} zM;}ysO`Mn84c84VT%GGeUF%F`YGcO%Izrjxd}vb?uz0JMx;QR6arKyjflG(MpRJtb zAvnLgJ35xD||BOIB6; z!jJNAQWdb2KWf@38%;r-YVAB)A82*Vn9FYaEmfBv<0y6;WO5pbiA0!YzWzAthH0hHbv6>ruwVeiG^f5LC| z9ijNxLFXVnS8q2R;P?7v zG}qRMl2}l@y8GJ9GvpkWWYpBw#4Ph#WjKZsmk=<2yw#2uj?{s1>fk z=IaIk3$FjNsajfT&jo=)bfX8$NZRDD-p1-H4QG*hgkSVxnm-c)m@bB|qHfn2c}5BH zfel$qAHGN}EK5A7tJqwZX5@Igrtql?7z#KBB|(|qY4IU%AOUET=;trC7lyizgiqa0 zpVSK;JF|%o`A{7h0W9b?@?pH#T6w%Yp%OxN$f8(WB5-rU29HSrVD=F@2^4`~aMF z4E}~G-Mfi9EDEg;qMAi9Mj2D}_%56v)i~h69dx;1Fpz`y4Q9?rkGZ*giko6@(GdZa z9+tJ2pA>agp_cy>aFa1v$RZHZh?tOXbHR{_9w$1e9|N#X*MEOZIuNKR(-=9VtFgCe zn1FPS4Lw2?c`-w9p1ZvmxB9%)-gXT}-g&=9w2<#$)x0bi>d;&9DhD4Di~>Y~*e?Y@ zy^DiKiPe(=IJ2ymss1iLwLf3oH_2oEZ9t`xMass}1DJqTAoyEBTky6wXSL=I|+;y3#kh}P5$VCK+bY^>H;bclrr2+3} z0qWpD0yO9@KfjJoo&NPKzajtI$D1q0qU7p?@i7&I0-XR)R7|H$1TfCX{15>f#$;K& z;2+kYNm3>hK~R>fEsKV~@*4w-iMrgoSkH})vJJp)?cZ>M`H^k2C_x1nG`+(LXQWZye>f zR889G4Bo3!%a?*`6C(a7J^c9F-RDWU=z>BIZ~*H?L11??2S#EiH)2>=&5U--s2vAB zhEXB%$=`_ivteViDbV;FMw7E~gN$k>zO9`H{Y#WDT>G0_H+O7!5_<>oWB&cQY#T)H7Z>7(rr)>P%^qj0c|+UR|A$lA#?=`|6ET9N8d&z{(je*^!RH_Ma{ zn4{YNI)~ya+g-kBE*M1g_HTcdiKEjKbI92Bx92B^W|EH&{TIJo0h$C4HitJ(xg2kZ zMZ;-QJ&2%fXq6wIxqOIMr#ave8a5^G^g>QopYi0fh?t6Ar^fZ{nOQ52y(;txwm&Rb zzv&!DELTZ&7!Bou3(S4?DszlXRRmrGim;d>gFA}HS8+^-+J>A?48Nxgmi3kW&8&9I ztnRcG;j3Vv%zNURFW7vzFLJOHE|1&2`zn)K=)Vf$yPSLdc9m{-r%%_OlxrhS8}4QrP#(OnZf0{kU!=>~4AwnUxTX0J%K z2bKk>b`p6|Wv;ZMBV*WE@PS{^=ua0qiod<2tVKu0?MuuhI=4D({~M*E73cHr6pC&X z&B?v(=M^aXnxC`XlUSYa(%XI3u9?QYiG!uL}J5UaZS$jG9G@qyL|bgl}b!sT@d z&i^4 zYO;W6R=oANSrpPA;gIE_jAjuUiM8Y1jo;TM19O5>N{Kb?y>X`!KW{Nz7S zp%3(OG|AXSDZmx$%#PJ-u&BeW!WbFon9(v5fAMVIlB-P{hasEjf3myQEei=(kuU%<8gIKhq9 z9%v|{8=PEAlXpVgjYG@(`!6y2qm{AM)8@|OMB%Mu>aBEAQ~$&FrJKv3Y==8e^bjh(0|54kHPntK=29RBPfh16~WK=#h$uD35Eu$*(##g)NrToD!fhY z#*#fXT1@gh0tG8&1*%_<@qp9VxLN!z5{68N?>|FqY*M z1lHk}luF~UDqB@MmZ6j@Xk{AA8?P~x7Bcbv->VE#15tJ6_j4QfUlTe{o&2_D1Vf+} z`UY8r0m3r9jU+akuUwlTEyI5nJ_9lc|B(@KJbd74XC0CLsk7pI#Jnkf89d@Xs0xa{ zbe42}!eJ<(bl%)J)EUUx2WH;izB=rKl_#9V5*kiR#--W+<*%#n&<_glL#u{mBW%V- zxwqDk?*73tqrjWrszvC4Q1lQIWsgT~5WUKVqBPYC$-gbb_sy-m=*xi$Jyb7xMM#u3 zj-B(n>;LJ5&{s^MtdEaZF?ObXRBn>8b(E&|4WvD~`R(D2V);AxzB;xvDpCP_ZFV}2 zihCDG?rbX0t%?s`{1%c@JNnkJ{@G=FAGZu)RLHP{nGfXp)^h?~7JKs`0(FJBxk0OP zjMvEFul}G%BKI`SHnyq_55Zm@HNtI@N6vK6$M5=6g4bf3hy!cxvxa=On*` zC)l+WtPKqo`0=HpYX33wrJ0!6j<;I^lev&h-j<%)c7*Twe6TD>;5Jw8lEh7nxU7S9 z^i*T(Fk+r@b?$0Vg*-V0TcIZd%^+k-f3RG~LAae8N3s<2`^6rC3 z9^IJKRsVig?DvY5wykt2t&f?QtK~AU1o|jCtuf=Pe0Qc*94-(ZlPsi@8At!E*JH4= z=HPqWH-_Q;8yj~c1;3*0vy{??OvuHu7p> zHOP2P*jFY$6lV`_X)Zg8-4duCr@>%qm%@Nf?6j$G1LNen3Gexe#DvK}d0j<`ptagp zA5!;+C~0~8k79FZ7*s^`80o;nHr9aH4*`t7gf*%57J_&%_2MA#q8{dM?H||0t_w#s zB0mT?noNh#{wTbZ{+w*vsLB;5+Yza~8pi|SdoZBC-v(NTW zo1FEccS(}jTt=m<2{1(-nHuLHQ#*AnT!(vjm%X~0`&IuX=r{!iGjAWj$PyjJ-(M-X z)%}XW4!tH|eHd}bQU6ct<*r?6Ek(%n-i6gW5b*`Y6^!HP8tx(D#{s5OQtK4t2q*uQMyHiZ!^%#oV^ z{aX(^NZ=%F4;~WWKvSoIVTB_}ze@V*`X^$DLXGdy3&6a!xH-Mubr6qi?Rh=~;UD6O z6U;7uxhZ4VHvurcrxDf@oH@rINJ+$ao|X_~GO54Lyg~+!WL{r<>#FO`a416X#NrZt zpX1l98=tAQq(-8tPp(P}q`%LN9Tv#k&s@LfI?Kia@b6{3f659gsCb}7BagQ=AVbeU z=Xj9WKM2pu@J1hD3RU}zef$IbFLEauAgP-OoLHN4b=-siee-_}j*HuzF?3s_vuVsj zHWtgu7;vA?jBiJp8%ogi@bGjE`JiVg-qfayS_7s<+jZ0?r#bzyBmMbnm&Y8vVH&Sb z;^kfMFZw}0#G7u6EJ29+W(w1CEg za-qs}XCgITTAIY9R{+kzzj_cf3||He6*AjFVMZGuQiAcJ&%8x|x;Fq`^lj=x+x~Im z{>!(wHEqwr=yf;);N+Fr{TBBh#ny-X2~>Vgn=iQehl0^zf6qQh8hK?qaE%z7UE*rn zI8RXb*k>}S_xJV#y{!nmmM`T^V)y%{XINFK10m>a@@mf^J%QqZkXOM#(KI@xnS^`| zC7GmJSqavLc6+|$n8fjBauj4=tk$c700G2Z7t?=UqN4Gf*q?R1d@&VDI@QTZfrTg4 z4Nochb2)l2W^6_u$+jS&Dp(8DixUIW^3^{K6k6;g;ar!P+{ zw~1TnZJyCi$0?HdvAB^9<^MDKsBB--&P`V;nUt;Y9J8z2pVL(3e<=S z0zRVIKXVM8Frb;U*CQgUdZ5@3Bm%DQVH`XenecMe4Ydlr{Ov_(5O=`xi?(v|f%C^h zuQHWLC2dz~Bchksg0@&v-#hP(m0tXn{3Yqzz0-%AUkTW-+N)F<`Zp*W1HgznzND zq3H+>X4ziE@SM~6axXl{)v^7#$MLMXxDqS``P6X8skCT%fMPE>^zK8v-5RZbp_aFY zQ}XmOmr`6-I!|qcg%J9uvE3s3RZXGKwi==LYe_N(UmH=Sv>$7xe5HKzh>ANaa3vV& z2w;aiqgyjlQ-d+rjqez~i(3wzSAF_Hyde_9*0tP(j3}IGx{3VVtRU|^5e?O!huOfS>FU*rucd^xVe5)FxIOP;JCzd zz@BLRTXo>5V~bn+5x2y};PN9%pN=GBA56Aa#xS5wN&H*PD~jSx>U;#75OcgBLfh!g z6Uz;TYZDVA<6Z_=y&Xf6L=t+u4g}hLt3?A=*KY1M?pO0Z!oy~^M>Ux5w*u%Za<1Ho zkO-LkYfl&-S%89%U*4iA^q9!O-0ksAd?NiGRwrp+>@$!u$?SZY>~V<$uO7gRJ5c~W zw8|C@=yOH1zUu|iTjvQl2=(7Wd+`0`3q1!5T+fv#tWXl@7|@D;PHktPFS+=w)G_zM zsosh@@`>iPugjaWAoQ(_y2ScsV$9=_OWOmB0ocU)GS)^4BDzHV=2|@Xdhk>hnI#tC zVe-(v7>YzyA?5WYBH1h=D6CSmyQFc93i5h;G_?HQTi5oEOGz6a;^DCPmHT76{rxAc zPcc_R;5hcd=7vrr*lT1L7vvGce+C0fs;Ku-y4V%Xkpz|HV|^?{mKN!_nJcL0egYou ztH*E`&9?JkYWj9QqwvS!KYV|uL7tLOj*>nzfG-;fjf)sg_7V9#{j}$&j*LVxOb9P! z6uZ(dAQ;DzEL!I$BoA4M0V)IyLV*udPO<{ZXgs8_8CW?^2(g&;m)bIf<@G4Orcwi! z8nf_NFS5MwD;#Z3S^`_@6Zf6b&%<7Vh2mw8v*Xc8OynpIdTesJXRw#!T@Dfxu=Mv> z6y&3CXaH^;dUP@!--ZI=UP7b|i)4@U09(p63~C*VjQmzXvjnD1C$>G!}-|9fM zijsv!E5$FKSjQuzgOkrpmOVI3a2C))o7h}|=+3);sg83(Ij%eScHk`Ja~qHo(gueO z5B$}|i8$5IxJsByL*bTxDceQrN+Pq_3#9h;^ywKU_IV?@a5yNmobv;wHgV5#`Ff$6 zj6Ke#53TG^)f;iFrMLY=3!l`Y6&8;ls2)4~BD-QU0KWI=4`Pz+{40Y7*CFX{OdIr2 z0bEb>{0|Y{aRxPoN4FU7zqz|+h0T`C9jOHNFaULoCMOEin+ou- zGS7Pb#M=Era2mNYBaaa?3@^7%X6NxC5sLOfubBzxq4?lP3k%ki-atC|`u)(mQ`>Lt z-!uhVRn-b*A@He2-6Lpa?sA*OsiwNx+%nHde+l#a1VA3F7t)&nR%p@u*@0^g=!nSn zuoeiti?(*iZ|U%fLKtAgNjLBO`>QM_ltQ;aMy`c7qoPx}pA-0}j$YIXhWkJ;SqLjf zD1HQiN8!O%2a2lH&Y`r`^={uzdTW`}{x#)`_o}c;zuQ_^Q2lkPrld5fE4%TL-+>W_ z^6-edd4Dwj7u{#OoLh#0zwt0&KiohIpu!Z92{*GfEA`zX2MtsULO^*KbP$m%6b40q zIzE(vUKBZkNhj!EY#DnxKpnZVQ3yeZ7Z3jzoJ`fB&1yz0jmlQ5P&*e4H#gkj0iSM= zo>URoD=2asjC{-%)4UT0)AoBjS$Qm<(VpRegQyFbOgoQrek^r%;+5Omk&NaDqA8^P z>oMlH=WAYM%o<~EY4hv1;oCZD@T2fOS)k+5ptG2IpZAXVoCCm^Nku_oJs-deS0F3m z2Tr((eChjcX;Ng+!y#Hwd@U6^bTB&W(_Q-q$5LX6fAmGOpg?LFrj58l&(CGT;1+&5 zW@SrFUSee4SU^{L=l#%4!9X)%B?eUsS0(sQw$BS#2_oAN zL$+8C1)hy3w2J%6rwdCVL5r_Y?s~UZ%p^hqW#leN|69+;oqG~}B73Gc9ftFsm1-pF zg(m^mnXM}^!f6$IE$TNM!v>`q?w9_OmDN>_x{p$-U9&23ve15VWR-VKTc5-3TTe;` zjw(hj3C}m0l0ZphtC19-%$xognGpWu0?d}LNYh*(a}N4Rt)dR3L5iWx3y`_=h9UaX zHhW_B+i*p5)D{!iXSAFZ7(4|gDGa1MVSk{u-c`jORZN+oar)==%4X-S6e4krz^Qu`18eZ1AT0t}r8(o*q*Ivi>fs zv~Rjk%Qt@$Cw50CH`zCN6esn*@CUy6SbE}Ln@$8U6QBXj-UkQ=51GgafQJYzg@Alc zSR*BbfdB&bsLhnI0^UMvflx9iF3cLaiyelMoDDWogEruJIEz>_Q>_%%`pkUTE$|v{ zX^o7#dzOHIJUJ=gH}Ys2%4ij3&~q>maWI--(n0}w_M`6Kysu|WK0<^d`)cODzUg{~^IfdUQz|OxHSU!`Li}DkhcoFms;0SE3TXuS)cFqX?%Xtj zPBU`9951^r*h7;arGi6uYcZf&MaSOr2SSHHFQ%R#sMkLpdToXOut}QulPEj^4fKhO zCkHyJW~s)G-vG8e$3r8`G7tL4?Y^TI*qL;^+L9hJA*9n0;_#_#gcj|(tt`UHDR4P_ zRBrnbtiMOB%}sEsrv3z5mqpQ61-PKxvC4FrG&NEu0sS_TC+jXg6DQjYsUd&M}3 zfP&fl+e3?wpWV(%o1B@`Uh3<)(NdmQNTQk@5u~lB2ecHP><0kmUluV%08Z#@G&~wG z^k*uo3Qdx@a!SVgr6o!x4sla2xYpu5HnNTvKeLV3;Nc?dst7O2JA?&b{j-ee;scU6 zzdsG~n6tG!t_6{rwtU^<`2qlzq0$`>LxR&`kAmp=S_WC`gkzY+A@Wn@3B6;7!gf?T zOz~BPAt+Z!^MxHkMf<1pnHFFzPcN2@gWp7d6cdAkUKs>5&u+KQWG9zb+SiJ<1VEAW zVWZk+3}VNW{Q$!lBip&A?K8XLQg56s8W@XF6R!2yuo48lP*nOp``>mSdXc}y(Dv7IPw2f_4h1MBxp&PZ}_AyAx zP&XDuD>V0hTgjh4ZTt~oRC?)r^0+=FPzdI!FaU3G$Lq;T9q7xSp?|!6o| z=S8Z&-)c)ueGT473MmIz+j&mom6ru+tUS*+j^|*fKiK%rYo42tO-PW6bXPnem4DiLc`uF#)cR)z9BmLQ> z#1&U?^@RMmZT8%1uHJX3ifJr7Q$v2G=EOZm=y~Y6-ex1$KUbHK%4Lz!p+nTx z8h;xkQy+Tis|Rzk^pmAXk>!m&%i8_O=#JzI;37~HYjm6@h#0nmIU!?H!agI7iot5n z?p$X4LNq=Kt980-boeanAm5~;XdDVDbapQr^*;KGOfbFC$M>~5Fb{zKSpG03XyWy1bx}$xFt_LeGSuL<3@E0aanhm`D`KvJ}OedL)FnadO$@ z!$89jxG9-p@zelx9FMZ2p_CvhQ(;uPy%Va->-fdnc5=%r1B>TSKFeDsf9BYGFIA*Eeh1{--A2>q-jJ&uzb`?5sbImK1cq9k>5RYp0?Zzwzq0y`ZMWV z)Z`pQT%DAHAg-z+%W9IG_o_{_A5CT)il)Jo>V_MNQ{Ewa1tvoc$rs;0BB!#;=kl;% z+L3daHFv!$a_wk2I4mD@!a*BA87%svN&F90`cn@UIm!b}4~T8h@%}0}MsC2!;}NR0 zLkjKPh28J&(<~4>nXXBP+u?VLV@g=kX-h^5eg6>AX>7Z~9ZQK$oE*iah))74X-Sof zln#KW$c$goe+9CL4JGigiWC|7JZUzZ$NXH@LIb~e&mIb<-`l!Vr+h48#DBu^M@8{| zbv~bX_gB*|ZBq_RH&{=RVglrSSmx?I8UwZMUVd9cw(4;uxB}{YJfo-^Ef&!fx%jbG zLIAykoExMKB1|n-XalqD#2R%bBAaFZ44=m;(K~1q*c>!Pa#QV3X_NE1&LsN10YcE~ zTof-KXT5VYmGn4mt7*YyX47G}*fJEA4P1@hem}Di?~Cj1C&epdOdzNy-IP|_<@JIk z(hSebQ45}|J0ig?-r-ezxlJ`or6MSVM=LDj8utY+4i;h7{!6K!RRS!YTR(lx_&MpA zR4A0i>32aTZ2?36_7_FxP(1TqX;He{y%#vCV3qXxWDgh~1fA;h73;^R$O&;8zun!5 z@mb_FSQZxAGv$V;jQJ1D+nJLLvD_Duaas(%tvqGv?9|Ql#+f!Dm+6KeyZDHDY|4V` zIb9BccXp5J8!DhrN!;|6G$Wk$w)nf=Xde4j+Ly_sMii-OQ=A8wmMFmz!Q zW5>n%GYBG|3pd`4Ak!Ne@*#L{NftMDva1-9*_d((jr%=0dnH}y_4d?ZwfjR`AfL0B zvYs3Ai3CPFt~YOo+qq*>uuMO!!<4)76rBIrV&A{WDUlk5#X1pLqbKZf$3bqhy@)M= z_<@UJLd%;$3Zt>azxO2fFYLWzO3SX|h{8lxp2<~2+r#%iNl%xWQ?1uwNL8k2?Y^Ly zbrdn2BIS2C2!>4`Yvq<+%W#_)F2^K^u+0@Eto|?Rr9Sx-YP(TD_c5-X2mTS88)R8f z*WH|iz57{pbw`D~dMkTy1q|OE;+IsoQLt=5mp#V>7<~$scp|>i!fLa*K9>h>>I1^_ zePin95L_DTXf%v-2n~(VhMhvYKBt&1NQ~%bS1{O2qOX{U84Ivb+eKC>=pm@6Zar zenRr6g(0bujStoqTz`v${KW(eBbupX-C|sZdt6GtS7GZ-)SN!MM9i;ZD8G&VSvw%j zNX?i)Ls^GQnSfiOfTV(=^{UvDM9l!gAq5XHhj+QbZE3T%`Z(liN?5C%2ikZQz{0`r zHf%Hs&IO^uTtVDnX)ZHNI*ZG1gdeTGehc9Yccz$S0~8{fwfO;J$L0ZhbFi)hL-GTJZ_d0Rw1TSjbEVQ_ELbF}j- zu7X+>yWg~a%5F!4N39WBZ-sd}TT7p9C2wwf<(fkfr6E%Bx?@4I8$ngkyr5e$_6X2k@nFLwu7_$Vq?5CH36ow*5#h?+%MCY^jH|NPwm1SoO- z1|q>kMMUJZ!LZ`lKM+i72)mLj8wwq=SUyd<7W^?(Js?0ncytf>Jv-4u9j28^%}zZP zC*16$+Q#7Kaq}+6LAtG$r^oIlDv_DR znHefPh;ix<@A#joK|6!IWu>M3AQ-wf@$}Z#Xoq4_rr$`aytW#D_D9_=DdX8gZys`- zNe4!#ml7ogY9viyBn@gLNbdmLX*$Qr5*49^8EKAJr=cj2ny#(=ZkV`PG<FnH6Ua|TJ~T`qH>yIJk{?C$X^5UH56@)?LP8OXM1=|m@&Xlvobd6wrf>{?AkI& z_SU=L!?xOC@5fplc6vU!8Eq!eE{ASVm>SJ9GclFx8_w%>uDam?y{sQ3*w}a*tExIQ z^z}&qWLbQK@Dv0D1?SO52nh*Ob8~WzNaS}pImc|p>TW9gEVaIx)M3laIWaC;3JeE! zoAZ)mH$l+(&{M7hyKDK$i6i?UFR)Rw@!54%Y`Xi390Zma+>$D&puu+Q4iGULl*x$t zK+tohyf!JhP06AQA0spKXGDy5_Ym3($PmkGI}7D*Eib(}`N)e4)lzYMllOCKZqF0N zrYQY#bab>f>c?m7Zu0>=TCpg&KZm*srIl9pAv5ymiSHHB?m%=Lk=J$llm7PFnnBCl_fq2vFub07+(vM-W-vO$0_Wr9i4z_!)LDp0o5 s*I)5mhTlx}^+l7hOVn}%wBgS&bX!Bu{zRIH!e2mHUPG?_m1V^L0QGiFJpcdz From d6a2061cf5d361f02362441cf0318f7e1063a5ea Mon Sep 17 00:00:00 2001 From: oihane Date: Fri, 20 Feb 2015 13:43:32 +0100 Subject: [PATCH 06/12] [MOD] Trigger lines instead of test --- quality_control_mrp/models/mrp_production.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/quality_control_mrp/models/mrp_production.py b/quality_control_mrp/models/mrp_production.py index f0cee7251..bb50d1387 100644 --- a/quality_control_mrp/models/mrp_production.py +++ b/quality_control_mrp/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 96d03314da25ddb8d490d93373b029d396a837b2 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 25 Mar 2015 20:48:43 +0100 Subject: [PATCH 07/12] [IMP] Expand AUTHORS --- quality_control_mrp/__openerp__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/quality_control_mrp/__openerp__.py b/quality_control_mrp/__openerp__.py index 3b6060d7f..bb9b6d7f7 100644 --- a/quality_control_mrp/__openerp__.py +++ b/quality_control_mrp/__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/12] [IMP] Improve some README files --- quality_control_mrp/README.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/quality_control_mrp/README.rst b/quality_control_mrp/README.rst index 22a06a73f..8ebfd491f 100644 --- a/quality_control_mrp/README.rst +++ b/quality_control_mrp/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 a265d0c144f5987dae8fa9ee1e8ad911d154e96f 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/12] Slovene translations added --- quality_control_mrp/i18n/sl.po | 45 ++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 quality_control_mrp/i18n/sl.po diff --git a/quality_control_mrp/i18n/sl.po b/quality_control_mrp/i18n/sl.po new file mode 100644 index 000000000..600045945 --- /dev/null +++ b/quality_control_mrp/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 0a3069bb3a20e62bcda36979eb56d1a1f446b61d Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 9 Oct 2015 18:18:26 +0200 Subject: [PATCH 10/12] OCA Transbot updated translations from Transifex --- quality_control_mrp/i18n/es.po | 50 ++++++++++++++++---- quality_control_mrp/i18n/fr.po | 77 +++++++++++++++++++++++++++++++ quality_control_mrp/i18n/pt_BR.po | 77 +++++++++++++++++++++++++++++++ quality_control_mrp/i18n/sl.po | 53 +++++++++++++++++---- 4 files changed, 239 insertions(+), 18 deletions(-) create mode 100644 quality_control_mrp/i18n/fr.po create mode 100644 quality_control_mrp/i18n/pt_BR.po diff --git a/quality_control_mrp/i18n/es.po b/quality_control_mrp/i18n/es.po index 890fdabda..5110a9a94 100644 --- a/quality_control_mrp/i18n/es.po +++ b/quality_control_mrp/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/i18n/fr.po b/quality_control_mrp/i18n/fr.po new file mode 100644 index 000000000..0613425f0 --- /dev/null +++ b/quality_control_mrp/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/i18n/pt_BR.po b/quality_control_mrp/i18n/pt_BR.po new file mode 100644 index 000000000..060b0ceba --- /dev/null +++ b/quality_control_mrp/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/i18n/sl.po b/quality_control_mrp/i18n/sl.po index 600045945..21dc60e70 100644 --- a/quality_control_mrp/i18n/sl.po +++ b/quality_control_mrp/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 75d638db0a7074c498b2b55a5f66d41f00ea0718 Mon Sep 17 00:00:00 2001 From: oihane Date: Mon, 26 Oct 2015 12:31:55 +0100 Subject: [PATCH 11/12] [MIG] quality_control_mrp: migrated from odoomrp/odoomrp-wip --- quality_control_mrp/README.rst | 42 +++++++++- quality_control_mrp/__openerp__.py | 46 ++++------- .../i18n/quality_control_mrp.pot | 44 ---------- quality_control_mrp/models/mrp_production.py | 4 +- quality_control_mrp/tests/__init__.py | 5 ++ .../tests/test_quality_control_mrp.py | 80 +++++++++++++++++++ 6 files changed, 145 insertions(+), 76 deletions(-) delete mode 100644 quality_control_mrp/i18n/quality_control_mrp.pot create mode 100644 quality_control_mrp/tests/__init__.py create mode 100644 quality_control_mrp/tests/test_quality_control_mrp.py diff --git a/quality_control_mrp/README.rst b/quality_control_mrp/README.rst index 8ebfd491f..297ba3160 100644 --- a/quality_control_mrp/README.rst +++ b/quality_control_mrp/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/__openerp__.py b/quality_control_mrp/__openerp__.py index bb9b6d7f7..c88440fbe 100644 --- a/quality_control_mrp/__openerp__.py +++ b/quality_control_mrp/__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/i18n/quality_control_mrp.pot b/quality_control_mrp/i18n/quality_control_mrp.pot deleted file mode 100644 index d7bb4f7bd..000000000 --- a/quality_control_mrp/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/models/mrp_production.py b/quality_control_mrp/models/mrp_production.py index bb50d1387..3455790f9 100644 --- a/quality_control_mrp/models/mrp_production.py +++ b/quality_control_mrp/models/mrp_production.py @@ -3,6 +3,8 @@ # For copyright and license notices, see __openerp__.py file in root directory ############################################################################## from openerp import models, fields, api +from openerp.addons.quality_control.models.qc_trigger_line import\ + _filter_trigger_lines class MrpProduction(models.Model): @@ -42,6 +44,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/tests/__init__.py b/quality_control_mrp/tests/__init__.py new file mode 100644 index 000000000..bb13e6fe1 --- /dev/null +++ b/quality_control_mrp/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/tests/test_quality_control_mrp.py b/quality_control_mrp/tests/test_quality_control_mrp.py new file mode 100644 index 000000000..7aefdabd9 --- /dev/null +++ b/quality_control_mrp/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') From ba059c5572924fc5a0154d856488bdaf0fdd37af Mon Sep 17 00:00:00 2001 From: oihane Date: Wed, 18 Nov 2015 16:55:01 +0100 Subject: [PATCH 12/12] [IMP] quality_control_mrp: required changes * Limit access by groups in views * Use api.model --- quality_control_mrp/__init__.py | 5 ++--- quality_control_mrp/models/__init__.py | 5 ++--- quality_control_mrp/models/mrp_production.py | 15 ++++----------- quality_control_mrp/models/qc_inspection.py | 6 +++--- .../views/mrp_production_view.xml | 2 ++ quality_control_mrp/views/qc_inspection_view.xml | 16 ++++++++++++---- 6 files changed, 25 insertions(+), 24 deletions(-) diff --git a/quality_control_mrp/__init__.py b/quality_control_mrp/__init__.py index ad6c8186c..7a3b0b9a1 100644 --- a/quality_control_mrp/__init__.py +++ b/quality_control_mrp/__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/models/__init__.py b/quality_control_mrp/models/__init__.py index adf4739b2..01f09e84b 100644 --- a/quality_control_mrp/models/__init__.py +++ b/quality_control_mrp/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/models/mrp_production.py b/quality_control_mrp/models/mrp_production.py index 3455790f9..fe12c123f 100644 --- a/quality_control_mrp/models/mrp_production.py +++ b/quality_control_mrp/models/mrp_production.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 from openerp.addons.quality_control.models.qc_trigger_line import\ _filter_trigger_lines @@ -21,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( diff --git a/quality_control_mrp/models/qc_inspection.py b/quality_control_mrp/models/qc_inspection.py index 7dcf425c9..15c9a6ede 100644 --- a/quality_control_mrp/models/qc_inspection.py +++ b/quality_control_mrp/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/views/mrp_production_view.xml b/quality_control_mrp/views/mrp_production_view.xml index 8e44eb648..2b4e9b8e6 100644 --- a/quality_control_mrp/views/mrp_production_view.xml +++ b/quality_control_mrp/views/mrp_production_view.xml @@ -24,6 +24,8 @@ mrp.production.form.qc mrp.production +