[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:
Sylvain LE GAL
2017-07-14 16:17:07 +02:00
parent 82e24672f7
commit a13762feb4
6 changed files with 165 additions and 122 deletions

View File

@@ -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]