[IMP] legend widget

bzr revid: rgaopenerp-20131220121019-h1o0lllprbo02uqa
This commit is contained in:
RGA(OpenERP) 2013-12-20 17:40:19 +05:30
parent ab6f79e759
commit 6ad2ea0202
3 changed files with 47 additions and 37 deletions

View File

@ -2330,34 +2330,53 @@ instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.we
}); });
} }
}); });
instance.web.form.Legend = instance.web.form.FieldChar.extend({
init: function (field_manager, node) { instance.web.Legend = instance.web.Widget.extend({
this._super(field_manager, node); init: function (parent, dataset, options) {
this.options = py.eval(node.attrs.options) this._super(parent);
this.legend_field = this.options.legend_field; this.parent = parent;
this.dataset = dataset;
this.options = options;
}, },
render_value: function() { render_value: function(record_id, data) {
var self = this; var self = this;
var legend_value = this.field_manager.fields[this.legend_field].get_value() self.record_id = record_id;
var content = QWeb.render("Legend."+ self.name, { var content = QWeb.render("Legend."+ self.parent.name, data);
'widget': self, this.parent.$el.html(content);
'legend_value': legend_value, if (!this.parent.get("effective_readonly")){
}); this.parent.$el.find('.oe_legend').click(self.do_action.bind(self));
this.$el.html(content); }
this.$el.find('li').click(self.execute_action.bind(self));
}, },
execute_action: function(e){ do_action: function(e){
var self = this; var self = this;
var li = $(e.target).closest( "li" ); var li = $(e.target).closest( "li" );
if (li.length){ if (li.length){
var value = li.data('value'); var value = li.data('value');
return this.view.dataset.call_button(self.options.action, [this.view.datarecord.id, value, this.view.dataset.get_context()]).done(function(r) { return self.dataset.call_button(self.options.action, [self.record_id, value, self.dataset.get_context()]).done(self.parent.reload_record.bind(self.parent));
self.view.reload();
});
} }
} }
}); });
instance.web.form.Legend = instance.web.form.FieldChar.extend({
init: function (field_manager, node) {
this._super(field_manager, node);
this.legend = new instance.web.Legend(this, this.view.dataset, py.eval(node.attrs.options));
},
reload_record: function(){
this.view.reload();
},
render_value: function() {
var self = this;
var legend_field = this.options.legend_field;
var legend_value = this.field_manager.fields[legend_field].get_value();
self.legend.render_value(this.view.datarecord.id, {
'widget': self,
'legend_value': legend_value,
});
},
});
instance.web.form.FieldID = instance.web.form.FieldChar.extend({ instance.web.form.FieldID = instance.web.form.FieldChar.extend({
process_modifiers: function () { process_modifiers: function () {
this._super(); this._super();

View File

@ -1036,14 +1036,14 @@
<t t-name="Legend.kanban_state_legend"> <t t-name="Legend.kanban_state_legend">
<div class="btn-group"> <div class="btn-group">
<t t-foreach="widget.get('value')" t-as="rec"> <t t-foreach="widget.get('value')" t-as="rec">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" t-if="legend_value === rec.name" t-att-title="rec.description" > <a class="dropdown-toggle oe_legend" data-toggle="dropdown" href="#" t-if="legend_value === rec.name" t-att-title="rec.description" >
<t t-raw="rec.body" /> <t t-raw="rec.body" />
</a> </a>
</t> </t>
<ul class="dropdown-menu with-arrow"> <ul class="dropdown-menu with-arrow">
<t t-foreach="widget.get('value')" t-as="rec"> <t t-foreach="widget.get('value')" t-as="rec">
<t t-if="legend_value !== rec.name"> <t t-if="legend_value !== rec.name">
<li t-att-data-value="rec.name"><a href="#"><t t-raw="rec.body" /><t t-raw="rec.legend_name" /></a></li> <li class="oe_legend" t-att-data-value="rec.name"><a href="#"><t t-raw="rec.body" /><t t-raw="rec.legend_name" /></a></li>
</t> </t>
</t> </t>
</ul> </ul>
@ -1053,12 +1053,12 @@
<ul style="list-style: none; padding-left: 5px;"> <ul style="list-style: none; padding-left: 5px;">
<t t-foreach="widget.get('value')" t-as="test" > <t t-foreach="widget.get('value')" t-as="test" >
<t t-if="legend_value gte test.name and !test_first"> <t t-if="legend_value gte test.name and !test_first">
<li t-att-data-value="test.name - 1" class="oe_left"><a href="#"><t t-raw="test.body"/></a></li> <li t-att-data-value="test.name - 1" class="oe_left oe_legend"><a href="#"><t t-raw="test.body"/></a></li>
</t> </t>
</t> </t>
<t t-foreach="widget.get('value')" t-as="test" > <t t-foreach="widget.get('value')" t-as="test" >
<t t-if="legend_value lt test.name"> <t t-if="legend_value lt test.name">
<li t-att-data-value="test.name" class="oe_left"><a href="#"><t t-raw="widget.get('value')[0].body"/></a></li> <li t-att-data-value="test.name" class="oe_left oe_legend"><a href="#"><t t-raw="widget.get('value')[0].body"/></a></li>
</t> </t>
</t> </t>
</ul> </ul>

View File

@ -1233,31 +1233,22 @@ instance.web_kanban.AbstractField = instance.web.Widget.extend(instance.web_kanb
instance.web_kanban.Legend = instance.web_kanban.AbstractField.extend({ instance.web_kanban.Legend = instance.web_kanban.AbstractField.extend({
init: function(parent, field, $node) { init: function(parent, field, $node) {
this._super.apply(this, arguments); this._super.apply(this, arguments);
this.parent = parent;
this.name = $node.attr('name') this.name = $node.attr('name')
this.parent = parent;
this.legend = new instance.web.Legend(this, parent.view.dataset, this.options);
},
reload_record: function(){
this.parent.do_reload();
}, },
renderElement: function() { renderElement: function() {
var self = this; var self = this;
var legend_field = this.options.legend_field; var legend_field = this.options.legend_field;
var legend_field_value = this.parent.record[legend_field].raw_value var legend_field_value = this.parent.record[legend_field].raw_value
var content = QWeb.render("Legend." + self.name, { self.legend.render_value(this.parent.id, {
'widget': self, 'widget': self,
'legend_value': legend_field_value, 'legend_value': legend_field_value,
}); });
this.$el.html(content);
this.$el.click(self.execute_action.bind(self));
}, },
execute_action: function(e){
e.preventDefault();
var li = $(e.target).closest( "li" );
if (li.length){
var parent = this.parent
var value = li.data('value');
return parent.view.dataset.call_button(this.options.action, [parent.id, value, parent.view.dataset.get_context()]).done(function(r) {
parent.do_reload();
});
}
}
}); });