[IMP]create four different widget for priority and dropdown_select for kanban and form view

bzr revid: mba@tinyerp.com-20140219132851-vyynhi29hla4k5ly
This commit is contained in:
Mahendra Barad (OpenERP) 2014-02-19 18:58:51 +05:30
parent 2c0141bace
commit fd4b54a9cf
3 changed files with 138 additions and 68 deletions

View File

@ -2331,20 +2331,53 @@ instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.we
}
});
instance.web.Legend = instance.web.Widget.extend({
init: function (parent, dataset) {
this._super(parent);
this.parent = parent;
this.dataset = dataset;
instance.web.form.dropdown_selection = instance.web.form.FieldChar.extend({
init: function (field_manager, node) {
this._super(field_manager, node);
},
prepare_kanban_state_legend: function(){
return [{ 'name': 'normal', 'legend_name': ' In Progress', 'legend_class': 'btn-default' },
{ 'name': 'blocked', 'legend_name': ' Blocked', 'legend_class': 'btn-danger' },
{ 'name': 'done', 'legend_name': ' Ready', 'legend_class': 'btn-success' }]
prepare_dropdown_selection: function(){
return [{ 'name': 'normal', 'state_name': ' In Progress', 'state_class': 'btn-default' },
{ 'name': 'blocked', 'state_name': ' Blocked', 'state_class': 'btn-danger' },
{ 'name': 'done', 'state_name': ' Ready', 'state_class': 'btn-success' }]
},
prepare_priority_legend: function(){
render_value: function() {
var self = this;
var data = {'widget': self }
self.record_id = self.view.datarecord.id;
data['states'] = self.prepare_dropdown_selection();
var content = QWeb.render("dropdown_selection", data);
this.$el.html(content);
this.$el.find('.oe_legend').click(self.do_action.bind(self));
},
do_action: function(e){
var self = this;
var li = $(e.target).closest( "li" );
if (li.length){
var value = {};
value[self.name] = String(li.data('value'));
if (self.record_id){
return self.view.dataset._model.call('write', [[self.record_id], value, self.view.dataset.get_context()]).done(self.reload_record.bind(self));
} else {
return self.view.on_button_save().done(function(result) {
if (result) {
self.view.dataset._model.call('write', [[result], value, self.view.dataset.get_context()]).done(self.reload_record.bind(self));
}
});
}
}
},
reload_record: function(){
this.view.reload();
},
});
instance.web.form.priority = instance.web.form.FieldChar.extend({
init: function (field_manager, node) {
this._super(field_manager, node);
},
prepare_priority: function(){
var data = [];
var selection = this.parent.field.selection || [];
var selection = this.field.selection || [];
_.map(selection, function(res){
value = {
'name': res[0],
@ -2360,62 +2393,37 @@ instance.web.Legend = instance.web.Widget.extend({
});
return data;
},
prepare_data: function() {
var self =this;
if (this.parent.name == 'kanban_state'){
return self.prepare_kanban_state_legend();
}
if (this.parent.name == 'priority'){
return self.prepare_priority_legend();
}
},
render_value: function(record_id, data) {
render_value: function() {
var self = this;
self.record_id = record_id;
var legend = this.prepare_data();
data['legends'] = legend;
var content = QWeb.render("Legend."+ self.parent.name, data);
if (data.view_mode === 'form')
this.parent.$el.html(content);
else
this.parent.$el = $(content);
this.parent.$el.find('.oe_legend').click(self.do_action.bind(self));
var data = {'widget': self }
self.record_id = self.view.datarecord.id;
data['legends'] = self.prepare_priority();
var content = QWeb.render("priority", data);
this.$el.html(content);
this.$el.find('.oe_legend').click(self.do_action.bind(self));
},
do_action: function(e){
var self = this;
var li = $(e.target).closest( "li" );
if (li.length){
var value = {};
value[self.parent.name] = String(li.data('value'));
value[self.name] = String(li.data('value'));
if (self.record_id){
return self.dataset._model.call('write', [[self.record_id], value, self.dataset.get_context()]).done(self.parent.reload_record.bind(self.parent));
return self.view.dataset._model.call('write', [[self.record_id], value, self.view.dataset.get_context()]).done(self.reload_record.bind(self));
} else {
return self.parent.view.on_button_save().done(function(result) {
if (result){
self.dataset._model.call('write', [[result], value, self.dataset.get_context()]).done(self.parent.reload_record.bind(self.parent));
return self.view.on_button_save().done(function(result) {
if (result) {
self.view.dataset._model.call('write', [[result], value, self.view.dataset.get_context()]).done(self.reload_record.bind(self));
}
});
}
}
}
});
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);
},
reload_record: function(){
this.view.reload();
},
render_value: function() {
var self = this;
self.legend.render_value(this.view.datarecord.id, {
'widget': self,
'view_mode':'form'
});
},
});
instance.web.form.FieldID = instance.web.form.FieldChar.extend({
process_modifiers: function () {
this._super();
@ -5971,8 +5979,8 @@ instance.web.form.widgets = new instance.web.Registry({
'monetary': 'instance.web.form.FieldMonetary',
'many2many_checkboxes': 'instance.web.form.FieldMany2ManyCheckBoxes',
'x2many_counter': 'instance.web.form.X2ManyCounter',
'priority':'instance.web.form.Legend',
'dropdown_selection':'instance.web.form.Legend'
'priority':'instance.web.form.priority',
'dropdown_selection':'instance.web.form.dropdown_selection'
});
/**

View File

@ -992,26 +992,26 @@
</span>
</t>
<t t-name="Legend.kanban_state">
<t t-name="dropdown_selection">
<span class="btn-group">
<t t-foreach="legends" t-as="rec">
<a t-att-class="'btn btn-xs '+ rec.legend_class" t-if="widget.get('value') === rec.name" t-att-title="rec.legend_name" >
<t t-raw="rec.legend_name"/>
<a t-att-class="'oe_legend btn btn-xs dropdown-toggle '+rec.legend_class" data-toggle="dropdown">
<t t-foreach="states" t-as="rec">
<a t-att-class="'btn btn-xs '+ rec.state_class" t-if="widget.get('value') === rec.name" t-att-title="rec.state_name" >
<t t-raw="rec.state_name"/>
<a t-att-class="'oe_legend btn btn-xs dropdown-toggle '+rec.state_class" data-toggle="dropdown">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span> </a>
</a>
</t>
<ul class="dropdown-menu state" role="menu">
<t t-foreach="legends" t-as="rec">
<t t-foreach="states" t-as="rec">
<t t-if="widget.get('value') !== rec.name">
<li class="oe_legend" t-att-data-value="rec.name" ><a href="#"><t t-raw="rec.legend_name" /></a></li>
<li class="oe_legend" t-att-data-value="rec.name" ><a href="#"><t t-raw="rec.state_name" /></a></li>
</t>
</t>
</ul>
</span>
</t>
<t t-name="Legend.priority">
<t t-name="priority">
<ul style="list-style: none; padding-left: 2px;">
<t t-foreach="legends" t-as="test" >
<t t-if="widget.get('value') gte test.name and !test_first">

View File

@ -1260,28 +1260,90 @@ instance.web_kanban.AbstractField = instance.web.Widget.extend(instance.web_kanb
},
});
instance.web_kanban.Legend = instance.web_kanban.AbstractField.extend({
instance.web_kanban.priority = instance.web_kanban.AbstractField.extend({
init: function(parent, field, $node) {
this._super.apply(this, arguments);
this.name = $node.attr('name')
this.parent = parent;
this.legend = new instance.web.Legend(this, parent.view.dataset);
},
reload_record: function(){
this.parent.do_reload();
prepare_priority: function(){
var data = [];
var selection = this.field.selection || [];
_.map(selection, function(res){
value = {
'name': res[0],
'legend_name': res[1]
}
if (res[0] == '0') {
value['legend'] = '<img src="/web/static/src/img/icons/star-off.png"/>';
value['legend_name'] = 'Set the Priority';
} else {
value['legend'] = '<img src="/web/static/src/img/icons/star-on.png"/>';
}
data.push(value)
});
return data;
},
renderElement: function() {
var self = this;
self.legend.render_value(self.parent.id, {
'widget': self,
});
self.record_id = self.parent.id;
var data = {'widget': self }
data['legends'] = self.prepare_priority();
var content = QWeb.render("priority", data);
this.$el = $(content);
this.$el.find('.oe_legend').click(self.do_action.bind(self));
},
do_action: function(e){
var self = this;
var li = $(e.target).closest( "li" );
if (li.length){
var value = {};
value[self.name] = String(li.data('value'));
return self.parent.view.dataset._model.call('write', [[self.record_id], value, self.parent.view.dataset.get_context()]).done(self.reload_record.bind(self.parent));
}
},
reload_record: function(){
this.do_reload();
},
});
instance.web_kanban.dropdown_selection = instance.web_kanban.AbstractField.extend({
init: function(parent, field, $node) {
this._super.apply(this, arguments);
this.name = $node.attr('name')
this.parent = parent;
},
prepare_dropdown_selection: function(){
return [{ 'name': 'normal', 'state_name': ' In Progress', 'state_class': 'btn-default' },
{ 'name': 'blocked', 'state_name': ' Blocked', 'state_class': 'btn-danger' },
{ 'name': 'done', 'state_name': ' Ready', 'state_class': 'btn-success' }]
},
renderElement: function() {
var self = this;
self.record_id = self.parent.id;
var data = {'widget': self }
data['states'] = self.prepare_dropdown_selection();
var content = QWeb.render("dropdown_selection", data);
this.$el = $(content);
this.$el.find('.oe_legend').click(self.do_action.bind(self));
},
do_action: function(e){
var self = this;
var li = $(e.target).closest( "li" );
if (li.length){
var value = {};
value[self.name] = String(li.data('value'));
return self.parent.view.dataset._model.call('write', [[self.record_id], value, self.parent.view.dataset.get_context()]).done(self.reload_record.bind(self.parent));
}
},
reload_record: function(){
this.do_reload();
},
});
instance.web_kanban.fields_registry = new instance.web.Registry({});
instance.web_kanban.fields_registry.add('priority','instance.web_kanban.Legend');
instance.web_kanban.fields_registry.add('dropdown_selection','instance.web_kanban.Legend');
instance.web_kanban.fields_registry.add('priority','instance.web_kanban.priority');
instance.web_kanban.fields_registry.add('dropdown_selection','instance.web_kanban.dropdown_selection');
};
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: