mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
135
quality_control_oca/README.rst
Normal file
135
quality_control_oca/README.rst
Normal 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.
|
||||
4
quality_control_oca/__init__.py
Normal file
4
quality_control_oca/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from . import models
|
||||
from . import wizard
|
||||
32
quality_control_oca/__manifest__.py
Normal file
32
quality_control_oca/__manifest__.py
Normal 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,
|
||||
}
|
||||
27
quality_control_oca/data/quality_control_data.xml
Normal file
27
quality_control_oca/data/quality_control_data.xml
Normal 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>
|
||||
32
quality_control_oca/demo/quality_control_demo.xml
Normal file
32
quality_control_oca/demo/quality_control_demo.xml
Normal 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>
|
||||
1086
quality_control_oca/i18n/am.po
Normal file
1086
quality_control_oca/i18n/am.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/ar.po
Normal file
1087
quality_control_oca/i18n/ar.po
Normal file
File diff suppressed because it is too large
Load Diff
1088
quality_control_oca/i18n/bg.po
Normal file
1088
quality_control_oca/i18n/bg.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/bs.po
Normal file
1087
quality_control_oca/i18n/bs.po
Normal file
File diff suppressed because it is too large
Load Diff
1088
quality_control_oca/i18n/ca.po
Normal file
1088
quality_control_oca/i18n/ca.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/ca_ES.po
Normal file
1087
quality_control_oca/i18n/ca_ES.po
Normal file
File diff suppressed because it is too large
Load Diff
1088
quality_control_oca/i18n/cs.po
Normal file
1088
quality_control_oca/i18n/cs.po
Normal file
File diff suppressed because it is too large
Load Diff
1088
quality_control_oca/i18n/da.po
Normal file
1088
quality_control_oca/i18n/da.po
Normal file
File diff suppressed because it is too large
Load Diff
1132
quality_control_oca/i18n/de.po
Normal file
1132
quality_control_oca/i18n/de.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/el_GR.po
Normal file
1087
quality_control_oca/i18n/el_GR.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/en_AU.po
Normal file
1087
quality_control_oca/i18n/en_AU.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/en_GB.po
Normal file
1087
quality_control_oca/i18n/en_GB.po
Normal file
File diff suppressed because it is too large
Load Diff
1119
quality_control_oca/i18n/es.po
Normal file
1119
quality_control_oca/i18n/es.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/es_AR.po
Normal file
1087
quality_control_oca/i18n/es_AR.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/es_CL.po
Normal file
1087
quality_control_oca/i18n/es_CL.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/es_CO.po
Normal file
1087
quality_control_oca/i18n/es_CO.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/es_CR.po
Normal file
1087
quality_control_oca/i18n/es_CR.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/es_DO.po
Normal file
1087
quality_control_oca/i18n/es_DO.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/es_EC.po
Normal file
1087
quality_control_oca/i18n/es_EC.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/es_MX.po
Normal file
1087
quality_control_oca/i18n/es_MX.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/es_PE.po
Normal file
1087
quality_control_oca/i18n/es_PE.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/es_PY.po
Normal file
1087
quality_control_oca/i18n/es_PY.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/es_VE.po
Normal file
1087
quality_control_oca/i18n/es_VE.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/et.po
Normal file
1086
quality_control_oca/i18n/et.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/eu.po
Normal file
1086
quality_control_oca/i18n/eu.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/fa.po
Normal file
1086
quality_control_oca/i18n/fa.po
Normal file
File diff suppressed because it is too large
Load Diff
1089
quality_control_oca/i18n/fi.po
Normal file
1089
quality_control_oca/i18n/fi.po
Normal file
File diff suppressed because it is too large
Load Diff
1097
quality_control_oca/i18n/fr.po
Normal file
1097
quality_control_oca/i18n/fr.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/fr_CA.po
Normal file
1087
quality_control_oca/i18n/fr_CA.po
Normal file
File diff suppressed because it is too large
Load Diff
1089
quality_control_oca/i18n/fr_CH.po
Normal file
1089
quality_control_oca/i18n/fr_CH.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/fr_FR.po
Normal file
1087
quality_control_oca/i18n/fr_FR.po
Normal file
File diff suppressed because it is too large
Load Diff
1089
quality_control_oca/i18n/gl.po
Normal file
1089
quality_control_oca/i18n/gl.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/gl_ES.po
Normal file
1087
quality_control_oca/i18n/gl_ES.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/he.po
Normal file
1086
quality_control_oca/i18n/he.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/hi.po
Normal file
1086
quality_control_oca/i18n/hi.po
Normal file
File diff suppressed because it is too large
Load Diff
1129
quality_control_oca/i18n/hr.po
Normal file
1129
quality_control_oca/i18n/hr.po
Normal file
File diff suppressed because it is too large
Load Diff
1091
quality_control_oca/i18n/hr_HR.po
Normal file
1091
quality_control_oca/i18n/hr_HR.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/hu.po
Normal file
1086
quality_control_oca/i18n/hu.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/id.po
Normal file
1086
quality_control_oca/i18n/id.po
Normal file
File diff suppressed because it is too large
Load Diff
1142
quality_control_oca/i18n/it.po
Normal file
1142
quality_control_oca/i18n/it.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/ja.po
Normal file
1086
quality_control_oca/i18n/ja.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/ko.po
Normal file
1086
quality_control_oca/i18n/ko.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/lo.po
Normal file
1086
quality_control_oca/i18n/lo.po
Normal file
File diff suppressed because it is too large
Load Diff
1091
quality_control_oca/i18n/lt.po
Normal file
1091
quality_control_oca/i18n/lt.po
Normal file
File diff suppressed because it is too large
Load Diff
1088
quality_control_oca/i18n/lt_LT.po
Normal file
1088
quality_control_oca/i18n/lt_LT.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/lv.po
Normal file
1087
quality_control_oca/i18n/lv.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/mk.po
Normal file
1086
quality_control_oca/i18n/mk.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/mn.po
Normal file
1086
quality_control_oca/i18n/mn.po
Normal file
File diff suppressed because it is too large
Load Diff
1090
quality_control_oca/i18n/nb.po
Normal file
1090
quality_control_oca/i18n/nb.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/nb_NO.po
Normal file
1087
quality_control_oca/i18n/nb_NO.po
Normal file
File diff suppressed because it is too large
Load Diff
1089
quality_control_oca/i18n/nl.po
Normal file
1089
quality_control_oca/i18n/nl.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/nl_BE.po
Normal file
1087
quality_control_oca/i18n/nl_BE.po
Normal file
File diff suppressed because it is too large
Load Diff
1088
quality_control_oca/i18n/nl_NL.po
Normal file
1088
quality_control_oca/i18n/nl_NL.po
Normal file
File diff suppressed because it is too large
Load Diff
1088
quality_control_oca/i18n/pl.po
Normal file
1088
quality_control_oca/i18n/pl.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/pt.po
Normal file
1140
quality_control_oca/i18n/pt.po
Normal file
File diff suppressed because it is too large
Load Diff
1108
quality_control_oca/i18n/pt_BR.po
Normal file
1108
quality_control_oca/i18n/pt_BR.po
Normal file
File diff suppressed because it is too large
Load Diff
1089
quality_control_oca/i18n/pt_PT.po
Normal file
1089
quality_control_oca/i18n/pt_PT.po
Normal file
File diff suppressed because it is too large
Load Diff
973
quality_control_oca/i18n/quality_control.pot
Normal file
973
quality_control_oca/i18n/quality_control.pot
Normal 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 ""
|
||||
|
||||
1083
quality_control_oca/i18n/quality_control_oca.pot
Normal file
1083
quality_control_oca/i18n/quality_control_oca.pot
Normal file
File diff suppressed because it is too large
Load Diff
1089
quality_control_oca/i18n/ro.po
Normal file
1089
quality_control_oca/i18n/ro.po
Normal file
File diff suppressed because it is too large
Load Diff
1089
quality_control_oca/i18n/ru.po
Normal file
1089
quality_control_oca/i18n/ru.po
Normal file
File diff suppressed because it is too large
Load Diff
1088
quality_control_oca/i18n/sk.po
Normal file
1088
quality_control_oca/i18n/sk.po
Normal file
File diff suppressed because it is too large
Load Diff
1112
quality_control_oca/i18n/sl.po
Normal file
1112
quality_control_oca/i18n/sl.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/sr.po
Normal file
1087
quality_control_oca/i18n/sr.po
Normal file
File diff suppressed because it is too large
Load Diff
1088
quality_control_oca/i18n/sr@latin.po
Normal file
1088
quality_control_oca/i18n/sr@latin.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/sv.po
Normal file
1087
quality_control_oca/i18n/sv.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/th.po
Normal file
1086
quality_control_oca/i18n/th.po
Normal file
File diff suppressed because it is too large
Load Diff
1088
quality_control_oca/i18n/tr.po
Normal file
1088
quality_control_oca/i18n/tr.po
Normal file
File diff suppressed because it is too large
Load Diff
1090
quality_control_oca/i18n/tr_TR.po
Normal file
1090
quality_control_oca/i18n/tr_TR.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/uk.po
Normal file
1087
quality_control_oca/i18n/uk.po
Normal file
File diff suppressed because it is too large
Load Diff
1086
quality_control_oca/i18n/vi.po
Normal file
1086
quality_control_oca/i18n/vi.po
Normal file
File diff suppressed because it is too large
Load Diff
1089
quality_control_oca/i18n/vi_VN.po
Normal file
1089
quality_control_oca/i18n/vi_VN.po
Normal file
File diff suppressed because it is too large
Load Diff
1089
quality_control_oca/i18n/zh_CN.po
Normal file
1089
quality_control_oca/i18n/zh_CN.po
Normal file
File diff suppressed because it is too large
Load Diff
1087
quality_control_oca/i18n/zh_TW.po
Normal file
1087
quality_control_oca/i18n/zh_TW.po
Normal file
File diff suppressed because it is too large
Load Diff
13
quality_control_oca/models/__init__.py
Normal file
13
quality_control_oca/models/__init__.py
Normal 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
|
||||
18
quality_control_oca/models/product_category.py
Normal file
18
quality_control_oca/models/product_category.py
Normal 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",
|
||||
)
|
||||
18
quality_control_oca/models/product_product.py
Normal file
18
quality_control_oca/models/product_product.py
Normal 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",
|
||||
)
|
||||
18
quality_control_oca/models/product_template.py
Normal file
18
quality_control_oca/models/product_template.py
Normal 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",
|
||||
)
|
||||
334
quality_control_oca/models/qc_inspection.py
Normal file
334
quality_control_oca/models/qc_inspection.py
Normal 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
|
||||
)
|
||||
116
quality_control_oca/models/qc_test.py
Normal file
116
quality_control_oca/models/qc_test.py
Normal 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.",
|
||||
)
|
||||
47
quality_control_oca/models/qc_test_category.py
Normal file
47
quality_control_oca/models/qc_test_category.py
Normal 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.",
|
||||
)
|
||||
26
quality_control_oca/models/qc_trigger.py
Normal file
26
quality_control_oca/models/qc_trigger.py
Normal 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",
|
||||
)
|
||||
51
quality_control_oca/models/qc_trigger_line.py
Normal file
51
quality_control_oca/models/qc_trigger_line.py
Normal 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()
|
||||
@@ -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
|
||||
32
quality_control_oca/models/qc_trigger_product_line.py
Normal file
32
quality_control_oca/models/qc_trigger_product_line.py
Normal 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
|
||||
@@ -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
|
||||
3
quality_control_oca/pyproject.toml
Normal file
3
quality_control_oca/pyproject.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
[build-system]
|
||||
requires = ["whool"]
|
||||
build-backend = "whool.buildapi"
|
||||
22
quality_control_oca/readme/CONFIGURE.md
Normal file
22
quality_control_oca/readme/CONFIGURE.md
Normal 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
|
||||
14
quality_control_oca/readme/CONTRIBUTORS.md
Normal file
14
quality_control_oca/readme/CONTRIBUTORS.md
Normal 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>\>
|
||||
2
quality_control_oca/readme/CREDITS.md
Normal file
2
quality_control_oca/readme/CREDITS.md
Normal 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.
|
||||
3
quality_control_oca/readme/DESCRIPTION.md
Normal file
3
quality_control_oca/readme/DESCRIPTION.md
Normal 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.
|
||||
1
quality_control_oca/readme/ROADMAP.md
Normal file
1
quality_control_oca/readme/ROADMAP.md
Normal file
@@ -0,0 +1 @@
|
||||
- Make translatable the trigger name.
|
||||
20
quality_control_oca/security/ir.model.access.csv
Normal file
20
quality_control_oca/security/ir.model.access.csv
Normal 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
|
||||
|
49
quality_control_oca/security/quality_control_security.xml
Normal file
49
quality_control_oca/security/quality_control_security.xml
Normal 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>
|
||||
BIN
quality_control_oca/static/description/icon.png
Normal file
BIN
quality_control_oca/static/description/icon.png
Normal file
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
Reference in New Issue
Block a user