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
committed by David James
parent 5b8cf460ad
commit 8425bcd972
6 changed files with 227 additions and 157 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)
@@ -186,8 +190,10 @@ 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.pivot_view_id.unlink()
sql_view.search_view_id.unlink()
sql_view.action_id.unlink()
sql_view.menu_id.unlink()
sql_view.rule_id.unlink()
@@ -197,6 +203,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.pivot_view_id = self.env['ir.ui.view'].create(
@@ -225,8 +233,7 @@ class BiSQLView(models.Model):
'type': 'ir.actions.act_window',
'res_model': self.model_id.model,
'search_view_id': self.search_view_id.id,
'view_type': 'form',
'view_mode': 'graph,pivot',
'view_mode': 'graph,pivot,tree',
}
# Prepare Function
@@ -282,6 +289,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()
@@ -339,8 +361,8 @@ class BiSQLView(models.Model):
'name': self.name,
'res_model': self.model_id.model,
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'graph,pivot',
'view_mode': 'graph,pivot,tree',
'view_id': self.graph_view_id.id,
'search_view_id': self.search_view_id.id,
}
@@ -504,6 +526,12 @@ 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):

View File

@@ -29,6 +29,12 @@ class BiSQLViewField(models.Model):
('measure', 'Measure'),
]
_TREE_VISIBILITY_SELECTION = [
('unavailable', 'Unavailable'),
('hidden', 'Hidden'),
('available', 'Available'),
]
# Mapping to guess Odoo field type, from SQL column type
_SQL_MAPPING = {
'boolean': 'boolean',
@@ -68,6 +74,10 @@ class BiSQLViewField(models.Model):
graph_type = fields.Selection(
string='Graph Type', selection=_GRAPH_TYPE_SELECTION)
tree_visibility = fields.Selection(
string='Tree Visibility', selection=_TREE_VISIBILITY_SELECTION,
default='available', required=True)
field_description = fields.Char(
string='Field Description', help="This will be used as the name"
" of the Odoo field, displayed for users")
@@ -164,8 +174,20 @@ class BiSQLViewField(models.Model):
'selection': self.ttype == 'selection' and self.selection or False,
'relation': self.ttype == 'many2one' and
self.many2one_model_id.model or False,
'tree_visibility': self.field_description and
'available' or 'unavailable',
}
@api.multi
def _prepare_tree_field(self):
self.ensure_one()
res = ''
if self.field_description and self.tree_visibility != 'unavailable':
res = """<field name="{}" {}/>""".format(
self.name,
self.tree_visibility == 'hidden' and 'invisible="1"' or '')
return res
@api.multi
def _prepare_graph_field(self):
self.ensure_one()