Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bi_sql_editor/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)",
Expand Down
14 changes: 14 additions & 0 deletions bi_sql_editor/migrations/16.0.2.0.0/end-migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# 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")]):
# create new Form view
view.form_view_id = env["ir.ui.view"].create(view._prepare_form_view()).id
# Update tree view, to add sum / avg option
view.tree_view_id.write(view._prepare_tree_view())
30 changes: 27 additions & 3 deletions bi_sql_editor/models/bi_sql_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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
Expand All @@ -151,6 +153,11 @@ def _default_parent_menu_id(self):
)

# 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
)
Expand Down Expand Up @@ -207,9 +214,9 @@ def _check_view_order(self):
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
Expand Down Expand Up @@ -324,6 +331,7 @@ def button_create_sql_view_and_model(self):

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()
Expand Down Expand Up @@ -351,6 +359,7 @@ def button_set_draft(self):
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
Expand Down Expand Up @@ -442,6 +451,19 @@ def _prepare_rule(self):
"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 {
Expand Down Expand Up @@ -507,6 +529,8 @@ def _prepare_action(self):
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":
Expand Down
12 changes: 11 additions & 1 deletion bi_sql_editor/models/bi_sql_view_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,10 @@ def _prepare_model_field(self):
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":
Expand All @@ -261,8 +265,14 @@ def _prepare_tree_field(self):
elif self.tree_visibility == "optional_show":
visibility_text = 'optional="show"'

operator_text = ""
if self.group_operator == "sum":
operator_text = f'sum="{_("Total")}"'
elif self.group_operator == "avg":
operator_text = f'avg="{_("Average")}"'

return (
f"""<field name="{self.name}" {visibility_text}"""
f"""<field name="{self.name}" {visibility_text} {operator_text}"""
f""" context="{self.field_context}"/>\n"""
)

Expand Down
1 change: 1 addition & 0 deletions bi_sql_editor/static/description/index.html
Original file line number Diff line number Diff line change
@@ -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>
Expand Down
1 change: 1 addition & 0 deletions bi_sql_editor/views/view_bi_sql_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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" />
Expand Down