diff --git a/quality_control_issue/README.rst b/quality_control_issue/README.rst new file mode 100644 index 000000000..9c46a63f0 --- /dev/null +++ b/quality_control_issue/README.rst @@ -0,0 +1,146 @@ +===================== +Quality Control Issue +===================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png + :target: https://odoo-community.org/page/development-status + :alt: Production/Stable +.. |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/12.0/quality_control_issue + :alt: OCA/manufacture +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/manufacture-12-0/manufacture-12-0-quality_control_issue + :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/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of quality Control to allow you to +report and manage quality control issues. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module in order to take advantage of the kanban views you +need to create the stages for *issues* and *problems*. To **create** stages in +any kanban view click on *Add New Column*. Then you can **reorder** the stages +just dragging them. + +In created stages you can **configure** them clicking on the gear button that +appears at the right of the stage name and clicking on *Edit*. Note the +following behaviors: + +* You can set a *Quality Control Team*. + + - Stages with no team set will be shared by all teams. + - Stages with a team associated will be only available for that specific + team. + +* In Issue Stages you can also relate a *QC State* to the stage. + + - When you move to a different stage an issue with *QC state* defined the + state of the issue will also change according to it. + - The other way around, if you change the state, the system will look for + an appropriate stage and if existing the issue will be move to that stage. + - If you change the *QC team* of an issue, the system will get the default + stage for that team and apply it to the issue. + +Usage +===== + +To use Quality Control Issues, you need to: + +#. Go to *Quality Control > Issues > QC Issues* or to *Quality Control > + Dashboard* and click on *Issues* in any of your teams. +#. Click on create to report an issue. +#. Select the product and quantity for the issue. Optionally you can specify + a location and relate the issue to some *Problem*. + +To manage your Quality Control Problems, you have to: + +#. Go to *Quality Control > Problem Tracking > Problems* or to *Quality + Control > Dashboard* and click on *Problems* in any of your teams. + +Issue Dispositions: +~~~~~~~~~~~~~~~~~~~ + +You can perform the following actions in quality control issues 'in progress': + +* Scrap: Click on *Scrap Products* button. +* Create RMA: Install `rma_quality_control_issue` and see instructions there. + +Known issues / Roadmap +====================== + +* Add more dispositions: repair, refurbish... + +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 +~~~~~~~ + +* Eficent + +Contributors +~~~~~~~~~~~~ + +* Lois Rilo +* Jordi Ballester Alomar + +Other credits +~~~~~~~~~~~~~ + +The development of this module has been financially supported by: + +* `Aleph Objects, Inc. `_ + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +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. + +.. |maintainer-lreficent| image:: https://github.com/lreficent.png?size=40px + :target: https://github.com/lreficent + :alt: lreficent + +Current `maintainer `__: + +|maintainer-lreficent| + +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_issue/__init__.py b/quality_control_issue/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/quality_control_issue/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/quality_control_issue/__manifest__.py b/quality_control_issue/__manifest__.py new file mode 100644 index 000000000..75613b577 --- /dev/null +++ b/quality_control_issue/__manifest__.py @@ -0,0 +1,34 @@ +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# Copyright 2017 Aleph Objects, Inc. (https://www.alephobjects.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Quality Control Issue", + "summary": "Allow to manage and report Quality Control Issues.", + "version": "12.0.1.0.0", + "development_status": "Production/Stable", + "category": "Quality Control", + "website": "https://odoo-community.org/", + "author": "Eficent , Odoo Community Association (OCA)", + "maintainers": ["lreficent"], + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "quality_control", + "quality_control_team", + "stock", + ], + "data": [ + "security/ir.model.access.csv", + "security/quality_control_issue_security.xml", + "data/qc_issue_sequence.xml", + "data/qc_stage_data.xml", + "views/qc_issue_view.xml", + "views/qc_problem_view.xml", + "views/qc_problem_group_view.xml", + "views/qc_team_dashboard_view.xml", + "views/stock_scrap_view.xml", + "views/qc_issue_stage.xml", + "views/qc_problem_stage.xml", + ], +} diff --git a/quality_control_issue/data/qc_issue_sequence.xml b/quality_control_issue/data/qc_issue_sequence.xml new file mode 100644 index 000000000..d779d8a87 --- /dev/null +++ b/quality_control_issue/data/qc_issue_sequence.xml @@ -0,0 +1,15 @@ + + + + + + + QC Issues + qc.issue + QCI/%(range_year)s/ + 5 + + + + diff --git a/quality_control_issue/data/qc_stage_data.xml b/quality_control_issue/data/qc_stage_data.xml new file mode 100644 index 000000000..25617235c --- /dev/null +++ b/quality_control_issue/data/qc_stage_data.xml @@ -0,0 +1,23 @@ + + + + + + + + New + 1 + False + + + + + + Done + 100 + True + + + + diff --git a/quality_control_issue/i18n/de.po b/quality_control_issue/i18n/de.po new file mode 100644 index 000000000..ab664e68e --- /dev/null +++ b/quality_control_issue/i18n/de.po @@ -0,0 +1,526 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * quality_control_issue +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2018-12-13 11:58+0000\n" +"Last-Translator: Maria Sparenberg \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.3\n" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +msgid "" +"
\n" +" Location:" +msgstr "" +"
\n" +" Lagerort:" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +msgid "" +"
\n" +" Problems:" +msgstr "" +"
\n" +" Probleme:" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +msgid "" +"
\n" +" Qty:" +msgstr "" +"
\n" +" Menge:" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_responsible_id +msgid "Assigned to" +msgstr "Zugewiesen an" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +#: selection:qc.issue,state:0 +msgid "Cancel" +msgstr "Abbrechen" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_color +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_color +msgid "Color Index" +msgstr "Farbindex" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_company_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_company_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group_company_id +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Company" +msgstr "Unternehmen" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +msgid "Confirm" +msgstr "Bestätigen" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_create_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_create_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_create_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group_create_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage_create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_create_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_create_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_create_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group_create_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage_create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_kanban_view +msgid "Delete" +msgstr "Löschen" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_description +msgid "Description" +msgstr "Beschreibung" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_display_name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_display_name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_display_name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group_display_name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage_display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: quality_control_issue +#: selection:qc.issue,state:0 +msgid "Done" +msgstr "Erledigt" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_kanban_view +msgid "Edit" +msgstr "Bearbeiten" + +#. module: quality_control_issue +#: code:addons/quality_control_issue/models/qc_issue.py:162 +#, python-format +msgid "Every issue must have the same QC team to perform this action." +msgstr "" +"Jedes Problem muss dasselbe Qualitätskontrollteam haben, um diese Aktion " +"durchzuführen." + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_fold +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage_fold +msgid "Folded in Pipeline" +msgstr "In der Pipeline eingeklappt" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Future Activities" +msgstr "Zukünftige Aktivitäten" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Group By..." +msgstr "Gruppiere nach..." + +#. module: quality_control_issue +#: selection:qc.problem,priority:0 +msgid "High" +msgstr "Hoch" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage_id +msgid "ID" +msgstr "ID" + +#. module: quality_control_issue +#: selection:qc.issue,state:0 +msgid "In Progress" +msgstr "in Bearbeitung" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_inspector_id +msgid "Inspector" +msgstr "Prüfer" + +#. module: quality_control_issue +#: model:ir.ui.menu,name:quality_control_issue.qc_issue_stage_config_menu +msgid "Issue Stages" +msgstr "Problem-Stufen" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_issue_count +#: model:ir.ui.menu,name:quality_control_issue.menu_qc_issue +#: model:ir.ui.menu,name:quality_control_issue.menu_qc_issue_child +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_tree +#: model:ir.ui.view,arch_db:quality_control_issue.qc_team_view_kanban +msgid "Issues" +msgstr "Probleme" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.team_qc_issue_act +msgid "Issues by team" +msgstr "Probleme des Teams" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue___last_update +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage___last_update +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem___last_update +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group___last_update +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage___last_update +msgid "Last Modified on" +msgstr "Zuletzt geändert am" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_write_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_write_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group_write_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_write_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage_write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert von" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_write_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_write_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group_write_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_write_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage_write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Late Activities" +msgstr "Verspätete Aktivitäten" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_location_id +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +msgid "Location" +msgstr "Lagerort" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_lot_id +msgid "Lot/Serial Number" +msgstr "Chargen-/Seriennummer" + +#. module: quality_control_issue +#: selection:qc.problem,priority:0 +msgid "Low" +msgstr "Gering" + +#. module: quality_control_issue +#: model:ir.actions.act_window,help:quality_control_issue.team_qc_issue_act +msgid "Manage Quality Control Issues through your team flow." +msgstr "Verwalten Sie Qualitätenskontrollthemen durch Ihr Team Flow." + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "My Activities" +msgstr "Meine Aktivitäten" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +msgid "My inspections" +msgstr "Meine Inspektionen" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group_name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_name +msgid "Name" +msgstr "Bezeichnung" + +#. module: quality_control_issue +#: selection:qc.issue,state:0 +msgid "New" +msgstr "Neu" + +#. module: quality_control_issue +#: selection:qc.problem,priority:0 +msgid "Normal" +msgstr "Normal" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_notes +msgid "Notes" +msgstr "Notizen" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group_problem_ids +msgid "Problem" +msgstr "Problem" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_problem_group_id +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Problem Group" +msgstr "Problemgruppe" + +#. module: quality_control_issue +#: model:ir.ui.menu,name:quality_control_issue.menu_qc_problem_group +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_group_tree +msgid "Problem Groups" +msgstr "Problemgruppen" + +#. module: quality_control_issue +#: model:ir.ui.menu,name:quality_control_issue.qc_stage_config_menu +msgid "Problem Stages" +msgstr "Problemstufen" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.qc_problem_action +#: model:ir.ui.menu,name:quality_control_issue.menu_qc_problem_tracking +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_tree +msgid "Problem Tracking" +msgstr "Problemverfolgung" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.qc_problem_group_action +msgid "Problem groups" +msgstr "Problemgruppen" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.team_qc_problem_act +msgid "Problem tracking" +msgstr "Problemverfolgung" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_qc_problem_ids +#: model:ir.ui.menu,name:quality_control_issue.menu_qc_problem +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_group_form +#: model:ir.ui.view,arch_db:quality_control_issue.qc_team_view_kanban +msgid "Problems" +msgstr "Probleme" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_product_id +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +msgid "Product" +msgstr "Produkt" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_product_qty +msgid "Product Quantity" +msgstr "Produktmenge" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_product_uom +msgid "Product Unit of Measure" +msgstr "Produkt-Mengeneinheit" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +msgid "Product:" +msgstr "Produkt:" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.qc_issue_action +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_issue_ids +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_form +msgid "QC Issues" +msgstr "Qualitätskontroll-Themen" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_state +msgid "QC State" +msgstr "Qualitätskontroll-Status" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_qc_team_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_qc_team_id +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "QC Team" +msgstr "Qualitätskontroll-Team" + +#. module: quality_control_issue +#: model:ir.model,name:quality_control_issue.model_qc_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_stock_scrap_qc_issue_id +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +msgid "Quality Control Issue" +msgstr "Qualitätskontroll-Thema" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.qc_issue_stage_config_action +msgid "Quality Control Issue Stages" +msgstr "Qualitätskontroll-Themenstufen" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.qc_problem_stage_config_action +msgid "Quality Control Problem Stages" +msgstr "Qualitätskontroll-Problemstufen" + +#. module: quality_control_issue +#: model:ir.model,name:quality_control_issue.model_qc_problem +msgid "Quality Control Problem Tracking" +msgstr "Qualitätskontroll-Problemverfolgung" + +#. module: quality_control_issue +#: model:ir.model,name:quality_control_issue.model_qc_problem_group +msgid "Quality Control Problem Tracking Groups" +msgstr "Qualitätskontroll-Verfolgungsgruppen" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_qc_team_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage_qc_team_id +msgid "Quality Control Team" +msgstr "Qualitätskontroll-Team" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_priority +msgid "Rating" +msgstr "Bewertung" + +#. module: quality_control_issue +#: code:addons/quality_control_issue/models/qc_issue.py:216 +#, python-format +msgid "Scrap" +msgstr "Ausschuss" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +msgid "Scrap Products" +msgstr "Produkte verschrotten" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +msgid "Scrapped products" +msgstr "Verschrottete Produkte" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stock_scrap_ids +msgid "Scraps" +msgstr "Ausschuss" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_sequence +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage_sequence +msgid "Sequence" +msgstr "Sequenz" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +msgid "Set to Done" +msgstr "auf Erledigt setzen" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Show all records which has next action date is before today" +msgstr "" +"alle Einträge anzeigen, deren Datum der nächsten Aktion vor heute liegt" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_id_6120 +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_stage_id +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Stage" +msgstr "Stufe" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage_name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage_name +msgid "Stage Name" +msgstr "Stufenname" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_state +msgid "State" +msgstr "Status" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stock_scrap_qty +msgid "Stock Scrap Qty" +msgstr "Ausschussmenge" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue_stage_fold +#: model:ir.model.fields,help:quality_control_issue.field_qc_stage_fold +msgid "" +"This stage is folded in the kanban view when there are no records in that " +"stage to display." +msgstr "" +"Diese Stufe ist in der Kanban-Ansicht eingeklappt, wenn es keine Einträge " +"anzuzeigen gibt." + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Today Activities" +msgstr "Heutige Aktivitäten" + +#. module: quality_control_issue +#: model:ir.actions.act_window,help:quality_control_issue.team_qc_problem_act +msgid "Track problems through your team flow." +msgstr "Probleme durch das Team-Flow nachverfolgen." + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_product_tracking +msgid "Tracking" +msgstr "Nachverfolgung" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue_stage_sequence +#: model:ir.model.fields,help:quality_control_issue.field_qc_stage_sequence +msgid "Used to order stages. Lower is better." +msgstr "zur Sortierung von Stufen: Geringer ist besser." + +#. module: quality_control_issue +#: selection:qc.problem,priority:0 +msgid "Very High" +msgstr "Sehr hoch" + +#. module: quality_control_issue +#: model:ir.ui.view,arch_db:quality_control_issue.qc_problem_kanban_view +msgid "issues" +msgstr "Probleme" + +#. module: quality_control_issue +#: model:ir.model,name:quality_control_issue.model_qc_issue_stage +msgid "qc.issue.stage" +msgstr "qc.issue.stage" + +#. module: quality_control_issue +#: model:ir.model,name:quality_control_issue.model_qc_stage +msgid "qc.stage" +msgstr "qc.stage" + +#. module: quality_control_issue +#: model:ir.model,name:quality_control_issue.model_stock_scrap +msgid "stock.scrap" +msgstr "stock.scrap" diff --git a/quality_control_issue/i18n/quality_control_issue.pot b/quality_control_issue/i18n/quality_control_issue.pot new file mode 100644 index 000000000..2649e1e89 --- /dev/null +++ b/quality_control_issue/i18n/quality_control_issue.pot @@ -0,0 +1,695 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * quality_control_issue +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \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_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +msgid "
\n" +" Location:" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_needaction +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__activity_ids +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__activity_ids +msgid "Activities" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__activity_state +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__activity_state +msgid "Activity State" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__responsible_id +msgid "Assigned to" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_attachment_count +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +#: selection:qc.issue,state:0 +msgid "Cancel" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__color +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__color +msgid "Color Index" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__company_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__company_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group__company_id +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Company" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +msgid "Confirm" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__create_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage__create_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__create_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group__create_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage__create_uid +msgid "Created by" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__create_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage__create_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__create_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group__create_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage__create_date +msgid "Created on" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_kanban_view +msgid "Delete" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__description +msgid "Description" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__display_name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage__display_name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__display_name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group__display_name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage__display_name +msgid "Display Name" +msgstr "" + +#. module: quality_control_issue +#: selection:qc.issue,state:0 +msgid "Done" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_kanban_view +msgid "Dropdown menu" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_kanban_view +msgid "Edit" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue__product_tracking +msgid "Ensure the traceability of a storable product in your warehouse." +msgstr "" + +#. module: quality_control_issue +#: code:addons/quality_control_issue/models/qc_issue.py:162 +#, python-format +msgid "Every issue must have the same QC team to perform this action." +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage__fold +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage__fold +msgid "Folded in Pipeline" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_follower_ids +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_channel_ids +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_partner_ids +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Future Activities" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Group By..." +msgstr "" + +#. module: quality_control_issue +#: selection:qc.problem,priority:0 +msgid "High" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage__id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group__id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage__id +msgid "ID" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue__message_unread +#: model:ir.model.fields,help:quality_control_issue.field_qc_problem__message_unread +msgid "If checked new messages require your attention." +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue__message_needaction +#: model:ir.model.fields,help:quality_control_issue.field_qc_problem__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue__message_has_error +#: model:ir.model.fields,help:quality_control_issue.field_qc_problem__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: quality_control_issue +#: selection:qc.issue,state:0 +msgid "In Progress" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__inspector_id +msgid "Inspector" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_is_follower +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: quality_control_issue +#: model:ir.ui.menu,name:quality_control_issue.qc_issue_stage_config_menu +msgid "Issue Stages" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__issue_count +#: model:ir.ui.menu,name:quality_control_issue.menu_qc_issue +#: model:ir.ui.menu,name:quality_control_issue.menu_qc_issue_child +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_team_view_kanban +msgid "Issues" +msgstr "" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.team_qc_issue_act +msgid "Issues by team" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue____last_update +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage____last_update +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem____last_update +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group____last_update +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage____last_update +msgid "Last Modified on" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__write_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage__write_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__write_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group__write_uid +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__write_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage__write_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__write_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group__write_date +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage__write_date +msgid "Last Updated on" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Late Activities" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__location_id +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +msgid "Location" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__lot_id +msgid "Lot/Serial Number" +msgstr "" + +#. module: quality_control_issue +#: selection:qc.problem,priority:0 +msgid "Low" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_main_attachment_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.actions.act_window,help:quality_control_issue.team_qc_issue_act +msgid "Manage Quality Control Issues through your team flow." +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_has_error +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_ids +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_ids +msgid "Messages" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "My Activities" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +msgid "My inspections" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group__name +msgid "Name" +msgstr "" + +#. module: quality_control_issue +#: selection:qc.issue,state:0 +msgid "New" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__activity_date_deadline +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__activity_summary +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__activity_type_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: quality_control_issue +#: selection:qc.problem,priority:0 +msgid "Normal" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__notes +msgid "Notes" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_needaction_counter +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_has_error_counter +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_has_error_counter +msgid "Number of error" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue__message_needaction_counter +#: model:ir.model.fields,help:quality_control_issue.field_qc_problem__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue__message_has_error_counter +#: model:ir.model.fields,help:quality_control_issue.field_qc_problem__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue__message_unread_counter +#: model:ir.model.fields,help:quality_control_issue.field_qc_problem__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: quality_control_issue +#: selection:qc.issue,activity_state:0 +#: selection:qc.problem,activity_state:0 +msgid "Overdue" +msgstr "" + +#. module: quality_control_issue +#: selection:qc.issue,activity_state:0 +#: selection:qc.problem,activity_state:0 +msgid "Planned" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem_group__problem_ids +msgid "Problem" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__problem_group_id +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Problem Group" +msgstr "" + +#. module: quality_control_issue +#: model:ir.ui.menu,name:quality_control_issue.menu_qc_problem_group +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_group_tree +msgid "Problem Groups" +msgstr "" + +#. module: quality_control_issue +#: model:ir.ui.menu,name:quality_control_issue.qc_stage_config_menu +msgid "Problem Stages" +msgstr "" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.qc_problem_action +#: model:ir.ui.menu,name:quality_control_issue.menu_qc_problem_tracking +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_tree +msgid "Problem Tracking" +msgstr "" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.qc_problem_group_action +msgid "Problem groups" +msgstr "" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.team_qc_problem_act +msgid "Problem tracking" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__qc_problem_ids +#: model:ir.ui.menu,name:quality_control_issue.menu_qc_problem +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_group_form +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_team_view_kanban +msgid "Problems" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__product_id +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +msgid "Product" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__product_qty +msgid "Product Quantity" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__product_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +msgid "Product:" +msgstr "" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.qc_issue_action +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__issue_ids +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_form +msgid "QC Issues" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage__state +msgid "QC State" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__qc_team_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__qc_team_id +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "QC Team" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_kanban_view +msgid "Qty:" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model,name:quality_control_issue.model_qc_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_stock_scrap__qc_issue_id +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +msgid "Quality Control Issue" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model,name:quality_control_issue.model_qc_issue_stage +msgid "Quality Control Issue Stage" +msgstr "" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.qc_issue_stage_config_action +msgid "Quality Control Issue Stages" +msgstr "" + +#. module: quality_control_issue +#: model:ir.actions.act_window,name:quality_control_issue.qc_problem_stage_config_action +msgid "Quality Control Problem Stages" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model,name:quality_control_issue.model_qc_problem +msgid "Quality Control Problem Tracking" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model,name:quality_control_issue.model_qc_problem_group +msgid "Quality Control Problem Tracking Groups" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model,name:quality_control_issue.model_qc_stage +msgid "Quality Control Stage" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage__qc_team_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage__qc_team_id +msgid "Quality Control Team" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__priority +msgid "Rating" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__activity_user_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: quality_control_issue +#: code:addons/quality_control_issue/models/qc_issue.py:216 +#: model:ir.model,name:quality_control_issue.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +msgid "Scrap Products" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +msgid "Scrapped products" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__stock_scrap_ids +msgid "Scraps" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage__sequence +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage__sequence +msgid "Sequence" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_form +msgid "Set to Done" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Show all records which has next action date is before today" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__stage_id +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__stage_id +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Stage" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue_stage__name +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_stage__name +msgid "Stage Name" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__state +msgid "State" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue__activity_state +#: model:ir.model.fields,help:quality_control_issue.field_qc_problem__activity_state +msgid "Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__stock_scrap_qty +msgid "Stock Scrap Qty" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue_stage__fold +#: model:ir.model.fields,help:quality_control_issue.field_qc_stage__fold +msgid "This stage is folded in the kanban view when there are no records in that stage to display." +msgstr "" + +#. module: quality_control_issue +#: selection:qc.issue,activity_state:0 +#: selection:qc.problem,activity_state:0 +msgid "Today" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_issue_search +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_search +msgid "Today Activities" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.actions.act_window,help:quality_control_issue.team_qc_problem_act +msgid "Track problems through your team flow." +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__product_tracking +msgid "Tracking" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_unread +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__message_unread_counter +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue_stage__sequence +#: model:ir.model.fields,help:quality_control_issue.field_qc_stage__sequence +msgid "Used to order stages. Lower is better." +msgstr "" + +#. module: quality_control_issue +#: selection:qc.problem,priority:0 +msgid "Very High" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_issue__website_message_ids +#: model:ir.model.fields,field_description:quality_control_issue.field_qc_problem__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: quality_control_issue +#: model:ir.model.fields,help:quality_control_issue.field_qc_issue__website_message_ids +#: model:ir.model.fields,help:quality_control_issue.field_qc_problem__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: quality_control_issue +#: model_terms:ir.ui.view,arch_db:quality_control_issue.qc_problem_kanban_view +msgid "issues" +msgstr "" + diff --git a/quality_control_issue/models/__init__.py b/quality_control_issue/models/__init__.py new file mode 100644 index 000000000..94a62a630 --- /dev/null +++ b/quality_control_issue/models/__init__.py @@ -0,0 +1,6 @@ +from . import stock_scrap +from . import qc_stage +from . import qc_problem +from . import qc_problem_group +from . import qc_issue_stage +from . import qc_issue diff --git a/quality_control_issue/models/qc_issue.py b/quality_control_issue/models/qc_issue.py new file mode 100644 index 000000000..825199b52 --- /dev/null +++ b/quality_control_issue/models/qc_issue.py @@ -0,0 +1,246 @@ +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# Copyright 2017 Aleph Objects, Inc. (https://www.alephobjects.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models, SUPERUSER_ID, _ +from odoo.exceptions import UserError +import odoo.addons.decimal_precision as dp + + +class QualityControlIssue(models.Model): + _name = "qc.issue" + _description = "Quality Control Issue" + _inherit = ['mail.thread', 'mail.activity.mixin'] + + @api.multi + def _compute_stock_scrap_qty(self): + for rec in self: + rec.stock_scrap_qty = sum( + self.stock_scrap_ids.mapped('scrap_qty')) + + @api.model + def create(self, vals): + vals['name'] = self.env['ir.sequence'].next_by_code( + 'qc.issue') or '' + return super(QualityControlIssue, self).create(vals) + + @api.one + def _get_uom(self): + self.product_uom = self.product_id.product_tmpl_id.uom_id + + def _get_default_stage_id(self): + """ Gives default stage_id """ + team = self.env['qc.team']._get_default_qc_team_id( + user_id=self.env.uid) + return self.issue_stage_find([], team, [('fold', '=', False)]) + + def _get_default_location_id(self): + company_user = self.env.user.company_id + warehouse = self.env['stock.warehouse'].search([ + ('company_id', '=', company_user.id)], limit=1) + if warehouse: + return warehouse.lot_stock_id.id + return None + + @api.multi + def _read_group_stage_ids(self, stages, domain, order=None): + search_domain = [] + qc_team_id = self.env.context.get('default_qc_team_id') or False + if qc_team_id: + search_domain += ['|', ('id', 'in', stages.ids)] + search_domain += ['|', ('qc_team_id', '=', qc_team_id)] + search_domain += [('qc_team_id', '=', False)] + else: + search_domain += ['|', ('id', 'in', stages.ids)] + search_domain += [('qc_team_id', '=', False)] + + stage_ids = stages._search( + search_domain, order=order, access_rights_uid=SUPERUSER_ID) + return stages.browse(stage_ids) + + name = fields.Char(readonly=True) + state = fields.Selection( + selection=[("new", "New"), + ("progress", "In Progress"), + ("done", "Done"), + ("cancel", "Cancel")], default="new", + track_visibility='onchange', readonly=True) + product_id = fields.Many2one( + comodel_name="product.product", string="Product", + readonly=True, states={"new": [("readonly", False)]}, required=True) + product_tracking = fields.Selection(related="product_id.tracking") + product_qty = fields.Float( + string="Product Quantity", required=True, default=1.0, + readonly=True, states={"new": [("readonly", False)]}, + digits=dp.get_precision("Product Unit of Measure")) + product_uom = fields.Many2one( + comodel_name="uom.uom", string="Product Unit of Measure", + default=_get_uom, required=True, readonly=True, + states={"new": [("readonly", False)]}) + lot_id = fields.Many2one( + comodel_name="stock.production.lot", string="Lot/Serial Number", + readonly=True, states={"new": [("readonly", False)]},) + location_id = fields.Many2one( + comodel_name="stock.location", string="Location", + default=_get_default_location_id, + readonly=True, states={"new": [("readonly", False)]},) + inspector_id = fields.Many2one( + comodel_name="res.users", string="Inspector", + track_visibility="onchange", + readonly=True, states={"new": [("readonly", False)]}, + default=lambda self: self.env.user, required=True) + responsible_id = fields.Many2one( + comodel_name="res.users", string="Assigned to", + track_visibility="onchange", + states={"done": [("readonly", True)]},) + description = fields.Text( + states={"done": [("readonly", True)]},) + qc_problem_ids = fields.Many2many( + comodel_name="qc.problem", string="Problems", + relation="qc_issue_problem_rel", column1="qc_issue_id", + column2="qc_problem_id", + states={"done": [("readonly", True)]},) + color = fields.Integer(string='Color Index') + stage_id = fields.Many2one( + comodel_name="qc.issue.stage", string='Stage', + track_visibility='onchange', + index=True, default=_get_default_stage_id, + group_expand='_read_group_stage_ids', + domain="['|', ('qc_team_id', '=', False), " + "('qc_team_id', '=', qc_team_id)]", + ) + qc_team_id = fields.Many2one( + comodel_name='qc.team', string='QC Team', + default=lambda self: self.env[ + 'qc.team'].sudo()._get_default_qc_team_id(user_id=self.env.uid), + index=True, track_visibility='onchange') + company_id = fields.Many2one( + comodel_name='res.company', string='Company', required=True, + default=lambda self: self.env.user.company_id) + stock_scrap_ids = fields.One2many( + comodel_name='stock.scrap', string='Scraps', + inverse_name='qc_issue_id') + stock_scrap_qty = fields.Integer(compute=_compute_stock_scrap_qty) + + _group_by_full = { + 'stage_id': _read_group_stage_ids + } + + def issue_stage_find(self, cases, team, domain=None, order='sequence'): + """ Override of the base.stage method + Parameter of the stage search taken from the problem: + - team_id: if set, stages must belong to this team or + be a default stage; if not set, stages must be default + stages + """ + team_ids = set() + if team: + team_ids.add(team.id) + for issue in cases: + if issue.team_id: + team_ids.add(issue.team_id.id) + search_domain = [] + if team_ids: + search_domain += [('|')] * (len(team_ids)) + search_domain.append(('qc_team_id', '=', False)) + for team_id in team_ids: + search_domain.append(('qc_team_id', '=', team_id)) + else: + search_domain.append(('qc_team_id', '=', False)) + search_domain += list(domain) + # perform search, return the first found + stage = self.env['qc.issue.stage'].search( + search_domain, order=order, limit=1) + return stage + + @api.multi + def write(self, vals): + stage_obj = self.env['qc.issue.stage'] + state = vals.get('state') + if state: + if len(self.mapped('qc_team_id')) > 1: + raise UserError(_( + "Every issue must have the same QC team to perform this " + "action.")) + team = self[0].qc_team_id + stage = self.issue_stage_find([], team, [('state', '=', state)]) + if stage: + vals.update({'stage_id': stage.id}) + return super(QualityControlIssue, self).write(vals) + team_id = vals.get('qc_team_id') + if team_id is not None: + team = self.env['qc.team'].browse(team_id) + stage = self.issue_stage_find([], team, [('fold', '=', False)]) + if stage: + vals.update({'stage_id': stage.id}) + stage_id = vals.get('stage_id') + if stage_id: + state = stage_obj.browse(stage_id).state + if state: + vals.update({'state': state}) + return super(QualityControlIssue, self).write(vals) + + @api.multi + def action_confirm(self): + self.write({'state': 'progress'}) + + @api.multi + def action_done(self): + self.write({'state': 'done'}) + + @api.multi + def action_cancel(self): + self.write({'state': 'cancel'}) + + @api.onchange('product_id') + def _onchange_product_id(self): + self.product_uom = self.product_id.product_tmpl_id.uom_id + if self.lot_id.product_id != self.product_id: + self.lot_id = False + if self.product_id: + return {'domain': { + 'lot_id': [('product_id', '=', self.product_id.id)]}} + return {'domain': {'lot_id': []}} + + @api.onchange("lot_id") + def _onchange_lot_id(self): + product = self.lot_id.product_id + if product: + self.product_id = product + self.product_uom = product.product_tmpl_id.uom_id + + @api.multi + def scrap_products(self): + self.ensure_one() + return { + 'name': _('Scrap'), + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'stock.scrap', + 'view_id': self.env.ref('stock.stock_scrap_form_view2').id, + 'type': 'ir.actions.act_window', + 'context': { + 'default_qc_issue_id': self.id, + 'default_location_id': self.location_id.id, + 'default_product_id': self.product_id.id, + 'default_scrap_qty': self.product_qty, + 'default_product_uom_id': self.product_uom.id, + 'default_lot_id': self.lot_id.id, + }, + 'target': 'new', + } + + @api.multi + def action_view_stock_scrap(self): + action = self.env.ref('stock.action_stock_scrap') + result = action.read()[0] + lines = self.stock_scrap_ids + # choose the view_mode accordingly + if len(lines) != 1: + result['domain'] = "[('id', 'in', " + \ + str(lines.ids) + ")]" + elif len(lines) == 1: + res = self.env.ref('stock.stock_scrap_form_view', False) + result['views'] = [(res and res.id or False, 'form')] + result['res_id'] = lines.id + return result diff --git a/quality_control_issue/models/qc_issue_stage.py b/quality_control_issue/models/qc_issue_stage.py new file mode 100644 index 000000000..f0e565515 --- /dev/null +++ b/quality_control_issue/models/qc_issue_stage.py @@ -0,0 +1,45 @@ +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# Copyright 2017 Aleph Objects, Inc. (https://www.alephobjects.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + +AVAILABLE_PRIORITIES = [ + ('0', 'Normal'), + ('1', 'Low'), + ('2', 'High'), + ('3', 'Very High'), +] + + +class QualityControlIssueStage(models.Model): + _name = "qc.issue.stage" + _description = "Quality Control Issue Stage" + _rec_name = 'name' + _order = "sequence, name, id" + + @api.model + def default_get(self, fields): + """ Hack : when going from the kanban view, creating a stage with a + qc team in context should not create a stage for the current team only. + """ + ctx = dict(self.env.context) + if ctx.get('default_qc_team_id') and not ctx.get('some_context'): + ctx.pop('default_qc_team_id') + return super(QualityControlIssueStage, + self.with_context(ctx)).default_get(fields) + + name = fields.Char('Stage Name', required=True) + sequence = fields.Integer( + string='Sequence', help="Used to order stages. Lower is better.", + default=1) + qc_team_id = fields.Many2one( + comodel_name='qc.team', string='Quality Control Team', + ondelete='set null') + fold = fields.Boolean( + string='Folded in Pipeline', default=False, + help='This stage is folded in the kanban view when there are no ' + 'records in that stage to display.') + state = fields.Selection( + string="QC State", + selection=lambda self: self.env['qc.issue']._fields['state'].selection) diff --git a/quality_control_issue/models/qc_problem.py b/quality_control_issue/models/qc_problem.py new file mode 100644 index 000000000..2bb05ec7f --- /dev/null +++ b/quality_control_issue/models/qc_problem.py @@ -0,0 +1,110 @@ +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# Copyright 2017 Aleph Objects, Inc. (https://www.alephobjects.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models, SUPERUSER_ID + +AVAILABLE_PRIORITIES = [ + ('0', 'Normal'), + ('1', 'Low'), + ('2', 'High'), + ('3', 'Very High'), +] + + +class QcProblem(models.Model): + _name = "qc.problem" + _description = "Quality Control Problem Tracking" + _inherit = ['mail.thread', 'mail.activity.mixin'] + _order = "priority desc, id desc" + + def _get_default_stage_id(self): + """ Gives default stage_id """ + team = self.env['qc.team']._get_default_qc_team_id( + user_id=self.env.uid) + return self.stage_find([], team, [('fold', '=', False)]) + + @api.multi + def _read_group_stage_ids(self, stages, domain, order=None): + search_domain = [] + qc_team_id = self.env.context.get('default_qc_team_id') or False + if qc_team_id: + search_domain += ['|', ('id', 'in', stages.ids)] + search_domain += ['|', ('qc_team_id', '=', qc_team_id)] + search_domain += [('qc_team_id', '=', False)] + else: + search_domain += ['|', ('id', 'in', stages.ids)] + search_domain += [('qc_team_id', '=', False)] + + stage_ids = stages._search( + search_domain, order=order, access_rights_uid=SUPERUSER_ID) + return stages.browse(stage_ids) + + @api.one + @api.depends('issue_ids') + def _compute_count(self): + self.issue_count = len(self.issue_ids) + + name = fields.Char() + notes = fields.Text() + issue_ids = fields.Many2many( + comodel_name="qc.issue", string="QC Issues", + relation="qc_issue_problem_rel", column1="qc_problem_id", + column2="qc_issue_id") + problem_group_id = fields.Many2one( + comodel_name="qc.problem.group", string="Problem Group") + issue_count = fields.Integer( + string="Issues", compute=_compute_count, store=True) + color = fields.Integer(string='Color Index') + priority = fields.Selection( + selection=AVAILABLE_PRIORITIES, + default="0", + string="Rating", + index=True, + ) + stage_id = fields.Many2one( + comodel_name="qc.stage", string='Stage', + track_visibility='onchange', + index=True, default=_get_default_stage_id, + group_expand='_read_group_stage_ids', + domain="['|', ('qc_team_id', '=', False), " + "('qc_team_id', '=', qc_team_id)]", + ) + qc_team_id = fields.Many2one( + comodel_name='qc.team', string='QC Team', + default=lambda self: self.env[ + 'qc.team'].sudo()._get_default_qc_team_id(user_id=self.env.uid), + index=True, track_visibility='onchange') + company_id = fields.Many2one( + comodel_name='res.company', string='Company', required=True, + default=lambda self: self.env.user.company_id) + _group_by_full = { + 'stage_id': _read_group_stage_ids + } + + def stage_find(self, cases, team, domain=None, order='sequence'): + """ Override of the base.stage method + Parameter of the stage search taken from the problem: + - team_id: if set, stages must belong to this team or + be a default stage; if not set, stages must be default + stages + """ + team_ids = set() + if team: + team_ids.add(team.id) + for problem in cases: + if problem.team_id: + team_ids.add(problem.team_id.id) + search_domain = [] + if team_ids: + search_domain += [('|')] * (len(team_ids)) + search_domain.append(('qc_team_id', '=', False)) + for team_id in team_ids: + search_domain.append(('qc_team_id', '=', team_id)) + else: + search_domain.append(('qc_team_id', '=', False)) + search_domain += list(domain) + # perform search, return the first found + stage = self.env['qc.stage'].search( + search_domain, order=order, limit=1) + return stage diff --git a/quality_control_issue/models/qc_problem_group.py b/quality_control_issue/models/qc_problem_group.py new file mode 100644 index 000000000..62117289f --- /dev/null +++ b/quality_control_issue/models/qc_problem_group.py @@ -0,0 +1,17 @@ +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# Copyright 2017 Aleph Objects, Inc. (https://www.alephobjects.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class QcProblemGroup(models.Model): + _name = "qc.problem.group" + _description = "Quality Control Problem Tracking Groups" + + name = fields.Char() + problem_ids = fields.One2many( + comodel_name="qc.problem", inverse_name="problem_group_id") + company_id = fields.Many2one( + comodel_name='res.company', string='Company', required=True, + default=lambda self: self.env.user.company_id) diff --git a/quality_control_issue/models/qc_stage.py b/quality_control_issue/models/qc_stage.py new file mode 100644 index 000000000..710727e9b --- /dev/null +++ b/quality_control_issue/models/qc_stage.py @@ -0,0 +1,42 @@ +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# Copyright 2017 Aleph Objects, Inc. (https://www.alephobjects.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + +AVAILABLE_PRIORITIES = [ + ('0', 'Normal'), + ('1', 'Low'), + ('2', 'High'), + ('3', 'Very High'), +] + + +class QualityControlStage(models.Model): + _name = "qc.stage" + _description = "Quality Control Stage" + _rec_name = 'name' + _order = "sequence, name, id" + + @api.model + def default_get(self, fields): + """ Hack : when going from the kanban view, creating a stage with a + qc team in context should not create a stage for the current team only. + """ + ctx = dict(self.env.context) + if ctx.get('default_qc_team_id') and not ctx.get('some_context'): + ctx.pop('default_qc_team_id') + return super(QualityControlStage, + self.with_context(ctx)).default_get(fields) + + name = fields.Char('Stage Name', required=True) + sequence = fields.Integer( + string='Sequence', help="Used to order stages. Lower is better.", + default=1) + qc_team_id = fields.Many2one( + comodel_name='qc.team', string='Quality Control Team', + ondelete='set null') + fold = fields.Boolean( + string='Folded in Pipeline', default=False, + help='This stage is folded in the kanban view when there are no ' + 'records in that stage to display.') diff --git a/quality_control_issue/models/stock_scrap.py b/quality_control_issue/models/stock_scrap.py new file mode 100644 index 000000000..f6251cd7d --- /dev/null +++ b/quality_control_issue/models/stock_scrap.py @@ -0,0 +1,12 @@ +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# Copyright 2017 Aleph Objects, Inc. (https://www.alephobjects.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class QualityControlIssueStage(models.Model): + _inherit = "stock.scrap" + + qc_issue_id = fields.Many2one( + comodel_name="qc.issue", string="Quality Control Issue") diff --git a/quality_control_issue/readme/CONFIGURE.rst b/quality_control_issue/readme/CONFIGURE.rst new file mode 100644 index 000000000..9e8f7a835 --- /dev/null +++ b/quality_control_issue/readme/CONFIGURE.rst @@ -0,0 +1,23 @@ +To configure this module in order to take advantage of the kanban views you +need to create the stages for *issues* and *problems*. To **create** stages in +any kanban view click on *Add New Column*. Then you can **reorder** the stages +just dragging them. + +In created stages you can **configure** them clicking on the gear button that +appears at the right of the stage name and clicking on *Edit*. Note the +following behaviors: + +* You can set a *Quality Control Team*. + + - Stages with no team set will be shared by all teams. + - Stages with a team associated will be only available for that specific + team. + +* In Issue Stages you can also relate a *QC State* to the stage. + + - When you move to a different stage an issue with *QC state* defined the + state of the issue will also change according to it. + - The other way around, if you change the state, the system will look for + an appropriate stage and if existing the issue will be move to that stage. + - If you change the *QC team* of an issue, the system will get the default + stage for that team and apply it to the issue. diff --git a/quality_control_issue/readme/CONTRIBUTORS.rst b/quality_control_issue/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..f06dd5c05 --- /dev/null +++ b/quality_control_issue/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Lois Rilo +* Jordi Ballester Alomar diff --git a/quality_control_issue/readme/CREDITS.rst b/quality_control_issue/readme/CREDITS.rst new file mode 100644 index 000000000..8354bd95a --- /dev/null +++ b/quality_control_issue/readme/CREDITS.rst @@ -0,0 +1,3 @@ +The development of this module has been financially supported by: + +* `Aleph Objects, Inc. `_ diff --git a/quality_control_issue/readme/DESCRIPTION.rst b/quality_control_issue/readme/DESCRIPTION.rst new file mode 100644 index 000000000..03b079224 --- /dev/null +++ b/quality_control_issue/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module extends the functionality of quality Control to allow you to +report and manage quality control issues. diff --git a/quality_control_issue/readme/ROADMAP.rst b/quality_control_issue/readme/ROADMAP.rst new file mode 100644 index 000000000..c03f790bb --- /dev/null +++ b/quality_control_issue/readme/ROADMAP.rst @@ -0,0 +1 @@ +* Add more dispositions: repair, refurbish... diff --git a/quality_control_issue/readme/USAGE.rst b/quality_control_issue/readme/USAGE.rst new file mode 100644 index 000000000..045b842f3 --- /dev/null +++ b/quality_control_issue/readme/USAGE.rst @@ -0,0 +1,20 @@ +To use Quality Control Issues, you need to: + +#. Go to *Quality Control > Issues > QC Issues* or to *Quality Control > + Dashboard* and click on *Issues* in any of your teams. +#. Click on create to report an issue. +#. Select the product and quantity for the issue. Optionally you can specify + a location and relate the issue to some *Problem*. + +To manage your Quality Control Problems, you have to: + +#. Go to *Quality Control > Problem Tracking > Problems* or to *Quality + Control > Dashboard* and click on *Problems* in any of your teams. + +Issue Dispositions: +~~~~~~~~~~~~~~~~~~~ + +You can perform the following actions in quality control issues 'in progress': + +* Scrap: Click on *Scrap Products* button. +* Create RMA: Install `rma_quality_control_issue` and see instructions there. diff --git a/quality_control_issue/security/ir.model.access.csv b/quality_control_issue/security/ir.model.access.csv new file mode 100644 index 000000000..eaf2e3511 --- /dev/null +++ b/quality_control_issue/security/ir.model.access.csv @@ -0,0 +1,11 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_user_qc_issue,qc.issue.user,quality_control_issue.model_qc_issue,quality_control.group_quality_control_user,1,1,1,0 +access_manager_qc_issue,qc.issue.manager,quality_control_issue.model_qc_issue,quality_control.group_quality_control_manager,1,1,1,1 +access_user_qc_problem_group,qc.problem.group.user,quality_control_issue.model_qc_problem_group,quality_control.group_quality_control_user,1,0,0,0 +access_manager_qc_problem_group,qc.problem.group.manager,quality_control_issue.model_qc_problem_group,quality_control.group_quality_control_manager,1,1,1,1 +access_user_qc_problem,qc.problem.user,quality_control_issue.model_qc_problem,quality_control.group_quality_control_user,1,1,1,0 +access_manager_qc_team,qc.problem.manager,quality_control_issue.model_qc_problem,quality_control.group_quality_control_manager,1,1,1,1 +access_user_qc_stage,qc.stage.user,quality_control_issue.model_qc_stage,quality_control.group_quality_control_user,1,0,0,0 +access_manager_qc_stage,qc.stage.manager,quality_control_issue.model_qc_stage,quality_control.group_quality_control_manager,1,1,1,1 +access_user_qc_issue_stage,qc.issue.stage.user,quality_control_issue.model_qc_issue_stage,quality_control.group_quality_control_user,1,0,0,0 +access_manager_qc_issue_stage,qc.issue.stage.manager,quality_control_issue.model_qc_issue_stage,quality_control.group_quality_control_manager,1,1,1,1 diff --git a/quality_control_issue/security/quality_control_issue_security.xml b/quality_control_issue/security/quality_control_issue_security.xml new file mode 100644 index 000000000..014abff4e --- /dev/null +++ b/quality_control_issue/security/quality_control_issue_security.xml @@ -0,0 +1,22 @@ + + + + + + qc.issue multi-company + + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + + + qc.issue multi-company + + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + + + diff --git a/quality_control_issue/static/description/icon.png b/quality_control_issue/static/description/icon.png new file mode 100644 index 000000000..c169a7609 Binary files /dev/null and b/quality_control_issue/static/description/icon.png differ diff --git a/quality_control_issue/static/description/icon.svg b/quality_control_issue/static/description/icon.svg new file mode 100644 index 000000000..333fc05ff --- /dev/null +++ b/quality_control_issue/static/description/icon.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/quality_control_issue/static/description/index.html b/quality_control_issue/static/description/index.html new file mode 100644 index 000000000..0f08f9bb3 --- /dev/null +++ b/quality_control_issue/static/description/index.html @@ -0,0 +1,494 @@ + + + + + + +Quality Control Issue + + + +
+

Quality Control Issue

+ + +

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

+

This module extends the functionality of quality Control to allow you to +report and manage quality control issues.

+

Table of contents

+ +
+

Configuration

+

To configure this module in order to take advantage of the kanban views you +need to create the stages for issues and problems. To create stages in +any kanban view click on Add New Column. Then you can reorder the stages +just dragging them.

+

In created stages you can configure them clicking on the gear button that +appears at the right of the stage name and clicking on Edit. Note the +following behaviors:

+
    +
  • You can set a Quality Control Team.
      +
    • Stages with no team set will be shared by all teams.
    • +
    • Stages with a team associated will be only available for that specific +team.
    • +
    +
  • +
  • In Issue Stages you can also relate a QC State to the stage.
      +
    • When you move to a different stage an issue with QC state defined the +state of the issue will also change according to it.
    • +
    • The other way around, if you change the state, the system will look for +an appropriate stage and if existing the issue will be move to that stage.
    • +
    • If you change the QC team of an issue, the system will get the default +stage for that team and apply it to the issue.
    • +
    +
  • +
+
+
+

Usage

+

To use Quality Control Issues, you need to:

+
    +
  1. Go to Quality Control > Issues > QC Issues or to Quality Control > +Dashboard and click on Issues in any of your teams.
  2. +
  3. Click on create to report an issue.
  4. +
  5. Select the product and quantity for the issue. Optionally you can specify +a location and relate the issue to some Problem.
  6. +
+

To manage your Quality Control Problems, you have to:

+
    +
  1. Go to Quality Control > Problem Tracking > Problems or to Quality +Control > Dashboard and click on Problems in any of your teams.
  2. +
+
+

Issue Dispositions:

+

You can perform the following actions in quality control issues ‘in progress’:

+
    +
  • Scrap: Click on Scrap Products button.
  • +
  • Create RMA: Install rma_quality_control_issue and see instructions there.
  • +
+
+
+
+

Known issues / Roadmap

+
    +
  • Add more dispositions: repair, refurbish…
  • +
+
+
+

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

+
    +
  • Eficent
  • +
+
+
+

Contributors

+ +
+
+

Other credits

+

The development of this module has been financially supported by:

+ +
+
+

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.

+

Current maintainer:

+

lreficent

+

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_issue/tests/__init__.py b/quality_control_issue/tests/__init__.py new file mode 100644 index 000000000..01cc8ee13 --- /dev/null +++ b/quality_control_issue/tests/__init__.py @@ -0,0 +1 @@ +from . import test_quality_control_issue diff --git a/quality_control_issue/tests/test_quality_control_issue.py b/quality_control_issue/tests/test_quality_control_issue.py new file mode 100644 index 000000000..79b937798 --- /dev/null +++ b/quality_control_issue/tests/test_quality_control_issue.py @@ -0,0 +1,235 @@ +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) + +from odoo.tests import common +from odoo.exceptions import AccessError + + +class TestQualityControlIssue(common.SingleTransactionCase): + + @classmethod + def setUpClass(cls): + super(TestQualityControlIssue, cls).setUpClass() + + cls.qc_problem_grp_obj = cls.env['qc.problem.group'] + cls.qc_problem_obj = cls.env['qc.problem'] + cls.qc_stage_obj = cls.env['qc.stage'] + cls.qc_issue_obj = cls.env['qc.issue'] + cls.qc_issue_stage_obj = cls.env['qc.issue.stage'] + cls.qc_team_obj = cls.env['qc.team'] + cls.stock_scrap_obj = cls.env['stock.scrap'] + cls.product = cls.env['product.product'] + cls.partner = cls.env['res.partner'] + cls.res_users = cls.env['res.users'] + cls.company = cls.env.ref('base.main_company') + + # Create Users and Groups + # User assigned to quality control user group + cls.group_qc_user = cls.env.ref( + 'quality_control.group_quality_control_user') + cls.group_user = cls.env.ref( + 'base.group_user') + cls.qc_user = cls._create_user( + 'qc_user', + [cls.group_qc_user, cls.group_user], + cls.company, + ) + # User assigned to quality control manager group + cls.qc_manager = cls.env.ref('base.user_root') + + # Create products + cls.product_1 = cls.product.create({ + 'name': 'Test Product 1', + 'type': 'product', + 'list_price': 100.0, + }) + cls.product_2 = cls.product.create({ + 'name': 'Test Product 2', + 'type': 'product', + 'list_price': 150.0, + }) + + # Create QC Team + cls.team = cls.qc_team_obj._get_default_qc_team_id( + user_id=cls.qc_user.id) + + @classmethod + def _create_user(self, login, groups, company): + """Create a user.""" + user = self.res_users.create({ + 'name': login, + 'login': login, + 'password': 'demo', + 'email': 'example@yourcompany.com', + 'company_id': company.id, + 'groups_id': [(6, 0, [group.id for group in groups])] + }) + return user + + def test_01_create_qc_problem_group(self): + """Test to create a QC problem group""" + # QC Manager creates QC Problem group + self.qc_problem_group = \ + self.qc_problem_grp_obj.sudo(self.qc_manager.id).create({ + 'name': "QC Problem Group Test", + 'company_id': self.company.id, + }) + + # QC User tries to create QC Problem group + with self.assertRaises(AccessError): + self.qc_problem_grp_obj.sudo(self.qc_user.id).create({ + 'name': "QC Problem Group Test", + 'company_id': self.company.id, + }) + # QC User lists all QC Problem groups + qc_problem_group_list = self.qc_problem_grp_obj. \ + sudo(self.qc_user.id).search([]).mapped('name') + self.assertEquals(len(qc_problem_group_list), 1, + 'User 2 should have read access ' + 'to all QC problem groups') + + def test_02_create_qc_problem(self): + """Test to create a QC problem""" + # Create first QC Problem Group + qc_problem_group = \ + self.qc_problem_grp_obj.sudo(self.qc_manager.id).create({ + 'name': "QC Problem Group Test", + 'company_id': self.company.id, + }) + # QC Manager creates QC Problem + self.qc_problem = \ + self.qc_problem_obj.sudo(self.qc_manager.id).create({ + 'name': "QC Problem Test", + 'company_id': self.company.id, + 'problem_group_id': qc_problem_group.id, + }) + + # QC User creates QC Problem + self.qc_problem_obj.sudo(self.qc_user.id).create({ + 'name': "QC Problem Test 2", + 'company_id': self.company.id, + 'problem_group_id': qc_problem_group.id, + }) + # QC User lists all QC Problem + qc_problem_list = self.qc_problem_obj. \ + sudo(self.qc_user.id).search([]).mapped('name') + self.assertEquals(len(qc_problem_list), 2, + 'User 2 should have read access ' + 'to all QC problem') + + def test_03_create_qc_stage(self): + """Test to create a QC stage""" + # QC Manager creates QC Stage + self.qc_stage = \ + self.qc_stage_obj.sudo(self.qc_manager.id).create({ + 'name': "QC Stage Test", + 'team_id': self.team.id, + }) + + # QC User tries to create QC Stage + with self.assertRaises(AccessError): + self.qc_stage_obj.sudo(self.qc_user.id).create({ + 'name': "QC Stage Test 2", + 'team_id': self.team.id, + }) + # QC User lists all QC Stage + qc_stage_list = self.qc_stage_obj. \ + sudo(self.qc_user.id).search([]).mapped('name') + self.assertEquals(len(qc_stage_list), 3, + 'User 1 should have read access ' + 'to all QC stages') + + def test_04_create_qc_issue(self): + """Test to create a QC issue""" + # QC Manager creates QC Issue + self.qc_issue = \ + self.qc_issue_obj.sudo(self.qc_manager.id).create({ + 'product_id': self.product_1.id, + 'product_qty': 1.0, + 'inspector_id': self.qc_manager.id, + 'product_uom': self.product_1.uom_id.id, + }) + + # QC User creates QC Issue + self.qc_issue_2 = \ + self.qc_issue_obj.sudo(self.qc_user.id).create({ + 'product_id': self.product_1.id, + 'product_qty': 1.0, + 'inspector_id': self.qc_user.id, + 'product_uom': self.product_1.uom_id.id, + }) + # QC User lists all QC Issue + qc_issue_list = self.qc_issue_obj. \ + sudo(self.qc_user.id).search([]).mapped('name') + self.assertEquals(len(qc_issue_list), 2, + 'User 2 should have read access ' + 'to all QC issues') + + def test_05_create_qc_issue_stage(self): + """Test to create a QC issue stage""" + # QC Manager creates QC Issue Stage + self.qc_issue_stage = \ + self.qc_issue_stage_obj.sudo(self.qc_manager.id).create({ + 'name': "QC Stage Test", + 'qc_team_id': self.team.id, + }) + + # QC User tries to create QC Issue Stage + with self.assertRaises(AccessError): + self.qc_issue_stage_obj.sudo(self.qc_user.id).create({ + 'name': "QC Stage Test 2", + 'qc_team_id': self.team.id, + }) + # QC User lists all QC Issue Stage + qc_issue_stage_list = self.qc_issue_stage_obj. \ + sudo(self.qc_user.id).search([]).mapped('name') + self.assertEquals(len(qc_issue_stage_list), 1, + 'User 2 should have read access ' + 'to all QC stages') + + def test_06_write_qc_issue(self): + """Test to write a QC issue stage""" + # QC Manager creates QC Issue + qc_issue = \ + self.qc_issue_obj.sudo(self.qc_manager.id).create({ + 'product_id': self.product_1.id, + 'product_qty': 1.0, + 'inspector_id': self.qc_manager.id, + 'product_uom': self.product_1.uom_id.id, + }) + + # Change product + qc_issue.sudo(self.qc_manager.id).write({ + 'product_id': self.product_2.id, + 'product_uom': self.product_2.uom_id.id, + }) + + # Change quantity + qc_issue.sudo(self.qc_manager.id).write({'product_qty': 2.0}) + + # Change inspector + qc_issue.sudo(self.qc_manager.id).write({ + 'inspector_id': self.qc_user.id + }) + + def test_07_scrap_products(self): + """Test scrapped products""" + # QC Manager creates QC Issue + qc_issue = \ + self.qc_issue_obj.sudo(self.qc_manager.id).create({ + 'product_id': self.product_1.id, + 'product_qty': 1.0, + 'inspector_id': self.qc_manager.id, + 'product_uom': self.product_1.uom_id.id, + }) + + res = qc_issue.scrap_products() + + scrap = self.stock_scrap_obj.\ + with_context(res.get('context', {})).create({}) + + scrap.action_validate() + qc_issue.action_view_stock_scrap() + + self.assertEquals(qc_issue.stock_scrap_qty, 1, + "Scrap quantity should equal 1") diff --git a/quality_control_issue/views/qc_issue_stage.xml b/quality_control_issue/views/qc_issue_stage.xml new file mode 100644 index 000000000..f301a21e2 --- /dev/null +++ b/quality_control_issue/views/qc_issue_stage.xml @@ -0,0 +1,34 @@ + + + + + + + qc.issue.stage.tree + qc.issue.stage + + + + + + + + + + + + Quality Control Issue Stages + qc.issue.stage + form + tree,form + + + + + diff --git a/quality_control_issue/views/qc_issue_view.xml b/quality_control_issue/views/qc_issue_view.xml new file mode 100644 index 000000000..b68c14614 --- /dev/null +++ b/quality_control_issue/views/qc_issue_view.xml @@ -0,0 +1,214 @@ + + + + + + + qc.issue.tree + qc.issue + + + + + + + + + + + + + qc.issue.form + qc.issue + +
+
+
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+
+
+ + + qc.issue.kanban + qc.issue + + + + + + +
+
+
+
+
+ +
+ +
+
+ +
+
+ Product: + Qty:
+ Location: +
+ +
+
+ +
+
+
+
+ + + + + + + + qc.issue.search + qc.issue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QC Issues + ir.actions.act_window + qc.issue + form + kanban,tree,form + + + + + + + diff --git a/quality_control_issue/views/qc_problem_group_view.xml b/quality_control_issue/views/qc_problem_group_view.xml new file mode 100644 index 000000000..7a5a0364f --- /dev/null +++ b/quality_control_issue/views/qc_problem_group_view.xml @@ -0,0 +1,48 @@ + + + + + + + qc.problem.group.tree + qc.problem.group + + + + + + + + + qc.problem.group.form + qc.problem.group + +
+ + + + + + + + + + +
+
+
+ + + Problem groups + ir.actions.act_window + qc.problem.group + form + + + + +
diff --git a/quality_control_issue/views/qc_problem_stage.xml b/quality_control_issue/views/qc_problem_stage.xml new file mode 100644 index 000000000..d4603c962 --- /dev/null +++ b/quality_control_issue/views/qc_problem_stage.xml @@ -0,0 +1,33 @@ + + + + + + + qc.stage.tree + qc.stage + + + + + + + + + + + Quality Control Problem Stages + qc.stage + form + tree,form + + + + + diff --git a/quality_control_issue/views/qc_problem_view.xml b/quality_control_issue/views/qc_problem_view.xml new file mode 100644 index 000000000..3a26f4bca --- /dev/null +++ b/quality_control_issue/views/qc_problem_view.xml @@ -0,0 +1,154 @@ + + + + + + + qc.problem.tree + qc.problem + + + + + + + + + + + qc.problem.form + qc.problem + +
+
+ +
+ + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+
+ + + qc.problem.kanban + qc.problem + + + + + + + +
+
+
+
+
+ + + +
+ +
+ issues +
+
+ +
+
+
+
+ + + + + + + + qc.problem.search + qc.problem + + + + + + + + + + + + + + + + + + + + + + + + + + Problem Tracking + ir.actions.act_window + qc.problem + form + kanban,tree,form + + + + + + + diff --git a/quality_control_issue/views/qc_team_dashboard_view.xml b/quality_control_issue/views/qc_team_dashboard_view.xml new file mode 100644 index 000000000..db5ae43b8 --- /dev/null +++ b/quality_control_issue/views/qc_team_dashboard_view.xml @@ -0,0 +1,56 @@ + + + + + + Issues by team + qc.issue + kanban,tree,form,pivot + { + 'search_default_qc_team_id': [active_id], + 'default_qc_team_id': active_id, + 'default_user_id': uid, + } + + +

Manage Quality Control Issues through your team flow.

+
+
+ + + Problem tracking + qc.problem + kanban,tree,form,pivot + { + 'search_default_qc_team_id': [active_id], + 'default_qc_team_id': active_id, + 'default_user_id': uid, + } + + +

Track problems through your team flow.

+
+
+ + + qc.team.dashboard - quality_control_issue + qc.team + + + + + + + + + + + + + +
diff --git a/quality_control_issue/views/stock_scrap_view.xml b/quality_control_issue/views/stock_scrap_view.xml new file mode 100644 index 000000000..2374b6d9f --- /dev/null +++ b/quality_control_issue/views/stock_scrap_view.xml @@ -0,0 +1,29 @@ + + + + + + + stock.scrap.form - quality_control_issue + stock.scrap + + + + + + + + + + stock.scrap.form2 - quality_control_issue + stock.scrap + + + + + + + + + diff --git a/setup/_metapackage/VERSION.txt b/setup/_metapackage/VERSION.txt index e9e8413fb..ce2e960ac 100644 --- a/setup/_metapackage/VERSION.txt +++ b/setup/_metapackage/VERSION.txt @@ -1 +1 @@ -12.0.20190712.0 \ No newline at end of file +12.0.20190715.0 \ No newline at end of file diff --git a/setup/_metapackage/setup.py b/setup/_metapackage/setup.py index 936227291..0d288012d 100644 --- a/setup/_metapackage/setup.py +++ b/setup/_metapackage/setup.py @@ -16,6 +16,7 @@ setuptools.setup( 'odoo12-addon-mrp_production_putaway_strategy', 'odoo12-addon-mrp_warehouse_calendar', 'odoo12-addon-quality_control', + 'odoo12-addon-quality_control_issue', 'odoo12-addon-quality_control_team', 'odoo12-addon-repair_refurbish', ], diff --git a/setup/quality_control_issue/odoo/addons/quality_control_issue b/setup/quality_control_issue/odoo/addons/quality_control_issue new file mode 120000 index 000000000..85a441bec --- /dev/null +++ b/setup/quality_control_issue/odoo/addons/quality_control_issue @@ -0,0 +1 @@ +../../../../quality_control_issue \ No newline at end of file diff --git a/setup/quality_control_issue/setup.py b/setup/quality_control_issue/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/quality_control_issue/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)