Initial commit: OCA Mrp packages (117 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:05 +02:00
commit 277e84fd7a
4403 changed files with 395154 additions and 0 deletions

View file

@ -0,0 +1,44 @@
# Quality Control OCA
Odoo addon: quality_control_oca
## Installation
```bash
pip install odoo-bringout-oca-manufacture-quality_control_oca
```
## Dependencies
This addon depends on:
- product
## Manifest Information
- **Name**: Quality Control OCA
- **Version**: 16.0.1.5.1
- **Category**: Quality Control
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/manufacture](https://github.com/OCA/manufacture) branch 16.0, addon `quality_control_oca`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Quality_control_oca Module - quality_control_oca
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for quality_control_oca. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,5 @@
# Dependencies
This addon depends on:
- [product](../../odoo-bringout-oca-ocb-product)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon quality_control_oca or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-manufacture-quality_control_oca"
# or
uv pip install odoo-bringout-oca-manufacture-quality_control_oca"
```

View file

@ -0,0 +1,27 @@
# Models
Detected core models and extensions in quality_control_oca.
```mermaid
classDiagram
class qc_inspection
class qc_inspection_line
class qc_test
class qc_test_category
class qc_test_question
class qc_test_question_value
class qc_trigger
class qc_trigger_line
class qc_trigger_product_category_line
class qc_trigger_product_line
class qc_trigger_product_template_line
class mail_thread
class product_category
class product_product
class product_template
class qc_trigger_line
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: quality_control_oca. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon quality_control_oca
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,42 @@
# Security
Access control and security definitions in quality_control_oca.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../quality_control_oca/security/ir.model.access.csv)**
- 19 model access rules
## Record Rules
Row-level security rules defined in:
## Security Groups & Configuration
Security groups and permissions defined in:
- **[quality_control_security.xml](../quality_control_oca/security/quality_control_security.xml)**
- 2 security groups defined
```mermaid
graph TB
subgraph "Security Layers"
A[Users] --> B[Groups]
B --> C[Access Control Lists]
C --> D[Models]
B --> E[Record Rules]
E --> F[Individual Records]
end
```
Security files overview:
- **[ir.model.access.csv](../quality_control_oca/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
- **[quality_control_security.xml](../quality_control_oca/security/quality_control_security.xml)**
- Security groups, categories, and XML-based rules
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon quality_control_oca
```

View file

@ -0,0 +1,8 @@
# Wizards
Transient models exposed as UI wizards in quality_control_oca.
```mermaid
classDiagram
class QcInspectionSetTest
```

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-manufacture-quality_control_oca"
version = "16.0.0"
description = "Quality Control OCA - Generic infrastructure for quality tests."
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-product>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["quality_control_oca"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -0,0 +1,137 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
===================
Quality Control OCA
===================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:ae0d8892fe8566e76f4d52dd57054f0d04b20f0f3c76e59ac12ed1529eb79ad9
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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/license-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/16.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-16-0/manufacture-16-0-quality_control_oca
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/manufacture&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module provides a generic infrastructure for quality tests. The idea is
that it can be later reused for doing quality inspections on production lots
or any other area of the company.
**Table of contents**
.. contents::
:local:
Configuration
=============
* Question: The thing to be checked. We have two types of questions:
* Qualitative: The result is a description, color, yes, no...
* Quantitative: The result must be within a range.
* Possible values: The values chosen in qualitative questions.
* Test: The set of questions to be used in inspections.
* Once these values are set, we define the inspection.
We have a *generic* test that can be applied to any model: shipments,
invoices or product, or a *test related*, making it specific to a particular
product and that eg apply whenever food is sold or when creating a batch.
Once these parameters are set, we can just pass the test. We create a
new inspection, selecting a relationship with the model (sale, stock move...),
and pressing "Select test" button to choose the test to pass. Then, you must
fill the lines depending on the chosen test.
The complete inspection workflow is:
Draft -> Confirmed -> Success
|
| -> Failure (Pending approval) -> Approved
Known issues / Roadmap
======================
* Make translatable the trigger name.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/manufacture/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/manufacture/issues/new?body=module:%20quality_control_oca%0Aversion:%2016.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/16.0/quality_control_oca>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

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

View file

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

View file

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

View file

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

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

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

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,376 @@
# 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 datetime import datetime
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(
string="Plan Date",
required=True,
readonly=True,
copy=False,
default=fields.Datetime.now,
states={"plan": [("readonly", False)], "draft": [("readonly", False)]},
)
date_done = fields.Datetime("Completion Date", readonly=True)
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(
[
("plan", "Plan"),
("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, vals_list):
for vals in vals_list:
if vals.get("name", "/") == "/":
vals["name"] = self.env["ir.sequence"].next_by_code("qc.inspection")
return super().create(vals_list)
def write(self, vals):
if "state" in vals:
if vals["state"] in ["success", "failed"]:
vals["date_done"] = datetime.now()
elif vals["state"] == "draft":
vals["date_done"] = False
return super().write(vals)
@api.ondelete(at_uninstall=False)
def _unlink_except_autogenerated_and_non_draft(self):
if self.auto_generated and not self.env.is_superuser():
raise exceptions.UserError(
_("You cannot remove an auto-generated inspection.")
)
if self.state != "draft":
raise exceptions.UserError(
_("You cannot remove an inspection that is not in draft state.")
)
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."
)
)
if 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, date=None):
"""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)
)
if date:
inspection.date = date
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": trigger_line.timing == "plan_ahead" and "plan" or "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
def _get_existing_inspections(self, records):
reference_vals = []
for rec in records:
reference_vals.append(",".join([rec._name, str(rec.id)]))
return self.sudo().search([("object_id", "in", reference_vals)])
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
)

View file

@ -0,0 +1,116 @@
# Copyright 2010 NaN Projectes de Programari Lliure, S.L.
# Copyright 2014 Serv. Tec. Avanzados - Pedro M. Baeza
# Copyright 2014 Oihane Crucelaegui - AvanzOSC
# Copyright 2017 ForgeFlow S.L.
# Copyright 2017 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, api, exceptions, fields, models
class QcTest(models.Model):
"""
A test is a group of questions along with the values that make them valid.
"""
_name = "qc.test"
_description = "Quality control test"
_inherit = "mail.thread"
def object_selection_values(self):
return set()
@api.onchange("type")
def onchange_type(self):
if self.type == "generic":
self.object_id = False
active = fields.Boolean(default=True)
name = fields.Char(required=True, translate=True)
test_lines = fields.One2many(
comodel_name="qc.test.question",
inverse_name="test",
string="Questions",
copy=True,
)
object_id = fields.Reference(
string="Reference object",
selection="object_selection_values",
)
fill_correct_values = fields.Boolean(string="Pre-fill with correct values")
type = fields.Selection(
[("generic", "Generic"), ("related", "Related")],
required=True,
default="generic",
)
category = fields.Many2one(comodel_name="qc.test.category")
company_id = fields.Many2one(
comodel_name="res.company",
default=lambda self: self.env.company,
)
class QcTestQuestion(models.Model):
"""Each test line is a question with its valid value(s)."""
_name = "qc.test.question"
_description = "Quality control question"
_order = "sequence, id"
@api.constrains("ql_values")
def _check_valid_answers(self):
for tc in self:
if (
tc.type == "qualitative"
and tc.ql_values
and not tc.ql_values.filtered("ok")
):
raise exceptions.ValidationError(
_(
"Question '%s' is not valid: "
"you have to mark at least one value as OK."
)
% tc.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.",
)

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