mirror of
https://github.com/OCA/reporting-engine.git
synced 2025-02-16 16:30:38 +02:00
[ADD] create ui now create tree view
[IMP] fr translation [IMP] add last refresh date time on the action name of each sql materialized view
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
import logging
|
||||
from datetime import datetime
|
||||
from psycopg2 import ProgrammingError
|
||||
|
||||
from openerp import _, api, fields, models, SUPERUSER_ID
|
||||
@@ -86,6 +87,9 @@ class BiSQLView(models.Model):
|
||||
model_id = fields.Many2one(
|
||||
string='Odoo Model', comodel_name='ir.model', readonly=True)
|
||||
|
||||
tree_view_id = fields.Many2one(
|
||||
string='Odoo Tree View', comodel_name='ir.ui.view', readonly=True)
|
||||
|
||||
graph_view_id = fields.Many2one(
|
||||
string='Odoo Graph View', comodel_name='ir.ui.view', readonly=True)
|
||||
|
||||
@@ -185,7 +189,9 @@ class BiSQLView(models.Model):
|
||||
# Drop ORM
|
||||
sql_view._drop_model_and_fields()
|
||||
|
||||
sql_view.tree_view_id.unlink()
|
||||
sql_view.graph_view_id.unlink()
|
||||
sql_view.search_view_id.unlink()
|
||||
sql_view.action_id.unlink()
|
||||
sql_view.menu_id.unlink()
|
||||
if sql_view.cron_id:
|
||||
@@ -194,6 +200,8 @@ class BiSQLView(models.Model):
|
||||
|
||||
@api.multi
|
||||
def button_create_ui(self):
|
||||
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
|
||||
self.search_view_id = self.env['ir.ui.view'].create(
|
||||
@@ -219,10 +227,9 @@ class BiSQLView(models.Model):
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': self.model_id.model,
|
||||
'view_id': self.graph_view_id.id,
|
||||
'search_view_id': self.search_view_id.id,
|
||||
'view_type': 'graph',
|
||||
'view_mode': 'graph',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'graph,tree',
|
||||
}
|
||||
|
||||
# Prepare Function
|
||||
@@ -278,6 +285,21 @@ class BiSQLView(models.Model):
|
||||
'global': True,
|
||||
}
|
||||
|
||||
@api.multi
|
||||
def _prepare_tree_view(self):
|
||||
self.ensure_one()
|
||||
return {
|
||||
'name': self.name,
|
||||
'type': 'tree',
|
||||
'model': self.model_id.model,
|
||||
'arch':
|
||||
"""<?xml version="1.0"?>"""
|
||||
"""<tree string="Analysis">{}"""
|
||||
"""</tree>""".format("".join(
|
||||
[x._prepare_tree_field()
|
||||
for x in self.bi_sql_view_field_ids]))
|
||||
}
|
||||
|
||||
@api.multi
|
||||
def _prepare_graph_view(self):
|
||||
self.ensure_one()
|
||||
@@ -321,7 +343,7 @@ class BiSQLView(models.Model):
|
||||
'res_model': self.model_id.model,
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'graph',
|
||||
'view_mode': 'graph,tree',
|
||||
'view_id': self.graph_view_id.id,
|
||||
'search_view_id': self.search_view_id.id,
|
||||
}
|
||||
@@ -380,7 +402,8 @@ class BiSQLView(models.Model):
|
||||
sql_view.rule_id = self.env['ir.rule'].create(
|
||||
self._prepare_rule()).id
|
||||
# Drop table, created by the ORM
|
||||
req = "DROP TABLE %s" % (sql_view.view_name)
|
||||
req = "DROP TABLE %s" % (sql_view.view_name)\
|
||||
# pylint: disable=sql-injection
|
||||
self.env.cr.execute(req)
|
||||
|
||||
@api.multi
|
||||
@@ -411,7 +434,8 @@ class BiSQLView(models.Model):
|
||||
WHERE attrelid = '%s'::regclass
|
||||
AND NOT attisdropped
|
||||
AND attnum > 0
|
||||
ORDER BY attnum;""" % (self.view_name)
|
||||
ORDER BY attnum;""" % (
|
||||
self.view_name) # pylint: disable=sql-injection
|
||||
self.env.cr.execute(req)
|
||||
return self.env.cr.fetchall()
|
||||
|
||||
@@ -486,11 +510,17 @@ class BiSQLView(models.Model):
|
||||
sql_view.materialized_text, sql_view.view_name)
|
||||
self._log_execute(req)
|
||||
sql_view._refresh_size()
|
||||
if sql_view.action_id:
|
||||
# Alter name of the action, to display last refresh datetime
|
||||
# of the materialized view
|
||||
sql_view.action_id.name = "%s (%s)" % (
|
||||
self.name,
|
||||
datetime.utcnow().strftime(_("%m/%d/%Y %H:%M:%S UTC")))
|
||||
|
||||
@api.multi
|
||||
def _refresh_size(self):
|
||||
for sql_view in self:
|
||||
req = "SELECT pg_size_pretty(pg_total_relation_size('%s'));" % (
|
||||
sql_view.view_name)
|
||||
sql_view.view_name) # pylint: disable=sql-injection
|
||||
self.env.cr.execute(req)
|
||||
sql_view.size = self.env.cr.fetchone()[0]
|
||||
|
||||
Reference in New Issue
Block a user