mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
130
quality_control_oca/README.rst
Normal file
130
quality_control_oca/README.rst
Normal file
@@ -0,0 +1,130 @@
|
||||
===================
|
||||
Quality Control OCA
|
||||
===================
|
||||
|
||||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/manufacture/tree/14.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-14-0/manufacture-14-0-quality_control_oca
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
|
||||
:target: https://runbot.odoo-community.org/runbot/129/14.0
|
||||
:alt: Try me on Runbot
|
||||
|
||||
|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 smashing it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/OCA/manufacture/issues/new?body=module:%20quality_control_oca%0Aversion:%2014.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
|
||||
|
||||
Other credits
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
* Originally based on the old 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/14.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": "15.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,
|
||||
}
|
||||
26
quality_control_oca/data/quality_control_data.xml
Normal file
26
quality_control_oca/data/quality_control_data.xml
Normal file
@@ -0,0 +1,26 @@
|
||||
<?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>
|
||||
</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>
|
||||
1139
quality_control_oca/i18n/am.po
Normal file
1139
quality_control_oca/i18n/am.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/ar.po
Normal file
1140
quality_control_oca/i18n/ar.po
Normal file
File diff suppressed because it is too large
Load Diff
1141
quality_control_oca/i18n/bg.po
Normal file
1141
quality_control_oca/i18n/bg.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/bs.po
Normal file
1140
quality_control_oca/i18n/bs.po
Normal file
File diff suppressed because it is too large
Load Diff
1141
quality_control_oca/i18n/ca.po
Normal file
1141
quality_control_oca/i18n/ca.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/ca_ES.po
Normal file
1140
quality_control_oca/i18n/ca_ES.po
Normal file
File diff suppressed because it is too large
Load Diff
1141
quality_control_oca/i18n/cs.po
Normal file
1141
quality_control_oca/i18n/cs.po
Normal file
File diff suppressed because it is too large
Load Diff
1141
quality_control_oca/i18n/da.po
Normal file
1141
quality_control_oca/i18n/da.po
Normal file
File diff suppressed because it is too large
Load Diff
1179
quality_control_oca/i18n/de.po
Normal file
1179
quality_control_oca/i18n/de.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/el_GR.po
Normal file
1140
quality_control_oca/i18n/el_GR.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/en_AU.po
Normal file
1140
quality_control_oca/i18n/en_AU.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/en_GB.po
Normal file
1140
quality_control_oca/i18n/en_GB.po
Normal file
File diff suppressed because it is too large
Load Diff
1158
quality_control_oca/i18n/es.po
Normal file
1158
quality_control_oca/i18n/es.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/es_AR.po
Normal file
1140
quality_control_oca/i18n/es_AR.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/es_CL.po
Normal file
1140
quality_control_oca/i18n/es_CL.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/es_CO.po
Normal file
1140
quality_control_oca/i18n/es_CO.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/es_CR.po
Normal file
1140
quality_control_oca/i18n/es_CR.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/es_DO.po
Normal file
1140
quality_control_oca/i18n/es_DO.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/es_EC.po
Normal file
1140
quality_control_oca/i18n/es_EC.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/es_MX.po
Normal file
1140
quality_control_oca/i18n/es_MX.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/es_PE.po
Normal file
1140
quality_control_oca/i18n/es_PE.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/es_PY.po
Normal file
1140
quality_control_oca/i18n/es_PY.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/es_VE.po
Normal file
1140
quality_control_oca/i18n/es_VE.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/et.po
Normal file
1139
quality_control_oca/i18n/et.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/eu.po
Normal file
1139
quality_control_oca/i18n/eu.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/fa.po
Normal file
1139
quality_control_oca/i18n/fa.po
Normal file
File diff suppressed because it is too large
Load Diff
1142
quality_control_oca/i18n/fi.po
Normal file
1142
quality_control_oca/i18n/fi.po
Normal file
File diff suppressed because it is too large
Load Diff
1150
quality_control_oca/i18n/fr.po
Normal file
1150
quality_control_oca/i18n/fr.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/fr_CA.po
Normal file
1140
quality_control_oca/i18n/fr_CA.po
Normal file
File diff suppressed because it is too large
Load Diff
1142
quality_control_oca/i18n/fr_CH.po
Normal file
1142
quality_control_oca/i18n/fr_CH.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/fr_FR.po
Normal file
1140
quality_control_oca/i18n/fr_FR.po
Normal file
File diff suppressed because it is too large
Load Diff
1142
quality_control_oca/i18n/gl.po
Normal file
1142
quality_control_oca/i18n/gl.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/gl_ES.po
Normal file
1140
quality_control_oca/i18n/gl_ES.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/he.po
Normal file
1139
quality_control_oca/i18n/he.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/hi.po
Normal file
1139
quality_control_oca/i18n/hi.po
Normal file
File diff suppressed because it is too large
Load Diff
1173
quality_control_oca/i18n/hr.po
Normal file
1173
quality_control_oca/i18n/hr.po
Normal file
File diff suppressed because it is too large
Load Diff
1144
quality_control_oca/i18n/hr_HR.po
Normal file
1144
quality_control_oca/i18n/hr_HR.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/hu.po
Normal file
1139
quality_control_oca/i18n/hu.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/id.po
Normal file
1139
quality_control_oca/i18n/id.po
Normal file
File diff suppressed because it is too large
Load Diff
1176
quality_control_oca/i18n/it.po
Normal file
1176
quality_control_oca/i18n/it.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/ja.po
Normal file
1139
quality_control_oca/i18n/ja.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/ko.po
Normal file
1139
quality_control_oca/i18n/ko.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/lo.po
Normal file
1139
quality_control_oca/i18n/lo.po
Normal file
File diff suppressed because it is too large
Load Diff
1144
quality_control_oca/i18n/lt.po
Normal file
1144
quality_control_oca/i18n/lt.po
Normal file
File diff suppressed because it is too large
Load Diff
1141
quality_control_oca/i18n/lt_LT.po
Normal file
1141
quality_control_oca/i18n/lt_LT.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/lv.po
Normal file
1140
quality_control_oca/i18n/lv.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/mk.po
Normal file
1139
quality_control_oca/i18n/mk.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/mn.po
Normal file
1139
quality_control_oca/i18n/mn.po
Normal file
File diff suppressed because it is too large
Load Diff
1143
quality_control_oca/i18n/nb.po
Normal file
1143
quality_control_oca/i18n/nb.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/nb_NO.po
Normal file
1140
quality_control_oca/i18n/nb_NO.po
Normal file
File diff suppressed because it is too large
Load Diff
1142
quality_control_oca/i18n/nl.po
Normal file
1142
quality_control_oca/i18n/nl.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/nl_BE.po
Normal file
1140
quality_control_oca/i18n/nl_BE.po
Normal file
File diff suppressed because it is too large
Load Diff
1141
quality_control_oca/i18n/nl_NL.po
Normal file
1141
quality_control_oca/i18n/nl_NL.po
Normal file
File diff suppressed because it is too large
Load Diff
1141
quality_control_oca/i18n/pl.po
Normal file
1141
quality_control_oca/i18n/pl.po
Normal file
File diff suppressed because it is too large
Load Diff
1169
quality_control_oca/i18n/pt.po
Normal file
1169
quality_control_oca/i18n/pt.po
Normal file
File diff suppressed because it is too large
Load Diff
1155
quality_control_oca/i18n/pt_BR.po
Normal file
1155
quality_control_oca/i18n/pt_BR.po
Normal file
File diff suppressed because it is too large
Load Diff
1142
quality_control_oca/i18n/pt_PT.po
Normal file
1142
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 ""
|
||||
|
||||
1136
quality_control_oca/i18n/quality_control_oca.pot
Normal file
1136
quality_control_oca/i18n/quality_control_oca.pot
Normal file
File diff suppressed because it is too large
Load Diff
1142
quality_control_oca/i18n/ro.po
Normal file
1142
quality_control_oca/i18n/ro.po
Normal file
File diff suppressed because it is too large
Load Diff
1142
quality_control_oca/i18n/ru.po
Normal file
1142
quality_control_oca/i18n/ru.po
Normal file
File diff suppressed because it is too large
Load Diff
1141
quality_control_oca/i18n/sk.po
Normal file
1141
quality_control_oca/i18n/sk.po
Normal file
File diff suppressed because it is too large
Load Diff
1159
quality_control_oca/i18n/sl.po
Normal file
1159
quality_control_oca/i18n/sl.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/sr.po
Normal file
1140
quality_control_oca/i18n/sr.po
Normal file
File diff suppressed because it is too large
Load Diff
1141
quality_control_oca/i18n/sr@latin.po
Normal file
1141
quality_control_oca/i18n/sr@latin.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/sv.po
Normal file
1140
quality_control_oca/i18n/sv.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/th.po
Normal file
1139
quality_control_oca/i18n/th.po
Normal file
File diff suppressed because it is too large
Load Diff
1141
quality_control_oca/i18n/tr.po
Normal file
1141
quality_control_oca/i18n/tr.po
Normal file
File diff suppressed because it is too large
Load Diff
1143
quality_control_oca/i18n/tr_TR.po
Normal file
1143
quality_control_oca/i18n/tr_TR.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/uk.po
Normal file
1140
quality_control_oca/i18n/uk.po
Normal file
File diff suppressed because it is too large
Load Diff
1139
quality_control_oca/i18n/vi.po
Normal file
1139
quality_control_oca/i18n/vi.po
Normal file
File diff suppressed because it is too large
Load Diff
1142
quality_control_oca/i18n/vi_VN.po
Normal file
1142
quality_control_oca/i18n/vi_VN.po
Normal file
File diff suppressed because it is too large
Load Diff
1142
quality_control_oca/i18n/zh_CN.po
Normal file
1142
quality_control_oca/i18n/zh_CN.po
Normal file
File diff suppressed because it is too large
Load Diff
1140
quality_control_oca/i18n/zh_TW.po
Normal file
1140
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",
|
||||
)
|
||||
356
quality_control_oca/models/qc_inspection.py
Normal file
356
quality_control_oca/models/qc_inspection.py
Normal file
@@ -0,0 +1,356 @@
|
||||
# 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="/",
|
||||
readonly=True,
|
||||
states={"draft": [("readonly", False)]},
|
||||
copy=False,
|
||||
)
|
||||
date = fields.Datetime(
|
||||
required=True,
|
||||
readonly=True,
|
||||
copy=False,
|
||||
default=fields.Datetime.now,
|
||||
states={"draft": [("readonly", False)]},
|
||||
)
|
||||
object_id = fields.Reference(
|
||||
string="Reference",
|
||||
selection="object_selection_values",
|
||||
readonly=True,
|
||||
states={"draft": [("readonly", False)]},
|
||||
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", readonly=True)
|
||||
inspection_lines = fields.One2many(
|
||||
comodel_name="qc.inspection.line",
|
||||
inverse_name="inspection_id",
|
||||
readonly=True,
|
||||
states={"ready": [("readonly", False)]},
|
||||
)
|
||||
internal_notes = fields.Text(string="Internal notes")
|
||||
external_notes = fields.Text(
|
||||
states={"success": [("readonly", True)], "failed": [("readonly", True)]},
|
||||
)
|
||||
state = fields.Selection(
|
||||
[
|
||||
("draft", "Draft"),
|
||||
("ready", "Ready"),
|
||||
("waiting", "Waiting supervisor approval"),
|
||||
("success", "Quality success"),
|
||||
("failed", "Quality failed"),
|
||||
("canceled", "Canceled"),
|
||||
],
|
||||
readonly=True,
|
||||
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",
|
||||
readonly=True,
|
||||
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",
|
||||
readonly=True,
|
||||
states={"draft": [("readonly", False)]},
|
||||
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 "{},{}".format(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", readonly=True)
|
||||
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", readonly=True
|
||||
)
|
||||
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",
|
||||
readonly=True,
|
||||
help="Minimum valid value for a quantitative question.",
|
||||
)
|
||||
max_value = fields.Float(
|
||||
string="Max",
|
||||
digits="Quality Control",
|
||||
readonly=True,
|
||||
help="Maximum valid value for a quantitative question.",
|
||||
)
|
||||
test_uom_id = fields.Many2one(
|
||||
comodel_name="uom.uom",
|
||||
string="Test UoM",
|
||||
readonly=True,
|
||||
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")],
|
||||
readonly=True,
|
||||
)
|
||||
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.name_get()[0][1]
|
||||
)
|
||||
|
||||
@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.name_get()[0][1]
|
||||
)
|
||||
|
||||
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.",
|
||||
)
|
||||
27
quality_control_oca/models/qc_trigger.py
Normal file
27
quality_control_oca/models/qc_trigger.py
Normal file
@@ -0,0 +1,27 @@
|
||||
# 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,
|
||||
readonly=True,
|
||||
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
|
||||
26
quality_control_oca/readme/CONFIGURE.rst
Normal file
26
quality_control_oca/readme/CONFIGURE.rst
Normal file
@@ -0,0 +1,26 @@
|
||||
* 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
|
||||
15
quality_control_oca/readme/CONTRIBUTORS.rst
Normal file
15
quality_control_oca/readme/CONTRIBUTORS.rst
Normal file
@@ -0,0 +1,15 @@
|
||||
* 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
|
||||
1
quality_control_oca/readme/CREDITS.rst
Normal file
1
quality_control_oca/readme/CREDITS.rst
Normal file
@@ -0,0 +1 @@
|
||||
* Originally based on the old nan_quality_control_* modules from NaN·tic.
|
||||
3
quality_control_oca/readme/DESCRIPTION.rst
Normal file
3
quality_control_oca/readme/DESCRIPTION.rst
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.rst
Normal file
1
quality_control_oca/readme/ROADMAP.rst
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 |
204
quality_control_oca/static/description/icon.svg
Normal file
204
quality_control_oca/static/description/icon.svg
Normal file
@@ -0,0 +1,204 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="30"
|
||||
inkscape:export-xdpi="30"
|
||||
inkscape:export-filename="icon.png"
|
||||
sodipodi:docname="icon.svg"
|
||||
viewBox="0 0 256 256"
|
||||
height="256"
|
||||
width="256"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
version="1.1"
|
||||
id="svg2">
|
||||
<sodipodi:namedview
|
||||
inkscape:current-layer="layer2"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-x="67"
|
||||
inkscape:cy="127.07369"
|
||||
inkscape:cx="107.5354"
|
||||
inkscape:zoom="2.8284271"
|
||||
showguides="true"
|
||||
showgrid="false"
|
||||
id="namedview4"
|
||||
inkscape:window-height="1025"
|
||||
inkscape:window-width="1853"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
inkscape:guide-bbox="true">
|
||||
<sodipodi:guide
|
||||
position="94.776276,202.08872"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide37"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="165.52734,51.804688"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide39"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="179.5,115.53516"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide41"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="187.67187,135.85937"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide43"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="114.09375,209.71875"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide45"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata8">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs6">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath34371">
|
||||
<rect
|
||||
style="fill:#3771c8;fill-opacity:1;stroke:none;stroke-width:2.00009322;stroke-opacity:1"
|
||||
id="rect34373"
|
||||
width="256"
|
||||
height="256"
|
||||
x="0"
|
||||
y="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath34375">
|
||||
<rect
|
||||
style="fill:#3771c8;fill-opacity:1;stroke:none;stroke-width:2.00009322;stroke-opacity:1"
|
||||
id="rect34377"
|
||||
width="256"
|
||||
height="256"
|
||||
x="0"
|
||||
y="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath34379">
|
||||
<rect
|
||||
style="fill:#3771c8;fill-opacity:1;stroke:none;stroke-width:2.00009322;stroke-opacity:1"
|
||||
id="rect34381"
|
||||
width="256"
|
||||
height="256"
|
||||
x="0"
|
||||
y="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath34383">
|
||||
<rect
|
||||
style="fill:#3771c8;fill-opacity:1;stroke:none;stroke-width:2.00009322;stroke-opacity:1"
|
||||
id="rect34385"
|
||||
width="256"
|
||||
height="256"
|
||||
x="0"
|
||||
y="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath34387">
|
||||
<rect
|
||||
style="fill:#3771c8;fill-opacity:1;stroke:none;stroke-width:2.00009322;stroke-opacity:1"
|
||||
id="rect34389"
|
||||
width="256"
|
||||
height="256"
|
||||
x="0"
|
||||
y="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath34391">
|
||||
<rect
|
||||
style="fill:#3771c8;fill-opacity:1;stroke:none;stroke-width:2.00009322;stroke-opacity:1"
|
||||
id="rect34393"
|
||||
width="256"
|
||||
height="256"
|
||||
x="0"
|
||||
y="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath34395">
|
||||
<rect
|
||||
style="fill:#3771c8;fill-opacity:1;stroke:none;stroke-width:2.00009322;stroke-opacity:1"
|
||||
id="rect34397"
|
||||
width="256"
|
||||
height="256"
|
||||
x="0"
|
||||
y="0" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Background"
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer">
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="256"
|
||||
width="256"
|
||||
id="rect1402"
|
||||
style="fill:#5f8dd3;fill-opacity:1;stroke:none;stroke-width:2.00009322;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="Icon"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:0.39215687;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 93.274537,55.413019 -0.232492,148.92005 0,256 l 113.65983,0.0628 51.65772,-51.65734 -10.8795,-38.87869 24.53203,-24.53203 -0.65704,-11.49529 8.7558,-8.75581 -8.89934,-9.28603 -10.15043,-37.646183 -56.05389,-25.401624 -8.07323,8.073227 z"
|
||||
id="path35"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccc" />
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.30461562"
|
||||
clip-path="url(#clipPath34391)"
|
||||
d="M 139.01367 45.707031 C 135.39131 45.632696 131.83894 49.968749 127.97656 49.96875 C 123.85669 49.96875 119.58846 45.096742 115.66016 45.892578 C 111.73185 46.688414 110.04842 52.717143 106.4043 54.220703 C 102.76018 55.724264 97.271068 52.682921 93.914062 54.910156 C 90.557058 57.13739 91.64247 63.610387 88.720703 66.519531 C 85.798935 69.428675 78.734925 68.970386 76.519531 72.3125 C 74.304136 75.654614 78.553541 81.177043 77.027344 84.810547 C 75.501146 88.44405 68.314747 90.07636 67.507812 94.070312 C 66.700879 98.064264 72.498047 101.56353 72.498047 105.70508 C 72.498047 109.84663 66.768712 114.86455 67.435547 118.27148 C 68.102381 121.67842 74.661791 123.75386 76.001953 127.54883 C 77.342117 131.3438 74.093851 136.73605 76.523438 140.40039 C 78.953025 144.06473 84.741221 142.22552 87.626953 145.21094 C 90.512685 148.19636 90.700537 155.67885 94.064453 157.89648 C 97.428368 160.11411 102.96871 156.62342 106.45898 158.14453 C 109.94926 159.66564 110.95664 165.81756 115.07227 166.69336 C 119.1879 167.56915 123.30016 162.21875 127.45898 162.21875 C 131.61781 162.21875 135.4702 167.72211 139.36914 166.99414 C 143.26808 166.26617 144.94335 159.11495 148.75391 157.56445 C 152.56447 156.01395 158.74247 159.99111 162.12305 157.74023 C 165.50364 155.48935 164.51689 148.36189 167.42188 145.47852 C 170.32687 142.59515 177.18724 143.77271 179.38867 140.46094 C 181.59009 137.14918 177.61995 131.09263 179.19531 127.39258 C 180.77066 123.69252 187.73538 122.27616 188.52539 118.22266 C 189.3154 114.16915 183.9707 110.39874 183.9707 106.35352 C 183.9707 102.30829 189.31459 98.557179 188.54297 94.568359 C 187.77135 90.579539 180.93909 88.570205 179.35156 84.773438 C 177.76402 80.976671 181.42005 75.249136 179.13281 71.863281 C 176.84557 68.477426 169.7821 68.768357 166.9707 66.001953 C 164.15931 63.235548 165.82319 57.466183 162.48438 55.208984 C 159.14555 52.951786 152.88328 56.010604 149.05859 54.460938 C 145.2339 52.911271 143.61386 46.531419 139.73828 45.783203 C 139.49606 45.73644 139.25516 45.711987 139.01367 45.707031 z M 127.97656 63.46875 A 42.883841 42.883841 0 0 1 170.85938 106.35352 A 42.883841 42.883841 0 0 1 127.97656 149.23633 A 42.883841 42.883841 0 0 1 85.091797 106.35352 A 42.883841 42.883841 0 0 1 127.97656 63.46875 z M 127.97656 71.257812 A 35.095012 35.095012 0 0 0 92.880859 106.35352 A 35.095012 35.095012 0 0 0 127.97656 141.44727 A 35.095012 35.095012 0 0 0 163.07031 106.35352 A 35.095012 35.095012 0 0 0 127.97656 71.257812 z M 127.83789 79.617188 C 127.96863 79.610895 128.09961 79.613943 128.22852 79.628906 C 128.84726 79.700731 129.42283 80.032851 129.75195 80.761719 L 135.9082 94.392578 L 151.2207 96.324219 C 153.30011 96.586438 153.10622 99.30251 152.1543 100.17578 L 141.24219 110.18555 L 144.13477 125.32617 C 144.39408 126.68389 142.58895 128.45503 140.61523 127.33984 L 127.87109 120.14062 L 114.84766 127.30469 C 113.39881 128.10162 111.06729 126.30454 111.39453 124.69141 L 114.27344 110.5 L 103.87109 100.73633 C 102.55305 99.499152 102.93224 96.453333 105.11719 96.203125 L 119.24023 94.587891 L 125.72852 80.789062 C 126.00804 80.194684 126.92268 79.661232 127.83789 79.617188 z "
|
||||
id="circle3368" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3338"
|
||||
d="m 98.010569,165.89812 5.436331,-0.84134 c 6.11145,10.88609 11.13432,9.61647 16.24428,9.31943 l -7.31316,35.85391 -9.5783,-9.12527 -12.814214,3.23591 z"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.67500001px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
clip-path="url(#clipPath34379)" />
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.67500001px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 157.29249,165.96284 -5.43634,-0.84134 c -6.11144,10.88609 -11.13431,9.61647 -16.24428,9.31943 l 7.31316,35.85391 9.57831,-9.12527 12.81421,3.23591 z"
|
||||
id="path3340"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
clip-path="url(#clipPath34375)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.6 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user