[14.0][MIG] bi_view_editor

pre-commit
pull/730/head
Andrea 2020-10-20 09:07:29 +02:00 committed by ilo
parent b5f53e2cc9
commit 6f089afa35
13 changed files with 129 additions and 125 deletions

View File

@ -1,4 +1,4 @@
# Copyright 2015-2019 Onestein (<https://www.onestein.eu>) # Copyright 2015-2020 Onestein (<https://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{ {
@ -8,8 +8,8 @@
"author": "Onestein,Odoo Community Association (OCA)", "author": "Onestein,Odoo Community Association (OCA)",
"license": "AGPL-3", "license": "AGPL-3",
"website": "https://github.com/OCA/reporting-engine", "website": "https://github.com/OCA/reporting-engine",
"category": "Reporting", "category": "Productivity",
"version": "13.0.1.0.0", "version": "14.0.1.0.0",
"development_status": "Beta", "development_status": "Beta",
"depends": ["web"], "depends": ["web"],
"data": [ "data": [

View File

@ -1,4 +1,4 @@
# Copyright 2015-2019 Onestein (<https://www.onestein.eu>) # Copyright 2015-2020 Onestein (<https://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import base64 import base64
@ -320,7 +320,11 @@ class BveView(models.Model):
try: try:
with self.env.cr.savepoint(): with self.env.cr.savepoint():
self.env.cr.execute( self.env.cr.execute(
"CREATE or REPLACE VIEW %s as (%s)", (AsIs(view_name), AsIs(query),) "CREATE or REPLACE VIEW %s as (%s)",
(
AsIs(view_name),
AsIs(query),
),
) )
except Exception as e: except Exception as e:
raise UserError( raise UserError(
@ -541,7 +545,7 @@ class BveView(models.Model):
self.env["ir.model"].sudo().search([("model", "=", self.model_name)]) self.env["ir.model"].sudo().search([("model", "=", self.model_name)])
) )
if models_to_delete: if models_to_delete:
models_to_delete.unlink() models_to_delete.with_context(_force_unlink=True).unlink()
table_name = self.model_name.replace(".", "_") table_name = self.model_name.replace(".", "_")
tools.drop_view_if_exists(self.env.cr, table_name) tools.drop_view_if_exists(self.env.cr, table_name)

View File

@ -44,11 +44,12 @@ class BveViewLine(models.Model):
@api.constrains("row", "column", "measure") @api.constrains("row", "column", "measure")
def _constrains_options_check(self): def _constrains_options_check(self):
measure_types = ["float", "integer", "monetary"] measure_types = ["float", "integer", "monetary"]
lines = self.filtered(lambda l: l.join_model_id or l.ttype in measure_types) for line in self.filtered(lambda l: l.row or l.column):
if lines.filtered(lambda l: l.row or l.column): if line.join_model_id or line.ttype in measure_types:
err_msg = _("This field cannot be a row or a column.") err_msg = _("This field cannot be a row or a column.")
raise ValidationError(err_msg) raise ValidationError(err_msg)
if lines.filtered(lambda l: l.measure): for line in self.filtered(lambda l: l.measure):
if line.join_model_id or line.ttype not in measure_types:
err_msg = _("This field cannot be a measure.") err_msg = _("This field cannot be a measure.")
raise ValidationError(err_msg) raise ValidationError(err_msg)
@ -56,8 +57,16 @@ class BveViewLine(models.Model):
def _constrains_unique_fields_check(self): def _constrains_unique_fields_check(self):
seen = set() seen = set()
for line in self.mapped("bve_view_id.field_ids"): for line in self.mapped("bve_view_id.field_ids"):
if (line.table_alias, line.field_id.id,) not in seen: if (
seen.add((line.table_alias, line.field_id.id,)) line.table_alias,
line.field_id.id,
) not in seen:
seen.add(
(
line.table_alias,
line.field_id.id,
)
)
else: else:
raise ValidationError( raise ValidationError(
_("Field %s/%s is duplicated.\n" "Please remove the duplications.") _("Field %s/%s is duplicated.\n" "Please remove the duplications.")

View File

@ -85,7 +85,11 @@ class IrModel(models.Model):
for field in fields: for field in fields:
for table_alias in model_table_map[field.model_id.id]: for table_alias in model_table_map[field.model_id.id]:
model_list.append( model_list.append(
dict(dict_for_field(field), table_alias=table_alias, join_node=-1,) dict(
dict_for_field(field),
table_alias=table_alias,
join_node=-1,
)
) )
return model_list return model_list
@ -133,8 +137,7 @@ class IrModel(models.Model):
@api.model @api.model
def get_models(self, table_model_map=None): def get_models(self, table_model_map=None):
""" Return list of model dicts for all available models. """Return list of model dicts for all available models."""
"""
self = self.with_context(lang=self.env.user.lang) self = self.with_context(lang=self.env.user.lang)
model_table_map = defaultdict(list) model_table_map = defaultdict(list)
for k, v in (table_model_map or {}).items(): for k, v in (table_model_map or {}).items():

View File

@ -1,4 +1,4 @@
# Copyright 2017-2019 Onestein (<https://www.onestein.eu>) # Copyright 2017-2020 Onestein (<https://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import logging import logging
@ -37,13 +37,6 @@ models.BaseModel._auto_init = _auto_init
class Base(models.AbstractModel): class Base(models.AbstractModel):
_inherit = "base" _inherit = "base"
@api.model
def _setup_complete(self):
if not _bi_view(self._name):
super()._setup_complete()
else:
self.pool.models[self._name]._log_access = False
@api.model @api.model
def _read_group_process_groupby(self, gb, query): def _read_group_process_groupby(self, gb, query):
if not _bi_view(self._name): if not _bi_view(self._name):
@ -53,9 +46,3 @@ class Base(models.AbstractModel):
if split[0] not in self._fields: if split[0] not in self._fields:
raise UserError(_("No data to be displayed.")) raise UserError(_("No data to be displayed."))
return super()._read_group_process_groupby(gb, query) return super()._read_group_process_groupby(gb, query)
@api.model
def _add_magic_fields(self):
if _bi_view(self._name):
self._log_access = False
return super()._add_magic_fields()

View File

@ -4,8 +4,8 @@
<field name="name">bve_view read access</field> <field name="name">bve_view read access</field>
<field name="model_id" search="[('model','=','bve.view')]" model="ir.model" /> <field name="model_id" search="[('model','=','bve.view')]" model="ir.model" />
<field name="global" eval="True" /> <field name="global" eval="True" />
<field <field name="domain_force">
name="domain_force" ['|',('user_ids','=',False),('user_ids','in',user.id)]
> ['|',('user_ids','=',False),('user_ids','in',user.id)]</field> </field>
</record> </record>
</odoo> </odoo>

View File

@ -126,9 +126,7 @@ odoo.define("bi_view_editor.FieldList", function(require) {
return $.makeArray( return $.makeArray(
this.$el.find("tbody tr").map(function () { this.$el.find("tbody tr").map(function () {
var field = $(this).data("field"); var field = $(this).data("field");
field.description = $(this) field.description = $(this).find('input[name="description"]').val();
.find('input[name="description"]')
.val();
return field; return field;
}) })
); );

View File

@ -122,9 +122,7 @@ odoo.define("bi_view_editor.ModelList", function(require) {
return; return;
} }
var model = $el.data("model"); var model = $el.data("model");
$el.parent() $el.parent().find(".field").remove();
.find(".field")
.remove();
if (this.isActive(model.id)) { if (this.isActive(model.id)) {
this.removeAsActive(model.id); this.removeAsActive(model.id);
} else { } else {

View File

@ -4,6 +4,7 @@
<div class="oe_form_field_bi_editor"> <div class="oe_form_field_bi_editor">
<div class="body"> <div class="body">
<div class="left"> <div class="left">
</div> </div>
<div class="right"> <div class="right">
@ -13,9 +14,10 @@
<div class="footer"> <div class="footer">
<div class="left" /> <div class="left" />
<div class="right"> <div class="right">
<button class="clear-btn d-none"><span <button class="clear-btn d-none">
class="fa fa-eraser" <span class="fa fa-eraser" />
/> Clear</button> Clear
</button>
</div> </div>
</div> </div>
</div> </div>
@ -76,6 +78,7 @@
<input type="text" class="search-bar" /> <input type="text" class="search-bar" />
</div> </div>
<div class="class-list"> <div class="class-list">
</div> </div>
</div> </div>
</t> </t>
@ -106,6 +109,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -165,7 +169,8 @@
type="checkbox" type="checkbox"
data-for="join_left" data-for="join_left"
class="checkbox-join-left" class="checkbox-join-left"
/> Join Left />
Join Left
</label> </label>
</div> </div>
</li> </li>

View File

@ -354,7 +354,7 @@ class TestBiViewEditor(TransactionCase):
uninstall_hook(self.cr, self.env) uninstall_hook(self.cr, self.env)
def test_18_action_translations(self): def test_18_action_translations(self):
self.env["res.lang"].load_lang("it_IT") self.env["res.lang"]._activate_lang("it_IT")
vals = self.bi_view1_vals vals = self.bi_view1_vals
vals.update({"name": "Test View1"}) vals.update({"name": "Test View1"})
bi_view1 = self.env["bve.view"].create(vals) bi_view1 = self.env["bve.view"].create(vals)

View File

@ -1,4 +1,4 @@
# Copyright 2017-2019 Onestein (<https://www.onestein.eu>) # Copyright 2017-2020 Onestein (<https://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, models from odoo import api, models