TIP: You can type at any time to perform a new search.
Quality Control OCA
quality_control_oca · OCA/manufacture
- Repository
- OCA/manufacture · module folder · Try on Runboat
- Module version
- 1.0.0
- Category
- Quality Control
- Folder size
- 3.85 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/manufacture
- Last tracking update
- 2026-08-07 09:06:24
- Authors
- Odoo Community Association (OCA), AvanzOSC, Tecnativa
- Maintainers
- Odoo Community Association (OCA), AvanzOSC, Tecnativa
- Committers
- Weblate, OCA-git-bot, oca-ci, Hotdgo9
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- None
- Description
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.
Code Analysis ⓘ
Views touched (16)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_category_qc_form_view |
product.category.qc | product.category | form | Inherits product.product_category_form_view |
product_template_form_view |
product.template.common.qc | product.template | form | Inherits product.product_template_form_view |
qc_inspection_form_view |
qc.inspection.form | qc.inspection | form | New |
qc_inspection_kanban_view |
qc.inspection.kanban | qc.inspection | kanban | New |
qc_inspection_line_kanban_view |
qc.inspection.line.kanban | qc.inspection.line | kanban | New |
qc_inspection_line_search_view |
qc.inspection.line.search | qc.inspection.line | search | New |
qc_inspection_line_tree_view |
qc.inspection.line.list | qc.inspection.line | list | New |
qc_inspection_search_view |
qc.inspection.search | qc.inspection | search | New |
qc_inspection_tree_view |
qc.inspection.list | qc.inspection | list | New |
qc_test_category_tree_view |
qc.test.category.list | qc.test.category | list | New |
qc_test_form_view |
qc.test.form | qc.test | form | New |
qc_test_question_form_view |
qc.test.question.form | qc.test.question | form | New |
qc_test_tree_view |
qc.test.list | qc.test | list | New |
qc_trigger_form_view |
qc.trigger.form | qc.trigger | form | New |
qc_trigger_tree_view |
qc.trigger.list | qc.trigger | list | New |
view_qc_test_set_test_form |
qc.inspection.set.test.form | qc.inspection.set.test | form | New |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (15)
New fields (1)
-
qc_triggersOne2many → qc.trigger.product_category_linecomodel_name='qc.trigger.product_category_line'inverse_name='product_category'string='Quality control triggers'
No public methods.
New fields (1)
-
qc_triggersOne2many → qc.trigger.product_linecomodel_name='qc.trigger.product_line'inverse_name='product'string='Quality control triggers'
No public methods.
New fields (1)
-
qc_triggersOne2many → qc.trigger.product_template_linecomodel_name='qc.trigger.product_template_line'inverse_name='product_template'string='Quality control triggers'
No public methods.
New fields (15)
-
auto_generatedBooleancopy=Falsehelp='If an inspection is auto-generated, it can be canceled but not removed.'string='Auto-generated' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>string='Company' -
dateDatetimecopy=Falsedefault=fields.Datetime.nowrequired=Truestring='Plan Date' -
date_doneDatetimereadonly=True args: 'Completion Date' -
external_notesText -
inspection_linesOne2many → qc.inspection.linecomodel_name='qc.inspection.line'inverse_name='inspection_id' -
internal_notesTextstring='Internal notes' -
nameCharcopy=Falsedefault='/'required=Truestring='Inspection number' -
object_idReferenceondelete='set null'selection='object_selection_values'string='Reference' -
product_idMany2one → product.productcomodel_name='product.product'compute='_compute_product_id'help='Product associated with the inspection'store=True -
qtyFloatdefault=1.0string='Quantity' -
stateSelectiondefault='draft'tracking=True args: [('plan', 'Plan'), ('draft', 'Draft'), ('ready', 'Ready'), ('waiting', 'Waiting supervisor approval'), ('success', 'Quality success'), ('failed', 'Quality failed'), ('canceled', 'Canceled')] -
successBooleancompute='_compute_success'help='This field will be marked if all tests have succeeded.'store=True -
testMany2one → qc.testcomodel_name='qc.test' -
userMany2one → res.userscomodel_name='res.users'default=<expr>string='Responsible'tracking=True
-
action_approve(self) -
action_cancel(self) -
action_confirm(self) -
action_draft(self) -
action_todo(self) -
create(self, vals_list)@api.model_create_multi -
object_selection_values(self)Overridable method for adding more object models to an inspection. :return: A list with the selection's possible values. -
set_test(self, trigger_line, force_fill=False) -
write(self, vals)
New fields (16)
-
inspection_idMany2one → qc.inspectioncomodel_name='qc.inspection'ondelete='cascade'string='Inspection' -
max_valueFloatdigits='Quality Control'help='Maximum valid value for a quantitative question.'string='Max' -
min_valueFloatdigits='Quality Control'help='Minimum valid value for a quantitative question.'string='Min' -
nameCharstring='Question' -
notesText -
possible_ql_valuesMany2many → qc.test.question.valuecomodel_name='qc.test.question.value'string='Answers' -
product_idMany2one → product.productcomodel_name='product.product'related='inspection_id.product_id'store=True -
qualitative_valueMany2one → qc.test.question.valuecomodel_name='qc.test.question.value'domain="[('id', 'in', possible_ql_values)]"help='Value of the result for a qualitative question.'string='Qualitative value' -
quantitative_valueFloatdigits='Quality Control'help='Value of the result for a quantitative question.'string='Quantitative value' -
question_typeSelectionargs: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')] -
successBooleancompute='_compute_quality_test_check'store=Truestring='Success?' -
test_lineMany2one → qc.test.questioncomodel_name='qc.test.question'string='Test question' -
test_uom_categoryMany2one → uom.uomcomodel_name='uom.uom'compute='_compute_test_uom_category'help="Root unit of the test UoM's family. Used to constrain the inspection UoM choice to units in the same measurement family. In Odoo 19, uom.category was removed in favor of a self-referential uom.uom tree via relative_uom_id; the root unit now serves as the implicit category."store=Truestring='Test UoM Reference' -
test_uom_idMany2one → uom.uomcomodel_name='uom.uom'help='UoM for minimum and maximum values for a quantitative question.'string='Test UoM' -
uom_idMany2one → uom.uomcomodel_name='uom.uom'domain="[('id', 'child_of', test_uom_category)]"help='UoM of the inspection value for a quantitative question.'string='UoM' -
valid_valuesCharcompute='_compute_valid_values'store=Truestring='Valid values'
No public methods.
New fields (1)
-
testMany2one → qc.testcomodel_name='qc.test'
-
action_create_test(self)
New fields (6)
-
activeBooleandefault=True -
categoryMany2one → qc.test.categorycomodel_name='qc.test.category' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr> -
fill_correct_valuesBooleanstring='Pre-fill with correct values' -
nameCharrequired=Truetranslate=True -
test_linesOne2many → qc.test.questioncomodel_name='qc.test.question'copy=Trueinverse_name='test'string='Questions'
No public methods.
New fields (5)
-
activeBooleandefault=Truehelp='This field allows you to hide the category without removing it.' -
child_idsOne2many → qc.test.categorycomodel_name='qc.test.category'inverse_name='parent_id'string='Child categories' -
complete_nameCharcompute='_compute_get_complete_name'string='Full name' -
nameCharrequired=Truetranslate=True -
parent_idMany2one → qc.test.categorycomodel_name='qc.test.category'string='Parent category'
No public methods.
New fields (9)
-
max_valueFloatdigits='Quality Control'string='Max' -
min_valueFloatdigits='Quality Control'string='Min' -
nameCharrequired=Truetranslate=True -
notesText -
ql_valuesOne2many → qc.test.question.valuecomodel_name='qc.test.question.value'copy=Trueinverse_name='test_line'string='Qualitative values' -
sequenceIntegerdefault='10'required=True -
testMany2one → qc.testcomodel_name='qc.test' -
typeSelectionrequired=True args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')] -
uom_idMany2one → uom.uomcomodel_name='uom.uom'string='Uom'
No public methods.
New fields (3)
-
nameCharrequired=Truetranslate=True -
okBooleanhelp='When this field is marked, the answer is considered correct.'string='Correct answer?' -
test_lineMany2one → qc.test.questioncomodel_name='qc.test.question'string='Test question'
No public methods.
New fields (4)
-
activeBooleandefault=True -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>string='Company' -
nameCharrequired=Truetranslate=True -
partner_selectableBooleandefault=Falsehelp='This technical field is to allow to filter by partner in triggers'string='Selectable by partner'
No public methods.
New fields (5)
-
partnersMany2many → res.partnercomodel_name='res.partner'domain="[('parent_id', '=', False)]"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.' -
testMany2one → qc.testcomodel_name='qc.test'required=True -
timingSelectiondefault='after'help='* Before: An executable inspection is generated before the record related to the trigger is completed (e.g. when picking is confirmed).\n* After: An executable inspection is generated when the record related to the trigger is completed (e.g. when picking is done).\n* Plan Ahead: A non-executable inspection is generated before the record related to the trigger is completed (e.g. when picking is confirmed), and the inspection becomes executable when the record related to the trigger is completed (e.g. when picking is done).'selection=[('before', 'Before'), ('after', 'After'), ('plan_ahead', 'Plan Ahead')] -
triggerMany2one → qc.triggercomodel_name='qc.trigger'required=True -
userMany2one → res.userscomodel_name='res.users'default=<expr>string='Responsible'tracking=True
-
get_trigger_line_for_product(self, trigger, timings, 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.
New fields (1)
-
product_categoryMany2one → product.categorycomodel_name='product.category'
-
get_trigger_line_for_product(self, trigger, timings, product, partner=False)
New fields (1)
-
productMany2one → product.productcomodel_name='product.product'
-
get_trigger_line_for_product(self, trigger, timings, product, partner=False)
New fields (1)
-
product_templateMany2one → product.templatecomodel_name='product.template'
-
get_trigger_line_for_product(self, trigger, timings, product, partner=False)
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…