From c6bc155a7008f03c0bd91e34aa631f18bfbc17d6 Mon Sep 17 00:00:00 2001 From: Simone Rubino Date: Wed, 27 Jun 2018 10:09:05 +0200 Subject: [PATCH] [MIG] quality_control_stock: Migration to 10.0 --- quality_control_stock_oca/README.rst | 70 ++- quality_control_stock_oca/__init__.py | 14 +- .../{__openerp__.py => __manifest__.py} | 17 +- .../data/quality_control_stock_data.xml | 34 +- .../i18n/quality_control_stock.pot | 60 ++- quality_control_stock_oca/models/__init__.py | 3 +- .../models/qc_inspection.py | 58 +-- .../models/qc_trigger.py | 7 +- .../models/stock_picking.py | 38 +- .../models/stock_picking_type.py | 12 +- .../models/stock_production_lot.py | 34 +- .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 3 + quality_control_stock_oca/readme/ROADMAP.rst | 1 + .../static/description/index.html | 432 ++++++++++++++++++ quality_control_stock_oca/tests/__init__.py | 3 +- .../tests/test_quality_control_stock.py | 45 +- .../views/qc_inspection_view.xml | 144 +++--- .../views/stock_picking_view.xml | 132 +++--- .../views/stock_production_lot_view.xml | 132 +++--- 20 files changed, 861 insertions(+), 381 deletions(-) rename quality_control_stock_oca/{__openerp__.py => __manifest__.py} (62%) create mode 100644 quality_control_stock_oca/readme/CONTRIBUTORS.rst create mode 100644 quality_control_stock_oca/readme/DESCRIPTION.rst create mode 100644 quality_control_stock_oca/readme/ROADMAP.rst create mode 100644 quality_control_stock_oca/static/description/index.html diff --git a/quality_control_stock_oca/README.rst b/quality_control_stock_oca/README.rst index 116962b20..5fbc24490 100644 --- a/quality_control_stock_oca/README.rst +++ b/quality_control_stock_oca/README.rst @@ -1,57 +1,85 @@ -.. 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 +======================= +Quality control - Stock +======================= -=================================== -Stock extension for quality control -=================================== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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/10.0/quality_control_stock + :alt: OCA/manufacture +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/manufacture-10-0/manufacture-10-0-quality_control_stock + :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/10.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| This module defines triggers that creates inspections when stock moves are done. It also adds some shortcuts on picking and lots to these inspections. +**Table of contents** -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 - +.. contents:: + :local: Known issues / Roadmap ====================== * Put trigger in all languages. - 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 `_. +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 +~~~~~~~ + +* OdooMRP team +* AvanzOSC +* Serv. Tecnol. Avanzados - Pedro M. Baeza +* Agile Business Group + Contributors ------------- +~~~~~~~~~~~~ + * Pedro M. Baeza * Oihane Crucelaegui +* Simone Rubino -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 http://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/quality_control_stock_oca/__init__.py b/quality_control_stock_oca/__init__.py index 15f6ce448..adca769d2 100644 --- a/quality_control_stock_oca/__init__.py +++ b/quality_control_stock_oca/__init__.py @@ -1,15 +1,15 @@ # -*- coding: utf-8 -*- -# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza -# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# Copyright 2018 Simone Rubino - Agile Business Group +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import models -from openerp import SUPERUSER_ID +from odoo import api, SUPERUSER_ID def post_init_hook(cr, registry): # Create QC triggers - picking_type_ids = registry['stock.picking.type'].search( - cr, SUPERUSER_ID, []) + env = api.Environment(cr, SUPERUSER_ID, {}) + picking_type_ids = env['stock.picking.type'].sudo().search([]) for picking_type_id in picking_type_ids: - registry['stock.picking.type']._create_qc_trigger( - cr, SUPERUSER_ID, picking_type_id) + picking_type_id.sudo()._create_qc_trigger() diff --git a/quality_control_stock_oca/__openerp__.py b/quality_control_stock_oca/__manifest__.py similarity index 62% rename from quality_control_stock_oca/__openerp__.py rename to quality_control_stock_oca/__manifest__.py index 21c203e4d..f47f852c0 100644 --- a/quality_control_stock_oca/__openerp__.py +++ b/quality_control_stock_oca/__manifest__.py @@ -1,22 +1,21 @@ # -*- 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 +# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# Copyright 2014 Oihane Crucelaegui - AvanzOSC +# Copyright 2018 Simone Rubino - Agile Business Group +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Quality control - Stock", - "version": "8.0.1.0.1", + "version": "10.0.1.0.2", "category": "Quality control", "license": "AGPL-3", "author": "OdooMRP team, " "AvanzOSC, " "Serv. Tecnol. Avanzados - Pedro M. Baeza, " + "Agile Business Group, " "Odoo Community Association (OCA)", - "website": "http://www.odoomrp.com", - "contributors": [ - "Pedro M. Baeza ", - "Oihane Crucelaegui ", - ], + "website": "https://github.com/OCA/manufacture/tree/10.0/" + "quality_control_stock", "depends": [ "quality_control", "stock", diff --git a/quality_control_stock_oca/data/quality_control_stock_data.xml b/quality_control_stock_oca/data/quality_control_stock_data.xml index fc75ef6e5..3b3c58555 100644 --- a/quality_control_stock_oca/data/quality_control_stock_data.xml +++ b/quality_control_stock_oca/data/quality_control_stock_data.xml @@ -1,21 +1,19 @@ - + + + + Stock Move + stock.move + - - - Stock Move - stock.move - + + Picking List + stock.picking + - - Picking List - stock.picking - - - - Lot - stock.production.lot - - - - + + Lot + stock.production.lot + + diff --git a/quality_control_stock_oca/i18n/quality_control_stock.pot b/quality_control_stock_oca/i18n/quality_control_stock.pot index 462cbc519..a638e3edb 100644 --- a/quality_control_stock_oca/i18n/quality_control_stock.pot +++ b/quality_control_stock_oca/i18n/quality_control_stock.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -14,50 +14,50 @@ msgstr "" "Plural-Forms: \n" #. module: quality_control_stock -#: field:stock.picking,created_inspections:0 -#: field:stock.production.lot,created_inspections:0 +#: model:ir.model.fields,field_description:quality_control_stock.field_stock_picking_created_inspections +#: model:ir.model.fields,field_description:quality_control_stock.field_stock_production_lot_created_inspections msgid "Created inspections" msgstr "" #. module: quality_control_stock -#: field:stock.picking,done_inspections:0 -#: field:stock.production.lot,done_inspections:0 +#: model:ir.model.fields,field_description:quality_control_stock.field_stock_picking_done_inspections +#: model:ir.model.fields,field_description:quality_control_stock.field_stock_production_lot_done_inspections msgid "Done inspections" msgstr "" #. module: quality_control_stock -#: field:stock.picking,qc_inspections:0 -#: field:stock.production.lot,qc_inspections:0 +#: model:ir.model.fields,field_description:quality_control_stock.field_stock_picking_qc_inspections +#: model:ir.model.fields,field_description:quality_control_stock.field_stock_production_lot_qc_inspections msgid "Inspections" msgstr "" #. module: quality_control_stock -#: field:stock.picking,passed_inspections:0 -#: field:stock.production.lot,passed_inspections:0 +#: model:ir.model.fields,field_description:quality_control_stock.field_stock_picking_passed_inspections +#: model:ir.model.fields,field_description:quality_control_stock.field_stock_production_lot_passed_inspections msgid "Inspections OK" msgstr "" #. module: quality_control_stock -#: field:stock.picking,failed_inspections:0 -#: field:stock.production.lot,failed_inspections:0 +#: model:ir.model.fields,field_description:quality_control_stock.field_stock_picking_failed_inspections +#: model:ir.model.fields,field_description:quality_control_stock.field_stock_production_lot_failed_inspections msgid "Inspections failed" msgstr "" #. module: quality_control_stock -#: help:stock.production.lot,qc_inspections:0 +#: model:ir.model.fields,help:quality_control_stock.field_stock_production_lot_qc_inspections msgid "Inspections related to this lot." msgstr "" #. module: quality_control_stock -#: help:stock.picking,qc_inspections:0 +#: model:ir.model.fields,help:quality_control_stock.field_stock_picking_qc_inspections msgid "Inspections related to this picking." msgstr "" #. module: quality_control_stock -#: view:qc.inspection:quality_control_stock.qc_inspection_search_view_picking -#: field:qc.inspection,lot:0 -#: view:qc.inspection.line:quality_control_stock.qc_inspection_line_search_stock_view -#: field:qc.inspection.line,lot:0 +#: model:ir.model.fields,field_description:quality_control_stock.field_qc_inspection_line_lot +#: model:ir.model.fields,field_description:quality_control_stock.field_qc_inspection_lot +#: model:ir.ui.view,arch_db:quality_control_stock.qc_inspection_line_search_stock_view +#: model:ir.ui.view,arch_db:quality_control_stock.qc_inspection_search_view_picking #: model:res.request.link,name:quality_control_stock.req_link_stock_production_lot msgid "Lot" msgstr "" @@ -68,30 +68,23 @@ msgid "Lot/Serial" msgstr "" #. module: quality_control_stock -#: view:qc.inspection:quality_control_stock.qc_inspection_search_view_picking -#: field:qc.inspection,picking:0 -#: view:qc.inspection.line:quality_control_stock.qc_inspection_line_search_stock_view -#: field:qc.inspection.line,picking:0 +#: model:ir.model.fields,field_description:quality_control_stock.field_qc_inspection_line_picking +#: model:ir.model.fields,field_description:quality_control_stock.field_qc_inspection_picking +#: model:ir.ui.view,arch_db:quality_control_stock.qc_inspection_line_search_stock_view +#: model:ir.ui.view,arch_db:quality_control_stock.qc_inspection_search_view_picking msgid "Picking" msgstr "" #. module: quality_control_stock -#: model:ir.model,name:quality_control_stock.model_stock_picking #: model:res.request.link,name:quality_control_stock.req_link_stock_picking msgid "Picking List" msgstr "" #. module: quality_control_stock -#: field:qc.trigger,picking_type:0 +#: model:ir.model.fields,field_description:quality_control_stock.field_qc_trigger_picking_type msgid "Picking type" msgstr "" -#. module: quality_control_stock -#: view:qc.inspection:quality_control_stock.qc_inspection_search_view_picking -#: view:qc.inspection.line:quality_control_stock.qc_inspection_line_search_stock_view -msgid "Product" -msgstr "" - #. module: quality_control_stock #: model:ir.model,name:quality_control_stock.model_qc_inspection msgid "Quality control inspection" @@ -158,8 +151,13 @@ msgid "The picking type determines the picking view" msgstr "" #. module: quality_control_stock -#: view:stock.picking:quality_control_stock.stock_picking_qc_view -#: view:stock.production.lot:quality_control_stock.stock_lot_qc_view +#: model:ir.model,name:quality_control_stock.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: quality_control_stock +#: model:ir.ui.view,arch_db:quality_control_stock.stock_lot_qc_view +#: model:ir.ui.view,arch_db:quality_control_stock.stock_picking_qc_view msgid "inspections" msgstr "" diff --git a/quality_control_stock_oca/models/__init__.py b/quality_control_stock_oca/models/__init__.py index 61f4c2b9e..87c70ccc6 100644 --- a/quality_control_stock_oca/models/__init__.py +++ b/quality_control_stock_oca/models/__init__.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza -# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import qc_trigger from . import qc_inspection diff --git a/quality_control_stock_oca/models/qc_inspection.py b/quality_control_stock_oca/models/qc_inspection.py index 68a48df47..1e79c5abf 100644 --- a/quality_control_stock_oca/models/qc_inspection.py +++ b/quality_control_stock_oca/models/qc_inspection.py @@ -1,41 +1,46 @@ # -*- coding: utf-8 -*- -# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza -# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# Copyright 2018 Simone Rubino - Agile Business Group +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from openerp import models, fields, api +from odoo import api, fields, models class QcInspection(models.Model): _inherit = 'qc.inspection' - @api.one + @api.multi @api.depends('object_id') - def get_picking(self): - self.picking = False - if self.object_id: - if self.object_id._name == 'stock.move': - self.picking = self.object_id.picking_id - elif self.object_id._name == 'stock.picking': - self.picking = self.object_id - elif self.object_id._name == 'stock.pack.operation': - self.picking = self.object_id.picking_id + def _compute_picking(self): + for inspection in self: + inspection.picking = False + if inspection.object_id: + if inspection.object_id._name == 'stock.move': + inspection.picking = inspection.object_id.picking_id + elif inspection.object_id._name == 'stock.picking': + inspection.picking = inspection.object_id + elif inspection.object_id._name == 'stock.pack.operation': + inspection.picking = inspection.object_id.picking_id - @api.one + @api.multi @api.depends('object_id') - def get_lot(self): - self.lot = False - if self.object_id: - if self.object_id._name == 'stock.pack.operation': - self.lot = self.object_id.lot_id - elif self.object_id._name == 'stock.move': - self.lot = self.object_id.lot_ids[:1] - elif self.object_id._name == 'stock.production.lot': - self.lot = self.object_id + def _compute_lot(self): + for inspection in self: + inspection.lot = False + if inspection.object_id: + if inspection.object_id._name == 'stock.pack.operation': + inspection.lot = \ + inspection.object_id.pack_lot_ids[:1].lot_id + elif inspection.object_id._name == 'stock.move': + inspection.lot = inspection.object_id.lot_ids[:1] + elif inspection.object_id._name == 'stock.production.lot': + inspection.lot = inspection.object_id - @api.one + @api.multi @api.depends('object_id') def _get_product(self): """Overriden for getting the product from a stock move.""" + self.ensure_one() super(QcInspection, self)._get_product() if self.object_id: if self.object_id._name == 'stock.move': @@ -65,9 +70,10 @@ class QcInspection(models.Model): return res picking = fields.Many2one( - comodel_name="stock.picking", compute="get_picking", store=True) + comodel_name="stock.picking", compute="_compute_picking", store=True) lot = fields.Many2one( - comodel_name='stock.production.lot', compute="get_lot", store=True) + comodel_name='stock.production.lot', compute="_compute_lot", + store=True) class QcInspectionLine(models.Model): diff --git a/quality_control_stock_oca/models/qc_trigger.py b/quality_control_stock_oca/models/qc_trigger.py index 5c0d7816e..2b08d537d 100644 --- a/quality_control_stock_oca/models/qc_trigger.py +++ b/quality_control_stock_oca/models/qc_trigger.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- -# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza -# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# Copyright 2018 Simone Rubino - Agile Business Group +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from openerp import models, fields +from odoo import fields, models class QcTrigger(models.Model): diff --git a/quality_control_stock_oca/models/stock_picking.py b/quality_control_stock_oca/models/stock_picking.py index 1583d9bd6..dcbb6cc56 100644 --- a/quality_control_stock_oca/models/stock_picking.py +++ b/quality_control_stock_oca/models/stock_picking.py @@ -1,37 +1,41 @@ # -*- coding: utf-8 -*- -# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza -# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# Copyright 2018 Simone Rubino - Agile Business Group +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from openerp import models, fields, api -from openerp.addons.quality_control.models.qc_trigger_line import\ +from odoo import api, fields, models +from odoo.addons.quality_control.models.qc_trigger_line import\ _filter_trigger_lines class StockPicking(models.Model): _inherit = 'stock.picking' - @api.one + @api.multi @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) + def _compute_count_inspections(self): + for picking in self: + picking.created_inspections = len(picking.qc_inspections) + picking.passed_inspections = \ + len([x for x in picking.qc_inspections + if x.state == 'success']) + picking.failed_inspections = \ + len([x for x in picking.qc_inspections + if x.state == 'failed']) + picking.done_inspections = \ + (picking.passed_inspections + picking.failed_inspections) qc_inspections = fields.One2many( comodel_name='qc.inspection', inverse_name='picking', copy=False, string='Inspections', help="Inspections related to this picking.") created_inspections = fields.Integer( - compute="_count_inspections", string="Created inspections") + compute="_compute_count_inspections", string="Created inspections") done_inspections = fields.Integer( - compute="_count_inspections", string="Done inspections") + compute="_compute_count_inspections", string="Done inspections") passed_inspections = fields.Integer( - compute="_count_inspections", string="Inspections OK") + compute="_compute_count_inspections", string="Inspections OK") failed_inspections = fields.Integer( - compute="_count_inspections", string="Inspections failed") + compute="_compute_count_inspections", string="Inspections failed") @api.multi def do_transfer(self): diff --git a/quality_control_stock_oca/models/stock_picking_type.py b/quality_control_stock_oca/models/stock_picking_type.py index 7010cf3ba..5acb3b8ff 100644 --- a/quality_control_stock_oca/models/stock_picking_type.py +++ b/quality_control_stock_oca/models/stock_picking_type.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- -# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza -# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# Copyright 2018 Simone Rubino - Agile Business Group +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from openerp import models, api +from odoo import api, models class StockPickingType(models.Model): @@ -10,8 +11,9 @@ class StockPickingType(models.Model): @api.multi def _create_qc_trigger(self): + self.ensure_one() qc_trigger = { - 'name': self.complete_name, + 'name': self.name, 'company_id': self.warehouse_id.company_id.id, 'picking_type': self.id, 'partner_selectable': True, @@ -31,5 +33,5 @@ class StockPickingType(models.Model): qc_trigger_model = self.env['qc.trigger'].sudo() qc_trigger = qc_trigger_model.search( [('picking_type', '=', self.id)]) - qc_trigger.name = self.complete_name + qc_trigger.name = self.name return res diff --git a/quality_control_stock_oca/models/stock_production_lot.py b/quality_control_stock_oca/models/stock_production_lot.py index aeff0ad90..1db874dc0 100644 --- a/quality_control_stock_oca/models/stock_production_lot.py +++ b/quality_control_stock_oca/models/stock_production_lot.py @@ -1,32 +1,34 @@ # -*- coding: utf-8 -*- -# (c) 2014 Serv. Tec. Avanzados - Pedro M. Baeza -# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza +# Copyright 2018 Simone Rubino - Agile Business Group +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from openerp import models, fields, api +from odoo import api, fields, models class StockProductionLot(models.Model): _inherit = 'stock.production.lot' - @api.one + @api.multi @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) + def _compute_count_inspections(self): + for lot in self: + lot.created_inspections = len(lot.qc_inspections) + lot.passed_inspections = \ + len([x for x in lot.qc_inspections if x.state == 'success']) + lot.failed_inspections = \ + len([x for x in lot.qc_inspections if x.state == 'failed']) + lot.done_inspections = \ + (lot.passed_inspections + lot.failed_inspections) qc_inspections = fields.One2many( comodel_name='qc.inspection', inverse_name='lot', copy=False, string='Inspections', help="Inspections related to this lot.") created_inspections = fields.Integer( - compute="_count_inspections", string="Created inspections") + compute="_compute_count_inspections", string="Created inspections") done_inspections = fields.Integer( - compute="_count_inspections", string="Done inspections") + compute="_compute_count_inspections", string="Done inspections") passed_inspections = fields.Integer( - compute="_count_inspections", string="Inspections OK") + compute="_compute_count_inspections", string="Inspections OK") failed_inspections = fields.Integer( - compute="_count_inspections", string="Inspections failed") + compute="_compute_count_inspections", string="Inspections failed") diff --git a/quality_control_stock_oca/readme/CONTRIBUTORS.rst b/quality_control_stock_oca/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..8754a7d88 --- /dev/null +++ b/quality_control_stock_oca/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Pedro M. Baeza +* Oihane Crucelaegui +* Simone Rubino diff --git a/quality_control_stock_oca/readme/DESCRIPTION.rst b/quality_control_stock_oca/readme/DESCRIPTION.rst new file mode 100644 index 000000000..e1792f9cf --- /dev/null +++ b/quality_control_stock_oca/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module defines triggers that creates inspections when stock moves are done. + +It also adds some shortcuts on picking and lots to these inspections. diff --git a/quality_control_stock_oca/readme/ROADMAP.rst b/quality_control_stock_oca/readme/ROADMAP.rst new file mode 100644 index 000000000..db5c65f37 --- /dev/null +++ b/quality_control_stock_oca/readme/ROADMAP.rst @@ -0,0 +1 @@ +* Put trigger in all languages. diff --git a/quality_control_stock_oca/static/description/index.html b/quality_control_stock_oca/static/description/index.html new file mode 100644 index 000000000..d0107eff7 --- /dev/null +++ b/quality_control_stock_oca/static/description/index.html @@ -0,0 +1,432 @@ + + + + + + +Quality control - Stock + + + +
+

Quality control - Stock

+ + +

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

+

This module defines triggers that creates inspections when stock moves are done.

+

It also adds some shortcuts on picking and lots to these inspections.

+

Table of contents

+ +
+

Known issues / Roadmap

+
    +
  • Put trigger in all languages.
  • +
+
+
+

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

+
    +
  • OdooMRP team
  • +
  • AvanzOSC
  • +
  • Serv. Tecnol. Avanzados - Pedro M. Baeza
  • +
  • Agile Business Group
  • +
+
+
+

Contributors

+ +
+
+

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.

+
+
+
+ + diff --git a/quality_control_stock_oca/tests/__init__.py b/quality_control_stock_oca/tests/__init__.py index 3dd12a3d9..f368a70ff 100644 --- a/quality_control_stock_oca/tests/__init__.py +++ b/quality_control_stock_oca/tests/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -# (c) 2015 Oihane Crucelaegui - AvanzOSC -# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import test_quality_control_stock diff --git a/quality_control_stock_oca/tests/test_quality_control_stock.py b/quality_control_stock_oca/tests/test_quality_control_stock.py index bdb78bbc6..e8a6dff93 100644 --- a/quality_control_stock_oca/tests/test_quality_control_stock.py +++ b/quality_control_stock_oca/tests/test_quality_control_stock.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- -# (c) 2015 Oihane Crucelaegui - AvanzOSC -# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +# Copyright 2015 Oihane Crucelaegui - AvanzOSC +# Copyright 2018 Simone Rubino - Agile Business Group +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from openerp.tests.common import TransactionCase +from odoo.tests.common import TransactionCase class TestQualityControl(TransactionCase): @@ -18,7 +19,9 @@ class TestQualityControl(TransactionCase): self.partner2 = self.env.ref('base.res_partner_4') self.test = self.env.ref('quality_control.qc_test_1') self.picking_type = self.env.ref('stock.picking_type_out') - self.sequence = self.env.ref('stock.seq_type_picking_out') + self.location_dest = self.env.ref('stock.stock_location_customers') + self.sequence = self.env['ir.sequence'] \ + .search([('prefix', 'like', '/OUT/')], limit=1) inspection_lines = ( self.inspection_model._prepare_inspection_lines(self.test)) self.inspection1 = self.inspection_model.create({ @@ -37,19 +40,27 @@ class TestQualityControl(TransactionCase): 'product_uom': self.product.uom_id.id, 'product_uom_qty': 2.0, 'location_id': self.picking_type.default_location_src_id.id, - 'location_dest_id': self.picking_type.default_location_dest_id.id, + 'location_dest_id': self.location_dest.id, } - self.picking1 = self.picking_model.create({ - 'partner_id': self.partner1.id, - 'picking_type_id': self.picking_type.id, - 'move_lines': [(0, 0, move_vals)], - }) + self.picking1 = self.picking_model \ + .with_context(default_picking_type_id=self.picking_type.id) \ + .create({ + 'partner_id': self.partner1.id, + 'picking_type_id': self.picking_type.id, + 'move_lines': [(0, 0, move_vals)], + 'location_dest_id': self.location_dest.id + }) self.picking1.action_confirm() self.picking1.force_assign() self.picking1.do_prepare_partial() for line in self.picking1.pack_operation_ids.filtered( lambda r: r.product_id == self.product): - line.write({'lot_id': self.lot.id}) + line.write({ + 'pack_lot_ids': [(0, 0, { + 'lot_id': self.lot.id, + 'qty': 2.0 + })] + }) def test_inspection_create_for_product(self): self.product.qc_triggers = [( @@ -200,24 +211,24 @@ class TestQualityControl(TransactionCase): def test_picking_type(self): picking_type = self.picking_type_model.create({ 'name': 'Test Picking Type', - 'sequence_id': self.sequence.id, 'code': 'outgoing', + 'sequence_id': self.sequence.id }) trigger = self.qc_trigger_model.search( [('picking_type', '=', picking_type.id)]) self.assertEqual(len(trigger), 1, 'One trigger must have been created.') - self.assertEqual(trigger.name, picking_type.complete_name, + self.assertEqual(trigger.name, picking_type.name, 'Trigger name must match picking type name.') picking_type.write({ 'name': 'Test Name Change', }) - self.assertEqual(trigger.name, picking_type.complete_name, + self.assertEqual(trigger.name, picking_type.name, 'Trigger name must match picking type name.') def test_qc_inspection_picking(self): self.inspection1.write({ - 'object_id': '%s,%d' % (self.picking1._model, + 'object_id': '%s,%d' % (self.picking1._name, self.picking1.id), }) self.assertEquals(self.inspection1.picking, @@ -225,7 +236,7 @@ class TestQualityControl(TransactionCase): def test_qc_inspection_stock_move(self): self.inspection1.write({ - 'object_id': '%s,%d' % (self.picking1.move_lines[:1]._model, + 'object_id': '%s,%d' % (self.picking1.move_lines[:1]._name, self.picking1.move_lines[:1].id), }) self.inspection1.onchange_object_id() @@ -240,7 +251,7 @@ class TestQualityControl(TransactionCase): def test_qc_inspection_lot(self): self.inspection1.write({ - 'object_id': '%s,%d' % (self.lot._model, + 'object_id': '%s,%d' % (self.lot._name, self.lot.id), }) self.inspection1.onchange_object_id() diff --git a/quality_control_stock_oca/views/qc_inspection_view.xml b/quality_control_stock_oca/views/qc_inspection_view.xml index bc4780e4d..bf3a738af 100644 --- a/quality_control_stock_oca/views/qc_inspection_view.xml +++ b/quality_control_stock_oca/views/qc_inspection_view.xml @@ -1,83 +1,81 @@ - - - - - qc.inspection.form.view.picking - qc.inspection - - - - - - + + + + qc.inspection.form.view.picking + qc.inspection + + + + + - + + - - qc.inspection.tree.view.picking - qc.inspection - - - - - - + + qc.inspection.tree.view.picking + qc.inspection + + + + + - + + - - qc.inspection.search.view.picking - qc.inspection - - - - - - - - - - + + qc.inspection.search.view.picking + qc.inspection + + + + + - + + + + + + - - qc.inspection.line.tree.stock - qc.inspection.line - - - - - - + + qc.inspection.line.tree.stock + qc.inspection.line + + + + + - + + - - qc.inspection.line.search.stock - qc.inspection.line - - - - - - - - - - + + qc.inspection.line.search.stock + qc.inspection.line + + + + + - - - - + + + + + + + diff --git a/quality_control_stock_oca/views/stock_picking_view.xml b/quality_control_stock_oca/views/stock_picking_view.xml index 1ebb16078..ac3156ec8 100644 --- a/quality_control_stock_oca/views/stock_picking_view.xml +++ b/quality_control_stock_oca/views/stock_picking_view.xml @@ -1,72 +1,70 @@ - - + + + + Quality inspections from picking + qc.inspection + tree,form + [('picking', '=', active_id)] + - - Quality inspections from picking - qc.inspection - tree,form - [('picking', '=', active_id)] - + + Quality inspection from picking done + qc.inspection + tree,form + [('picking', '=', active_id), ('state', 'not in', ['draft', 'waiting'])] + - - Quality inspection from picking done - qc.inspection - tree,form - [('picking', '=', active_id), ('state', 'not in', ['draft', 'waiting'])] - + + Quality inspection from picking passed + qc.inspection + tree,form + [('picking', '=', active_id), ('state', '=', 'success')] + - - Quality inspection from picking passed - qc.inspection - tree,form - [('picking', '=', active_id), ('state', '=', 'success')] - + + Quality inspections from picking failed + qc.inspection + tree,form + [('picking', '=', active_id), ('state', '=', 'failed')] + - - Quality inspections from picking failed - qc.inspection - tree,form - [('picking', '=', active_id), ('state', '=', 'failed')] - - - - stock.picking.qc.view - stock.picking - - - -
- - - - -
-
-
- -
-
+ + stock.picking.qc.view + stock.picking + + + +
+ + + + +
+
+
+ diff --git a/quality_control_stock_oca/views/stock_production_lot_view.xml b/quality_control_stock_oca/views/stock_production_lot_view.xml index 9ec36c207..eabd58106 100644 --- a/quality_control_stock_oca/views/stock_production_lot_view.xml +++ b/quality_control_stock_oca/views/stock_production_lot_view.xml @@ -1,72 +1,70 @@ - - + + + + Quality inspections from lot + qc.inspection + tree,form + [('lot', '=', active_id)] + - - Quality inspections from lot - qc.inspection - tree,form - [('lot', '=', active_id)] - + + Quality inspection from lot done + qc.inspection + tree,form + [('lot', '=', active_id), ('state', 'not in', ['draft', 'waiting'])] + - - Quality inspection from lot done - qc.inspection - tree,form - [('lot', '=', active_id), ('state', 'not in', ['draft', 'waiting'])] - + + Quality inspection from lot passed + qc.inspection + tree,form + [('lot', '=', active_id), ('state', '=', 'success')] + - - Quality inspection from lot passed - qc.inspection - tree,form - [('lot', '=', active_id), ('state', '=', 'success')] - + + Quality inspections from lot failed + qc.inspection + tree,form + [('lot', '=', active_id), ('state', '=', 'failed')] + - - Quality inspections from lot failed - qc.inspection - tree,form - [('lot', '=', active_id), ('state', '=', 'failed')] - - - - stock.production.lot.qc.view - stock.production.lot - - - -
- - - - -
-
-
- -
-
+ + stock.production.lot.qc.view + stock.production.lot + + + +
+ + + + +
+
+
+