Repository
OCA/server-tools · module folder · Try on Runboat
Module version
1.0.0
Category
Tools
Folder size
1.1 MB
License
LGPL-3
Application
Yes
Auto-installable
No
Website
https://github.com/OCA/server-tools
Last tracking update
2026-08-07 07:57:05
Authors
Odoo Community Association (OCA), Tecnativa
Maintainers
Odoo Community Association (OCA), Tecnativa
Committers
Rad0van, Weblate, OCA-git-bot, oca-ci
Odoo dependencies
odoo/odoo:
- web
Python dependencies
None
System dependencies
None
Required by
product_custom_info
Description

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
custom_info_category_form custom.info.category form New
custom_info_category_search custom.info.category search New
custom_info_category_tree custom.info.category tree New
custom_info_option_form custom.info.option form New
custom_info_option_form_full custom.info.option form Inherits custom_info_option_form
custom_info_option_search custom.info.option search New
custom_info_option_tree custom.info.option tree New
custom_info_option_tree_full custom.info.option tree Inherits custom_info_option_tree
custom_info_property_form custom.info.property form New
custom_info_property_form_full custom.info.property form Inherits custom_info_property_form
custom_info_property_search custom.info.property search New
custom_info_property_tree custom.info.property tree New
custom_info_property_tree_full custom.info.property tree Inherits custom_info_property_tree
custom_info_template_form custom.info.template form New
custom_info_template_search custom.info.template search New
custom_info_template_tree custom.info.template tree New
custom_info_value_editable custom.info.value New
custom_info_value_form custom.info.value form New
custom_info_value_search custom.info.value search New
custom_info_value_tree custom.info.value tree New
custom_info_value_tree_editable custom.info.value tree Inherits custom_info_value_tree
res_config_settings_view_form Allow to enable custom information res.config.settings form Inherits base_setup.res_config_settings_view_form
view_partner_form res.partner form Inherits base.view_partner_form
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (10)

New fields (2)
  • custom_info_ids One2many → custom.info.value
    auto_join=True comodel_name='custom.info.value' domain=<expr> inverse_name='res_id' string='Custom Properties'
  • custom_info_template_id Many2one → custom.info.template
    comodel_name='custom.info.template' domain=<expr> string='Custom Information Template'
Public methods (4)
  • all_custom_info_templates(self)
    Get all custom info templates involved in these owners.
  • get_custom_info_value(self, properties)
    @api.returns('custom.info.value')
    Get ``custom.info.value`` records for the given property.
  • onchange(self, values, field_name, field_onchange)
  • unlink(self)
    Remove linked custom info this way, as can't be handled automatically.

New fields (3)
  • name Char
    index=True required=True translate=True
  • property_ids One2many → custom.info.property
    comodel_name='custom.info.property' help='Properties in this category.' inverse_name='category_id' string='Properties'
  • sequence Integer
    index=True
Public methods (1)
  • check_access_rule(self, operation)
    You access a category if you access at least one property.

New fields (4)
  • name Char
    index=True required=True translate=True
  • property_ids Many2many → custom.info.property
    comodel_name='custom.info.property' help='Properties where this option is enabled.' string='Properties'
  • template_id Many2one → custom.info.template
    comodel_name='custom.info.template' help='Additional template to be applied to the owner if this option is chosen.' string='Additional template'
  • value_ids One2many → custom.info.value
    comodel_name='custom.info.value' help='Values that have set this option.' inverse_name='value_id' string='Values'
Public methods (1)
  • check_access_rule(self, operation)
    You access an option if you access at least one property.

New fields (14)
  • category_id Many2one → custom.info.category
    comodel_name='custom.info.category' string='Category'
  • category_sequence Integer
    readonly=True related='category_id.sequence' store=True string='Category Sequence'
  • default_value Char
    help='Will be applied by default to all custom values of this property. This is a char field, so you have to enter some value that can be converted to the field type you choose.' translate=True
  • field_type Selection
    compute='_compute_field_type' selection=[('str', 'Text'), ('int', 'Whole number'), ('float', 'Decimal number'), ('bool', 'Yes/No'), ('date', 'Date'), ('id', 'Selection')] store=True
  • info_value_ids One2many → custom.info.value
    comodel_name='custom.info.value' inverse_name='property_id' string='Property Values'
  • maximum Float
    default=-1 help='For numeric fields, it means the maximum possible value; for text fields, it means the maximum possible length. If it is smaller than the minimum, then this check is skipped'
  • minimum Float
    help='For numeric fields, it means the minimum possible value; for text fields, it means the minimum possible length. If it is bigger than the maximum, then this check is skipped'
  • model Char
    related='template_id.model'
  • name Char
    required=True translate=True
  • option_ids Many2many → custom.info.option
    comodel_name='custom.info.option' help="When the field type is 'selection', choose the available options here." string='Options'
  • required Boolean
  • sequence Integer
    index=True
  • template_id Many2one → custom.info.template
    comodel_name='custom.info.template' ondelete='cascade' required=True string='Template'
  • widget Selection
    default='char' help='Type of information that can be stored in the property.' required=True selection=[('boolean', 'Boolean'), ('float', 'Decimal'), ('integer', 'Integer'), ('date', 'Date'), ('char', 'Single line text'), ('text', 'Multi line Text'), ('html', 'Complex text'), ('many2one', 'Choice')]
Public methods (1)
  • check_access_rule(self, operation)
    You access a property if you access its template.

New fields (4)
  • model Char
    compute='_compute_model' inverse='_inverse_model' search='_search_model' string='Model technical name'
  • model_id Many2one → ir.model
    auto_join=True comodel_name='ir.model' ondelete='cascade' required=True string='Model'
  • name Char
    required=True translate=True
  • property_ids One2many → custom.info.property
    comodel_name='custom.info.property' inverse_name='template_id' string='Properties'
Public methods (2)
  • check_access_rule(self, operation)
    You access a template if you access its model.
  • write(self, vals)

New fields (19)
  • category_id Many2one
    related='property_id.category_id' store=True
  • category_sequence Integer
    related='property_id.category_id.sequence' store=True string='Category Sequence'
  • field_name Char
    compute='_compute_field_name' help='Technical name of the field where the value is stored.'
  • field_type Selection
    related='property_id.field_type'
  • model Char
    index=True readonly=True related='property_id.model' store=True
  • name Char
    related='property_id.name'
  • owner_id Reference
    compute='_compute_owner_id' help='Record that owns this custom value.' inverse='_inverse_owner_id' selection='_selection_owner_id' string='Owner'
  • property_id Many2one → custom.info.property
    comodel_name='custom.info.property' required=True string='Property'
  • property_sequence Integer
    index=True related='property_id.sequence' store=True
  • required Boolean
    related='property_id.required'
  • res_id Integer
    index=True required=True string='Resource ID'
  • value Char
    compute='_compute_value' help='Value, always converted to/from the typed field.' inverse='_inverse_value' search='_search_value'
  • value_bool Boolean
    index=True string='Yes/No value'
  • value_date Date
    index=True string='Date value'
  • value_float Float
    index=True string='Decimal number value'
  • value_id Many2one → custom.info.option
    comodel_name='custom.info.option' domain="[('property_ids', '=', property_id)]" ondelete='cascade' string='Selection value'
  • value_int Integer
    index=True string='Whole number value'
  • value_str Char
    index=True string='Text value' translate=True
  • widget Selection
    readonly=True related='property_id.widget'
Public methods (1)
  • check_access_rule(self, operation)
    You access a value if you access its owner record.

New fields (1)
  • view_mode Selection
    ondelete={'custom_info': 'cascade'} selection_add=[('custom_info', 'Custom Info')]
Public methods (0)

No public methods.

New fields (1)
  • type Selection
    ondelete={'custom_info': 'cascade'} selection_add=[('custom_info', 'Custom Info')]
Public methods (0)

No public methods.

New fields (2)
  • group_custom_info_manager Boolean
    help='Allow all employees to manage custom information' implied_group='base_custom_info.group_basic' string='Manage custom information'
  • group_custom_info_partner Boolean
    help='Add a tab in the partners form to edit custom information' implied_group='base_custom_info.group_partner' string='Edit custom information in partners'
Public methods (0)

No public methods.

New fields (2)
  • custom_info_ids One2many
    context={'default_model': _name}
  • custom_info_template_id Many2one
    context={'default_model': _name}
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Status
Open migration PR — not merged yet for this version
CI status
green — ready to merge
Open since
34 days ago
Last activity
34 days ago
Repository
OCA/server-tools
Pull request
16.0 mig base custom info (#3678)