[MIG] bi_sql_editor: Migration to 13.0
parent
ab6b702d57
commit
150b71d194
|
@ -5,7 +5,7 @@
|
||||||
{
|
{
|
||||||
"name": "BI SQL Editor",
|
"name": "BI SQL Editor",
|
||||||
"summary": "BI Views builder, based on Materialized or Normal SQL Views",
|
"summary": "BI Views builder, based on Materialized or Normal SQL Views",
|
||||||
"version": "12.0.1.2.0",
|
"version": "13.0.1.0.0",
|
||||||
"license": "AGPL-3",
|
"license": "AGPL-3",
|
||||||
"category": "Reporting",
|
"category": "Reporting",
|
||||||
"author": "GRAP,Odoo Community Association (OCA)",
|
"author": "GRAP,Odoo Community Association (OCA)",
|
||||||
|
|
|
@ -23,7 +23,7 @@ def _instanciate(self, model_data):
|
||||||
# This monkey patch is meant to avoid create/search tables for those
|
# This monkey patch is meant to avoid create/search tables for those
|
||||||
# materialized views. Doing "super" doesn't work.
|
# materialized views. Doing "super" doesn't work.
|
||||||
class CustomModel(models.Model):
|
class CustomModel(models.Model):
|
||||||
_name = pycompat.to_native(model_data["model"])
|
_name = pycompat.to_text(model_data["model"])
|
||||||
_description = model_data["name"]
|
_description = model_data["name"]
|
||||||
_module = False
|
_module = False
|
||||||
_custom = True
|
_custom = True
|
||||||
|
@ -43,6 +43,7 @@ IrModel._instanciate = _instanciate
|
||||||
|
|
||||||
class BiSQLView(models.Model):
|
class BiSQLView(models.Model):
|
||||||
_name = "bi.sql.view"
|
_name = "bi.sql.view"
|
||||||
|
_description = "BI SQL View"
|
||||||
_order = "sequence"
|
_order = "sequence"
|
||||||
_inherit = ["sql.request.mixin"]
|
_inherit = ["sql.request.mixin"]
|
||||||
|
|
||||||
|
@ -196,7 +197,6 @@ class BiSQLView(models.Model):
|
||||||
|
|
||||||
# Constrains Section
|
# Constrains Section
|
||||||
@api.constrains("is_materialized")
|
@api.constrains("is_materialized")
|
||||||
@api.multi
|
|
||||||
def _check_index_materialized(self):
|
def _check_index_materialized(self):
|
||||||
for rec in self.filtered(lambda x: not x.is_materialized):
|
for rec in self.filtered(lambda x: not x.is_materialized):
|
||||||
if rec.bi_sql_view_field_ids.filtered(lambda x: x.is_index):
|
if rec.bi_sql_view_field_ids.filtered(lambda x: x.is_index):
|
||||||
|
@ -205,7 +205,6 @@ class BiSQLView(models.Model):
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.constrains("view_order")
|
@api.constrains("view_order")
|
||||||
@api.multi
|
|
||||||
def _check_view_order(self):
|
def _check_view_order(self):
|
||||||
for rec in self:
|
for rec in self:
|
||||||
if rec.view_order:
|
if rec.view_order:
|
||||||
|
@ -217,7 +216,6 @@ class BiSQLView(models.Model):
|
||||||
|
|
||||||
# Compute Section
|
# Compute Section
|
||||||
@api.depends("is_materialized")
|
@api.depends("is_materialized")
|
||||||
@api.multi
|
|
||||||
def _compute_materialized_text(self):
|
def _compute_materialized_text(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
sql_view.materialized_text = (
|
sql_view.materialized_text = (
|
||||||
|
@ -225,7 +223,6 @@ class BiSQLView(models.Model):
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.depends("technical_name")
|
@api.depends("technical_name")
|
||||||
@api.multi
|
|
||||||
def _compute_view_name(self):
|
def _compute_view_name(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
sql_view.view_name = "{}{}".format(
|
sql_view.view_name = "{}{}".format(
|
||||||
|
@ -233,7 +230,6 @@ class BiSQLView(models.Model):
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.depends("technical_name")
|
@api.depends("technical_name")
|
||||||
@api.multi
|
|
||||||
def _compute_model_name(self):
|
def _compute_model_name(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
sql_view.model_name = "{}{}".format(
|
sql_view.model_name = "{}{}".format(
|
||||||
|
@ -246,7 +242,6 @@ class BiSQLView(models.Model):
|
||||||
self.has_group_changed = True
|
self.has_group_changed = True
|
||||||
|
|
||||||
# Overload Section
|
# Overload Section
|
||||||
@api.multi
|
|
||||||
def write(self, vals):
|
def write(self, vals):
|
||||||
res = super(BiSQLView, self).write(vals)
|
res = super(BiSQLView, self).write(vals)
|
||||||
if vals.get("sequence", False):
|
if vals.get("sequence", False):
|
||||||
|
@ -254,7 +249,6 @@ class BiSQLView(models.Model):
|
||||||
rec.menu_id.sequence = rec.sequence
|
rec.menu_id.sequence = rec.sequence
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def unlink(self):
|
def unlink(self):
|
||||||
if any(view.state not in ("draft", "sql_valid") for view in self):
|
if any(view.state not in ("draft", "sql_valid") for view in self):
|
||||||
raise UserError(
|
raise UserError(
|
||||||
|
@ -265,7 +259,6 @@ class BiSQLView(models.Model):
|
||||||
)
|
)
|
||||||
return super(BiSQLView, self).unlink()
|
return super(BiSQLView, self).unlink()
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def copy(self, default=None):
|
def copy(self, default=None):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
default = dict(default or {})
|
default = dict(default or {})
|
||||||
|
@ -278,7 +271,6 @@ class BiSQLView(models.Model):
|
||||||
return super(BiSQLView, self).copy(default=default)
|
return super(BiSQLView, self).copy(default=default)
|
||||||
|
|
||||||
# Action Section
|
# Action Section
|
||||||
@api.multi
|
|
||||||
def button_create_sql_view_and_model(self):
|
def button_create_sql_view_and_model(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
if sql_view.state != "sql_valid":
|
if sql_view.state != "sql_valid":
|
||||||
|
@ -299,7 +291,6 @@ class BiSQLView(models.Model):
|
||||||
)
|
)
|
||||||
sql_view.state = "model_valid"
|
sql_view.state = "model_valid"
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def button_set_draft(self):
|
def button_set_draft(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
sql_view.menu_id.unlink()
|
sql_view.menu_id.unlink()
|
||||||
|
@ -321,7 +312,6 @@ class BiSQLView(models.Model):
|
||||||
|
|
||||||
sql_view.write({"state": "draft", "has_group_changed": False})
|
sql_view.write({"state": "draft", "has_group_changed": False})
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def button_create_ui(self):
|
def button_create_ui(self):
|
||||||
self.tree_view_id = self.env["ir.ui.view"].create(self._prepare_tree_view()).id
|
self.tree_view_id = self.env["ir.ui.view"].create(self._prepare_tree_view()).id
|
||||||
self.graph_view_id = (
|
self.graph_view_id = (
|
||||||
|
@ -339,17 +329,14 @@ class BiSQLView(models.Model):
|
||||||
self.menu_id = self.env["ir.ui.menu"].create(self._prepare_menu()).id
|
self.menu_id = self.env["ir.ui.menu"].create(self._prepare_menu()).id
|
||||||
self.write({"state": "ui_valid"})
|
self.write({"state": "ui_valid"})
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def button_update_model_access(self):
|
def button_update_model_access(self):
|
||||||
self._drop_model_access()
|
self._drop_model_access()
|
||||||
self._create_model_access()
|
self._create_model_access()
|
||||||
self.write({"has_group_changed": False})
|
self.write({"has_group_changed": False})
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def button_refresh_materialized_view(self):
|
def button_refresh_materialized_view(self):
|
||||||
self._refresh_materialized_view()
|
self._refresh_materialized_view()
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def button_open_view(self):
|
def button_open_view(self):
|
||||||
return {
|
return {
|
||||||
"type": "ir.actions.act_window",
|
"type": "ir.actions.act_window",
|
||||||
|
@ -359,7 +346,6 @@ class BiSQLView(models.Model):
|
||||||
}
|
}
|
||||||
|
|
||||||
# Prepare Function
|
# Prepare Function
|
||||||
@api.multi
|
|
||||||
def _prepare_model(self):
|
def _prepare_model(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
field_id = []
|
field_id = []
|
||||||
|
@ -374,7 +360,6 @@ class BiSQLView(models.Model):
|
||||||
"field_id": field_id,
|
"field_id": field_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_model_access(self):
|
def _prepare_model_access(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
res = []
|
res = []
|
||||||
|
@ -392,7 +377,6 @@ class BiSQLView(models.Model):
|
||||||
)
|
)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_cron(self):
|
def _prepare_cron(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return {
|
return {
|
||||||
|
@ -406,7 +390,6 @@ class BiSQLView(models.Model):
|
||||||
"numbercall": -1,
|
"numbercall": -1,
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_rule(self):
|
def _prepare_rule(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return {
|
return {
|
||||||
|
@ -416,7 +399,6 @@ class BiSQLView(models.Model):
|
||||||
"global": True,
|
"global": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_tree_view(self):
|
def _prepare_tree_view(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return {
|
return {
|
||||||
|
@ -430,7 +412,6 @@ class BiSQLView(models.Model):
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_graph_view(self):
|
def _prepare_graph_view(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return {
|
return {
|
||||||
|
@ -444,7 +425,6 @@ class BiSQLView(models.Model):
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_pivot_view(self):
|
def _prepare_pivot_view(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return {
|
return {
|
||||||
|
@ -458,7 +438,6 @@ class BiSQLView(models.Model):
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_search_view(self):
|
def _prepare_search_view(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return {
|
return {
|
||||||
|
@ -481,7 +460,6 @@ class BiSQLView(models.Model):
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_action(self):
|
def _prepare_action(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
view_mode = self.view_order
|
view_mode = self.view_order
|
||||||
|
@ -502,7 +480,6 @@ class BiSQLView(models.Model):
|
||||||
"context": self.action_context,
|
"context": self.action_context,
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_action_name(self):
|
def _prepare_action_name(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
if not self.is_materialized:
|
if not self.is_materialized:
|
||||||
|
@ -511,7 +488,6 @@ class BiSQLView(models.Model):
|
||||||
self.name, datetime.utcnow().strftime(_("%m/%d/%Y %H:%M:%S UTC")),
|
self.name, datetime.utcnow().strftime(_("%m/%d/%Y %H:%M:%S UTC")),
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_menu(self):
|
def _prepare_menu(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return {
|
return {
|
||||||
|
@ -526,7 +502,6 @@ class BiSQLView(models.Model):
|
||||||
_logger.info("Executing SQL Request %s ..." % req)
|
_logger.info("Executing SQL Request %s ..." % req)
|
||||||
self.env.cr.execute(req)
|
self.env.cr.execute(req)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _drop_view(self):
|
def _drop_view(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
self._log_execute(
|
self._log_execute(
|
||||||
|
@ -535,7 +510,6 @@ class BiSQLView(models.Model):
|
||||||
)
|
)
|
||||||
sql_view.size = False
|
sql_view.size = False
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _create_view(self):
|
def _create_view(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
sql_view._drop_view()
|
sql_view._drop_view()
|
||||||
|
@ -548,7 +522,6 @@ class BiSQLView(models.Model):
|
||||||
% (sql_view.materialized_text, sql_view.view_name, str(e))
|
% (sql_view.materialized_text, sql_view.view_name, str(e))
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _create_index(self):
|
def _create_index(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
for sql_field in sql_view.bi_sql_view_field_ids.filtered(
|
for sql_field in sql_view.bi_sql_view_field_ids.filtered(
|
||||||
|
@ -559,7 +532,6 @@ class BiSQLView(models.Model):
|
||||||
% (sql_field.index_name, sql_view.view_name, sql_field.name)
|
% (sql_field.index_name, sql_view.view_name, sql_field.name)
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _create_model_and_fields(self):
|
def _create_model_and_fields(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
# Create model
|
# Create model
|
||||||
|
@ -570,20 +542,17 @@ class BiSQLView(models.Model):
|
||||||
req = "DROP TABLE %s" % sql_view.view_name
|
req = "DROP TABLE %s" % sql_view.view_name
|
||||||
self._log_execute(req)
|
self._log_execute(req)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _create_model_access(self):
|
def _create_model_access(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
for item in sql_view._prepare_model_access():
|
for item in sql_view._prepare_model_access():
|
||||||
self.env["ir.model.access"].create(item)
|
self.env["ir.model.access"].create(item)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _drop_model_access(self):
|
def _drop_model_access(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
self.env["ir.model.access"].search(
|
self.env["ir.model.access"].search(
|
||||||
[("model_id", "=", sql_view.model_name)]
|
[("model_id", "=", sql_view.model_name)]
|
||||||
).unlink()
|
).unlink()
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _drop_model_and_fields(self):
|
def _drop_model_and_fields(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
if sql_view.rule_id:
|
if sql_view.rule_id:
|
||||||
|
@ -591,7 +560,6 @@ class BiSQLView(models.Model):
|
||||||
if sql_view.model_id:
|
if sql_view.model_id:
|
||||||
sql_view.model_id.with_context(_force_unlink=True).unlink()
|
sql_view.model_id.with_context(_force_unlink=True).unlink()
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _hook_executed_request(self):
|
def _hook_executed_request(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
req = (
|
req = (
|
||||||
|
@ -609,12 +577,10 @@ class BiSQLView(models.Model):
|
||||||
self._log_execute(req)
|
self._log_execute(req)
|
||||||
return self.env.cr.fetchall()
|
return self.env.cr.fetchall()
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_request_check_execution(self):
|
def _prepare_request_check_execution(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return "CREATE VIEW {} AS ({});".format(self.view_name, self.query)
|
return "CREATE VIEW {} AS ({});".format(self.view_name, self.query)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_request_for_execution(self):
|
def _prepare_request_for_execution(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
query = (
|
query = (
|
||||||
|
@ -635,7 +601,6 @@ class BiSQLView(models.Model):
|
||||||
self.materialized_text, self.view_name, query,
|
self.materialized_text, self.view_name, query,
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _check_execution(self):
|
def _check_execution(self):
|
||||||
"""Ensure that the query is valid, trying to execute it.
|
"""Ensure that the query is valid, trying to execute it.
|
||||||
a non materialized view is created for this check.
|
a non materialized view is created for this check.
|
||||||
|
@ -689,7 +654,6 @@ class BiSQLView(models.Model):
|
||||||
)
|
)
|
||||||
return sql_views._refresh_materialized_view()
|
return sql_views._refresh_materialized_view()
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _refresh_materialized_view(self):
|
def _refresh_materialized_view(self):
|
||||||
for sql_view in self.filtered(lambda x: x.is_materialized):
|
for sql_view in self.filtered(lambda x: x.is_materialized):
|
||||||
req = "REFRESH {} VIEW {}".format(
|
req = "REFRESH {} VIEW {}".format(
|
||||||
|
@ -702,7 +666,6 @@ class BiSQLView(models.Model):
|
||||||
# datetime of the materialized view
|
# datetime of the materialized view
|
||||||
sql_view.action_id.name = sql_view._prepare_action_name()
|
sql_view.action_id.name = sql_view._prepare_action_name()
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _refresh_size(self):
|
def _refresh_size(self):
|
||||||
for sql_view in self:
|
for sql_view in self:
|
||||||
req = "SELECT pg_size_pretty(pg_total_relation_size('%s'));" % (
|
req = "SELECT pg_size_pretty(pg_total_relation_size('%s'));" % (
|
||||||
|
@ -711,7 +674,6 @@ class BiSQLView(models.Model):
|
||||||
self._log_execute(req)
|
self._log_execute(req)
|
||||||
sql_view.size = self.env.cr.fetchone()[0]
|
sql_view.size = self.env.cr.fetchone()[0]
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def button_preview_sql_expression(self):
|
def button_preview_sql_expression(self):
|
||||||
self.button_validate_sql_expression()
|
self.button_validate_sql_expression()
|
||||||
res = self._execute_sql_request()
|
res = self._execute_sql_request()
|
||||||
|
|
|
@ -116,7 +116,6 @@ class BiSQLViewField(models.Model):
|
||||||
|
|
||||||
# Constrains Section
|
# Constrains Section
|
||||||
@api.constrains("is_index")
|
@api.constrains("is_index")
|
||||||
@api.multi
|
|
||||||
def _check_index_materialized(self):
|
def _check_index_materialized(self):
|
||||||
for rec in self.filtered(lambda x: x.is_index):
|
for rec in self.filtered(lambda x: x.is_index):
|
||||||
if not rec.bi_sql_view_id.is_materialized:
|
if not rec.bi_sql_view_id.is_materialized:
|
||||||
|
@ -125,7 +124,6 @@ class BiSQLViewField(models.Model):
|
||||||
)
|
)
|
||||||
|
|
||||||
# Compute Section
|
# Compute Section
|
||||||
@api.multi
|
|
||||||
def _compute_index_name(self):
|
def _compute_index_name(self):
|
||||||
for sql_field in self:
|
for sql_field in self:
|
||||||
sql_field.index_name = "{}_{}".format(
|
sql_field.index_name = "{}_{}".format(
|
||||||
|
@ -133,7 +131,6 @@ class BiSQLViewField(models.Model):
|
||||||
)
|
)
|
||||||
|
|
||||||
# Overload Section
|
# Overload Section
|
||||||
@api.multi
|
|
||||||
def create(self, vals):
|
def create(self, vals):
|
||||||
field_without_prefix = vals["name"][2:]
|
field_without_prefix = vals["name"][2:]
|
||||||
# guess field description
|
# guess field description
|
||||||
|
@ -193,7 +190,6 @@ class BiSQLViewField(models.Model):
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_model_field(self):
|
def _prepare_model_field(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return {
|
return {
|
||||||
|
@ -207,7 +203,6 @@ class BiSQLViewField(models.Model):
|
||||||
or False,
|
or False,
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_tree_field(self):
|
def _prepare_tree_field(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
res = ""
|
res = ""
|
||||||
|
@ -217,7 +212,6 @@ class BiSQLViewField(models.Model):
|
||||||
)
|
)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_graph_field(self):
|
def _prepare_graph_field(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
res = ""
|
res = ""
|
||||||
|
@ -225,7 +219,6 @@ class BiSQLViewField(models.Model):
|
||||||
res = """<field name="{}" type="{}" />""".format(self.name, self.graph_type)
|
res = """<field name="{}" type="{}" />""".format(self.name, self.graph_type)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_pivot_field(self):
|
def _prepare_pivot_field(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
res = ""
|
res = ""
|
||||||
|
@ -233,7 +226,6 @@ class BiSQLViewField(models.Model):
|
||||||
res = """<field name="{}" type="{}" />""".format(self.name, self.graph_type)
|
res = """<field name="{}" type="{}" />""".format(self.name, self.graph_type)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_search_field(self):
|
def _prepare_search_field(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
res = ""
|
res = ""
|
||||||
|
@ -241,7 +233,6 @@ class BiSQLViewField(models.Model):
|
||||||
res = """<field name="{}"/>""".format(self.name)
|
res = """<field name="{}"/>""".format(self.name)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _prepare_search_filter_field(self):
|
def _prepare_search_filter_field(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
res = ""
|
res = ""
|
||||||
|
|
|
@ -69,10 +69,10 @@ class TestBiSqlViewEditor(SingleTransactionCase):
|
||||||
|
|
||||||
def test_security(self):
|
def test_security(self):
|
||||||
with self.assertRaises(AccessError):
|
with self.assertRaises(AccessError):
|
||||||
self.bi_sql_view.sudo(self.no_bi_user.id).search(
|
self.bi_sql_view.with_user(self.no_bi_user.id).search(
|
||||||
[("name", "=", "Partners View 2")]
|
[("name", "=", "Partners View 2")]
|
||||||
)
|
)
|
||||||
bi = self.bi_sql_view.sudo(self.bi_user.id).search(
|
bi = self.bi_sql_view.with_user(self.bi_user.id).search(
|
||||||
[("name", "=", "Partners View 2")]
|
[("name", "=", "Partners View 2")]
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
|
|
@ -9,7 +9,6 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
<field name="name">SQL Views</field>
|
<field name="name">SQL Views</field>
|
||||||
<field name="type">ir.actions.act_window</field>
|
<field name="type">ir.actions.act_window</field>
|
||||||
<field name="res_model">bi.sql.view</field>
|
<field name="res_model">bi.sql.view</field>
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">tree,form</field>
|
<field name="view_mode">tree,form</field>
|
||||||
</record>
|
</record>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
server-tools
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../bi_sql_editor
|
|
@ -0,0 +1,6 @@
|
||||||
|
import setuptools
|
||||||
|
|
||||||
|
setuptools.setup(
|
||||||
|
setup_requires=['setuptools-odoo'],
|
||||||
|
odoo_addon=True,
|
||||||
|
)
|
Loading…
Reference in New Issue