[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

This commit is contained in:
Sylvain LE GAL
2024-01-12 00:55:03 +01:00
parent 45a5a018ae
commit 26cf0f9912
6 changed files with 45 additions and 4 deletions

View File

@@ -5,7 +5,7 @@
{
"name": "BI SQL Editor",
"summary": "BI Views builder, based on Materialized or Normal SQL Views",
"version": "16.0.1.2.0",
"version": "16.0.2.0.0",
"license": "AGPL-3",
"category": "Reporting",
"author": "GRAP,Odoo Community Association (OCA)",

View 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

View File

@@ -78,7 +78,8 @@ class BiSQLView(models.Model):
readonly=False,
states={"ui_valid": [("readonly", True)]},
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(
@@ -126,6 +127,7 @@ class BiSQLView(models.Model):
model_id = fields.Many2one(
string="Odoo Model", comodel_name="ir.model", readonly=True
)
# UI related fields
# 1. Editable fields, which can be set by the user (optional) before
# creating the UI elements
@@ -151,6 +153,11 @@ class BiSQLView(models.Model):
)
# 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(
string="Odoo Tree View", comodel_name="ir.ui.view", readonly=True
)
@@ -207,9 +214,9 @@ class BiSQLView(models.Model):
for rec in self:
if rec.view_order:
for vtype in rec.view_order.split(","):
if vtype not in ("graph", "pivot", "tree"):
if vtype not in ("graph", "pivot", "tree", "form"):
raise UserError(
_("Only graph, pivot or tree views are supported")
_("Only graph, pivot, tree or form views are supported")
)
# Compute Section
@@ -324,6 +331,7 @@ class BiSQLView(models.Model):
def button_reset_to_model_valid(self):
views = self.filtered(lambda x: x.state == "ui_valid")
views.mapped("form_view_id").unlink()
views.mapped("tree_view_id").unlink()
views.mapped("graph_view_id").unlink()
views.mapped("pivot_view_id").unlink()
@@ -351,6 +359,7 @@ class BiSQLView(models.Model):
return super().button_set_draft()
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.graph_view_id = (
self.env["ir.ui.view"].create(self._prepare_graph_view()).id
@@ -442,6 +451,19 @@ class BiSQLView(models.Model):
"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):
self.ensure_one()
return {
@@ -507,6 +529,8 @@ class BiSQLView(models.Model):
self.ensure_one()
view_mode = self.view_order
first_view = view_mode.split(",")[0]
if first_view == "form":
view_id = self.form_view_id.id
if first_view == "tree":
view_id = self.tree_view_id.id
elif first_view == "pivot":

View File

@@ -249,6 +249,10 @@ class BiSQLViewField(models.Model):
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):
self.ensure_one()
if self.tree_visibility == "unavailable":

View File

@@ -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">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

View File

@@ -200,6 +200,7 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
<field name="parent_menu_id" />
</group>
<group string="UI Instances">
<field name="form_view_id" />
<field name="tree_view_id" />
<field name="graph_view_id" />
<field name="pivot_view_id" />