Merge PR #1271 into 17.0

Signed-off-by pedrobaeza
This commit is contained in:
OCA-git-bot
2024-05-27 18:24:54 +00:00
114 changed files with 83390 additions and 0 deletions

View File

@@ -0,0 +1,135 @@
===================
Quality Control OCA
===================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:f681e05b0e199eb1c9dc6fbaaf96e42573ad9f3de8c94fdb10219d577b0dc541
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github
:target: https://github.com/OCA/manufacture/tree/17.0/quality_control_oca
:alt: OCA/manufacture
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/manufacture-17-0/manufacture-17-0-quality_control_oca
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/manufacture&target_branch=17.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module provides a generic infrastructure for quality tests. The
idea is that it can be later reused for doing quality inspections on
production lots or any other area of the company.
**Table of contents**
.. contents::
:local:
Configuration
=============
- Question: The thing to be checked. We have two types of questions:
- Qualitative: The result is a description, color, yes, no...
- Quantitative: The result must be within a range.
- Possible values: The values chosen in qualitative questions.
- Test: The set of questions to be used in inspections.
- Once these values are set, we define the inspection.
We have a *generic* test that can be applied to any model: shipments,
invoices or product, or a *test related*, making it specific to a
particular product and that eg apply whenever food is sold or when
creating a batch.
Once these parameters are set, we can just pass the test. We create a
new inspection, selecting a relationship with the model (sale, stock
move...), and pressing "Select test" button to choose the test to pass.
Then, you must fill the lines depending on the chosen test.
The complete inspection workflow is:
Draft -> Confirmed -> Success
-> Failure (Pending approval) -> Approved
Known issues / Roadmap
======================
- Make translatable the trigger name.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/manufacture/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/manufacture/issues/new?body=module:%20quality_control_oca%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
-------
* AvanzOSC
* Tecnativa
Contributors
------------
- Oihane Crucelaegui <oihanecrucelaegi@avanzosc.es>
- Ana Juaristi <anajuaristi@avanzosc.es>
- Lois Rilo <lois.rilo@forgeflow.com>
- Simone Rubino <simone.rubino@agilebg.com>
- Juan Humanes <juan.humanes@guadaltech.es>
- Ignacio José Alés López <ignacio.ales@guadaltech.es>
- Pimolnat Suntian <pimolnats@ecosoft.co.th>
- `Tecnativa <https://www.tecnativa.com>`__:
- Pedro M. Baeza
- Carlos Roca
- `Trey Kilobytes de Soluciones SL <https://www.trey.es>`__:
- Vicent Cubells
- `APSL-Nagarro <https://www.apsl.tech>`__:
- Antoni Marroig <amarroig@apsl.net>
Other credits
-------------
- Originally based on the old
`nan_quality_control <https://github.com/NaN-tic/nan_quality_control>`__
modules from NaN·tic.
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.
This module is part of the `OCA/manufacture <https://github.com/OCA/manufacture/tree/17.0/quality_control_oca>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1,4 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import models
from . import wizard

View File

@@ -0,0 +1,32 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014-2021 Tecnativa Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017-2020 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Quality Control OCA",
"version": "17.0.1.0.0",
"category": "Quality Control",
"license": "AGPL-3",
"summary": "Generic infrastructure for quality tests.",
"author": "AvanzOSC, Tecnativa, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/manufacture",
"depends": ["product"],
"data": [
"data/quality_control_data.xml",
"security/quality_control_security.xml",
"security/ir.model.access.csv",
"wizard/qc_test_wizard_view.xml",
"views/qc_menus.xml",
"views/qc_inspection_view.xml",
"views/qc_test_category_view.xml",
"views/qc_test_view.xml",
"views/qc_trigger_view.xml",
"views/product_template_view.xml",
"views/product_category_view.xml",
],
"demo": ["demo/quality_control_demo.xml"],
"installable": True,
}

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2010 NaN Projectes de Programari Lliure, S.L.
Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
Copyright 2014 Oihane Crucelaegui - AvanzOSC
Copyright 2017 ForgeFlow S.L.
Copyright 2017 Simone Rubino - Agile Business Group
Copyright 2021 Tecnativa - Carlos Roca
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo noupdate="1">
<record id="qc_test_template_category_generic" model="qc.test.category">
<field name="name">Generic</field>
</record>
<record id="qc_test_template_category_referenced" model="qc.test.category">
<field name="name">Referenced</field>
</record>
<record forcecreate="True" id="decimal_quality_control" model="decimal.precision">
<field name="name">Quality Control</field>
<field name="digits">5</field>
</record>
<record id="seq_qc_inspection" model="ir.sequence">
<field name="name">Quality inspection</field>
<field name="code">qc.inspection</field>
<field name="prefix">QC-</field>
<field name="padding">6</field>
<field name="company_id" eval="False" />
</record>
</odoo>

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo noupdate="1">
<record model="qc.test" id="qc_test_1">
<field name="name">Generic Test (demo)</field>
<field name="type">generic</field>
<field name="active" eval="True" />
<field name="category" ref="qc_test_template_category_generic" />
</record>
<record model="qc.test.question" id="qc_test_question_1">
<field name="name">Overall quality</field>
<field name="test" ref="qc_test_1" />
<field name="type">qualitative</field>
</record>
<record model="qc.test.question.value" id="qc_test_question_value_1">
<field name="name">Good</field>
<field name="ok" eval="True" />
<field name="test_line" ref="qc_test_question_1" />
</record>
<record model="qc.test.question.value" id="qc_test_question_value_2">
<field name="name">Bad</field>
<field name="ok" eval="False" />
<field name="test_line" ref="qc_test_question_1" />
</record>
<record model="qc.test.question" id="qc_test_question_2">
<field name="name">Size</field>
<field name="test" ref="qc_test_1" />
<field name="type">quantitative</field>
<field name="min_value" eval="1.0" />
<field name="max_value" eval="10.0" />
<field name="uom_id" ref="uom.product_uom_unit" />
</record>
</odoo>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,973 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * quality_control
#
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
#: model:ir.model,name:quality_control.model_qc_trigger_line
msgid "Abstract line for defining triggers"
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.view_qc_test_set_test_form
msgid "Accept"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_needaction
msgid "Action Needed"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test__active
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category__active
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger__active
msgid "Active"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__activity_ids
msgid "Activities"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__activity_state
msgid "Activity State"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__possible_ql_values
#: model_terms:ir.ui.view,arch_db:quality_control.qc_test_question_form_view
msgid "Answers"
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
msgid "Approve"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__auto_generated
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_search_view
msgid "Auto-generated"
msgstr ""
#. module: quality_control
#: model:qc.test.question.value,name:quality_control.qc_test_question_value_2
msgid "Bad"
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
#: model_terms:ir.ui.view,arch_db:quality_control.view_qc_test_set_test_form
msgid "Cancel"
msgstr ""
#. module: quality_control
#: selection:qc.inspection,state:0
msgid "Canceled"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__test_uom_category
#: model:ir.model.fields,field_description:quality_control.field_qc_test__category
msgid "Category"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category__child_ids
msgid "Child categories"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__company_id
#: model:ir.model.fields,field_description:quality_control.field_qc_test__company_id
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger__company_id
msgid "Company"
msgstr ""
#. module: quality_control
#: model:ir.ui.menu,name:quality_control.menu_qc_config
msgid "Configuration"
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
msgid "Confirm"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection_line__test_uom_category
msgid "Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios."
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_line_search_view
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_search_view
msgid "Correct"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question_value__ok
msgid "Correct answer?"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__create_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__create_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_set_test__create_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_test__create_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category__create_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__create_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question_value__create_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger__create_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line__create_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line__create_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line__create_uid
msgid "Created by"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__create_date
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__create_date
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_set_test__create_date
#: model:ir.model.fields,field_description:quality_control.field_qc_test__create_date
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category__create_date
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__create_date
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question_value__create_date
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger__create_date
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line__create_date
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line__create_date
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line__create_date
msgid "Created on"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__date
msgid "Date"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__display_name
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__display_name
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_set_test__display_name
#: model:ir.model.fields,field_description:quality_control.field_qc_test__display_name
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category__display_name
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__display_name
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question_value__display_name
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger__display_name
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_line__display_name
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line__display_name
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line__display_name
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line__display_name
msgid "Display Name"
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
#: selection:qc.inspection,state:0
msgid "Draft"
msgstr ""
#. module: quality_control
#: code:addons/quality_control/models/qc_test_category.py:36
#, python-format
msgid "Error! You can not create recursive categories."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__external_notes
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
msgid "External notes"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_follower_ids
msgid "Followers"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category__complete_name
msgid "Full name"
msgstr ""
#. module: quality_control
#: selection:qc.test,type:0
#: model:qc.test.category,name:quality_control.qc_test_template_category_generic
msgid "Generic"
msgstr ""
#. module: quality_control
#: model:qc.test,name:quality_control.qc_test_1
msgid "Generic Test (demo)"
msgstr ""
#. module: quality_control
#: model:qc.test.question.value,name:quality_control.qc_test_question_value_1
msgid "Good"
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_line_search_view
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_search_view
msgid "Group by..."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__id
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__id
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_set_test__id
#: model:ir.model.fields,field_description:quality_control.field_qc_test__id
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category__id
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__id
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question_value__id
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger__id
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_line__id
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line__id
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line__id
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line__id
msgid "ID"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection__auto_generated
msgid "If an inspection is auto-generated, it can be canceled but not removed."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection__message_unread
msgid "If checked new messages require your attention."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection__message_needaction
msgid "If checked, new messages require your attention."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_trigger_line__partners
#: model:ir.model.fields,help:quality_control.field_qc_trigger_product_category_line__partners
#: model:ir.model.fields,help:quality_control.field_qc_trigger_product_line__partners
#: model:ir.model.fields,help:quality_control.field_qc_trigger_product_template_line__partners
msgid "If filled, the test will only be created when the action is done for one of the specified partners. If empty, the test will always be created."
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_line_search_view
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_search_view
msgid "Incorrect"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__inspection_id
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_line_search_view
msgid "Inspection"
msgstr ""
#. module: quality_control
#: model:ir.actions.act_window,name:quality_control.action_qc_inspection_line
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__inspection_lines
#: model:ir.ui.menu,name:quality_control.qc_inspection_lines_menu
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_line_tree_view
msgid "Inspection lines"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__name
msgid "Inspection number"
msgstr ""
#. module: quality_control
#: model:ir.actions.act_window,name:quality_control.action_qc_inspection
#: model:ir.ui.menu,name:quality_control.qc_inspection_menu
#: model:ir.ui.menu,name:quality_control.qc_inspection_menu_parent
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_tree_view
msgid "Inspections"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__internal_notes
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
msgid "Internal notes"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection____last_update
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line____last_update
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_set_test____last_update
#: model:ir.model.fields,field_description:quality_control.field_qc_test____last_update
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category____last_update
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question____last_update
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question_value____last_update
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger____last_update
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_line____last_update
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line____last_update
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line____last_update
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line____last_update
msgid "Last Modified on"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__write_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__write_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_set_test__write_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_test__write_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category__write_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__write_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question_value__write_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger__write_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line__write_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line__write_uid
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line__write_uid
msgid "Last Updated by"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__write_date
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__write_date
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_set_test__write_date
#: model:ir.model.fields,field_description:quality_control.field_qc_test__write_date
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category__write_date
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__write_date
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question_value__write_date
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger__write_date
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line__write_date
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line__write_date
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line__write_date
msgid "Last Updated on"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: quality_control
#: model:res.groups,name:quality_control.group_quality_control_manager
msgid "Manager"
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
msgid "Mark todo"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__max_value
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__max_value
msgid "Max"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection_line__max_value
msgid "Maximum valid value for a quantitative question."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_ids
msgid "Messages"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__min_value
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__min_value
msgid "Min"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection_line__min_value
msgid "Minimum valid value for a quantitative question."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test__name
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category__name
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__name
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question_value__name
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger__name
msgid "Name"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__notes
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__notes
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
msgid "Notes"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_has_error_counter
msgid "Number of error"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: quality_control
#: model:qc.test.question,name:quality_control.qc_test_question_1
msgid "Overall quality"
msgstr ""
#. module: quality_control
#: selection:qc.inspection,activity_state:0
msgid "Overdue"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test_category__parent_id
msgid "Parent category"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_line__partners
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line__partners
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line__partners
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line__partners
msgid "Partners"
msgstr ""
#. module: quality_control
#: selection:qc.inspection,activity_state:0
msgid "Planned"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_qc_test_question_value
msgid "Possible values for qualitative questions."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test__fill_correct_values
msgid "Pre-fill with correct values"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_product_product
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__product_id
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__product_id
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line__product
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_line_search_view
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_search_view
msgid "Product"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_product_category
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line__product_category
msgid "Product Category"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_product_template
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line__product_template
msgid "Product Template"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection__product_id
#: model:ir.model.fields,help:quality_control.field_qc_inspection_line__product_id
msgid "Product associated with the inspection"
msgstr ""
#. module: quality_control
#: selection:qc.inspection.line,question_type:0
#: selection:qc.test.question,type:0
msgid "Qualitative"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__qualitative_value
msgid "Qualitative value"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__ql_values
msgid "Qualitative values"
msgstr ""
#. module: quality_control
#: model:ir.module.category,name:quality_control.module_category_quality_control
#: model:ir.ui.menu,name:quality_control.qc_menu
#: model_terms:ir.ui.view,arch_db:quality_control.product_category_qc_form_view
#: model_terms:ir.ui.view,arch_db:quality_control.product_template_qc_form_view
msgid "Quality control"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_qc_inspection
msgid "Quality control inspection"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_qc_inspection_line
msgid "Quality control inspection line"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_qc_test_question
msgid "Quality control question"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_qc_test
msgid "Quality control test"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_qc_trigger
#: model_terms:ir.ui.view,arch_db:quality_control.qc_trigger_form_view
msgid "Quality control trigger"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_product_category__qc_triggers
#: model:ir.model.fields,field_description:quality_control.field_product_product__qc_triggers
#: model:ir.model.fields,field_description:quality_control.field_product_template__qc_triggers
#: model_terms:ir.ui.view,arch_db:quality_control.product_category_qc_form_view
#: model_terms:ir.ui.view,arch_db:quality_control.product_template_qc_form_view
#: model_terms:ir.ui.view,arch_db:quality_control.qc_trigger_tree_view
msgid "Quality control triggers"
msgstr ""
#. module: quality_control
#: selection:qc.inspection,state:0
msgid "Quality failed"
msgstr ""
#. module: quality_control
#: selection:qc.inspection,state:0
msgid "Quality success"
msgstr ""
#. module: quality_control
#: selection:qc.inspection.line,question_type:0
#: selection:qc.test.question,type:0
msgid "Quantitative"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__quantitative_value
msgid "Quantitative value"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__qty
msgid "Quantity"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__name
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_line_search_view
msgid "Question"
msgstr ""
#. module: quality_control
#: code:addons/quality_control/models/qc_test.py:71
#, python-format
msgid "Question '%s' is not valid: minimum value can't be higher than maximum value."
msgstr ""
#. module: quality_control
#: code:addons/quality_control/models/qc_test.py:62
#, python-format
msgid "Question '%s' is not valid: you have to mark at least one value as OK."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__question_type
msgid "Question type"
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_test_question_form_view
msgid "Question value"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test__test_lines
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
#: model_terms:ir.ui.view,arch_db:quality_control.qc_test_form_view
msgid "Questions"
msgstr ""
#. module: quality_control
#: selection:qc.inspection,state:0
msgid "Ready"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__object_id
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_search_view
msgid "Reference"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test__object_id
msgid "Reference object"
msgstr ""
#. module: quality_control
#: model:qc.test.category,name:quality_control.qc_test_template_category_referenced
msgid "Referenced"
msgstr ""
#. module: quality_control
#: selection:qc.test,type:0
msgid "Related"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__user
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_line__user
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line__user
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line__user
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line__user
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_search_view
msgid "Responsible"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_search_view
msgid "Search inspection"
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_line_search_view
msgid "Search inspection line"
msgstr ""
#. module: quality_control
#: model:ir.actions.act_window,name:quality_control.action_qc_inspection_set_test
#: model_terms:ir.ui.view,arch_db:quality_control.view_qc_test_set_test_form
msgid "Select test"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger__partner_selectable
msgid "Selectable by partner"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__sequence
msgid "Sequence"
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_form_view
msgid "Set test"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_qc_inspection_set_test
msgid "Set test for inspection"
msgstr ""
#. module: quality_control
#: model:qc.test.question,name:quality_control.qc_test_question_2
msgid "Size"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__state
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_search_view
msgid "State"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection__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
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__success
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_line_search_view
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_search_view
msgid "Success"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__success
msgid "Success?"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__test
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_set_test__test
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__test
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_line__test
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line__test
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line__test
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line__test
#: model_terms:ir.ui.view,arch_db:quality_control.qc_inspection_search_view
#: model_terms:ir.ui.view,arch_db:quality_control.qc_test_form_view
msgid "Test"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__test_uom_id
msgid "Test UoM"
msgstr ""
#. module: quality_control
#: model:ir.actions.act_window,name:quality_control.action_qc_test_category
#: model:ir.ui.menu,name:quality_control.qc_test_category_menu
#: model_terms:ir.ui.view,arch_db:quality_control.qc_test_category_tree_view
msgid "Test categories"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_qc_test_category
msgid "Test category"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__test_line
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question_value__test_line
#: model_terms:ir.ui.view,arch_db:quality_control.qc_test_question_form_view
msgid "Test question"
msgstr ""
#. module: quality_control
#: model:ir.actions.act_window,name:quality_control.action_qc_test
#: model:ir.ui.menu,name:quality_control.qc_menu_test_parent
#: model:ir.ui.menu,name:quality_control.qc_test_menu
#: model_terms:ir.ui.view,arch_db:quality_control.qc_test_tree_view
msgid "Tests"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_test_category__active
msgid "This field allows you to hide the category without removing it."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection__success
msgid "This field will be marked if all tests have succeeded."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_trigger__partner_selectable
msgid "This technical field is to allow to filter by partner in triggers"
msgstr ""
#. module: quality_control
#: selection:qc.inspection,activity_state:0
msgid "Today"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_line__trigger
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_category_line__trigger
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_line__trigger
#: model:ir.model.fields,field_description:quality_control.field_qc_trigger_product_template_line__trigger
msgid "Trigger"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test__type
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__type
msgid "Type"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_unread
msgid "Unread Messages"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__uom_id
msgid "UoM"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection_line__test_uom_id
msgid "UoM for minimum and maximum values for a quantitative question."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection_line__uom_id
msgid "UoM of the inspection value for a quantitative question."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_test_question__uom_id
msgid "Uom"
msgstr ""
#. module: quality_control
#: model:res.groups,name:quality_control.group_quality_control_user
msgid "User"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection_line__valid_values
msgid "Valid values"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection_line__qualitative_value
msgid "Value of the result for a qualitative question."
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection_line__quantitative_value
msgid "Value of the result for a quantitative question."
msgstr ""
#. module: quality_control
#: selection:qc.inspection,state:0
msgid "Waiting supervisor approval"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,field_description:quality_control.field_qc_inspection__website_message_ids
msgid "Website Messages"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_inspection__website_message_ids
msgid "Website communication history"
msgstr ""
#. module: quality_control
#: model:ir.model.fields,help:quality_control.field_qc_test_question_value__ok
msgid "When this field is marked, the answer is considered correct."
msgstr ""
#. module: quality_control
#: code:addons/quality_control/models/qc_inspection.py:106
#, python-format
msgid "You cannot remove an auto-generated inspection."
msgstr ""
#. module: quality_control
#: code:addons/quality_control/models/qc_inspection.py:109
#, python-format
msgid "You cannot remove an inspection that is not in draft state."
msgstr ""
#. module: quality_control
#: code:addons/quality_control/models/qc_inspection.py:122
#, python-format
msgid "You must first set the test to perform."
msgstr ""
#. module: quality_control
#: code:addons/quality_control/models/qc_inspection.py:137
#, python-format
msgid "You should provide a unit of measure for quantitative questions."
msgstr ""
#. module: quality_control
#: code:addons/quality_control/models/qc_inspection.py:132
#, python-format
msgid "You should provide an answer for all qualitative questions."
msgstr ""
#. module: quality_control
#: model_terms:ir.ui.view,arch_db:quality_control.view_qc_test_set_test_form
msgid "or"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_qc_trigger_product_category_line
msgid "qc.trigger.product_category_line"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_qc_trigger_product_line
msgid "qc.trigger.product_line"
msgstr ""
#. module: quality_control
#: model:ir.model,name:quality_control.model_qc_trigger_product_template_line
msgid "qc.trigger.product_template_line"
msgstr ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import qc_trigger
from . import qc_trigger_line
from . import qc_test_category
from . import qc_test
from . import qc_inspection
from . import product_product
from . import product_template
from . import product_category
from . import qc_trigger_product_category_line
from . import qc_trigger_product_line
from . import qc_trigger_product_template_line

View File

@@ -0,0 +1,18 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ProductCategory(models.Model):
_inherit = "product.category"
qc_triggers = fields.One2many(
comodel_name="qc.trigger.product_category_line",
inverse_name="product_category",
string="Quality control triggers",
)

View File

@@ -0,0 +1,18 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ProductProduct(models.Model):
_inherit = "product.product"
qc_triggers = fields.One2many(
comodel_name="qc.trigger.product_line",
inverse_name="product",
string="Quality control triggers",
)

View File

@@ -0,0 +1,18 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ProductTemplate(models.Model):
_inherit = "product.template"
qc_triggers = fields.One2many(
comodel_name="qc.trigger.product_template_line",
inverse_name="product_template",
string="Quality control triggers",
)

View File

@@ -0,0 +1,334 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, api, exceptions, fields, models
from odoo.tools import formatLang
class QcInspection(models.Model):
_name = "qc.inspection"
_description = "Quality control inspection"
_inherit = ["mail.thread", "mail.activity.mixin"]
@api.depends("inspection_lines", "inspection_lines.success")
def _compute_success(self):
for i in self:
i.success = all([x.success for x in i.inspection_lines])
def object_selection_values(self):
"""
Overridable method for adding more object models to an inspection.
:return: A list with the selection's possible values.
"""
return [("product.product", "Product")]
@api.depends("object_id")
def _compute_product_id(self):
for i in self:
if i.object_id and i.object_id._name == "product.product":
i.product_id = i.object_id
else:
i.product_id = False
name = fields.Char(
string="Inspection number",
required=True,
default="/",
copy=False,
)
date = fields.Datetime(
required=True,
copy=False,
default=fields.Datetime.now,
)
object_id = fields.Reference(
string="Reference",
selection="object_selection_values",
ondelete="set null",
)
product_id = fields.Many2one(
comodel_name="product.product",
compute="_compute_product_id",
store=True,
help="Product associated with the inspection",
)
qty = fields.Float(string="Quantity", default=1.0)
test = fields.Many2one(comodel_name="qc.test")
inspection_lines = fields.One2many(
comodel_name="qc.inspection.line",
inverse_name="inspection_id",
)
internal_notes = fields.Text(string="Internal notes")
external_notes = fields.Text()
state = fields.Selection(
[
("draft", "Draft"),
("ready", "Ready"),
("waiting", "Waiting supervisor approval"),
("success", "Quality success"),
("failed", "Quality failed"),
("canceled", "Canceled"),
],
default="draft",
tracking=True,
)
success = fields.Boolean(
compute="_compute_success",
help="This field will be marked if all tests have succeeded.",
store=True,
)
auto_generated = fields.Boolean(
string="Auto-generated",
copy=False,
help="If an inspection is auto-generated, it can be canceled but not removed.",
)
company_id = fields.Many2one(
comodel_name="res.company",
string="Company",
default=lambda self: self.env.company,
)
user = fields.Many2one(
comodel_name="res.users",
string="Responsible",
tracking=True,
default=lambda self: self.env.user,
)
@api.model_create_multi
def create(self, val_list):
for vals in val_list:
if vals.get("name", "/") == "/":
vals["name"] = self.env["ir.sequence"].next_by_code("qc.inspection")
return super().create(vals)
def unlink(self):
for inspection in self:
if inspection.auto_generated:
raise exceptions.UserError(
_("You cannot remove an auto-generated inspection.")
)
if inspection.state != "draft":
raise exceptions.UserError(
_("You cannot remove an inspection that is not in draft state.")
)
return super().unlink()
def action_draft(self):
self.write({"state": "draft"})
def action_todo(self):
for inspection in self:
if not inspection.test:
raise exceptions.UserError(_("You must first set the test to perform."))
self.write({"state": "ready"})
def action_confirm(self):
for inspection in self:
for line in inspection.inspection_lines:
if line.question_type == "qualitative" and not line.qualitative_value:
raise exceptions.UserError(
_(
"You should provide an answer for all "
"qualitative questions."
)
)
elif line.question_type != "qualitative" and not line.uom_id:
raise exceptions.UserError(
_(
"You should provide a unit of measure for "
"quantitative questions."
)
)
if inspection.success:
inspection.state = "success"
else:
inspection.state = "waiting"
def action_approve(self):
for inspection in self:
if inspection.success:
inspection.state = "success"
else:
inspection.state = "failed"
def action_cancel(self):
self.write({"state": "canceled"})
def set_test(self, trigger_line, force_fill=False):
for inspection in self:
header = self._prepare_inspection_header(inspection.object_id, trigger_line)
del header["state"] # don't change current status
del header["auto_generated"] # don't change auto_generated flag
del header["user"] # don't change current user
inspection.write(header)
inspection.inspection_lines.unlink()
inspection.inspection_lines = inspection._prepare_inspection_lines(
trigger_line.test, force_fill=force_fill
)
def _make_inspection(self, object_ref, trigger_line):
"""Overridable hook method for creating inspection from test.
:param object_ref: Object instance
:param trigger_line: Trigger line instance
:return: Inspection object
"""
inspection = self.create(
self._prepare_inspection_header(object_ref, trigger_line)
)
inspection.set_test(trigger_line)
return inspection
def _prepare_inspection_header(self, object_ref, trigger_line):
"""Overridable hook method for preparing inspection header.
:param object_ref: Object instance
:param trigger_line: Trigger line instance
:return: List of values for creating the inspection
"""
return {
"object_id": object_ref and f"{object_ref._name},{object_ref.id}" or False,
"state": "ready",
"test": trigger_line.test.id,
"user": trigger_line.user.id,
"auto_generated": True,
}
def _prepare_inspection_lines(self, test, force_fill=False):
new_data = []
for line in test.test_lines:
data = self._prepare_inspection_line(
test, line, fill=test.fill_correct_values or force_fill
)
new_data.append((0, 0, data))
return new_data
def _prepare_inspection_line(self, test, line, fill=None):
data = {
"name": line.name,
"test_line": line.id,
"notes": line.notes,
"min_value": line.min_value,
"max_value": line.max_value,
"test_uom_id": line.uom_id.id,
"uom_id": line.uom_id.id,
"question_type": line.type,
"possible_ql_values": [x.id for x in line.ql_values],
}
if fill:
if line.type == "qualitative":
# Fill with the first correct value found
for value in line.ql_values:
if value.ok:
data["qualitative_value"] = value.id
break
else:
# Fill with a value inside the interval
data["quantitative_value"] = (line.min_value + line.max_value) * 0.5
return data
class QcInspectionLine(models.Model):
_name = "qc.inspection.line"
_description = "Quality control inspection line"
@api.depends(
"question_type",
"uom_id",
"test_uom_id",
"max_value",
"min_value",
"quantitative_value",
"qualitative_value",
"possible_ql_values",
)
def _compute_quality_test_check(self):
for insp_line in self:
if insp_line.question_type == "qualitative":
insp_line.success = insp_line.qualitative_value.ok
else:
if insp_line.uom_id.id == insp_line.test_uom_id.id:
amount = insp_line.quantitative_value
else:
amount = self.env["uom.uom"]._compute_quantity(
insp_line.quantitative_value, insp_line.test_uom_id.id
)
insp_line.success = insp_line.max_value >= amount >= insp_line.min_value
@api.depends(
"possible_ql_values", "min_value", "max_value", "test_uom_id", "question_type"
)
def _compute_valid_values(self):
for insp_line in self:
if insp_line.question_type == "qualitative":
insp_line.valid_values = ", ".join(
[x.name for x in insp_line.possible_ql_values if x.ok]
)
else:
insp_line.valid_values = "{} ~ {}".format(
formatLang(self.env, insp_line.min_value),
formatLang(self.env, insp_line.max_value),
)
if self.env.ref("uom.group_uom") in self.env.user.groups_id:
insp_line.valid_values += " %s" % insp_line.test_uom_id.name
inspection_id = fields.Many2one(
comodel_name="qc.inspection", string="Inspection", ondelete="cascade"
)
name = fields.Char(string="Question")
product_id = fields.Many2one(
comodel_name="product.product",
related="inspection_id.product_id",
store=True,
)
test_line = fields.Many2one(comodel_name="qc.test.question", string="Test question")
possible_ql_values = fields.Many2many(
comodel_name="qc.test.question.value", string="Answers"
)
quantitative_value = fields.Float(
string="Quantitative value",
digits="Quality Control",
help="Value of the result for a quantitative question.",
)
qualitative_value = fields.Many2one(
comodel_name="qc.test.question.value",
string="Qualitative value",
help="Value of the result for a qualitative question.",
domain="[('id', 'in', possible_ql_values)]",
)
notes = fields.Text()
min_value = fields.Float(
string="Min",
digits="Quality Control",
help="Minimum valid value for a quantitative question.",
)
max_value = fields.Float(
string="Max",
digits="Quality Control",
help="Maximum valid value for a quantitative question.",
)
test_uom_id = fields.Many2one(
comodel_name="uom.uom",
string="Test UoM",
help="UoM for minimum and maximum values for a quantitative " "question.",
)
test_uom_category = fields.Many2one(
comodel_name="uom.category", related="test_uom_id.category_id", store=True
)
uom_id = fields.Many2one(
comodel_name="uom.uom",
string="UoM",
domain="[('category_id', '=', test_uom_category)]",
help="UoM of the inspection value for a quantitative question.",
)
question_type = fields.Selection(
[("qualitative", "Qualitative"), ("quantitative", "Quantitative")],
)
valid_values = fields.Char(
string="Valid values", store=True, compute="_compute_valid_values"
)
success = fields.Boolean(
compute="_compute_quality_test_check", string="Success?", store=True
)

View File

@@ -0,0 +1,116 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, api, exceptions, fields, models
class QcTest(models.Model):
"""
A test is a group of questions along with the values that make them valid.
"""
_name = "qc.test"
_description = "Quality control test"
_inherit = "mail.thread"
def object_selection_values(self):
return set()
@api.onchange("type")
def onchange_type(self):
if self.type == "generic":
self.object_id = False
active = fields.Boolean(default=True)
name = fields.Char(required=True, translate=True)
test_lines = fields.One2many(
comodel_name="qc.test.question",
inverse_name="test",
string="Questions",
copy=True,
)
object_id = fields.Reference(
string="Reference object",
selection="object_selection_values",
)
fill_correct_values = fields.Boolean(string="Pre-fill with correct values")
type = fields.Selection(
[("generic", "Generic"), ("related", "Related")],
required=True,
default="generic",
)
category = fields.Many2one(comodel_name="qc.test.category")
company_id = fields.Many2one(
comodel_name="res.company",
default=lambda self: self.env.company,
)
class QcTestQuestion(models.Model):
"""Each test line is a question with its valid value(s)."""
_name = "qc.test.question"
_description = "Quality control question"
_order = "sequence, id"
@api.constrains("ql_values")
def _check_valid_answers(self):
for tc in self:
if (
tc.type == "qualitative"
and tc.ql_values
and not tc.ql_values.filtered("ok")
):
raise exceptions.ValidationError(
_(
"Question '%s' is not valid: "
"you have to mark at least one value as OK."
)
% tc.display_name
)
@api.constrains("min_value", "max_value")
def _check_valid_range(self):
for tc in self:
if tc.type == "quantitative" and tc.min_value > tc.max_value:
raise exceptions.ValidationError(
_(
"Question '%s' is not valid: "
"minimum value can't be higher than maximum value."
)
% tc.display_name
)
sequence = fields.Integer(required=True, default="10")
test = fields.Many2one(comodel_name="qc.test")
name = fields.Char(required=True, translate=True)
type = fields.Selection(
[("qualitative", "Qualitative"), ("quantitative", "Quantitative")],
required=True,
)
ql_values = fields.One2many(
comodel_name="qc.test.question.value",
inverse_name="test_line",
string="Qualitative values",
copy=True,
)
notes = fields.Text()
min_value = fields.Float(string="Min", digits="Quality Control")
max_value = fields.Float(string="Max", digits="Quality Control")
uom_id = fields.Many2one(comodel_name="uom.uom", string="Uom")
class QcTestQuestionValue(models.Model):
_name = "qc.test.question.value"
_description = "Possible values for qualitative questions."
test_line = fields.Many2one(comodel_name="qc.test.question", string="Test question")
name = fields.Char(required=True, translate=True)
ok = fields.Boolean(
string="Correct answer?",
help="When this field is marked, the answer is considered correct.",
)

View File

@@ -0,0 +1,47 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, api, exceptions, fields, models
class QcTestTemplateCategory(models.Model):
_name = "qc.test.category"
_description = "Test category"
@api.depends("name", "parent_id")
def _compute_get_complete_name(self):
for record in self:
names = [record.name or ""]
parent = record.parent_id
while parent:
names.append(parent.name)
parent = parent.parent_id
record.complete_name = " / ".join(reversed(names))
@api.constrains("parent_id")
def _check_parent_id(self):
if not self._check_recursion():
raise exceptions.UserError(
_("Error! You can not create recursive categories.")
)
name = fields.Char(required=True, translate=True)
parent_id = fields.Many2one(
comodel_name="qc.test.category", string="Parent category"
)
complete_name = fields.Char(
compute="_compute_get_complete_name", string="Full name"
)
child_ids = fields.One2many(
comodel_name="qc.test.category",
inverse_name="parent_id",
string="Child categories",
)
active = fields.Boolean(
default=True,
help="This field allows you to hide the category without removing it.",
)

View File

@@ -0,0 +1,26 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class QcTrigger(models.Model):
_name = "qc.trigger"
_description = "Quality control trigger"
name = fields.Char(required=True, translate=True)
active = fields.Boolean(default=True)
company_id = fields.Many2one(
comodel_name="res.company",
string="Company",
default=lambda self: self.env.company,
)
partner_selectable = fields.Boolean(
string="Selectable by partner",
default=False,
help="This technical field is to allow to filter by partner in triggers",
)

View File

@@ -0,0 +1,51 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
def _filter_trigger_lines(trigger_lines):
filtered_trigger_lines = []
unique_tests = []
for trigger_line in trigger_lines:
if trigger_line.test not in unique_tests:
filtered_trigger_lines.append(trigger_line)
unique_tests.append(trigger_line.test)
return filtered_trigger_lines
class QcTriggerLine(models.AbstractModel):
_name = "qc.trigger.line"
_inherit = "mail.thread"
_description = "Abstract line for defining triggers"
trigger = fields.Many2one(comodel_name="qc.trigger", required=True)
test = fields.Many2one(comodel_name="qc.test", required=True)
user = fields.Many2one(
comodel_name="res.users",
string="Responsible",
tracking=True,
default=lambda self: self.env.user,
)
partners = fields.Many2many(
comodel_name="res.partner",
help="If filled, the test will only be created when the action is done"
" for one of the specified partners. If empty, the test will always be"
" created.",
domain="[('parent_id', '=', False)]",
)
def get_trigger_line_for_product(self, trigger, product, partner=False):
"""Overridable method for getting trigger_line associated to a product.
Each inherited model will complete this module to make the search by
product, template or category.
:param trigger: Trigger instance.
:param product: Product instance.
:return: Set of trigger_lines that matches to the given product and
trigger.
"""
return set()

View File

@@ -0,0 +1,34 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class QcTriggerProductCategoryLine(models.Model):
_inherit = "qc.trigger.line"
_name = "qc.trigger.product_category_line"
_description = "Quality Control Trigger Product Category Line"
product_category = fields.Many2one(comodel_name="product.category")
def get_trigger_line_for_product(self, trigger, product, partner=False):
trigger_lines = super().get_trigger_line_for_product(
trigger, product, partner=partner
)
category = product.categ_id
while category:
for trigger_line in category.qc_triggers.filtered(
lambda r: r.trigger == trigger
and (
not r.partners
or not partner
or partner.commercial_partner_id in r.partners
)
):
trigger_lines.add(trigger_line)
category = category.parent_id
return trigger_lines

View File

@@ -0,0 +1,32 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class QcTriggerProductLine(models.Model):
_inherit = "qc.trigger.line"
_name = "qc.trigger.product_line"
_description = "Quality Control Trigger Product Line"
product = fields.Many2one(comodel_name="product.product")
def get_trigger_line_for_product(self, trigger, product, partner=False):
trigger_lines = super().get_trigger_line_for_product(
trigger, product, partner=partner
)
for trigger_line in product.qc_triggers.filtered(
lambda r: r.trigger == trigger
and (
not r.partners
or not partner
or partner.commercial_partner_id in r.partners
)
and r.test.active
):
trigger_lines.add(trigger_line)
return trigger_lines

View File

@@ -0,0 +1,32 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class QcTriggerProductTemplateLine(models.Model):
_inherit = "qc.trigger.line"
_name = "qc.trigger.product_template_line"
_description = "Quality Control Trigger Product Template Line"
product_template = fields.Many2one(comodel_name="product.template")
def get_trigger_line_for_product(self, trigger, product, partner=False):
trigger_lines = super().get_trigger_line_for_product(
trigger, product, partner=partner
)
for trigger_line in product.product_tmpl_id.qc_triggers.filtered(
lambda r: r.trigger == trigger
and (
not r.partners
or not partner
or partner.commercial_partner_id in r.partners
)
and r.test.active
):
trigger_lines.add(trigger_line)
return trigger_lines

View File

@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -0,0 +1,22 @@
- Question: The thing to be checked. We have two types of questions:
- Qualitative: The result is a description, color, yes, no...
- Quantitative: The result must be within a range.
- Possible values: The values chosen in qualitative questions.
- Test: The set of questions to be used in inspections.
- Once these values are set, we define the inspection.
We have a *generic* test that can be applied to any model: shipments,
invoices or product, or a *test related*, making it specific to a
particular product and that eg apply whenever food is sold or when
creating a batch.
Once these parameters are set, we can just pass the test. We create a
new inspection, selecting a relationship with the model (sale, stock
move...), and pressing "Select test" button to choose the test to pass.
Then, you must fill the lines depending on the chosen test.
The complete inspection workflow is:
> Draft -\> Confirmed -\> Success
>
> -\> Failure (Pending approval) -\> Approved

View File

@@ -0,0 +1,14 @@
- Oihane Crucelaegui \<<oihanecrucelaegi@avanzosc.es>\>
- Ana Juaristi \<<anajuaristi@avanzosc.es>\>
- Lois Rilo \<<lois.rilo@forgeflow.com>\>
- Simone Rubino \<<simone.rubino@agilebg.com>\>
- Juan Humanes \<<juan.humanes@guadaltech.es>\>
- Ignacio José Alés López \<<ignacio.ales@guadaltech.es>\>
- Pimolnat Suntian \<<pimolnats@ecosoft.co.th>\>
- [Tecnativa](https://www.tecnativa.com):
- Pedro M. Baeza
- Carlos Roca
- [Trey Kilobytes de Soluciones SL](https://www.trey.es):
- Vicent Cubells
- [APSL-Nagarro](https://www.apsl.tech):
- Antoni Marroig \<<amarroig@apsl.net>\>

View File

@@ -0,0 +1,2 @@
- Originally based on the old [nan_quality_control](https://github.com/NaN-tic/nan_quality_control) modules from
NaN·tic.

View File

@@ -0,0 +1,3 @@
This module provides a generic infrastructure for quality tests. The
idea is that it can be later reused for doing quality inspections on
production lots or any other area of the company.

View File

@@ -0,0 +1 @@
- Make translatable the trigger name.

View File

@@ -0,0 +1,20 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_user_qc_inspection,qc_inspection,model_qc_inspection,group_quality_control_user,1,1,1,1
access_user_qc_inspection_line,qc_inspection_line,model_qc_inspection_line,group_quality_control_user,1,1,1,1
access_user_qc_test,qc_test user,model_qc_test,group_quality_control_user,1,0,0,0
access_manager_qc_test,qc_test manager,model_qc_test,group_quality_control_manager,1,1,1,1
access_user_qc_test_question,qc_test_question user,model_qc_test_question,group_quality_control_user,1,0,0,0
access_manager_qc_test_question,qc_test_question manager,model_qc_test_question,group_quality_control_manager,1,1,1,1
access_user_qc_test_question_value,qc_test_question_value user,model_qc_test_question_value,group_quality_control_user,1,0,0,0
access_manager_qc_test_question_value,qc_test_question_value manager,model_qc_test_question_value,group_quality_control_manager,1,1,1,1
access_user_qc_test_category,qc_test_category user,model_qc_test_category,group_quality_control_user,1,0,0,0
access_manager_qc_test_category,qc_test_category manager,model_qc_test_category,group_quality_control_manager,1,1,1,1
access_user_qc_trigger,qc_trigger user,model_qc_trigger,group_quality_control_user,1,0,0,0
access_manager_qc_trigger,qc_trigger manager,model_qc_trigger,group_quality_control_manager,1,1,1,1
access_user_qc_trigger_product_category_line,qc_trigger_product_category_line user,model_qc_trigger_product_category_line,group_quality_control_user,1,0,0,0
access_manager_qc_trigger_product_category_line,qc_trigger_product_category_line manager,model_qc_trigger_product_category_line,group_quality_control_manager,1,1,1,1
access_user_qc_trigger_product_template_line,qc_trigger_product_template_line user,model_qc_trigger_product_template_line,group_quality_control_user,1,0,0,0
access_manager_qc_trigger_product_template_line,qc_trigger_product_template_line manager,model_qc_trigger_product_template_line,group_quality_control_manager,1,1,1,1
access_user_qc_trigger_product_line,qc_trigger_product_line user,model_qc_trigger_product_line,group_quality_control_user,1,0,0,0
access_manager_qc_trigger_product_line,qc_trigger_product_line manager,model_qc_trigger_product_line,group_quality_control_manager,1,1,1,1
access_user_qc_inspection_set_test,qc_inspection_set_test user,model_qc_inspection_set_test,group_quality_control_user,1,1,1,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_user_qc_inspection qc_inspection model_qc_inspection group_quality_control_user 1 1 1 1
3 access_user_qc_inspection_line qc_inspection_line model_qc_inspection_line group_quality_control_user 1 1 1 1
4 access_user_qc_test qc_test user model_qc_test group_quality_control_user 1 0 0 0
5 access_manager_qc_test qc_test manager model_qc_test group_quality_control_manager 1 1 1 1
6 access_user_qc_test_question qc_test_question user model_qc_test_question group_quality_control_user 1 0 0 0
7 access_manager_qc_test_question qc_test_question manager model_qc_test_question group_quality_control_manager 1 1 1 1
8 access_user_qc_test_question_value qc_test_question_value user model_qc_test_question_value group_quality_control_user 1 0 0 0
9 access_manager_qc_test_question_value qc_test_question_value manager model_qc_test_question_value group_quality_control_manager 1 1 1 1
10 access_user_qc_test_category qc_test_category user model_qc_test_category group_quality_control_user 1 0 0 0
11 access_manager_qc_test_category qc_test_category manager model_qc_test_category group_quality_control_manager 1 1 1 1
12 access_user_qc_trigger qc_trigger user model_qc_trigger group_quality_control_user 1 0 0 0
13 access_manager_qc_trigger qc_trigger manager model_qc_trigger group_quality_control_manager 1 1 1 1
14 access_user_qc_trigger_product_category_line qc_trigger_product_category_line user model_qc_trigger_product_category_line group_quality_control_user 1 0 0 0
15 access_manager_qc_trigger_product_category_line qc_trigger_product_category_line manager model_qc_trigger_product_category_line group_quality_control_manager 1 1 1 1
16 access_user_qc_trigger_product_template_line qc_trigger_product_template_line user model_qc_trigger_product_template_line group_quality_control_user 1 0 0 0
17 access_manager_qc_trigger_product_template_line qc_trigger_product_template_line manager model_qc_trigger_product_template_line group_quality_control_manager 1 1 1 1
18 access_user_qc_trigger_product_line qc_trigger_product_line user model_qc_trigger_product_line group_quality_control_user 1 0 0 0
19 access_manager_qc_trigger_product_line qc_trigger_product_line manager model_qc_trigger_product_line group_quality_control_manager 1 1 1 1
20 access_user_qc_inspection_set_test qc_inspection_set_test user model_qc_inspection_set_test group_quality_control_user 1 1 1 0

View File

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2010 NaN Projectes de Programari Lliure, S.L.
Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
Copyright 2014 Oihane Crucelaegui - AvanzOSC
Copyright 2017 ForgeFlow S.L.
Copyright 2017 Simone Rubino - Agile Business Group
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.module.category" id="module_category_quality_control">
<field name="name">Quality control</field>
</record>
<record id="group_quality_control_user" model="res.groups">
<field name="name">User</field>
<field name="category_id" ref="module_category_quality_control" />
</record>
<record id="group_quality_control_manager" model="res.groups">
<field name="name">Manager</field>
<field name="category_id" ref="module_category_quality_control" />
<field name="implied_ids" eval="[(4, ref('group_quality_control_user'))]" />
<field
name="users"
eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"
/>
</record>
<record id="qc_test_multi_company_rule" model="ir.rule">
<field name="name">Quality control test multi-company</field>
<field name="model_id" ref="model_qc_test" />
<field name="global" eval="True" />
<field
name="domain_force"
>['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
</record>
<record id="qc_inspection_multi_company_rule" model="ir.rule">
<field name="name">Quality control inspection multi-company</field>
<field name="model_id" ref="model_qc_inspection" />
<field name="global" eval="True" />
<field
name="domain_force"
>['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
</record>
<record id="qc_trigger_multi_company_rule" model="ir.rule">
<field name="name">Quality control trigger multi-company</field>
<field name="model_id" ref="model_qc_trigger" />
<field name="global" eval="True" />
<field
name="domain_force"
>['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
</record>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Some files were not shown because too many files have changed in this diff Show More