| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/manufacture |
| GIT | |
| GIT | https://github.com/OCA/manufacture.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/manufacture/tree/12.0/quality_control |
| VERSION | |
| VERSION | 1.5.1 |
| CATEGORY | |
| CATEGORY | Quality control |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), OdooMRP team |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), OdooMRP team |
| COMMITTERS | |
| COMMITTERS | Holger Brunn, Lois Rilo, cubells, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Dimitrios T. Tanis, Jaime Arroyo, Ignacio Ales, Carlos Roca, Marcel Savegnago |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/manufacture |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:20 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - decimal_precision - base_setup - web - bus - web_tour - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_category_qc_form_view |
product.category.qc | product.category | group | Inherits product.product_category_form_view |
product_template_qc_form_view |
product.template.common.qc | product.template | page | Inherits product.product_template_form_view |
qc_inspection_form_view |
qc.inspection.form | qc.inspection | form | New |
qc_inspection_line_search_view |
qc.inspection.line.search | qc.inspection.line | search | New |
qc_inspection_line_tree_view |
qc.inspection.line.tree | qc.inspection.line | tree | New |
qc_inspection_search_view |
qc.inspection.search | qc.inspection | search | New |
qc_inspection_tree_view |
qc.inspection.tree | qc.inspection | tree | New |
qc_test_category_tree_view |
qc.test.category.tree | qc.test.category | tree | 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.tree | qc.test | tree | New |
qc_trigger_form_view |
qc.trigger.form | qc.trigger | form | New |
qc_trigger_tree2_view |
qc.trigger.tree | qc.trigger | tree | New |
qc_trigger_tree_view |
qc.trigger.tree | qc.trigger | tree | New |
view_qc_test_set_test_form |
qc.inspection.set.test.form | qc.inspection.set.test | form | New |
qc_triggers
One2many → qc.trigger.product_category_line
comodel_name='qc.trigger.product_category_line'
inverse_name='product_category'
string='Quality control triggers'
No public methods.
qc_triggers
One2many → qc.trigger.product_line
comodel_name='qc.trigger.product_line'
inverse_name='product'
string='Quality control triggers'
No public methods.
qc_triggers
One2many → qc.trigger.product_template_line
comodel_name='qc.trigger.product_template_line'
inverse_name='product_template'
string='Quality control triggers'
No public methods.
auto_generated
Boolean
copy=False
help='If an inspection is auto-generated, it can be canceled but not removed.'
readonly=True
string='Auto-generated'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
date
Datetime
copy=False
default=fields.Datetime.now
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Date'
external_notes
Text
states={'success': [('readonly', True)], 'failed': [('readonly', True)]}
string='External notes'
inspection_lines
One2many → qc.inspection.line
comodel_name='qc.inspection.line'
inverse_name='inspection_id'
readonly=True
states={'ready': [('readonly', False)]}
string='Inspection lines'
internal_notes
Text
string='Internal notes'
name
Char
copy=False
default='/'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Inspection number'
object_id
Reference
ondelete='set null'
readonly=True
selection=<expr>
states={'draft': [('readonly', False)]}
string='Reference'
product_id
Many2one → product.product
comodel_name='product.product'
compute='_compute_product_id'
help='Product associated with the inspection'
oldname='product'
store=True
qty
Float
default=1.0
string='Quantity'
state
Selection
default='draft'
readonly=True
string='State'
track_visibility='onchange'
args: [('draft', 'Draft'), ('ready', 'Ready'), ('waiting', 'Waiting supervisor approval'), ('success', 'Quality success'), ('failed', 'Quality failed'), ('canceled', 'Canceled')]
success
Boolean
compute='_compute_success'
help='This field will be marked if all tests have succeeded.'
store=True
string='Success'
test
Many2one → qc.test
comodel_name='qc.test'
readonly=True
string='Test'
user
Many2one → res.users
comodel_name='res.users'
default=<expr>
string='Responsible'
track_visibility='always'
action_approve(self)
action_cancel(self)
action_confirm(self)
action_draft(self)
action_todo(self)
create(self, val_list)
object_selection_values(self)
set_test(self, trigger_line, force_fill=False)
unlink(self)
inspection_id
Many2one → qc.inspection
comodel_name='qc.inspection'
ondelete='cascade'
string='Inspection'
max_value
Float
digits=dp.get_precision('Quality Control')
help='Maximum valid value for a quantitative question.'
readonly=True
string='Max'
min_value
Float
digits=dp.get_precision('Quality Control')
help='Minimum valid value for a quantitative question.'
readonly=True
string='Min'
name
Char
readonly=True
string='Question'
notes
Text
string='Notes'
possible_ql_values
Many2many → qc.test.question.value
comodel_name='qc.test.question.value'
string='Answers'
product_id
Many2one → product.product
comodel_name='product.product'
oldname='product'
related='inspection_id.product_id'
store=True
qualitative_value
Many2one → qc.test.question.value
comodel_name='qc.test.question.value'
domain="[('id', 'in', possible_ql_values)]"
help='Value of the result for a qualitative question.'
string='Qualitative value'
quantitative_value
Float
digits=dp.get_precision('Quality Control')
help='Value of the result for a quantitative question.'
args: 'Quantitative value'
question_type
Selection
readonly=True
string='Question type'
args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
success
Boolean
compute='_compute_quality_test_check'
store=True
string='Success?'
test_line
Many2one → qc.test.question
comodel_name='qc.test.question'
readonly=True
string='Test question'
test_uom_category
Many2one → uom.category
comodel_name='uom.category'
related='test_uom_id.category_id'
store=True
test_uom_id
Many2one → uom.uom
comodel_name='uom.uom'
help='UoM for minimum and maximum values for a quantitative question.'
readonly=True
string='Test UoM'
uom_id
Many2one → uom.uom
comodel_name='uom.uom'
domain="[('category_id', '=', test_uom_category)]"
help='UoM of the inspection value for a quantitative question.'
string='UoM'
valid_values
Char
compute='_compute_valid_values'
store=True
string='Valid values'
No public methods.
test
Many2one → qc.test
comodel_name='qc.test'
string='Test'
action_create_test(self)
active
Boolean
default=True
args: 'Active'
category
Many2one → qc.test.category
comodel_name='qc.test.category'
string='Category'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
fill_correct_values
Boolean
string='Pre-fill with correct values'
name
Char
required=True
string='Name'
translate=True
object_id
Reference
selection=object_selection_values
string='Reference object'
test_lines
One2many → qc.test.question
comodel_name='qc.test.question'
copy=True
inverse_name='test'
string='Questions'
type
Selection
default='generic'
required=True
string='Type'
args: [('generic', 'Generic'), ('related', 'Related')]
object_selection_values(self)
onchange_type(self)
active
Boolean
default=True
help='This field allows you to hide the category without removing it.'
string='Active'
child_ids
One2many → qc.test.category
comodel_name='qc.test.category'
inverse_name='parent_id'
string='Child categories'
complete_name
Char
compute='_compute_get_complete_name'
string='Full name'
name
Char
required=True
translate=True
args: 'Name'
parent_id
Many2one → qc.test.category
comodel_name='qc.test.category'
string='Parent category'
No public methods.
max_value
Float
digits=dp.get_precision('Quality Control')
string='Max'
min_value
Float
digits=dp.get_precision('Quality Control')
string='Min'
name
Char
required=True
string='Name'
translate=True
notes
Text
string='Notes'
ql_values
One2many → qc.test.question.value
comodel_name='qc.test.question.value'
copy=True
inverse_name='test_line'
string='Qualitative values'
sequence
Integer
default='10'
required=True
string='Sequence'
test
Many2one → qc.test
comodel_name='qc.test'
string='Test'
type
Selection
required=True
string='Type'
args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
uom_id
Many2one → uom.uom
comodel_name='uom.uom'
string='Uom'
No public methods.
name
Char
required=True
string='Name'
translate=True
ok
Boolean
help='When this field is marked, the answer is considered correct.'
string='Correct answer?'
test_line
Many2one → qc.test.question
comodel_name='qc.test.question'
string='Test question'
No public methods.
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
name
Char
required=True
string='Name'
translate=True
partner_selectable
Boolean
default=False
help='This technical field is to allow to filter by partner in triggers'
readonly=True
string='Selectable by partner'
No public methods.
partners
Many2many → res.partner
comodel_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.'
string='Partners'
test
Many2one → qc.test
comodel_name='qc.test'
required=True
trigger
Many2one → qc.trigger
comodel_name='qc.trigger'
required=True
user
Many2one → res.users
comodel_name='res.users'
default=<expr>
string='Responsible'
track_visibility='always'
get_trigger_line_for_product(self, trigger, product, partner=False)
product_category
Many2one → product.category
comodel_name='product.category'
get_trigger_line_for_product(self, trigger, product, partner=False)
product
Many2one → product.product
comodel_name='product.product'
get_trigger_line_for_product(self, trigger, product, partner=False)
product_template
Many2one → product.template
comodel_name='product.template'
get_trigger_line_for_product(self, trigger, product, partner=False)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/manufacture |
| GIT | |
| GIT | https://github.com/OCA/manufacture.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/manufacture/tree/11.0/quality_control |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Quality control |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), OdooMRP team |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), OdooMRP team |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Lois Rilo, OCA Transbot, oca-travis, Weblate |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/manufacture/tree/10.0/quality_control |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:23:59 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - decimal_precision - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_category_qc_form_view |
product.category.qc | product.category | group | Inherits product.product_category_form_view |
product_template_qc_form_view |
product.template.qc | product.template | page | Inherits product.product_template_only_form_view |
qc_inspection_form_view |
qc.inspection.form | qc.inspection | form | New |
qc_inspection_line_search_view |
qc.inspection.line.search | qc.inspection.line | search | New |
qc_inspection_line_tree_view |
qc.inspection.line.tree | qc.inspection.line | tree | New |
qc_inspection_search_view |
qc.inspection.search | qc.inspection | search | New |
qc_inspection_tree_view |
qc.inspection.tree | qc.inspection | tree | New |
qc_test_category_tree_view |
qc.test.category.tree | qc.test.category | tree | 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.tree | qc.test | tree | New |
qc_trigger_form_view |
qc.trigger.form | qc.trigger | form | New |
qc_trigger_tree_view |
qc.trigger.tree | qc.trigger | tree | New |
view_qc_test_set_test_form |
qc.inspection.set.test.form | qc.inspection.set.test | form | New |
qc_triggers
One2many → qc.trigger.product_category_line
comodel_name='qc.trigger.product_category_line'
inverse_name='product_category'
string='Quality control triggers'
No public methods.
qc_triggers
One2many → qc.trigger.product_line
comodel_name='qc.trigger.product_line'
inverse_name='product'
string='Quality control triggers'
No public methods.
qc_triggers
One2many → qc.trigger.product_template_line
comodel_name='qc.trigger.product_template_line'
inverse_name='product_template'
string='Quality control triggers'
No public methods.
auto_generated
Boolean
copy=False
help='If an inspection is auto-generated, it can be canceled but not removed.'
readonly=True
string='Auto-generated'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
date
Datetime
copy=False
default=fields.Datetime.now
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Date'
external_notes
Text
states={'success': [('readonly', True)], 'failed': [('readonly', True)]}
string='External notes'
inspection_lines
One2many → qc.inspection.line
comodel_name='qc.inspection.line'
inverse_name='inspection_id'
readonly=True
states={'ready': [('readonly', False)]}
string='Inspection lines'
internal_notes
Text
string='Internal notes'
name
Char
copy=False
default='/'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Inspection number'
object_id
Reference
ondelete='set null'
readonly=True
selection=_links_get
states={'draft': [('readonly', False)]}
string='Reference'
product_id
Many2one → product.product
comodel_name='product.product'
compute='_compute_product_id'
help='Product associated with the inspection'
oldname='product'
store=True
qty
Float
default=1.0
string='Quantity'
state
Selection
default='draft'
readonly=True
string='State'
track_visibility='onchange'
args: [('draft', 'Draft'), ('ready', 'Ready'), ('waiting', 'Waiting supervisor approval'), ('success', 'Quality success'), ('failed', 'Quality failed'), ('canceled', 'Canceled')]
success
Boolean
compute='_compute_success'
help='This field will be marked if all tests have succeeded.'
store=True
string='Success'
test
Many2one → qc.test
comodel_name='qc.test'
readonly=True
string='Test'
user
Many2one → res.users
comodel_name='res.users'
default=<expr>
string='Responsible'
track_visibility='always'
action_approve(self)
action_cancel(self)
action_confirm(self)
action_draft(self)
action_todo(self)
create(self, vals)
set_test(self, trigger_line, force_fill=False)
unlink(self)
inspection_id
Many2one → qc.inspection
comodel_name='qc.inspection'
ondelete='cascade'
string='Inspection'
max_value
Float
digits=dp.get_precision('Quality Control')
help='Maximum valid value for a quantitative question.'
readonly=True
string='Max'
min_value
Float
digits=dp.get_precision('Quality Control')
help='Minimum valid value for a quantitative question.'
readonly=True
string='Min'
name
Char
readonly=True
string='Question'
notes
Text
string='Notes'
possible_ql_values
Many2many → qc.test.question.value
comodel_name='qc.test.question.value'
string='Answers'
product_id
Many2one → product.product
comodel_name='product.product'
oldname='product'
related='inspection_id.product_id'
store=True
qualitative_value
Many2one → qc.test.question.value
comodel_name='qc.test.question.value'
domain="[('id', 'in', possible_ql_values)]"
help='Value of the result for a qualitative question.'
string='Qualitative value'
quantitative_value
Float
digits=dp.get_precision('Quality Control')
help='Value of the result for a quantitative question.'
args: 'Quantitative value'
question_type
Selection
readonly=True
string='Question type'
args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
success
Boolean
compute='_compute_quality_test_check'
store=True
string='Success?'
test_line
Many2one → qc.test.question
comodel_name='qc.test.question'
readonly=True
string='Test question'
test_uom_category
Many2one → product.uom.categ
comodel_name='product.uom.categ'
related='test_uom_id.category_id'
store=True
test_uom_id
Many2one → product.uom
comodel_name='product.uom'
help='UoM for minimum and maximum values for a quantitative question.'
readonly=True
string='Test UoM'
uom_id
Many2one → product.uom
comodel_name='product.uom'
domain="[('category_id', '=', test_uom_category)]"
help='UoM of the inspection value for a quantitative question.'
string='UoM'
valid_values
Char
compute='_compute_valid_values'
store=True
string='Valid values'
No public methods.
test
Many2one → qc.test
comodel_name='qc.test'
string='Test'
action_create_test(self)
active
Boolean
default=True
args: 'Active'
category
Many2one → qc.test.category
comodel_name='qc.test.category'
string='Category'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
fill_correct_values
Boolean
string='Pre-fill with correct values'
name
Char
required=True
string='Name'
translate=True
object_id
Reference
selection=_links_get
string='Reference object'
test_lines
One2many → qc.test.question
comodel_name='qc.test.question'
copy=True
inverse_name='test'
string='Questions'
type
Selection
default='generic'
required=True
string='Type'
args: [('generic', 'Generic'), ('related', 'Related')]
onchange_type(self)
active
Boolean
default=True
help='This field allows you to hide the category without removing it.'
string='Active'
child_ids
One2many → qc.test.category
comodel_name='qc.test.category'
inverse_name='parent_id'
string='Child categories'
complete_name
Char
compute='_compute_get_complete_name'
string='Full name'
name
Char
required=True
translate=True
args: 'Name'
parent_id
Many2one → qc.test.category
comodel_name='qc.test.category'
string='Parent category'
No public methods.
max_value
Float
digits=dp.get_precision('Quality Control')
string='Max'
min_value
Float
digits=dp.get_precision('Quality Control')
string='Min'
name
Char
required=True
string='Name'
translate=True
notes
Text
string='Notes'
ql_values
One2many → qc.test.question.value
comodel_name='qc.test.question.value'
copy=True
inverse_name='test_line'
string='Qualitative values'
sequence
Integer
default='10'
required=True
string='Sequence'
test
Many2one → qc.test
comodel_name='qc.test'
string='Test'
type
Selection
required=True
string='Type'
args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
uom_id
Many2one → product.uom
comodel_name='product.uom'
string='Uom'
No public methods.
name
Char
required=True
string='Name'
translate=True
ok
Boolean
help='When this field is marked, the answer is considered correct.'
string='Correct answer?'
test_line
Many2one → qc.test.question
comodel_name='qc.test.question'
string='Test question'
No public methods.
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
name
Char
required=True
string='Name'
translate=True
partner_selectable
Boolean
default=False
help='This technical field is to allow to filter by partner in triggers'
readonly=True
string='Selectable by partner'
No public methods.
partners
Many2many → res.partner
comodel_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.'
string='Partners'
test
Many2one → qc.test
comodel_name='qc.test'
required=True
trigger
Many2one → qc.trigger
comodel_name='qc.trigger'
required=True
user
Many2one → res.users
comodel_name='res.users'
default=<expr>
string='Responsible'
track_visibility='always'
get_trigger_line_for_product(self, trigger, product, partner=False)
product_category
Many2one → product.category
comodel_name='product.category'
get_trigger_line_for_product(self, trigger, product, partner=False)
product
Many2one → product.product
comodel_name='product.product'
get_trigger_line_for_product(self, trigger, product, partner=False)
product_template
Many2one → product.template
comodel_name='product.template'
get_trigger_line_for_product(self, trigger, product, partner=False)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/manufacture |
| GIT | |
| GIT | https://github.com/OCA/manufacture.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/manufacture/tree/10.0/quality_control |
| VERSION | |
| VERSION | 1.0.3 |
| CATEGORY | |
| CATEGORY | Quality control |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), OdooMRP team |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), OdooMRP team |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, Lois Rilo, OCA Transbot, oca-travis, Weblate, Simone Rubino |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/manufacture/tree/10.0/quality_control |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:19:58 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - decimal_precision - base_setup - web_kanban - web - bus - web_tour - report |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_category_qc_form_view |
product.category.qc | product.category | group | Inherits product.product_category_form_view |
product_template_qc_form_view |
product.template.qc | product.template | xpath | Inherits product.product_template_only_form_view |
qc_inspection_form_view |
qc.inspection.form | qc.inspection | form | New |
qc_inspection_line_search_view |
qc.inspection.line.search | qc.inspection.line | search | New |
qc_inspection_line_tree_view |
qc.inspection.line.tree | qc.inspection.line | tree | New |
qc_inspection_search_view |
qc.inspection.search | qc.inspection | search | New |
qc_inspection_tree_view |
qc.inspection.tree | qc.inspection | tree | New |
qc_test_category_tree_view |
qc.test.category.tree | qc.test.category | tree | 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.tree | qc.test | tree | New |
qc_trigger_form_view |
qc.trigger.form | qc.trigger | form | New |
qc_trigger_tree_view |
qc.trigger.tree | qc.trigger | tree | New |
view_qc_test_set_test_form |
qc.inspection.set.test.form | qc.inspection.set.test | form | New |
qc_triggers
One2many → qc.trigger.product_category_line
comodel_name='qc.trigger.product_category_line'
inverse_name='product_category'
string='Quality control triggers'
No public methods.
qc_triggers
One2many → qc.trigger.product_line
comodel_name='qc.trigger.product_line'
inverse_name='product'
string='Quality control triggers'
No public methods.
qc_triggers
One2many → qc.trigger.product_template_line
comodel_name='qc.trigger.product_template_line'
inverse_name='product_template'
string='Quality control triggers'
No public methods.
auto_generated
Boolean
copy=False
help='If an inspection is auto-generated, it can be canceled but not removed.'
readonly=True
string='Auto-generated'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
date
Datetime
copy=False
default=fields.Datetime.now
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Date'
external_notes
Text
states={'success': [('readonly', True)], 'failed': [('readonly', True)]}
string='External notes'
inspection_lines
One2many → qc.inspection.line
comodel_name='qc.inspection.line'
inverse_name='inspection_id'
readonly=True
states={'ready': [('readonly', False)]}
string='Inspection lines'
internal_notes
Text
string='Internal notes'
name
Char
copy=False
default='/'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Inspection number'
object_id
Reference
ondelete='set null'
readonly=True
selection=_links_get
states={'draft': [('readonly', False)]}
string='Reference'
product
Many2one → product.product
comodel_name='product.product'
compute='_get_product'
help='Product associated with the inspection'
store=True
qty
Float
default=1.0
string='Quantity'
state
Selection
default='draft'
readonly=True
string='State'
track_visibility='onchange'
args: [('draft', 'Draft'), ('ready', 'Ready'), ('waiting', 'Waiting supervisor approval'), ('success', 'Quality success'), ('failed', 'Quality failed'), ('canceled', 'Canceled')]
success
Boolean
compute='_success'
help='This field will be marked if all tests have succeeded.'
store=True
string='Success'
test
Many2one → qc.test
comodel_name='qc.test'
readonly=True
string='Test'
user
Many2one → res.users
comodel_name='res.users'
default=<expr>
string='Responsible'
track_visibility='always'
action_approve(self)
action_cancel(self)
action_confirm(self)
action_draft(self)
action_todo(self)
create(self, vals)
set_test(self, trigger_line, force_fill=False)
unlink(self)
inspection_id
Many2one → qc.inspection
comodel_name='qc.inspection'
ondelete='cascade'
string='Inspection'
max_value
Float
digits=dp.get_precision('Quality Control')
help='Maximum valid value for a quantitative question.'
readonly=True
string='Max'
min_value
Float
digits=dp.get_precision('Quality Control')
help='Minimum valid value for a quantitative question.'
readonly=True
string='Min'
name
Char
readonly=True
string='Question'
notes
Text
string='Notes'
possible_ql_values
Many2many → qc.test.question.value
comodel_name='qc.test.question.value'
string='Answers'
product
Many2one → product.product
comodel_name='product.product'
related='inspection_id.product'
store=True
qualitative_value
Many2one → qc.test.question.value
comodel_name='qc.test.question.value'
domain="[('id', 'in', possible_ql_values[0][2])]"
help='Value of the result for a qualitative question.'
string='Qualitative value'
quantitative_value
Float
digits=dp.get_precision('Quality Control')
help='Value of the result for a quantitative question.'
args: 'Quantitative value'
question_type
Selection
readonly=True
string='Question type'
args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
success
Boolean
compute='quality_test_check'
store=True
string='Success?'
test_line
Many2one → qc.test.question
comodel_name='qc.test.question'
readonly=True
string='Test question'
test_uom_category
Many2one → product.uom.categ
comodel_name='product.uom.categ'
related='test_uom_id.category_id'
store=True
test_uom_id
Many2one → product.uom
comodel_name='product.uom'
help='UoM for minimum and maximum values for a quantitative question.'
readonly=True
string='Test UoM'
uom_id
Many2one → product.uom
comodel_name='product.uom'
domain="[('category_id', '=', test_uom_category)]"
help='UoM of the inspection value for a quantitative question.'
string='UoM'
valid_values
Char
compute='get_valid_values'
store=True
string='Valid values'
get_valid_values(self)
quality_test_check(self)
test
Many2one → qc.test
comodel_name='qc.test'
string='Test'
action_create_test(self)
active
Boolean
default=True
args: 'Active'
category
Many2one → qc.test.category
comodel_name='qc.test.category'
string='Category'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
fill_correct_values
Boolean
string='Pre-fill with correct values'
name
Char
required=True
string='Name'
translate=True
object_id
Reference
selection=_links_get
string='Reference object'
test_lines
One2many → qc.test.question
comodel_name='qc.test.question'
copy=True
inverse_name='test'
string='Questions'
type
Selection
default='generic'
required=True
string='Type'
args: [('generic', 'Generic'), ('related', 'Related')]
onchange_type(self)
active
Boolean
default=True
help='This field allows you to hide the category without removing it.'
string='Active'
child_ids
One2many → qc.test.category
comodel_name='qc.test.category'
inverse_name='parent_id'
string='Child categories'
complete_name
Char
compute='_get_complete_name'
string='Full name'
name
Char
required=True
translate=True
args: 'Name'
parent_id
Many2one → qc.test.category
comodel_name='qc.test.category'
string='Parent category'
No public methods.
max_value
Float
digits=dp.get_precision('Quality Control')
string='Max'
min_value
Float
digits=dp.get_precision('Quality Control')
string='Min'
name
Char
required=True
string='Name'
translate=True
notes
Text
string='Notes'
ql_values
One2many → qc.test.question.value
comodel_name='qc.test.question.value'
copy=True
inverse_name='test_line'
string='Qualitative values'
sequence
Integer
default='10'
required=True
string='Sequence'
test
Many2one → qc.test
comodel_name='qc.test'
string='Test'
type
Selection
required=True
string='Type'
args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
uom_id
Many2one → product.uom
comodel_name='product.uom'
string='Uom'
No public methods.
name
Char
required=True
string='Name'
translate=True
ok
Boolean
help='When this field is marked, the answer is considered correct.'
string='Correct answer?'
test_line
Many2one → qc.test.question
comodel_name='qc.test.question'
string='Test question'
No public methods.
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
name
Char
required=True
string='Name'
translate=True
partner_selectable
Boolean
default=False
help='This technical field is to allow to filter by partner in triggers'
readonly=True
string='Selectable by partner'
No public methods.
partners
Many2many → res.partner
comodel_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.'
string='Partners'
test
Many2one → qc.test
comodel_name='qc.test'
required=True
trigger
Many2one → qc.trigger
comodel_name='qc.trigger'
required=True
user
Many2one → res.users
comodel_name='res.users'
default=<expr>
string='Responsible'
track_visibility='always'
get_trigger_line_for_product(self, trigger, product, partner=False)
product_category
Many2one → product.category
comodel_name='product.category'
get_trigger_line_for_product(self, trigger, product, partner=False)
product
Many2one → product.product
comodel_name='product.product'
get_trigger_line_for_product(self, trigger, product, partner=False)
product_template
Many2one → product.template
comodel_name='product.template'
get_trigger_line_for_product(self, trigger, product, partner=False)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/manufacture |
| GIT | |
| GIT | https://github.com/OCA/manufacture.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/manufacture/tree/9.0/quality_control |
| VERSION | |
| VERSION | 1.3.0 |
| CATEGORY | |
| CATEGORY | Quality control |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), AvanzOSC, Eficent, OdooMRP team, Serv. Tecnol. Avanzados - Pedro M. Baeza |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), AvanzOSC, Eficent, OdooMRP team, Serv. Tecnol. Avanzados - Pedro M. Baeza |
| COMMITTERS | |
| COMMITTERS | OCA Transbot, oca-travis, Weblate, lreficent |
| WEBSITE | |
| WEBSITE | http://www.odoomrp.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:15:21 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - decimal_precision - base_setup - web_kanban - web - bus - report |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_category_qc_form_view |
product.category.qc | product.category | group | Inherits product.product_category_form_view |
product_template_qc_form_view |
product.template.qc | product.template | xpath | Inherits product.product_template_form_view |
qc_inspection_form_view |
qc.inspection.form | qc.inspection | form | New |
qc_inspection_line_search_view |
qc.inspection.line.search | qc.inspection.line | search | New |
qc_inspection_line_tree_view |
qc.inspection.line.tree | qc.inspection.line | tree | New |
qc_inspection_search_view |
qc.inspection.search | qc.inspection | search | New |
qc_inspection_tree_view |
qc.inspection.tree | qc.inspection | tree | New |
qc_test_category_tree_view |
qc.test.category.tree | qc.test.category | tree | 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.tree | qc.test | tree | New |
qc_trigger_form_view |
qc.trigger.form | qc.trigger | form | New |
qc_trigger_tree_view |
qc.trigger.tree | qc.trigger | tree | New |
view_qc_test_set_test_form |
qc.inspection.set.test.form | qc.inspection.set.test | form | New |
qc_triggers
One2many → qc.trigger.product_category_line
comodel_name='qc.trigger.product_category_line'
inverse_name='product_category'
string='Quality control triggers'
No public methods.
qc_triggers
One2many → qc.trigger.product_line
comodel_name='qc.trigger.product_line'
inverse_name='product'
string='Quality control triggers'
No public methods.
qc_triggers
One2many → qc.trigger.product_template_line
comodel_name='qc.trigger.product_template_line'
inverse_name='product_template'
string='Quality control triggers'
No public methods.
auto_generated
Boolean
copy=False
help='If an inspection is auto-generated, it can be canceled nor removed.'
readonly=True
string='Auto-generated'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
date
Datetime
copy=False
default=fields.Datetime.now
readonly=True
required=True
select=True
states={'draft': [('readonly', False)]}
string='Date'
external_notes
Text
states={'success': [('readonly', True)], 'failed': [('readonly', True)]}
string='External notes'
inspection_lines
One2many → qc.inspection.line
comodel_name='qc.inspection.line'
inverse_name='inspection_id'
readonly=True
states={'ready': [('readonly', False)]}
string='Inspection lines'
internal_notes
Text
string='Internal notes'
name
Char
copy=False
default='/'
readonly=True
required=True
select=True
states={'draft': [('readonly', False)]}
string='Inspection number'
object_id
Reference
ondelete='set null'
readonly=True
selection=_links_get
states={'draft': [('readonly', False)]}
string='Reference'
product
Many2one → product.product
comodel_name='product.product'
compute='_get_product'
help='Product associated with the inspection'
store=True
qty
Float
default=1.0
string='Quantity'
state
Selection
default='draft'
readonly=True
string='State'
args: [('draft', 'Draft'), ('ready', 'Ready'), ('waiting', 'Waiting supervisor approval'), ('success', 'Quality success'), ('failed', 'Quality failed'), ('canceled', 'Canceled')]
success
Boolean
compute='_success'
help='This field will be marked if all tests have succeeded.'
store=True
string='Success'
test
Many2one → qc.test
comodel_name='qc.test'
readonly=True
select=True
string='Test'
user
Many2one → res.users
comodel_name='res.users'
default=<expr>
string='Responsible'
track_visibility='always'
action_approve(self)
action_cancel(self)
action_confirm(self)
action_draft(self)
action_todo(self)
create(self, vals)
set_test(self, trigger_line, force_fill=False)
unlink(self)
inspection_id
Many2one → qc.inspection
comodel_name='qc.inspection'
ondelete='cascade'
string='Inspection'
max_value
Float
digits=dp.get_precision('Quality Control')
help='Maximum valid value for a quantitative question.'
readonly=True
string='Max'
min_value
Float
digits=dp.get_precision('Quality Control')
help='Minimum valid value for a quantitative question.'
readonly=True
string='Min'
name
Char
readonly=True
string='Question'
notes
Text
string='Notes'
possible_ql_values
Many2many → qc.test.question.value
comodel_name='qc.test.question.value'
string='Answers'
product
Many2one → product.product
comodel_name='product.product'
related='inspection_id.product'
store=True
qualitative_value
Many2one → qc.test.question.value
comodel_name='qc.test.question.value'
domain="[('id', 'in', possible_ql_values[0][2])]"
help='Value of the result for a qualitative question.'
string='Qualitative value'
quantitative_value
Float
digits=dp.get_precision('Quality Control')
help='Value of the result for a quantitative question.'
args: 'Quantitative value'
question_type
Selection
readonly=True
string='Question type'
args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
success
Boolean
compute='quality_test_check'
store=True
string='Success?'
test_line
Many2one → qc.test.question
comodel_name='qc.test.question'
readonly=True
string='Test question'
test_uom_category
Many2one → product.uom.categ
comodel_name='product.uom.categ'
related='test_uom_id.category_id'
store=True
test_uom_id
Many2one → product.uom
comodel_name='product.uom'
help='UoM for minimum and maximum values for a quantitative question.'
readonly=True
string='Test UoM'
uom_id
Many2one → product.uom
comodel_name='product.uom'
domain="[('category_id', '=', test_uom_category)]"
help='UoM of the inspection value for a quantitative question.'
string='UoM'
valid_values
Char
compute='get_valid_values'
store=True
string='Valid values'
get_valid_values(self)
quality_test_check(self)
test
Many2one → qc.test
comodel_name='qc.test'
string='Test'
action_create_test(self)
active
Boolean
default=True
args: 'Active'
category
Many2one → qc.test.category
comodel_name='qc.test.category'
string='Category'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
fill_correct_values
Boolean
string='Pre-fill with correct values'
name
Char
required=True
select=True
string='Name'
translate=True
object_id
Reference
selection=_links_get
string='Reference object'
test_lines
One2many → qc.test.question
comodel_name='qc.test.question'
copy=True
inverse_name='test'
string='Questions'
type
Selection
default='generic'
required=True
select=True
string='Type'
args: [('generic', 'Generic'), ('related', 'Related')]
No public methods.
active
Boolean
default=True
help='This field allows you to hide the category without removing it.'
string='Active'
child_ids
One2many → qc.test.category
comodel_name='qc.test.category'
inverse_name='parent_id'
string='Child categories'
complete_name
Char
compute='_get_complete_name'
string='Full name'
name
Char
required=True
translate=True
args: 'Name'
parent_id
Many2one → qc.test.category
comodel_name='qc.test.category'
select=True
string='Parent category'
No public methods.
max_value
Float
digits=dp.get_precision('Quality Control')
string='Max'
min_value
Float
digits=dp.get_precision('Quality Control')
string='Min'
name
Char
required=True
select=True
string='Name'
translate=True
notes
Text
string='Notes'
ql_values
One2many → qc.test.question.value
comodel_name='qc.test.question.value'
copy=True
inverse_name='test_line'
string='Qualitative values'
sequence
Integer
default='10'
required=True
string='Sequence'
test
Many2one → qc.test
comodel_name='qc.test'
string='Test'
type
Selection
required=True
string='Type'
args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
uom_id
Many2one → product.uom
comodel_name='product.uom'
string='Uom'
No public methods.
name
Char
required=True
select=True
string='Name'
translate=True
ok
Boolean
help='When this field is marked, the answer is considered correct.'
string='Correct answer?'
test_line
Many2one → qc.test.question
comodel_name='qc.test.question'
string='Test question'
No public methods.
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
name
Char
required=True
select=True
string='Name'
translate=True
partner_selectable
Boolean
default=False
help='This technical field is to allow to filter by partner in triggers'
readonly=True
string='Selectable by partner'
No public methods.
partners
Many2many → res.partner
comodel_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.'
string='Partners'
test
Many2one → qc.test
comodel_name='qc.test'
required=True
trigger
Many2one → qc.trigger
comodel_name='qc.trigger'
required=True
user
Many2one → res.users
comodel_name='res.users'
default=<expr>
string='Responsible'
track_visibility='always'
get_trigger_line_for_product(self, trigger, product, partner=False)
product_category
Many2one → product.category
comodel_name='product.category'
get_trigger_line_for_product(self, trigger, product, partner=False)
product
Many2one → product.product
comodel_name='product.product'
get_trigger_line_for_product(self, trigger, product, partner=False)
product_template
Many2one → product.template
comodel_name='product.template'
get_trigger_line_for_product(self, trigger, product, partner=False)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/manufacture |
| GIT | |
| GIT | https://github.com/OCA/manufacture.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/manufacture/tree/8.0/quality_control |
| VERSION | |
| VERSION | 1.3.0 |
| CATEGORY | |
| CATEGORY | Quality control |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), AvanzOSC, OdooMRP team, Serv. Tecnol. Avanzados - Pedro M. Baeza |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), AvanzOSC, OdooMRP team, Serv. Tecnol. Avanzados - Pedro M. Baeza |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, agaldona, Weblate, oihane |
| WEBSITE | |
| WEBSITE | http://www.odoomrp.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:11:24 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - decimal_precision - base_setup - web_kanban - web - report |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_category_qc_form_view |
product.category.qc | product.category | sheet | Inherits product.product_category_form_view |
product_template_qc_form_view |
product.template.qc | product.template | page | Inherits product.product_template_form_view |
qc_inspection_form_view |
qc.inspection.form | qc.inspection | form | New |
qc_inspection_line_search_view |
qc.inspection.line.search | qc.inspection.line | search | New |
qc_inspection_line_tree_view |
qc.inspection.line.tree | qc.inspection.line | tree | New |
qc_inspection_search_view |
qc.inspection.search | qc.inspection | search | New |
qc_inspection_tree_view |
qc.inspection.tree | qc.inspection | tree | New |
qc_test_category_tree_view |
qc.test.category.tree | qc.test.category | tree | 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.tree | qc.test | tree | New |
qc_trigger_form_view |
qc.trigger.form | qc.trigger | form | New |
qc_trigger_tree_view |
qc.trigger.tree | qc.trigger | tree | New |
view_qc_test_set_test_form |
qc.inspection.set.test.form | qc.inspection.set.test | form | New |
qc_triggers
One2many → qc.trigger.product_category_line
comodel_name='qc.trigger.product_category_line'
inverse_name='product_category'
string='Quality control triggers'
No public methods.
qc_triggers
One2many → qc.trigger.product_line
comodel_name='qc.trigger.product_line'
inverse_name='product'
string='Quality control triggers'
No public methods.
qc_triggers
One2many → qc.trigger.product_template_line
comodel_name='qc.trigger.product_template_line'
inverse_name='product_template'
string='Quality control triggers'
No public methods.
auto_generated
Boolean
copy=False
help='If an inspection is auto-generated, it can be canceled nor removed.'
readonly=True
string='Auto-generated'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
date
Datetime
copy=False
default=fields.Datetime.now
readonly=True
required=True
select=True
states={'draft': [('readonly', False)]}
string='Date'
external_notes
Text
states={'success': [('readonly', True)], 'failed': [('readonly', True)]}
string='External notes'
inspection_lines
One2many → qc.inspection.line
comodel_name='qc.inspection.line'
inverse_name='inspection_id'
readonly=True
states={'ready': [('readonly', False)]}
string='Inspection lines'
internal_notes
Text
string='Internal notes'
name
Char
copy=False
default='/'
readonly=True
required=True
select=True
states={'draft': [('readonly', False)]}
string='Inspection number'
object_id
Reference
ondelete='set null'
readonly=True
selection=_links_get
states={'draft': [('readonly', False)]}
string='Reference'
product
Many2one → product.product
comodel_name='product.product'
compute='_get_product'
help='Product associated with the inspection'
store=True
qty
Float
default=1.0
string='Quantity'
state
Selection
default='draft'
readonly=True
string='State'
args: [('draft', 'Draft'), ('ready', 'Ready'), ('waiting', 'Waiting supervisor approval'), ('success', 'Quality success'), ('failed', 'Quality failed'), ('canceled', 'Canceled')]
success
Boolean
compute='_success'
help='This field will be marked if all tests have succeeded.'
store=True
string='Success'
test
Many2one → qc.test
comodel_name='qc.test'
readonly=True
select=True
string='Test'
user
Many2one → res.users
comodel_name='res.users'
default=<expr>
string='Responsible'
track_visibility='always'
action_approve(self)
action_cancel(self)
action_confirm(self)
action_draft(self)
action_todo(self)
create(self, vals)
set_test(self, trigger_line, force_fill=False)
unlink(self)
inspection_id
Many2one → qc.inspection
comodel_name='qc.inspection'
ondelete='cascade'
string='Inspection'
max_value
Float
digits=dp.get_precision('Quality Control')
help='Maximum valid value for a quantitative question.'
readonly=True
string='Max'
min_value
Float
digits=dp.get_precision('Quality Control')
help='Minimum valid value for a quantitative question.'
readonly=True
string='Min'
name
Char
readonly=True
string='Question'
notes
Text
string='Notes'
possible_ql_values
Many2many → qc.test.question.value
comodel_name='qc.test.question.value'
string='Answers'
product
Many2one → product.product
comodel_name='product.product'
related='inspection_id.product'
store=True
qualitative_value
Many2one → qc.test.question.value
comodel_name='qc.test.question.value'
domain="[('id', 'in', possible_ql_values[0][2])]"
help='Value of the result for a qualitative question.'
string='Qualitative value'
quantitative_value
Float
digits=dp.get_precision('Quality Control')
help='Value of the result for a quantitative question.'
args: 'Quantitative value'
question_type
Selection
readonly=True
string='Question type'
args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
success
Boolean
compute='quality_test_check'
store=True
string='Success?'
test_line
Many2one → qc.test.question
comodel_name='qc.test.question'
readonly=True
string='Test question'
test_uom_category
Many2one → product.uom.categ
comodel_name='product.uom.categ'
related='test_uom_id.category_id'
store=True
test_uom_id
Many2one → product.uom
comodel_name='product.uom'
help='UoM for minimum and maximum values for a quantitative question.'
readonly=True
string='Test UoM'
uom_id
Many2one → product.uom
comodel_name='product.uom'
domain="[('category_id', '=', test_uom_category)]"
help='UoM of the inspection value for a quantitative question.'
string='UoM'
valid_values
Char
compute='get_valid_values'
store=True
string='Valid values'
get_valid_values(self)
quality_test_check(self)
test
Many2one → qc.test
comodel_name='qc.test'
string='Test'
action_create_test(self)
active
Boolean
default=True
args: 'Active'
category
Many2one → qc.test.category
comodel_name='qc.test.category'
string='Category'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
fill_correct_values
Boolean
string='Pre-fill with correct values'
name
Char
required=True
select=True
string='Name'
translate=True
object_id
Reference
selection=_links_get
string='Reference object'
test_lines
One2many → qc.test.question
comodel_name='qc.test.question'
copy=True
inverse_name='test'
string='Questions'
type
Selection
default='generic'
required=True
select=True
string='Type'
args: [('generic', 'Generic'), ('related', 'Related')]
No public methods.
active
Boolean
default=True
help='This field allows you to hide the category without removing it.'
string='Active'
child_ids
One2many → qc.test.category
comodel_name='qc.test.category'
inverse_name='parent_id'
string='Child categories'
complete_name
Char
compute='_get_complete_name'
string='Full name'
name
Char
required=True
translate=True
args: 'Name'
parent_id
Many2one → qc.test.category
comodel_name='qc.test.category'
select=True
string='Parent category'
No public methods.
max_value
Float
digits=dp.get_precision('Quality Control')
string='Max'
min_value
Float
digits=dp.get_precision('Quality Control')
string='Min'
name
Char
required=True
select=True
string='Name'
translate=True
notes
Text
string='Notes'
ql_values
One2many → qc.test.question.value
comodel_name='qc.test.question.value'
copy=True
inverse_name='test_line'
string='Qualitative values'
sequence
Integer
default='10'
required=True
string='Sequence'
test
Many2one → qc.test
comodel_name='qc.test'
string='Test'
type
Selection
required=True
string='Type'
args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
uom_id
Many2one → product.uom
comodel_name='product.uom'
string='Uom'
No public methods.
name
Char
required=True
select=True
string='Name'
translate=True
ok
Boolean
help='When this field is marked, the answer is considered correct.'
string='Correct answer?'
test_line
Many2one → qc.test.question
comodel_name='qc.test.question'
string='Test question'
No public methods.
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
name
Char
required=True
select=True
string='Name'
translate=True
partner_selectable
Boolean
default=False
help='This technical field is to allow to filter by partner in triggers'
readonly=True
string='Selectable by partner'
No public methods.
partners
Many2many → res.partner
comodel_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.'
string='Partners'
test
Many2one → qc.test
comodel_name='qc.test'
required=True
trigger
Many2one → qc.trigger
comodel_name='qc.trigger'
required=True
user
Many2one → res.users
comodel_name='res.users'
default=<expr>
string='Responsible'
track_visibility='always'
get_trigger_line_for_product(self, trigger, product, partner=False)
product_category
Many2one → product.category
comodel_name='product.category'
get_trigger_line_for_product(self, trigger, product, partner=False)
product
Many2one → product.product
comodel_name='product.product'
get_trigger_line_for_product(self, trigger, product, partner=False)
product_template
Many2one → product.template
comodel_name='product.template'
get_trigger_line_for_product(self, trigger, product, partner=False)