Quality Control OCA

quality_control_oca
REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/19.0/quality_control_oca
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYQuality Control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Hotdgo9
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 IDNameModelTypeStatus
product_category_qc_form_view product.category.qc product.category group Inherits product.product_category_form_view
product_template_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_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
Models touched (15)

New fields (1)
  • qc_triggers One2many → qc.trigger.product_category_line
    comodel_name='qc.trigger.product_category_line' inverse_name='product_category' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_line
    comodel_name='qc.trigger.product_line' inverse_name='product' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_template_line
    comodel_name='qc.trigger.product_template_line' inverse_name='product_template' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (15)
  • auto_generated Boolean
    copy=False help='If an inspection is auto-generated, it can be canceled but not removed.' string='Auto-generated'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • date Datetime
    copy=False default=fields.Datetime.now required=True string='Plan Date'
  • date_done Datetime
    readonly=True args: 'Completion Date'
  • external_notes Text
  • inspection_lines One2many → qc.inspection.line
    comodel_name='qc.inspection.line' inverse_name='inspection_id'
  • internal_notes Text
    string='Internal notes'
  • name Char
    copy=False default='/' required=True string='Inspection number'
  • object_id Reference
    ondelete='set null' selection='object_selection_values' string='Reference'
  • product_id Many2one → product.product
    comodel_name='product.product' compute='_compute_product_id' help='Product associated with the inspection' store=True
  • qty Float
    default=1.0 string='Quantity'
  • state Selection
    default='draft' tracking=True args: [('plan', 'Plan'), ('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
  • test Many2one → qc.test
    comodel_name='qc.test'
  • user Many2one → res.users
    comodel_name='res.users' default=<expr> string='Responsible' tracking=True
Public methods (9)
  • 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_id Many2one → qc.inspection
    comodel_name='qc.inspection' ondelete='cascade' string='Inspection'
  • max_value Float
    digits='Quality Control' help='Maximum valid value for a quantitative question.' string='Max'
  • min_value Float
    digits='Quality Control' help='Minimum valid value for a quantitative question.' string='Min'
  • name Char
    string='Question'
  • notes Text
  • 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' 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='Quality Control' help='Value of the result for a quantitative question.' string='Quantitative value'
  • question_type Selection
    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' string='Test question'
  • test_uom_category Many2one → uom.uom
    comodel_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=True string='Test UoM Reference'
  • test_uom_id Many2one → uom.uom
    comodel_name='uom.uom' help='UoM for minimum and maximum values for a quantitative question.' string='Test UoM'
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' domain="[('id', 'child_of', 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'
Public methods (0)

No public methods.

New fields (1)
  • test Many2one → qc.test
    comodel_name='qc.test'
Public methods (1)
  • action_create_test(self)

New fields (6)
  • active Boolean
    default=True
  • category Many2one → qc.test.category
    comodel_name='qc.test.category'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • fill_correct_values Boolean
    string='Pre-fill with correct values'
  • name Char
    required=True translate=True
  • test_lines One2many → qc.test.question
    comodel_name='qc.test.question' copy=True inverse_name='test' string='Questions'
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True help='This field allows you to hide the category without removing it.'
  • 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
  • parent_id Many2one → qc.test.category
    comodel_name='qc.test.category' string='Parent category'
Public methods (0)

No public methods.

New fields (9)
  • max_value Float
    digits='Quality Control' string='Max'
  • min_value Float
    digits='Quality Control' string='Min'
  • name Char
    required=True translate=True
  • notes Text
  • 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
  • test Many2one → qc.test
    comodel_name='qc.test'
  • type Selection
    required=True args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Uom'
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True 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'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True translate=True
  • partner_selectable Boolean
    default=False help='This technical field is to allow to filter by partner in triggers' string='Selectable by partner'
Public methods (0)

No public methods.

New fields (5)
  • 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.'
  • test Many2one → qc.test
    comodel_name='qc.test' required=True
  • timing Selection
    default='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')]
  • trigger Many2one → qc.trigger
    comodel_name='qc.trigger' required=True
  • user Many2one → res.users
    comodel_name='res.users' default=<expr> string='Responsible' tracking=True
Public methods (1)
  • 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_category Many2one → product.category
    comodel_name='product.category'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)

New fields (1)
  • product Many2one → product.product
    comodel_name='product.product'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)

New fields (1)
  • product_template Many2one → product.template
    comodel_name='product.template'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)
REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/18.0/quality_control_oca
VERSION
VERSION 1.4.0
CATEGORY
CATEGORYQuality Control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC
COMMITTERS
COMMITTERSAaronHForgeFlow, Florian da Costa, Weblate, OCA-git-bot, Dimitrios T. Tanis, oca-ci, Saran440, Rémi - Le Filament
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 IDNameModelTypeStatus
product_category_qc_form_view product.category.qc product.category group Inherits product.product_category_form_view
product_template_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_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
Models touched (15)

New fields (1)
  • qc_triggers One2many → qc.trigger.product_category_line
    comodel_name='qc.trigger.product_category_line' inverse_name='product_category' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_line
    comodel_name='qc.trigger.product_line' inverse_name='product' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_template_line
    comodel_name='qc.trigger.product_template_line' inverse_name='product_template' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (15)
  • auto_generated Boolean
    copy=False help='If an inspection is auto-generated, it can be canceled but not removed.' string='Auto-generated'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • date Datetime
    copy=False default=fields.Datetime.now required=True string='Plan Date'
  • date_done Datetime
    readonly=True args: 'Completion Date'
  • external_notes Text
  • inspection_lines One2many → qc.inspection.line
    comodel_name='qc.inspection.line' inverse_name='inspection_id'
  • internal_notes Text
    string='Internal notes'
  • name Char
    copy=False default='/' required=True string='Inspection number'
  • object_id Reference
    ondelete='set null' selection='object_selection_values' string='Reference'
  • product_id Many2one → product.product
    comodel_name='product.product' compute='_compute_product_id' help='Product associated with the inspection' store=True
  • qty Float
    default=1.0 string='Quantity'
  • state Selection
    default='draft' tracking=True args: [('plan', 'Plan'), ('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
  • test Many2one → qc.test
    comodel_name='qc.test'
  • user Many2one → res.users
    comodel_name='res.users' default=<expr> string='Responsible' tracking=True
Public methods (9)
  • 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_id Many2one → qc.inspection
    comodel_name='qc.inspection' ondelete='cascade' string='Inspection'
  • max_value Float
    digits='Quality Control' help='Maximum valid value for a quantitative question.' string='Max'
  • min_value Float
    digits='Quality Control' help='Minimum valid value for a quantitative question.' string='Min'
  • name Char
    string='Question'
  • notes Text
  • 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' 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='Quality Control' help='Value of the result for a quantitative question.' string='Quantitative value'
  • question_type Selection
    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' 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.' 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'
Public methods (0)

No public methods.

New fields (1)
  • test Many2one → qc.test
    comodel_name='qc.test'
Public methods (1)
  • action_create_test(self)

New fields (6)
  • active Boolean
    default=True
  • category Many2one → qc.test.category
    comodel_name='qc.test.category'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • fill_correct_values Boolean
    string='Pre-fill with correct values'
  • name Char
    required=True translate=True
  • test_lines One2many → qc.test.question
    comodel_name='qc.test.question' copy=True inverse_name='test' string='Questions'
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True help='This field allows you to hide the category without removing it.'
  • 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
  • parent_id Many2one → qc.test.category
    comodel_name='qc.test.category' string='Parent category'
Public methods (0)

No public methods.

New fields (9)
  • max_value Float
    digits='Quality Control' string='Max'
  • min_value Float
    digits='Quality Control' string='Min'
  • name Char
    required=True translate=True
  • notes Text
  • 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
  • test Many2one → qc.test
    comodel_name='qc.test'
  • type Selection
    required=True args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Uom'
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True 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'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True translate=True
  • partner_selectable Boolean
    default=False help='This technical field is to allow to filter by partner in triggers' string='Selectable by partner'
Public methods (0)

No public methods.

New fields (5)
  • 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.'
  • test Many2one → qc.test
    comodel_name='qc.test' required=True
  • timing Selection
    default='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')]
  • trigger Many2one → qc.trigger
    comodel_name='qc.trigger' required=True
  • user Many2one → res.users
    comodel_name='res.users' default=<expr> string='Responsible' tracking=True
Public methods (1)
  • 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_category Many2one → product.category
    comodel_name='product.category'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)

New fields (1)
  • product Many2one → product.product
    comodel_name='product.product'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)

New fields (1)
  • product_template Many2one → product.template
    comodel_name='product.template'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)
REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/17.0/quality_control_oca
VERSION
VERSION 1.5.0
CATEGORY
CATEGORYQuality Control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Rémi - Le Filament, LauraCForgeFlow, sygel, Antoni Marroig Campomar
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
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 (14)
XML IDNameModelTypeStatus
product_category_qc_form_view product.category.qc product.category group Inherits product.product_category_form_view
product_template_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_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
Models touched (15)

New fields (1)
  • qc_triggers One2many → qc.trigger.product_category_line
    comodel_name='qc.trigger.product_category_line' inverse_name='product_category' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_line
    comodel_name='qc.trigger.product_line' inverse_name='product' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_template_line
    comodel_name='qc.trigger.product_template_line' inverse_name='product_template' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (15)
  • auto_generated Boolean
    copy=False help='If an inspection is auto-generated, it can be canceled but not removed.' string='Auto-generated'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • date Datetime
    copy=False default=fields.Datetime.now required=True string='Plan Date'
  • date_done Datetime
    args: 'Completion Date'
  • external_notes Text
  • inspection_lines One2many → qc.inspection.line
    comodel_name='qc.inspection.line' inverse_name='inspection_id'
  • internal_notes Text
    string='Internal notes'
  • name Char
    copy=False default='/' required=True string='Inspection number'
  • object_id Reference
    ondelete='set null' selection='object_selection_values' string='Reference'
  • product_id Many2one → product.product
    comodel_name='product.product' compute='_compute_product_id' help='Product associated with the inspection' store=True
  • qty Float
    default=1.0 string='Quantity'
  • state Selection
    default='draft' tracking=True args: [('plan', 'Plan'), ('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
  • test Many2one → qc.test
    comodel_name='qc.test'
  • user Many2one → res.users
    comodel_name='res.users' default=<expr> string='Responsible' tracking=True
Public methods (10)
  • action_approve(self)
  • action_cancel(self)
  • action_confirm(self)
  • action_draft(self)
  • action_todo(self)
  • create(self, val_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)
  • unlink(self)
  • write(self, vals)

New fields (16)
  • inspection_id Many2one → qc.inspection
    comodel_name='qc.inspection' ondelete='cascade' string='Inspection'
  • max_value Float
    digits='Quality Control' help='Maximum valid value for a quantitative question.' string='Max'
  • min_value Float
    digits='Quality Control' help='Minimum valid value for a quantitative question.' string='Min'
  • name Char
    string='Question'
  • notes Text
  • 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' 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='Quality Control' help='Value of the result for a quantitative question.' string='Quantitative value'
  • question_type Selection
    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' 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.' 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'
Public methods (0)

No public methods.

New fields (1)
  • test Many2one → qc.test
    comodel_name='qc.test'
Public methods (1)
  • action_create_test(self)

New fields (6)
  • active Boolean
    default=True
  • category Many2one → qc.test.category
    comodel_name='qc.test.category'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • fill_correct_values Boolean
    string='Pre-fill with correct values'
  • name Char
    required=True translate=True
  • test_lines One2many → qc.test.question
    comodel_name='qc.test.question' copy=True inverse_name='test' string='Questions'
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True help='This field allows you to hide the category without removing it.'
  • 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
  • parent_id Many2one → qc.test.category
    comodel_name='qc.test.category' string='Parent category'
Public methods (0)

No public methods.

New fields (9)
  • max_value Float
    digits='Quality Control' string='Max'
  • min_value Float
    digits='Quality Control' string='Min'
  • name Char
    required=True translate=True
  • notes Text
  • 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
  • test Many2one → qc.test
    comodel_name='qc.test'
  • type Selection
    required=True args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Uom'
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True 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'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True translate=True
  • partner_selectable Boolean
    default=False help='This technical field is to allow to filter by partner in triggers' string='Selectable by partner'
Public methods (0)

No public methods.

New fields (5)
  • 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.'
  • test Many2one → qc.test
    comodel_name='qc.test' required=True
  • timing Selection
    default='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')]
  • trigger Many2one → qc.trigger
    comodel_name='qc.trigger' required=True
  • user Many2one → res.users
    comodel_name='res.users' default=<expr> string='Responsible' tracking=True
Public methods (1)
  • 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_category Many2one → product.category
    comodel_name='product.category'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)

New fields (1)
  • product Many2one → product.product
    comodel_name='product.product'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)

New fields (1)
  • product_template Many2one → product.template
    comodel_name='product.template'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)
REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/16.0/quality_control_oca
VERSION
VERSION 1.8.0
CATEGORY
CATEGORYQuality Control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC
COMMITTERS
COMMITTERSPedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, Dimitrios T. Tanis, oca-ci, Ugaitz Olaizola, Stefano Consolaro, Aungkokolin1997, LauraCForgeFlow, Kev-Roche, anusrinps96, Alfredo
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:50
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (16)
XML IDNameModelTypeStatus
product_category_qc_form_view product.category.qc product.category group Inherits product.product_category_form_view
product_template_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_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.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
Models touched (15)

New fields (1)
  • qc_triggers One2many → qc.trigger.product_category_line
    comodel_name='qc.trigger.product_category_line' inverse_name='product_category' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_line
    comodel_name='qc.trigger.product_line' inverse_name='product' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_template_line
    comodel_name='qc.trigger.product_template_line' inverse_name='product_template' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (16)
  • 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={'plan': [('readonly', False)], 'draft': [('readonly', False)]} string='Plan Date'
  • date_done Datetime
    readonly=True args: 'Completion Date'
  • external_notes Text
    states={'success': [('readonly', True)], 'failed': [('readonly', True)]}
  • inspection_lines One2many → qc.inspection.line
    comodel_name='qc.inspection.line' inverse_name='inspection_id' readonly=True states={'ready': [('readonly', False)]}
  • 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='object_selection_values' 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' store=True
  • product_image Image
    related='product_id.image_1920' string='Product Image'
  • qty Float
    default=1.0 string='Quantity'
  • state Selection
    default='draft' readonly=True tracking=True args: [('plan', 'Plan'), ('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
  • test Many2one → qc.test
    comodel_name='qc.test' readonly=True
  • user Many2one → res.users
    comodel_name='res.users' default=<expr> string='Responsible' tracking=True
Public methods (9)
  • 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_id Many2one → qc.inspection
    comodel_name='qc.inspection' ondelete='cascade' string='Inspection'
  • max_value Float
    digits='Quality Control' help='Maximum valid value for a quantitative question.' readonly=True string='Max'
  • min_value Float
    digits='Quality Control' help='Minimum valid value for a quantitative question.' readonly=True string='Min'
  • name Char
    readonly=True string='Question'
  • notes Text
  • 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' 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='Quality Control' help='Value of the result for a quantitative question.' string='Quantitative value'
  • question_type Selection
    readonly=True 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'
Public methods (0)

No public methods.

New fields (1)
  • test Many2one → qc.test
    comodel_name='qc.test'
Public methods (1)
  • action_create_test(self)

New fields (8)
  • active Boolean
    default=True
  • category Many2one → qc.test.category
    comodel_name='qc.test.category'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • fill_correct_values Boolean
    string='Pre-fill with correct values'
  • name Char
    required=True 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 args: [('generic', 'Generic'), ('related', 'Related')]
Public methods (2)
  • object_selection_values(self)
  • onchange_type(self)
    @api.onchange('type')

New fields (5)
  • active Boolean
    default=True help='This field allows you to hide the category without removing it.'
  • 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
  • parent_id Many2one → qc.test.category
    comodel_name='qc.test.category' string='Parent category'
Public methods (0)

No public methods.

New fields (9)
  • max_value Float
    digits='Quality Control' string='Max'
  • min_value Float
    digits='Quality Control' string='Min'
  • name Char
    required=True translate=True
  • notes Text
  • 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
  • test Many2one → qc.test
    comodel_name='qc.test'
  • type Selection
    required=True args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Uom'
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True 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'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True 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'
Public methods (0)

No public methods.

New fields (5)
  • 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.'
  • test Many2one → qc.test
    comodel_name='qc.test' required=True
  • timing Selection
    default='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')]
  • trigger Many2one → qc.trigger
    comodel_name='qc.trigger' required=True
  • user Many2one → res.users
    comodel_name='res.users' default=<expr> string='Responsible' tracking=True
Public methods (2)
  • 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.
  • get_trigger_line_models(self)
    Overridable method for getting trigger_line models. Each inherited model will complete this module to add the model to the list returned so that it can be parsed each time a trigger is run.

New fields (1)
  • product_category Many2one → product.category
    comodel_name='product.category'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)

New fields (1)
  • product Many2one → product.product
    comodel_name='product.product'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)

New fields (1)
  • product_template Many2one → product.template
    comodel_name='product.template'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, timings, product, partner=False)
REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/15.0/quality_control_oca
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYQuality Control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Stefano Consolaro
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:36
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
product_category_qc_form_view product.category.qc product.category group Inherits product.product_category_form_view
product_template_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_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
Models touched (15)

New fields (1)
  • qc_triggers One2many → qc.trigger.product_category_line
    comodel_name='qc.trigger.product_category_line' inverse_name='product_category' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_line
    comodel_name='qc.trigger.product_line' inverse_name='product' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_template_line
    comodel_name='qc.trigger.product_template_line' inverse_name='product_template' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (14)
  • 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)]}
  • external_notes Text
    states={'success': [('readonly', True)], 'failed': [('readonly', True)]}
  • inspection_lines One2many → qc.inspection.line
    comodel_name='qc.inspection.line' inverse_name='inspection_id' readonly=True states={'ready': [('readonly', False)]}
  • 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='object_selection_values' 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' store=True
  • qty Float
    default=1.0 string='Quantity'
  • state Selection
    default='draft' readonly=True tracking=True 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
  • test Many2one → qc.test
    comodel_name='qc.test' readonly=True
  • user Many2one → res.users
    comodel_name='res.users' default=<expr> string='Responsible' tracking=True
Public methods (9)
  • action_approve(self)
  • action_cancel(self)
  • action_confirm(self)
  • action_draft(self)
  • action_todo(self)
  • create(self, val_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)
  • unlink(self)

New fields (16)
  • inspection_id Many2one → qc.inspection
    comodel_name='qc.inspection' ondelete='cascade' string='Inspection'
  • max_value Float
    digits='Quality Control' help='Maximum valid value for a quantitative question.' readonly=True string='Max'
  • min_value Float
    digits='Quality Control' help='Minimum valid value for a quantitative question.' readonly=True string='Min'
  • name Char
    readonly=True string='Question'
  • notes Text
  • 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' 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='Quality Control' help='Value of the result for a quantitative question.' string='Quantitative value'
  • question_type Selection
    readonly=True 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'
Public methods (0)

No public methods.

New fields (1)
  • test Many2one → qc.test
    comodel_name='qc.test'
Public methods (1)
  • action_create_test(self)

New fields (8)
  • active Boolean
    default=True
  • category Many2one → qc.test.category
    comodel_name='qc.test.category'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • fill_correct_values Boolean
    string='Pre-fill with correct values'
  • name Char
    required=True 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 args: [('generic', 'Generic'), ('related', 'Related')]
Public methods (2)
  • object_selection_values(self)
  • onchange_type(self)
    @api.onchange('type')

New fields (5)
  • active Boolean
    default=True help='This field allows you to hide the category without removing it.'
  • 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
  • parent_id Many2one → qc.test.category
    comodel_name='qc.test.category' string='Parent category'
Public methods (0)

No public methods.

New fields (9)
  • max_value Float
    digits='Quality Control' string='Max'
  • min_value Float
    digits='Quality Control' string='Min'
  • name Char
    required=True translate=True
  • notes Text
  • 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
  • test Many2one → qc.test
    comodel_name='qc.test'
  • type Selection
    required=True args: [('qualitative', 'Qualitative'), ('quantitative', 'Quantitative')]
  • uom_id Many2one → uom.uom
    comodel_name='uom.uom' string='Uom'
Public methods (0)

No public methods.

New fields (3)
  • name Char
    required=True 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'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True 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'
Public methods (0)

No public methods.

New fields (4)
  • 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.'
  • 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' tracking=True
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)
    Overridable method for getting trigger_line associated to a product. Each inherited model will complete this module to make the search by product, template or category. :param trigger: Trigger instance. :param product: Product instance. :return: Set of trigger_lines that matches to the given product and trigger.

New fields (1)
  • product_category Many2one → product.category
    comodel_name='product.category'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)

New fields (1)
  • product Many2one → product.product
    comodel_name='product.product'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)

New fields (1)
  • product_template Many2one → product.template
    comodel_name='product.template'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)
REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/14.0/quality_control_oca
VERSION
VERSION 1.4.2
CATEGORY
CATEGORYQuality Control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC
COMMITTERS
COMMITTERSPedro M. Baeza, cubells, OCA Transbot, AaronHForgeFlow, oca-travis, Weblate, OCA-git-bot, oca-ci, Enrique Martín, Alessandro Uffreduzzi
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:03
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
product_category_qc_form_view product.category.qc product.category group Inherits product.product_category_form_view
product_template_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_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
Models touched (15)

New fields (1)
  • qc_triggers One2many → qc.trigger.product_category_line
    comodel_name='qc.trigger.product_category_line' inverse_name='product_category' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_line
    comodel_name='qc.trigger.product_line' inverse_name='product' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_template_line
    comodel_name='qc.trigger.product_template_line' inverse_name='product_template' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (14)
  • 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='object_selection_values' 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' store=True
  • qty Float
    default=1.0 string='Quantity'
  • state Selection
    default='draft' readonly=True string='State' tracking=True 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' tracking=True
Public methods (9)
  • action_approve(self)
  • action_cancel(self)
  • action_confirm(self)
  • action_draft(self)
  • action_todo(self)
  • create(self, val_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)
  • unlink(self)

New fields (16)
  • inspection_id Many2one → qc.inspection
    comodel_name='qc.inspection' ondelete='cascade' string='Inspection'
  • max_value Float
    digits='Quality Control' help='Maximum valid value for a quantitative question.' readonly=True string='Max'
  • min_value Float
    digits='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' 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='Quality Control' help='Value of the result for a quantitative question.' string='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'
Public methods (0)

No public methods.

New fields (1)
  • test Many2one → qc.test
    comodel_name='qc.test' string='Test'
Public methods (1)
  • action_create_test(self)

New fields (8)
  • 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')]
Public methods (2)
  • object_selection_values(self)
  • onchange_type(self)
    @api.onchange('type')

New fields (5)
  • 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'
Public methods (0)

No public methods.

New fields (9)
  • max_value Float
    digits='Quality Control' string='Max'
  • min_value Float
    digits='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'
Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

New fields (4)
  • 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'
Public methods (0)

No public methods.

New fields (4)
  • 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' tracking=True
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)
    Overridable method for getting trigger_line associated to a product. Each inherited model will complete this module to make the search by product, template or category. :param trigger: Trigger instance. :param product: Product instance. :return: Set of trigger_lines that matches to the given product and trigger.

New fields (1)
  • product_category Many2one → product.category
    comodel_name='product.category'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)

New fields (1)
  • product Many2one → product.product
    comodel_name='product.product'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)

New fields (1)
  • product_template Many2one → product.template
    comodel_name='product.template'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)
REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/13.0/quality_control_oca
VERSION
VERSION 2.2.0
CATEGORY
CATEGORYQuality Control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, cubells, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, oca-ci, Carlos Roca
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
product_category_qc_form_view product.category.qc product.category group Inherits product.product_category_form_view
product_template_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_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
Models touched (15)

New fields (1)
  • qc_triggers One2many → qc.trigger.product_category_line
    comodel_name='qc.trigger.product_category_line' inverse_name='product_category' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_line
    comodel_name='qc.trigger.product_line' inverse_name='product' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (1)
  • qc_triggers One2many → qc.trigger.product_template_line
    comodel_name='qc.trigger.product_template_line' inverse_name='product_template' string='Quality control triggers'
Public methods (0)

No public methods.

New fields (14)
  • 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='object_selection_values' 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' store=True
  • qty Float
    default=1.0 string='Quantity'
  • state Selection
    default='draft' readonly=True string='State' tracking=True 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' tracking=True
Public methods (9)
  • action_approve(self)
  • action_cancel(self)
  • action_confirm(self)
  • action_draft(self)
  • action_todo(self)
  • create(self, val_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)
  • unlink(self)

New fields (16)
  • inspection_id Many2one → qc.inspection
    comodel_name='qc.inspection' ondelete='cascade' string='Inspection'
  • max_value Float
    digits='Quality Control' help='Maximum valid value for a quantitative question.' readonly=True string='Max'
  • min_value Float
    digits='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' 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='Quality Control' help='Value of the result for a quantitative question.' string='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'
Public methods (0)

No public methods.

New fields (1)
  • test Many2one → qc.test
    comodel_name='qc.test' string='Test'
Public methods (1)
  • action_create_test(self)

New fields (6)
  • 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
  • test_lines One2many → qc.test.question
    comodel_name='qc.test.question' copy=True inverse_name='test' string='Questions'
Public methods (0)

No public methods.

New fields (5)
  • 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'
Public methods (0)

No public methods.

New fields (9)
  • max_value Float
    digits='Quality Control' string='Max'
  • min_value Float
    digits='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'
Public methods (0)

No public methods.

New fields (3)
  • 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'
Public methods (0)

No public methods.

New fields (4)
  • 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'
Public methods (0)

No public methods.

New fields (4)
  • 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' tracking=True
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)
    Overridable method for getting trigger_line associated to a product. Each inherited model will complete this module to make the search by product, template or category. :param trigger: Trigger instance. :param product: Product instance. :return: Set of trigger_lines that matches to the given product and trigger.

New fields (1)
  • product_category Many2one → product.category
    comodel_name='product.category'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)

New fields (1)
  • product Many2one → product.product
    comodel_name='product.product'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)

New fields (1)
  • product_template Many2one → product.template
    comodel_name='product.template'
Public methods (1)
  • get_trigger_line_for_product(self, trigger, product, partner=False)