BI SQL Editor

bi_sql_editor
REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/19.0/bi_sql_editor
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Franco Leyes, Baptiste Pellarin
WEBSITE
WEBSITEhttps://github.com/OCA/reporting-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - sql_request_abstract
odoo/odoo:
    - spreadsheet_dashboard
    - spreadsheet
    - bus
    - base
    - web
    - portal
    - html_editor
    - http_routing
    - mail
    - base_setup
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module extends the functionality of reporting, to support creation
of extra custom reports. It allows user to write a custom SQL request.
(Generally, admin users)

Once written, a new model is generated, and user can map the selected
field with odoo fields. Then user ends the process, creating new menu,
action and graph view.

Technically, the module create SQL View (or materialized view, if option
is checked). Materialized view duplicates datas, but request are
fastest. If materialized view is enabled, this module will create a cron
task to refresh the data).

By default, users member of 'SQL Request / User' can see all the views.
You can specify extra groups that have the right to access to a specific
view.

## Warning

This module is intended for technician people in a company and for Odoo
integrators.

It requires the user to know SQL syntax and Odoo models.

If you don't have such skills, do not try to use this module specially
on a production environment.

## Use Cases

this module is interesting for the following use cases

- You want to realize technical SQL requests, that Odoo framework
  doesn't allow (For exemple, UNION with many SELECT) A typical use case
  is if you want to have Sale Orders and PoS Orders datas in a same
  table
- You want to customize an Odoo report, removing some useless fields and
  adding some custom ones. In that case, you can simply select the
  fields of the original report (sale.report model for exemple), and add
  your custom fields
- You have a lot of data, and classical SQL Views have very bad
  performance. In that case, MATERIALIZED VIEW will be a good solution
  to reduce display duration

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view xpath Inherits sql_request_abstract.view_sql_request_mixin_form
view_bi_sql_view_tree bi.sql.view field Inherits sql_request_abstract.view_sql_request_mixin_tree
Models touched (3)

New fields (24)
  • action_context Text
    default='{}' help='Define here a context that will be used by default, when creating the action.'
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • computed_action_context Text
    compute='_compute_computed_action_context'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' copy=False help='Cron Task that will refresh the materialized view' ondelete='cascade' string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." string='Extra Rule Definition'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' string='Odoo Graph View'
  • is_materialized Boolean
    default=True string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' store=True
  • parent_menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' default=<expr> help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created." required=True string='Parent Odoo Menu'
  • pivot_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' string='Odoo Pivot View'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' string='Odoo Search View'
  • sequence Integer
    string='sequence'
  • size Char
    help='Size of the materialized view and its indexes' string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' string='Odoo List View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' store=True
  • view_order Char
    default='pivot,graph,list' help='Comma-separated text. Possible values: "graph", "pivot" or "list"' required=True
Public methods (12)
  • button_create_sql_view_and_model(self)
  • button_create_ui(self)
  • button_open_view(self)
  • button_preview_sql_expression(self)
  • button_refresh_materialized_view(self)
  • button_reset_to_model_valid(self)
  • button_reset_to_sql_valid(self)
  • button_set_draft(self)
  • button_update_model_access(self)
  • check_manual_fields(self, model)
  • copy(self, default=None)
  • write(self, vals)

New fields (16)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_context Char
    default='{}' help='Context value that will be inserted for this field in all the views. Important note : please write a context with single quote.'
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users' required=True
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION
  • group_operator Selection
    help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator' selection=_GROUP_OPERATOR_SELECTION
  • index_name Char
    compute='_compute_index_name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Comodel of the field." string='Model'
  • name Char
    readonly=True required=True
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • state Selection
    related='bi_sql_view_id.state' store=True
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION
  • ttype Selection
    help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION string='Field Type'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/18.0/bi_sql_editor
VERSION
VERSION 1.0.4
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, thien, Chris Bergman, SupportSNDC, Emmanuel Ferdman
WEBSITE
WEBSITEhttps://github.com/OCA/reporting-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - sql_request_abstract
odoo/odoo:
    - spreadsheet_dashboard
    - spreadsheet
    - bus
    - base
    - web
    - portal
    - web_editor
    - html_editor
    - http_routing
    - mail
    - base_setup
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module extends the functionality of reporting, to support creation
of extra custom reports. It allows user to write a custom SQL request.
(Generally, admin users)

Once written, a new model is generated, and user can map the selected
field with odoo fields. Then user ends the process, creating new menu,
action and graph view.

Technically, the module create SQL View (or materialized view, if option
is checked). Materialized view duplicates datas, but request are
fastest. If materialized view is enabled, this module will create a cron
task to refresh the data).

By default, users member of 'SQL Request / User' can see all the views.
You can specify extra groups that have the right to access to a specific
view.

## Warning

This module is intended for technician people in a company and for Odoo
integrators.

It requires the user to know SQL syntax and Odoo models.

If you don't have such skills, do not try to use this module specially
on a production environment.

## Use Cases

this module is interesting for the following use cases

- You want to realize technical SQL requests, that Odoo framework
  doesn't allow (For exemple, UNION with many SELECT) A typical use case
  is if you want to have Sale Orders and PoS Orders datas in a same
  table
- You want to customize an Odoo report, removing some useless fields and
  adding some custom ones. In that case, you can simply select the
  fields of the original report (sale.report model for exemple), and add
  your custom fields
- You have a lot of data, and classical SQL Views have very bad
  performance. In that case, MATERIALIZED VIEW will be a good solution
  to reduce display duration

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view xpath Inherits sql_request_abstract.view_sql_request_mixin_form
view_bi_sql_view_tree bi.sql.view field Inherits sql_request_abstract.view_sql_request_mixin_tree
Models touched (3)

New fields (24)
  • action_context Text
    default='{}' help='Define here a context that will be used by default, when creating the action.'
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • computed_action_context Text
    compute='_compute_computed_action_context'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' copy=False help='Cron Task that will refresh the materialized view' ondelete='cascade' string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." string='Extra Rule Definition'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' string='Odoo Graph View'
  • is_materialized Boolean
    default=True string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' store=True
  • parent_menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' default=<expr> help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created." required=True string='Parent Odoo Menu'
  • pivot_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' string='Odoo Pivot View'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' string='Odoo Search View'
  • sequence Integer
    string='sequence'
  • size Char
    help='Size of the materialized view and its indexes' string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' string='Odoo List View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' store=True
  • view_order Char
    default='pivot,graph,list' help='Comma-separated text. Possible values: "graph", "pivot" or "list"' required=True
Public methods (12)
  • button_create_sql_view_and_model(self)
  • button_create_ui(self)
  • button_open_view(self)
  • button_preview_sql_expression(self)
  • button_refresh_materialized_view(self)
  • button_reset_to_model_valid(self)
  • button_reset_to_sql_valid(self)
  • button_set_draft(self)
  • button_update_model_access(self)
  • check_manual_fields(self, model)
  • copy(self, default=None)
  • write(self, vals)

New fields (16)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_context Char
    default='{}' help='Context value that will be inserted for this field in all the views. Important note : please write a context with single quote.'
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users' required=True
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION
  • group_operator Selection
    help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator' selection=_GROUP_OPERATOR_SELECTION
  • index_name Char
    compute='_compute_index_name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Comodel of the field." string='Model'
  • name Char
    readonly=True required=True
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • state Selection
    related='bi_sql_view_id.state' store=True
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION
  • ttype Selection
    help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION string='Field Type'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/17.0/bi_sql_editor
VERSION
VERSION 2.1.1
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSPedro M. Baeza, Sylvain LE GAL, Weblate, OCA-git-bot, oca-ci, Vincent Van Rossem, GuillemCForgeFlow, chien, Andreu Orensanz
WEBSITE
WEBSITEhttps://github.com/OCA/reporting-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - sql_request_abstract
odoo/odoo:
    - spreadsheet_dashboard
    - spreadsheet
    - bus
    - base
    - web
    - portal
    - web_editor
    - http_routing
    - mail
    - base_setup
    - web_tour
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module extends the functionality of reporting, to support creation
of extra custom reports. It allows user to write a custom SQL request.
(Generally, admin users)

Once written, a new model is generated, and user can map the selected
field with odoo fields. Then user ends the process, creating new menu,
action and graph view.

Technically, the module create SQL View (or materialized view, if option
is checked). Materialized view duplicates datas, but request are
fastest. If materialized view is enabled, this module will create a cron
task to refresh the data).

By default, users member of 'SQL Request / User' can see all the views.
You can specify extra groups that have the right to access to a specific
view.

## Warning

This module is intended for technician people in a company and for Odoo
integrators.

It requires the user to know SQL syntax and Odoo models.

If you don't have such skills, do not try to use this module specially
on a production environment.

## Use Cases

this module is interesting for the following use cases

- You want to realize technical SQL requests, that Odoo framework
  doesn't allow (For exemple, UNION with many SELECT) A typical use case
  is if you want to have Sale Orders and PoS Orders datas in a same
  table
- You want to customize an Odoo report, removing some useless fields and
  adding some custom ones. In that case, you can simply select the
  fields of the original report (sale.report model for exemple), and add
  your custom fields
- You have a lot of data, and classical SQL Views have very bad
  performance. In that case, MATERIALIZED VIEW will be a good solution
  to reduce display duration

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view xpath Inherits sql_request_abstract.view_sql_request_mixin_form
view_bi_sql_view_tree bi.sql.view field Inherits sql_request_abstract.view_sql_request_mixin_tree
Models touched (3)

New fields (25)
  • action_context Text
    default='{}' help='Define here a context that will be used by default, when creating the action.'
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' readonly=True string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • computed_action_context Text
    compute='_compute_computed_action_context'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' help='Cron Task that will refresh the materialized view' ondelete='cascade' readonly=True string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." string='Extra Rule Definition'
  • form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Form View'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Graph View'
  • is_materialized Boolean
    default=True string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' readonly=True string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' readonly=True string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' readonly=True store=True
  • parent_menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' default=<expr> help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created." required=True string='Parent Odoo Menu'
  • pivot_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Pivot View'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' readonly=True string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Search View'
  • sequence Integer
    string='sequence'
  • size Char
    help='Size of the materialized view and its indexes' readonly=True string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Tree View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' readonly=True store=True
  • view_order Char
    default='pivot,graph,tree' help='Comma-separated text. Possible values: "graph", "pivot", "tree" or "form"' required=True
Public methods (13)
  • button_create_sql_view_and_model(self)
  • button_create_ui(self)
  • button_open_view(self)
  • button_preview_sql_expression(self)
  • button_refresh_materialized_view(self)
  • button_reset_to_model_valid(self)
  • button_reset_to_sql_valid(self)
  • button_set_draft(self)
  • button_update_model_access(self)
  • check_manual_fields(self, model)
  • copy(self, default=None)
  • unlink(self)
  • write(self, vals)

New fields (17)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_context Char
    default='{}' help='Context value that will be inserted for this field in all the views. Important note : please write a context with single quote.'
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users' required=True translate=True
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION
  • group_operator Selection
    help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator' selection=_GROUP_OPERATOR_SELECTION
  • index_name Char
    compute='_compute_index_name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
  • is_many2one_clickable Boolean
    default=False help='If the field is of type Many2one and the option is enabled, the field will be clickable on the list view.'
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Comodel of the field." string='Model'
  • name Char
    readonly=True required=True
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • state Selection
    related='bi_sql_view_id.state' store=True
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION
  • ttype Selection
    help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION string='Field Type'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/16.0/bi_sql_editor
VERSION
VERSION 2.0.2
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSSylvain LE GAL, GitHub, Jordi Ballester Alomar, Denis Leemann, Weblate, OCA-git-bot, Pierrick Brun, oca-ci, GuillemCForgeFlow, SupportSNDC
WEBSITE
WEBSITEhttps://github.com/OCA/reporting-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - sql_request_abstract
odoo/odoo:
    - spreadsheet_dashboard
    - spreadsheet
    - bus
    - base
    - web
    - mail
    - base_setup
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view xpath Inherits sql_request_abstract.view_sql_request_mixin_form
view_bi_sql_view_tree bi.sql.view field Inherits sql_request_abstract.view_sql_request_mixin_tree
Models touched (3)

New fields (26)
  • action_context Text
    default='{}' help='Define here a context that will be used by default, when creating the action.' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]}
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' readonly=True string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • computed_action_context Text
    compute='_compute_computed_action_context'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' copy=False help='Cron Task that will refresh the materialized view' ondelete='cascade' readonly=True string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Extra Rule Definition'
  • form_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Form View'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Graph View'
  • group_ids Many2many → res.groups
    comodel_name='res.groups' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
  • is_materialized Boolean
    default=True readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' readonly=True string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' readonly=True string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' readonly=True store=True
  • parent_menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' default=<expr> help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created." readonly=True required=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]} string='Parent Odoo Menu'
  • pivot_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Pivot View'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' readonly=True string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Search View'
  • sequence Integer
    string='sequence'
  • size Char
    help='Size of the materialized view and its indexes' readonly=True string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Tree View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' readonly=True store=True
  • view_order Char
    default='pivot,graph,tree' help='Comma-separated text. Possible values: "graph", "pivot", "tree" or "form"' readonly=False required=True states={'ui_valid': [('readonly', True)]}
Public methods (13)
  • button_create_sql_view_and_model(self)
  • button_create_ui(self)
  • button_open_view(self)
  • button_preview_sql_expression(self)
  • button_refresh_materialized_view(self)
  • button_reset_to_model_valid(self)
  • button_reset_to_sql_valid(self)
  • button_set_draft(self)
  • button_update_model_access(self)
  • check_manual_fields(self, model)
  • copy(self, default=None)
  • unlink(self)
  • write(self, vals)

New fields (16)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_context Char
    default='{}' help='Context value that will be inserted for this field in all the views. Important note : please write a context with single quote.' states={'ui_valid': [('readonly', True)]}
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users' required=True states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]}
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION states={'ui_valid': [('readonly', True)]}
  • group_operator Selection
    help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator' selection=_GROUP_OPERATOR_SELECTION states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]}
  • index_name Char
    compute='_compute_index_name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" states={'ui_valid': [('readonly', True)]} string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration' states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]}
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Comodel of the field." states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]} string='Model'
  • name Char
    readonly=True required=True
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]} string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • state Selection
    related='bi_sql_view_id.state' store=True
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION states={'ui_valid': [('readonly', True)]}
  • ttype Selection
    help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]} string='Field Type'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/15.0/bi_sql_editor
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSLaurent Mignon (ACSONE), Jordi Ballester Alomar, OCA Transbot, Víctor Martínez, Denis Leemann, Weblate, OCA-git-bot, oca-ci, mariadforgeflow, GuillemCForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/reporting-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/reporting-engine:
    - sql_request_abstract
odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view form New
view_bi_sql_view_tree bi.sql.view tree New
Models touched (3)

New fields (26)
  • action_context Text
    default='{}' help='Define here a context that will be used by default, when creating the action.' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]}
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' readonly=True string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • computed_action_context Text
    compute='_compute_computed_action_context'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' help='Cron Task that will refresh the materialized view' ondelete='cascade' readonly=True string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Extra Rule Definition'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Graph View'
  • group_ids Many2many → res.groups
    comodel_name='res.groups' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
  • has_group_changed Boolean
    copy=False
  • is_materialized Boolean
    default=True readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' readonly=True string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' readonly=True string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' readonly=True store=True
  • parent_menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' default=<expr> help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created." readonly=True required=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]} string='Parent Odoo Menu'
  • pivot_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Pivot View'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' readonly=True string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Search View'
  • sequence Integer
    string='sequence'
  • size Char
    help='Size of the materialized view and its indexes' readonly=True string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Tree View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' readonly=True store=True
  • view_order Char
    default='pivot,graph,tree' help='Comma-separated text. Possible values: "graph", "pivot" or "tree"' readonly=False required=True states={'ui_valid': [('readonly', True)]}
Public methods (12)
  • button_create_sql_view_and_model(self)
  • button_create_ui(self)
  • button_open_view(self)
  • button_preview_sql_expression(self)
  • button_refresh_materialized_view(self)
  • button_set_draft(self)
  • button_update_model_access(self)
  • check_manual_fields(self, model)
  • copy(self, default=None)
  • onchange_group_ids(self)
    @api.onchange('group_ids')
  • unlink(self)
  • write(self, vals)

New fields (14)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users'
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION
  • group_operator Selection
    help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator' selection=_GROUP_OPERATOR_SELECTION
  • index_name Char
    compute='_compute_index_name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Comodel of the field." string='Model'
  • name Char
    readonly=True required=True
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION
  • ttype Selection
    help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION string='Field Type'
Public methods (1)
  • create(self, vals)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/14.0/bi_sql_editor
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSPaulius Sladkevičius, Sylvain LE GAL, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, oca-ci, David James, GuillemCForgeFlow, Héctor Vi Or
WEBSITE
WEBSITEhttps://github.com/OCA/reporting-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:10
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - sql_request_abstract
odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view form New
view_bi_sql_view_tree bi.sql.view tree New
Models touched (3)

New fields (26)
  • action_context Text
    default='{}' help='Define here a context that will be used by default, when creating the action.' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]} string='Action Context'
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' readonly=True string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • computed_action_context Text
    compute='_compute_computed_action_context' string='Computed Action Context'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' help='Cron Task that will refresh the materialized view' readonly=True string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Extra Rule Definition'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Graph View'
  • group_ids Many2many → res.groups
    comodel_name='res.groups' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
  • has_group_changed Boolean
    copy=False
  • is_materialized Boolean
    default=True readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' readonly=True string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' readonly=True string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' readonly=True store=True string='Model Name'
  • parent_menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' default=<expr> help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created." readonly=True required=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]} string='Parent Odoo Menu'
  • pivot_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Pivot View'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' readonly=True string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Search View'
  • sequence Integer
    string='sequence'
  • size Char
    help='Size of the materialized view and its indexes' readonly=True string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True string='Technical Name'
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Tree View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' readonly=True store=True string='View Name'
  • view_order Char
    default='pivot,graph,tree' help='Comma-separated text. Possible values: "graph", "pivot" or "tree"' readonly=False required=True states={'ui_valid': [('readonly', True)]} string='View Order'
Public methods (12)
  • button_create_sql_view_and_model(self)
  • button_create_ui(self)
  • button_open_view(self)
  • button_preview_sql_expression(self)
  • button_refresh_materialized_view(self)
  • button_set_draft(self)
  • button_update_model_access(self)
  • check_manual_fields(self, model)
  • copy(self, default=None)
  • onchange_group_ids(self)
    @api.onchange('group_ids')
  • unlink(self)
  • write(self, vals)

New fields (14)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users' string='Field Description'
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION string='Graph Type'
  • group_operator Selection
    help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator' selection=_GROUP_OPERATOR_SELECTION string='Group Operator'
  • index_name Char
    compute='_compute_index_name' string='Index Name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration' string='Is Index'
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Comodel of the field." string='Model'
  • name Char
    readonly=True required=True string='Name'
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION string='Tree Visibility'
  • ttype Selection
    help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION string='Field Type'
Public methods (1)
  • create(self, vals)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/13.0/bi_sql_editor
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSOCA Transbot, oca-travis, Weblate, OCA-git-bot, oca-ci, HviorForgeFlow, GuillemCForgeFlow, Laurent-Corron
WEBSITE
WEBSITEhttps://github.com/OCA/reporting-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - sql_request_abstract
odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view form New
view_bi_sql_view_tree bi.sql.view tree New
Models touched (2)

New fields (25)
  • action_context Text
    default='{}' help='Define here a context that will be used by default, when creating the action.' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Action Context'
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' readonly=True string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' help='Cron Task that will refresh the materialized view' readonly=True string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Extra Rule Definition'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Graph View'
  • group_ids Many2many → res.groups
    comodel_name='res.groups' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
  • has_group_changed Boolean
    copy=False
  • is_materialized Boolean
    default=True readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' readonly=True string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' readonly=True string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' readonly=True store=True string='Model Name'
  • parent_menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' default=<expr> help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created." readonly=True required=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]} string='Parent Odoo Menu'
  • pivot_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Pivot View'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' readonly=True string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Search View'
  • sequence Integer
    string='sequence'
  • size Char
    help='Size of the materialized view and its indexes' readonly=True string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True string='Technical Name'
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Tree View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' readonly=True store=True string='View Name'
  • view_order Char
    default='pivot,graph,tree' help='Comma-separated text. Possible values: "graph", "pivot" or "tree"' readonly=False required=True states={'ui_valid': [('readonly', True)]} string='View Order'
Public methods (11)
  • button_create_sql_view_and_model(self)
  • button_create_ui(self)
  • button_open_view(self)
  • button_preview_sql_expression(self)
  • button_refresh_materialized_view(self)
  • button_set_draft(self)
  • button_update_model_access(self)
  • copy(self, default=None)
  • onchange_group_ids(self)
    @api.onchange('group_ids')
  • unlink(self)
  • write(self, vals)

New fields (13)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users' string='Field Description'
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION string='Graph Type'
  • index_name Char
    compute='_compute_index_name' string='Index Name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration' string='Is Index'
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Comodel of the field." string='Model'
  • name Char
    readonly=True required=True string='Name'
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION string='Tree Visibility'
  • ttype Selection
    help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION string='Field Type'
Public methods (1)
  • create(self, vals)
REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/12.0/bi_sql_editor
VERSION
VERSION 1.3.1
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSPedro M. Baeza, Sylvain LE GAL, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Adrià Gil Sorribes, hveficent
WEBSITE
WEBSITEhttps://github.com/OCA/reporting-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:24
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - sql_request_abstract
odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view form New
view_bi_sql_view_tree bi.sql.view tree New
Models touched (2)

New fields (25)
  • action_context Text
    default='{}' help='Define here a context that will be used by default, when creating the action.' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]} string='Action Context'
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' readonly=True string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • computed_action_context Text
    compute='_compute_computed_action_context' string='Computed Action Context'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' help='Cron Task that will refresh the materialized view' readonly=True string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Extra Rule Definition'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Graph View'
  • group_ids Many2many → res.groups
    comodel_name='res.groups' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
  • has_group_changed Boolean
    copy=False
  • is_materialized Boolean
    default=True readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' readonly=True string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' readonly=True string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' readonly=True store=True string='Model Name'
  • pivot_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Pivot View'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' readonly=True string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Search View'
  • sequence Integer
    string='sequence'
  • size Char
    help='Size of the materialized view and its indexes' readonly=True string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True string='Technical Name'
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Tree View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' readonly=True store=True string='View Name'
  • view_order Char
    default='pivot,graph,tree' help='Comma-separated text. Possible values: "graph", "pivot" or "tree"' readonly=False required=True states={'ui_valid': [('readonly', True)]} string='View Order'
Public methods (10)
  • button_create_sql_view_and_model(self)
    @api.multi
  • button_create_ui(self)
    @api.multi
  • button_open_view(self)
    @api.multi
  • button_refresh_materialized_view(self)
    @api.multi
  • button_set_draft(self)
    @api.multi
  • button_update_model_access(self)
    @api.multi
  • copy(self, default=None)
    @api.multi
  • onchange_group_ids(self)
    @api.onchange('group_ids')
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (13)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users' string='Field Description'
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION string='Graph Type'
  • index_name Char
    compute='_compute_index_name' string='Index Name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration' string='Is Index'
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Comodel of the field." string='Model'
  • name Char
    readonly=True required=True string='Name'
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION string='Tree Visibility'
  • ttype Selection
    help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION string='Field Type'
Public methods (1)
  • create(self, vals)
    @api.model
REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/11.0/bi_sql_editor
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSSylvain LE GAL, mreficent, OCA Transbot, oca-travis, Weblate, hveficent
WEBSITE
WEBSITEhttps://github.com/OCA/reporting-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:24:01
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - sql_request_abstract
odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view form New
view_bi_sql_view_tree bi.sql.view tree New
Models touched (2)

New fields (23)
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' readonly=True string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' help='Cron Task that will refresh the materialized view' readonly=True string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Extra Rule Definition'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Graph View'
  • group_ids Many2many → res.groups
    comodel_name='res.groups' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
  • has_group_changed Boolean
    copy=False
  • is_materialized Boolean
    default=True readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' readonly=True string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' readonly=True string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' readonly=True store=True string='Model Name'
  • pivot_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Pivot View'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' readonly=True string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Search View'
  • sequence Integer
    string='sequence'
  • size Char
    help='Size of the materialized view and its indexes' readonly=True string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True string='Technical Name'
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Tree View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' readonly=True store=True string='View Name'
  • view_order Char
    default='pivot,graph,tree' help='Comma-separated text. Possible values: "graph", "pivot" or "tree"' readonly=False required=True states={'ui_valid': [('readonly', True)]} string='View Order'
Public methods (11)
  • button_create_sql_view_and_model(self)
    @api.multi
  • button_create_ui(self)
    @api.multi
  • button_open_view(self)
    @api.multi
  • button_preview_sql_expression(self)
    @api.multi
  • button_refresh_materialized_view(self)
    @api.multi
  • button_set_draft(self)
    @api.multi
  • button_update_model_access(self)
    @api.multi
  • copy(self, default=None)
    @api.multi
  • onchange_group_ids(self)
    @api.onchange('group_ids')
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (13)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users' string='Field Description'
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION string='Graph Type'
  • index_name Char
    compute='_compute_index_name' string='Index Name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration' string='Is Index'
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Comodel of the field." string='Model'
  • name Char
    readonly=True required=True string='Name'
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION string='Tree Visibility'
  • ttype Selection
    help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION string='Field Type'
Public methods (1)
  • create(self, vals)
    @api.multi
REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/10.0/bi_sql_editor
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSmreficent, Patrick Tombez, oca-travis, Weblate, OCA-git-bot, Darshan Patel, Aaron Henriquez, Florent Cayré
WEBSITE
WEBSITEhttps://github.com/OCA/reporting-engine
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:20:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - sql_request_abstract
odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view form New
view_bi_sql_view_tree bi.sql.view tree New
Models touched (3)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (23)
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' readonly=True string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' help='Cron Task that will refresh the materialized view' readonly=True string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Extra Rule Definition'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Graph View'
  • group_ids Many2many → res.groups
    comodel_name='res.groups' readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
  • has_group_changed Boolean
    copy=False
  • is_materialized Boolean
    default=True readonly=True states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]} string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' readonly=True string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' readonly=True string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' readonly=True store=True string='Model Name'
  • pivot_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Pivot View'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' readonly=True string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Search View'
  • sequence Integer
    string='sequence'
  • size Char
    help='Size of the materialized view and its indexes' readonly=True string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True string='Technical Name'
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Tree View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' readonly=True store=True string='View Name'
  • view_order Char
    default='pivot,graph,tree' help='Comma-separated text. Possible values: "graph", "pivot" or "tree"' readonly=False required=True states={'ui_valid': [('readonly', True)]} string='View Order'
Public methods (11)
  • button_create_sql_view_and_model(self)
    @api.multi
  • button_create_ui(self)
    @api.multi
  • button_open_view(self)
    @api.multi
  • button_preview_sql_expression(self)
    @api.multi
  • button_refresh_materialized_view(self)
    @api.multi
  • button_set_draft(self)
    @api.multi
  • button_update_model_access(self)
    @api.multi
  • copy(self, default=None)
    @api.multi
  • onchange_group_ids(self)
    @api.onchange('group_ids')
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (13)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users' string='Field Description'
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION string='Graph Type'
  • index_name Char
    compute='_compute_index_name' string='Index Name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration' string='Is Index'
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Comodel of the field." string='Model'
  • name Char
    readonly=True required=True string='Name'
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION string='Tree Visibility'
  • ttype Selection
    help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION string='Field Type'
Public methods (1)
  • create(self, vals)
    @api.multi
REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/9.0/bi_sql_editor
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSHolger Brunn, Sylvain LE GAL, Jordi Ballester Alomar, OCA Transbot, oca-travis, Weblate, aheficent, Nicolas Mac Rouillon, nicomacr
WEBSITE
WEBSITEhttps://www.odoo-community.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:24
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - sql_request_abstract
odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view form New
view_bi_sql_view_tree bi.sql.view tree New
Models touched (2)

New fields (21)
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' readonly=True string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' help='Cron Task that will refresh the materialized view' readonly=True string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." string='Extra Rule Definition'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Graph View'
  • has_group_changed Boolean
    copy=False
  • is_materialized Boolean
    default=True readonly=True states={'draft': [('readonly', False)]} string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' readonly=True string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' readonly=True string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' readonly=True store=True string='Model Name'
  • pivot_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Pivot View'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' readonly=True string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Search View'
  • size Char
    help='Size of the materialized view and its indexes' readonly=True string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True string='Technical Name'
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Tree View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' readonly=True store=True string='View Name'
  • view_order Char
    default='pivot,graph,tree' help='Comma-separated text. Possible values: "graph", "pivot" or "tree"' readonly=False required=True states={'ui_valid': [('readonly', True)]} string='View Order'
Public methods (10)
  • button_create_sql_view_and_model(self)
    @api.multi
  • button_create_ui(self)
    @api.multi
  • button_open_view(self)
    @api.multi
  • button_preview_sql_expression(self)
    @api.multi
  • button_refresh_materialized_view(self)
    @api.multi
  • button_set_draft(self)
    @api.multi
  • button_update_model_access(self)
    @api.multi
  • copy(self, default=None)
    @api.multi
  • onchange_group_ids(self)
    @api.onchange('group_ids')
  • unlink(self)
    @api.multi

New fields (13)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users' string='Field Description'
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION string='Graph Type'
  • index_name Char
    compute='_compute_index_name' string='Index Name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration' string='Is Index'
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Comodel of the field." string='Model'
  • name Char
    readonly=True required=True string='Name'
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION string='Tree Visibility'
  • ttype Selection
    help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION string='Field Type'
Public methods (1)
  • create(self, vals)
    @api.multi
REPOSITORY
REPOSITORYOCA/reporting-engine
GIT
GIThttps://github.com/OCA/reporting-engine.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/reporting-engine/tree/8.0/bi_sql_editor
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYReporting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), GRAP
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), GRAP
COMMITTERS
COMMITTERSSylvain LE GAL, OCA Transbot, oca-travis, Weblate
WEBSITE
WEBSITEhttps://www.odoo-community.org
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - sql_request_abstract
odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_bi_sql_view_form bi.sql.view form New
view_bi_sql_view_tree bi.sql.view tree New
Models touched (2)

New fields (19)
  • action_id Many2one → ir.actions.act_window
    comodel_name='ir.actions.act_window' readonly=True string='Odoo Action'
  • bi_sql_view_field_ids One2many → bi.sql.view.field
    comodel_name='bi.sql.view.field' inverse_name='bi_sql_view_id' string='SQL Fields'
  • cron_id Many2one → ir.cron
    comodel_name='ir.cron' help='Cron Task that will refresh the materialized view' readonly=True string='Odoo Cron'
  • domain_force Text
    default='[]' help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]." string='Extra Rule Definition'
  • graph_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Graph View'
  • has_group_changed Boolean
    copy=False
  • is_materialized Boolean
    default=True readonly=True states={'draft': [('readonly', False)]} string='Is Materialized View'
  • materialized_text Char
    compute='_compute_materialized_text' store=True
  • menu_id Many2one → ir.ui.menu
    comodel_name='ir.ui.menu' readonly=True string='Odoo Menu'
  • model_id Many2one → ir.model
    comodel_name='ir.model' readonly=True string='Odoo Model'
  • model_name Char
    compute='_compute_model_name' help='Full Qualified Name of the transient model that will be created.' readonly=True store=True string='Model Name'
  • query Text
    default='SELECT\n my_field as x_my_field\nFROM my_table' help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
  • rule_id Many2one → ir.rule
    comodel_name='ir.rule' readonly=True string='Odoo Rule'
  • search_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Search View'
  • size Char
    help='Size of the materialized view and its indexes' readonly=True string='Database Size'
  • state Selection
    selection_add=_STATE_SQL_EDITOR
  • technical_name Char
    help="Suffix of the SQL view. (SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Should have correctsyntax. For more information, see https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS" required=True string='Technical Name'
  • tree_view_id Many2one → ir.ui.view
    comodel_name='ir.ui.view' readonly=True string='Odoo Tree View'
  • view_name Char
    compute='_compute_view_name' help='Full name of the SQL view' readonly=True store=True string='View Name'
Public methods (10)
  • button_create_sql_view_and_model(self)
    @api.multi
  • button_create_ui(self)
    @api.multi
  • button_open_view(self)
    @api.multi
  • button_refresh_materialized_view(self)
    @api.multi
  • button_set_draft(self)
    @api.multi
  • button_update_model_access(self)
    @api.multi
  • copy(self, default=None)
    @api.multi
  • cron_refresh_materialized_view(self, ids)
    @api.model
  • onchange_group_ids(self)
    @api.onchange('group_ids')
  • unlink(self)
    @api.multi

New fields (13)
  • bi_sql_view_id Many2one → bi.sql.view
    comodel_name='bi.sql.view' ondelete='cascade' string='SQL View'
  • field_description Char
    help='This will be used as the name of the Odoo field, displayed for users' string='Field Description'
  • graph_type Selection
    selection=_GRAPH_TYPE_SELECTION string='Graph Type'
  • index_name Char
    compute='_compute_index_name' string='Index Name'
  • is_group_by Boolean
    help="Check this box if you want to create a 'group by' option in the search view" string='Is Group by'
  • is_index Boolean
    help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration' string='Is Index'
  • many2one_model_id Many2one → ir.model
    comodel_name='ir.model' help="For 'Many2one' Odoo field.\n Co Model of the field." string='Model'
  • name Char
    readonly=True required=True string='Name'
  • selection Text
    default='[]' help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]" string='Selection Options'
  • sequence Integer
    readonly=True required=True string='sequence'
  • sql_type Char
    help='SQL Type in the database' readonly=True required=True string='SQL Type'
  • tree_visibility Selection
    default='available' required=True selection=_TREE_VISIBILITY_SELECTION string='Tree Visibility'
  • ttype Selection
    help="Type of the Odoo field that will be created. Let empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function" selection=_TTYPE_SELECTION string='Field Type'
Public methods (1)
  • create(self, vals)
    @api.multi