Quality control

quality_control
REPOSITORY
REPOSITORYOCA/manufacture
GIT
GIThttps://github.com/OCA/manufacture.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/manufacture/tree/12.0/quality_control
VERSION
VERSION 1.5.1
CATEGORY
CATEGORYQuality control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), OdooMRP team
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), OdooMRP team
COMMITTERS
COMMITTERSHolger Brunn, Lois Rilo, cubells, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Dimitrios T. Tanis, Jaime Arroyo, Ignacio Ales, Carlos Roca, Marcel Savegnago
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - decimal_precision
    - 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 (15)
XML IDNameModelTypeStatus
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
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=<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'
Public methods (9)
  • action_approve(self)
    @api.multi
  • action_cancel(self)
    @api.multi
  • action_confirm(self)
    @api.multi
  • action_draft(self)
    @api.multi
  • action_todo(self)
    @api.multi
  • create(self, val_list)
    @api.model_create_multi
  • object_selection_values(self)
    @api.multi
    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)
    @api.multi
  • unlink(self)
    @api.multi

New fields (16)
  • 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'
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)
    @api.multi

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)
    @api.multi
  • 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=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'
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' track_visibility='always'
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/11.0/quality_control
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYQuality control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), OdooMRP team
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), OdooMRP team
COMMITTERS
COMMITTERSPedro M. Baeza, Lois Rilo, OCA Transbot, oca-travis, Weblate
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture/tree/10.0/quality_control
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web
    - bus
    - web_tour
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_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
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=_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'
Public methods (8)
  • action_approve(self)
    @api.multi
  • action_cancel(self)
    @api.multi
  • action_confirm(self)
    @api.multi
  • action_draft(self)
    @api.multi
  • action_todo(self)
    @api.multi
  • create(self, vals)
    @api.model
  • set_test(self, trigger_line, force_fill=False)
    @api.multi
  • unlink(self)
    @api.multi

New fields (16)
  • 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'
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)
    @api.multi

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=_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')]
Public methods (1)
  • 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=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'
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' track_visibility='always'
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/10.0/quality_control
VERSION
VERSION 1.0.3
CATEGORY
CATEGORYQuality control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), OdooMRP team
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), OdooMRP team
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Lois Rilo, OCA Transbot, oca-travis, Weblate, Simone Rubino
WEBSITE
WEBSITEhttps://github.com/OCA/manufacture/tree/10.0/quality_control
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
    - report
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_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
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=_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'
Public methods (8)
  • action_approve(self)
    @api.multi
  • action_cancel(self)
    @api.multi
  • action_confirm(self)
    @api.multi
  • action_draft(self)
    @api.multi
  • action_todo(self)
    @api.multi
  • create(self, vals)
    @api.model
  • set_test(self, trigger_line, force_fill=False)
    @api.multi
  • unlink(self)
    @api.multi

New fields (16)
  • 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'
Public methods (2)
  • get_valid_values(self)
    @api.one@api.depends('possible_ql_values', 'min_value', 'max_value', 'test_uom_id', 'question_type')
  • quality_test_check(self)
    @api.one@api.depends('question_type', 'uom_id', 'test_uom_id', 'max_value', 'min_value', 'quantitative_value', 'qualitative_value', 'possible_ql_values')

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

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=_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')]
Public methods (1)
  • 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='_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=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'
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' track_visibility='always'
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/9.0/quality_control
VERSION
VERSION 1.3.0
CATEGORY
CATEGORYQuality control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), AvanzOSC, Eficent, OdooMRP team, Serv. Tecnol. Avanzados - Pedro M. Baeza
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), AvanzOSC, Eficent, OdooMRP team, Serv. Tecnol. Avanzados - Pedro M. Baeza
COMMITTERS
COMMITTERSOCA Transbot, oca-travis, Weblate, lreficent
WEBSITE
WEBSITEhttp://www.odoomrp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - report
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_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
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 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'
Public methods (8)
  • action_approve(self)
    @api.multi
  • action_cancel(self)
    @api.multi
  • action_confirm(self)
    @api.multi
  • action_draft(self)
    @api.multi
  • action_todo(self)
    @api.multi
  • create(self, vals)
    @api.model
  • set_test(self, trigger_line, force_fill=False)
    @api.multi
  • unlink(self)
    @api.multi

New fields (16)
  • 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'
Public methods (2)
  • get_valid_values(self)
    @api.one@api.depends('possible_ql_values', 'min_value', 'max_value', 'test_uom_id', 'question_type')
  • quality_test_check(self)
    @api.one@api.depends('question_type', 'uom_id', 'test_uom_id', 'max_value', 'min_value', 'quantitative_value', 'qualitative_value', 'possible_ql_values')

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

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 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')]
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='_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'
Public methods (0)

No public methods.

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

No public methods.

New fields (3)
  • 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'
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 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'
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' track_visibility='always'
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/8.0/quality_control
VERSION
VERSION 1.3.0
CATEGORY
CATEGORYQuality control
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), AvanzOSC, OdooMRP team, Serv. Tecnol. Avanzados - Pedro M. Baeza
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), AvanzOSC, OdooMRP team, Serv. Tecnol. Avanzados - Pedro M. Baeza
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, agaldona, Weblate, oihane
WEBSITE
WEBSITEhttp://www.odoomrp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:24
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - decimal_precision
    - mail
    - base_setup
    - web_kanban
    - web
    - report
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 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
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 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'
Public methods (8)
  • action_approve(self)
    @api.multi
  • action_cancel(self)
    @api.multi
  • action_confirm(self)
    @api.multi
  • action_draft(self)
    @api.multi
  • action_todo(self)
    @api.multi
  • create(self, vals)
    @api.model
  • set_test(self, trigger_line, force_fill=False)
    @api.multi
  • unlink(self)
    @api.multi

New fields (16)
  • 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'
Public methods (2)
  • get_valid_values(self)
    @api.one@api.depends('possible_ql_values', 'min_value', 'max_value', 'test_uom_id', 'question_type')
  • quality_test_check(self)
    @api.one@api.depends('question_type', 'uom_id', 'test_uom_id', 'max_value', 'min_value', 'quantitative_value', 'qualitative_value', 'possible_ql_values')

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

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 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')]
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='_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'
Public methods (0)

No public methods.

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

No public methods.

New fields (3)
  • 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'
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 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'
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' track_visibility='always'
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)