mirror of
https://github.com/OCA/reporting-engine.git
synced 2025-02-16 16:30:38 +02:00
[IMP] bi_sql_editor: allow to generate form view. So It is possible to see data detail, when clicking on an item in a tree view
- update / create tree and form view once all the models are loaded, to avoid errors because fields are not available
This commit is contained in:
@@ -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": "17.0.1.1.0",
|
"version": "17.0.2.0.0",
|
||||||
"license": "AGPL-3",
|
"license": "AGPL-3",
|
||||||
"category": "Reporting",
|
"category": "Reporting",
|
||||||
"author": "GRAP,Odoo Community Association (OCA)",
|
"author": "GRAP,Odoo Community Association (OCA)",
|
||||||
|
|||||||
11
bi_sql_editor/migrations/17.0.2.0.0/end-migration.py
Normal file
11
bi_sql_editor/migrations/17.0.2.0.0/end-migration.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Copyright (C) 2024 - Today: GRAP (http://www.grap.coop)
|
||||||
|
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
|
||||||
|
from openupgradelib import openupgrade
|
||||||
|
|
||||||
|
|
||||||
|
@openupgrade.migrate()
|
||||||
|
def migrate(env, version):
|
||||||
|
for view in env["bi.sql.view"].search([("state", "=", "ui_valid")]):
|
||||||
|
view.form_view_id = env["ir.ui.view"].create(view._prepare_form_view()).id
|
||||||
@@ -74,7 +74,8 @@ class BiSQLView(models.Model):
|
|||||||
view_order = fields.Char(
|
view_order = fields.Char(
|
||||||
required=True,
|
required=True,
|
||||||
default="pivot,graph,tree",
|
default="pivot,graph,tree",
|
||||||
help="Comma-separated text. Possible values:" ' "graph", "pivot" or "tree"',
|
help="Comma-separated text. Possible values:"
|
||||||
|
' "graph", "pivot", "tree" or "form"',
|
||||||
)
|
)
|
||||||
|
|
||||||
query = fields.Text(
|
query = fields.Text(
|
||||||
@@ -114,6 +115,7 @@ class BiSQLView(models.Model):
|
|||||||
model_id = fields.Many2one(
|
model_id = fields.Many2one(
|
||||||
string="Odoo Model", comodel_name="ir.model", readonly=True
|
string="Odoo Model", comodel_name="ir.model", readonly=True
|
||||||
)
|
)
|
||||||
|
|
||||||
# UI related fields
|
# UI related fields
|
||||||
# 1. Editable fields, which can be set by the user (optional) before
|
# 1. Editable fields, which can be set by the user (optional) before
|
||||||
# creating the UI elements
|
# creating the UI elements
|
||||||
@@ -133,6 +135,11 @@ class BiSQLView(models.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 2. Readonly fields, non editable by the user
|
# 2. Readonly fields, non editable by the user
|
||||||
|
|
||||||
|
form_view_id = fields.Many2one(
|
||||||
|
string="Odoo Form View", comodel_name="ir.ui.view", readonly=True
|
||||||
|
)
|
||||||
|
|
||||||
tree_view_id = fields.Many2one(
|
tree_view_id = fields.Many2one(
|
||||||
string="Odoo Tree View", comodel_name="ir.ui.view", readonly=True
|
string="Odoo Tree View", comodel_name="ir.ui.view", readonly=True
|
||||||
)
|
)
|
||||||
@@ -183,9 +190,9 @@ class BiSQLView(models.Model):
|
|||||||
for rec in self:
|
for rec in self:
|
||||||
if rec.view_order:
|
if rec.view_order:
|
||||||
for vtype in rec.view_order.split(","):
|
for vtype in rec.view_order.split(","):
|
||||||
if vtype not in ("graph", "pivot", "tree"):
|
if vtype not in ("graph", "pivot", "tree", "form"):
|
||||||
raise UserError(
|
raise UserError(
|
||||||
_("Only graph, pivot or tree views are supported")
|
_("Only graph, pivot, tree or form views are supported")
|
||||||
)
|
)
|
||||||
|
|
||||||
# Compute Section
|
# Compute Section
|
||||||
@@ -294,6 +301,7 @@ class BiSQLView(models.Model):
|
|||||||
|
|
||||||
def button_reset_to_model_valid(self):
|
def button_reset_to_model_valid(self):
|
||||||
views = self.filtered(lambda x: x.state == "ui_valid")
|
views = self.filtered(lambda x: x.state == "ui_valid")
|
||||||
|
views.mapped("form_view_id").unlink()
|
||||||
views.mapped("tree_view_id").unlink()
|
views.mapped("tree_view_id").unlink()
|
||||||
views.mapped("graph_view_id").unlink()
|
views.mapped("graph_view_id").unlink()
|
||||||
views.mapped("pivot_view_id").unlink()
|
views.mapped("pivot_view_id").unlink()
|
||||||
@@ -321,6 +329,7 @@ class BiSQLView(models.Model):
|
|||||||
return super().button_set_draft()
|
return super().button_set_draft()
|
||||||
|
|
||||||
def button_create_ui(self):
|
def button_create_ui(self):
|
||||||
|
self.form_view_id = self.env["ir.ui.view"].create(self._prepare_form_view()).id
|
||||||
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 = (
|
||||||
self.env["ir.ui.view"].create(self._prepare_graph_view()).id
|
self.env["ir.ui.view"].create(self._prepare_graph_view()).id
|
||||||
@@ -412,6 +421,19 @@ class BiSQLView(models.Model):
|
|||||||
"global": True,
|
"global": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def _prepare_form_view(self):
|
||||||
|
self.ensure_one()
|
||||||
|
return {
|
||||||
|
"name": self.name,
|
||||||
|
"type": "form",
|
||||||
|
"model": self.model_id.model,
|
||||||
|
"arch": """<?xml version="1.0"?>"""
|
||||||
|
"""<form><sheet><group string="Data" col="4">{}"""
|
||||||
|
"""</group></sheet></form>""".format(
|
||||||
|
"".join([x._prepare_form_field() for x in self.bi_sql_view_field_ids])
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
def _prepare_tree_view(self):
|
def _prepare_tree_view(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return {
|
return {
|
||||||
@@ -477,6 +499,8 @@ class BiSQLView(models.Model):
|
|||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
view_mode = self.view_order
|
view_mode = self.view_order
|
||||||
first_view = view_mode.split(",")[0]
|
first_view = view_mode.split(",")[0]
|
||||||
|
if first_view == "form":
|
||||||
|
view_id = self.form_view_id.id
|
||||||
if first_view == "tree":
|
if first_view == "tree":
|
||||||
view_id = self.tree_view_id.id
|
view_id = self.tree_view_id.id
|
||||||
elif first_view == "pivot":
|
elif first_view == "pivot":
|
||||||
|
|||||||
@@ -239,6 +239,10 @@ class BiSQLViewField(models.Model):
|
|||||||
or False,
|
or False,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def _prepare_form_field(self):
|
||||||
|
self.ensure_one()
|
||||||
|
return f"""<field name="{self.name}" context="{self.field_context}"/>\n"""
|
||||||
|
|
||||||
def _prepare_tree_field(self):
|
def _prepare_tree_field(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
if self.tree_visibility == "unavailable":
|
if self.tree_visibility == "unavailable":
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
|
|||||||
@@ -221,6 +221,7 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|||||||
/>
|
/>
|
||||||
</group>
|
</group>
|
||||||
<group string="UI Instances">
|
<group string="UI Instances">
|
||||||
|
<field name="form_view_id" />
|
||||||
<field name="tree_view_id" />
|
<field name="tree_view_id" />
|
||||||
<field name="graph_view_id" />
|
<field name="graph_view_id" />
|
||||||
<field name="pivot_view_id" />
|
<field name="pivot_view_id" />
|
||||||
|
|||||||
Reference in New Issue
Block a user