Browse Source

Some js lint, removed dead/unuseful code, updated README

pull/59/head
Andrea 9 years ago
parent
commit
c7604a0394
  1. 11
      bi_view_editor/README.rst
  2. 4
      bi_view_editor/__openerp__.py
  3. 13
      bi_view_editor/models/ir_model.py
  4. 79
      bi_view_editor/static/src/js/bve.js
  5. 36
      bi_view_editor/templates/qweb_template.xml

11
bi_view_editor/README.rst

@ -38,10 +38,10 @@ To graphically design your analysis data-set:
- From the Reporting menu, select "Custom BI Views"
- Browse trough the business objects in the Query tab
- Pick the interesting fields (Drag & Drop)
- For each selected field, right-click on the Options column and select whether it's a row, column or measure
- Save and click "Generate BI View"
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/143/9.0
@ -49,9 +49,12 @@ To graphically design your analysis data-set:
Known issues / Roadmap
======================
* Non-stored fields are not supported yet
* Provide graph view for table relations (would be a "nice to have")
* Porting to Odoo 9.0
* Non-stored fields are not supported
* Provide graph view for table relations
* Use the same concept (dinamically create list views) to build reports: generate an ad-hoc query object that displays the fields that you want for the report, for a given join query
* Add possibility to store the BI view in user dashboard, like any other graph or cross table
* Provide a tutorial (eg. a working example of usage)
Bug Tracker
===========

4
bi_view_editor/__openerp__.py

@ -27,8 +27,4 @@
'js': [
'static/src/js/bve.js'
],
'demo': [],
'installable': True,
'auto_install': False,
'application': False,
}

13
bi_view_editor/models/ir_model.py

@ -204,17 +204,12 @@ class IrModel(models.Model):
self.instanciate(cr, user, vals['model'], context)
self.pool.setup_models(cr, partial=(not self.pool.ready))
# update database schema
# model = self.pool[vals['model']]
# ctx = dict(
# context,
# field_name=vals['name'],
# field_state='manual',
# select=vals.get('select_level', '0'),
# update_custom_fields=True)
RegistryManager.signal_registry_change(cr.dbname)
# self.write(cr, user, [res], {'state': 'manual'})
# Following commented line (write method) is not working anymore
# as in Odoo V9 a new orm constraint is restricting the modification
# of the state while updating ir.model
# self.write(cr, user, [res], {'state': 'manual'})
q = ("""UPDATE ir_model SET state = 'manual'
WHERE id = """ + str(res))

79
bi_view_editor/static/src/js/bve.js

@ -28,9 +28,9 @@ openerp.bi_view_editor = function (instance, local) {
}
});
if (!this.get("effective_readonly")) {
this.$el.find('.search-bar').attr('disabled', false);
this.$el.find('.class-list').css('opacity', '1');
this.$el.find('.class-list .class').css('cursor', 'pointer');
this.$el.find('.search-bar').attr('disabled', false);
this.$el.find('.class-list').css('opacity', '1');
this.$el.find('.class-list .class').css('cursor', 'pointer');
this.$el.find(".body .right").droppable("option", "disabled", false);
this.$el.find('#clear').css('display', 'inline-block').click(function () {
self.set_fields([]);
@ -43,9 +43,9 @@ openerp.bi_view_editor = function (instance, local) {
} else {
this.$el.find(".body .right").droppable("option", "disabled", true);
this.$el.find('#clear').css('display', 'none');
this.$el.find('.search-bar').attr('disabled', true);
this.$el.find('.class-list').css('opacity', '.35');
this.$el.find('.class-list .class').css('cursor', 'default');
this.$el.find('.search-bar').attr('disabled', true);
this.$el.find('.class-list').css('opacity', '.35');
this.$el.find('.class-list .class').css('cursor', 'default');
}
},
filter: function(val) {
@ -79,18 +79,16 @@ openerp.bi_view_editor = function (instance, local) {
this.set_fields(JSON.parse(this.get('value')));
},
load_classes: function(scrollTo) {
scrollTo = (typeof scrollTo == 'undefined') ? false : scrollTo;
scrollTo = (typeof scrollTo == 'undefined') ? false : scrollTo;
var self = this;
var model = new instance.web.Model("ir.model");
if (this.$el.find(".field-list tbody tr").length > 0) {
model.call("get_related_models", [this.get_model_ids()], { context: new instance.web.CompoundContext() }).then(function(result) {
self.show_classes(result);
//if(scrollTo) self.$el.find('.class-list').scrollTo('#bve-class-' + scrollTo.model_id);
});
} else {
model.call("get_models", { context: new instance.web.CompoundContext() }).then(function(result) {
self.show_classes(result);
//if(scrollTo) self.$el.find('.class-list').scrollTo('#bve-class-' + scrollTo.model_id);
});
}
},
@ -99,13 +97,13 @@ openerp.bi_view_editor = function (instance, local) {
var model = new instance.web.Model("ir.model");
self.$el.find(".class-list .class").remove();
self.$el.find(".class-list .field").remove();
var css = this.get('effective_readonly') ? 'cursor: default' : 'cursor: pointer'
var css = this.get('effective_readonly') ? 'cursor: default' : 'cursor: pointer';
for (var i = 0; i < result.length; i++) {
var item = $("<div style=\"" + css + "\" class=\"class\" title=\"" + result[i]["model"] + "\" id=\"bve-class-" + result[i]["id"] + "\">" + result[i]["name"] + "</div>")
var item = $("<div style=\"" + css + "\" class=\"class\" title=\"" + result[i].model + "\" id=\"bve-class-" + result[i].id + "\">" + result[i].name + "</div>")
.data('model-data', result[i])
.click(function (evt) {
if(self.get("effective_readonly")) return;
if(self.get("effective_readonly")) return;
var classel = $(this);
if (classel.data('bve-processed')) {
@ -114,12 +112,12 @@ openerp.bi_view_editor = function (instance, local) {
var index = self.activeModelMenus.indexOf(classel.data('model-data').id);
if(index != -1) self.activeModelMenus.splice(index, 1);
} else {
self.activeModelMenus.push(classel.data('model-data').id);
self.activeModelMenus.push(classel.data('model-data').id);
model.call("get_fields", [classel.data('model-data').id], { context: new instance.web.CompoundContext() }).then(function(result) {
for (var i = 0; i < result.length; i++) {
classel.find("#bve-field-" + result[i]["name"]).remove();
if(self.$el.find(".field-list tbody [name=label-" + result[i].id + "]").length > 0) continue;
classel.after($("<div class=\"field\" title=\"" + result[i]["name"] + "\" id=\"bve-field-" + result[i]["name"] + "\">" + result[i]["description"] + "</div>")
classel.find("#bve-field-" + result[i].name).remove();
if(self.$el.find(".field-list tbody [name=label-" + result[i].id + "]").length > 0) continue;
classel.after($("<div class=\"field\" title=\"" + result[i].name + "\" id=\"bve-field-" + result[i].name + "\">" + result[i].description + "</div>")
.data('field-data', result[i])
.click(function () {
if (!self.get("effective_readonly")) {
@ -133,7 +131,7 @@ openerp.bi_view_editor = function (instance, local) {
'appendTo': 'body',
'containment': 'window'
})
);
);
}
});
@ -149,8 +147,8 @@ openerp.bi_view_editor = function (instance, local) {
console.log(result);
var item = self.$el.find(".class-list #bve-class-" + result[0].model_id);
for (var o = 0; o < result.length; o++) {
if(self.$el.find(".field-list tbody [name=label-" + result[o].id + "]").length > 0) continue;
item.after($("<div class=\"field\" title=\"" + result[o]["name"] + "\" id=\"bve-field-" + result[o]["name"] + "\">" + result[o]["description"] + "</div>")
if(self.$el.find(".field-list tbody [name=label-" + result[o].id + "]").length > 0) continue;
item.after($("<div class=\"field\" title=\"" + result[o].name + "\" id=\"bve-field-" + result[o].name + "\">" + result[o].description + "</div>")
.data('field-data', result[o])
.click(function () {
if (!self.get("effective_readonly")) {
@ -173,7 +171,7 @@ openerp.bi_view_editor = function (instance, local) {
},
add_field_to_table: function(data, options) {
var self = this;
var self = this;
if (typeof data.row == 'undefined') {
data.row = false;
}
@ -206,7 +204,7 @@ openerp.bi_view_editor = function (instance, local) {
.data('field-data', data)
.contextmenu(function(e) {
e.preventDefault();
if (self.get("effective_readonly")) return;
if (self.get("effective_readonly")) return;
var target = $(e.currentTarget);
var currentFieldData = target.data('field-data');
@ -272,29 +270,29 @@ openerp.bi_view_editor = function (instance, local) {
self.update_field_view(target);
self.internal_set_value(JSON.stringify(self.get_fields()));
});
contextMenu.show();
contextMenu.show();
$(document).mouseup(function (e) {
var container = $(".context-menu");
if (!container.is(e.target) // if the target of the click isn't the container...
&& container.has(e.target).length === 0) // ... nor a descendant of the container
// if the target of the click isn't the container nor a descendant of the container
if (!container.is(e.target) && container.has(e.target).length === 0)
{
container.hide();
}
});
});
})
);
self.$el.find('.delete-button').unbind("click");
);
self.$el.find('.delete-button').unbind("click");
self.$el.find('.delete-button').click(function() {
$(this).closest('tr').remove();
self.clean_join_nodes();
self.internal_set_value(JSON.stringify(self.get_fields()));
self.load_classes();
return false;
})
});
},
clean_join_nodes: function () {
var aliases = $.makeArray(this.$el.find(".field-list tbody tr").map(function (idx, el) {
@ -359,8 +357,7 @@ openerp.bi_view_editor = function (instance, local) {
var field_data = this.get_fields();
var self = this;
model.call('get_join_nodes', [field_data, data], {context: new instance.web.CompoundContext()}).then(function(result) {
//self.$el.find(".search-bar").val("");
//self.filter("");
if (result.length == 1) {
self.add_field_and_join_node(data, result[0]);
self.internal_set_value(JSON.stringify(self.get_fields()));
@ -386,7 +383,7 @@ openerp.bi_view_editor = function (instance, local) {
}));
},
set_fields: function(values) {
this.activeModelMenus = [];
this.activeModelMenus = [];
if (!values) {
values = [];
}
@ -417,9 +414,9 @@ openerp.bi_view_editor = function (instance, local) {
description = "Use the field on table " + model_data[choices[i].table_alias].model_name;
} else {
if (choices[i].join_node == -1) {
description = "Join using the field '" + choices[i]['description'] + "' from model '" + choices[i]['model_name'] + "'";
description = "Join using the field '" + choices[i].description + "' from model '" + choices[i].model_name + "'";
} else {
description = "Join using the field '" + choices[i]['description'] + "' from new model '" + choices[i]['model_name'] + "'";
description = "Join using the field '" + choices[i].description + "' from new model '" + choices[i].model_name + "'";
}
}
joinnodes.append($("<a>" + description+ "</a>")
@ -437,12 +434,8 @@ openerp.bi_view_editor = function (instance, local) {
joinnodes.find('a').click(function() {
callback(callback_data, choices[$(this).data('idx')]);
dialog.close();
})
});
//dialog.on('closing', this, function (e){
// self.check_exit(true);
//});
//this.$buttonpane = dialog.$buttons;
this.start();
}
});

36
bi_view_editor/templates/qweb_template.xml

@ -11,17 +11,7 @@
<t t-name="BVEEditor">
<div class="oe_form_field_bi_editor">
<!--
<div class="header">
<div class="left">
<h2>Query</h2>
</div>
<div class="right">
<button><span class="fa fa-plus"></span> Custom field</button>
</div>
</div>
-->
<div class="body">
<div class="left">
@ -53,25 +43,11 @@
<div class="right"><button id="clear"><span class="fa fa-eraser"></span> Clear</button></div>
</div>
<ul class="context-menu">
<!--
<li>View Param
<ul>
-->
<li><input type="checkbox" id="column-checkbox"/> Column</li>
<li><input type="checkbox" id="row-checkbox"/> Row</li>
<li><input type="checkbox" id="measure-checkbox"/> Measure</li>
<!--
</ul>
</li>
-->
<!--
<li>
Filters
</li>
<li>
Operations
</li>
-->
<li><input type="checkbox" id="column-checkbox"/> Column</li>
<li><input type="checkbox" id="row-checkbox"/> Row</li>
<li><input type="checkbox" id="measure-checkbox"/> Measure</li>
</ul>
</div>
</t>

Loading…
Cancel
Save