},
load_kanban: function(data) {
this.fields_view = data;
+
+ // use default order if defined in xml description
+ var default_order = this.fields_view.arch.attrs.default_order,
+ unsorted = !this.dataset._sort.length;
+ if (unsorted && default_order) {
+ this.dataset.set_sort(default_order.split(','));
+ }
+
this.$el.addClass(this.fields_view.arch.attrs['class']);
this.$buttons = $(QWeb.render("KanbanView.buttons", {'widget': this}));
if (this.options.$buttons) {
case 'button':
case 'a':
var type = node.attrs.type || '';
- if (_.indexOf('action,object,edit,open,delete'.split(','), type) !== -1) {
+ if (_.indexOf('action,object,edit,open,delete,url'.split(','), type) !== -1) {
_.each(node.attrs, function(v, k) {
if (_.indexOf('icon,type,name,args,string,context,states,kanban_states'.split(','), k) != -1) {
node.attrs['data-' + k] = v;
}
}];
}
- if (node.tag == 'a') {
+ if (node.tag == 'a' && node.attrs['data-type'] != "url") {
node.attrs.href = '#';
} else {
node.attrs.type = 'button';
self.nb_records += records.length;
self.dataset.ids.push.apply(self.dataset.ids, dataset.ids);
groups_array[index] = new instance.web_kanban.KanbanGroup(self, records, group, dataset);
- if (!remaining--) {
+ if (self.dataset.index >= records.length){
self.dataset.index = self.dataset.size() ? 0 : null;
+ }
+ if (!remaining--) {
return self.do_add_groups(groups_array);
}
});
if(!self.nb_records) {
self.no_result();
}
+ self.trigger('kanban_groups_processed');
});
});
},
self.do_clear_groups();
self.dataset.read_slice(self.fields_keys.concat(['__last_update']), { 'limit': self.limit }).done(function(records) {
var kgroup = new instance.web_kanban.KanbanGroup(self, records, null, self.dataset);
+ if (!_.isEmpty(self.dataset.ids) && (self.dataset.index === null || self.dataset.index >= self.dataset.ids.length)) {
+ self.dataset.index = 0;
+ } else if (_.isEmpty(self.dataset.ids)){
+ self.dataset.index = null;
+ }
self.do_add_groups([kgroup]).done(function() {
if (_.isEmpty(records)) {
self.no_result();
}
+ self.trigger('kanban_dataset_processed');
def.resolve();
});
}).done(null, function() {
},
on_groups_started: function() {
var self = this;
- if (this.group_by) {
+ if (this.group_by || this.fields_keys.indexOf("sequence") !== -1) {
// Kanban cards drag'n'drop
- var prev_widget, is_folded, record;
- var $columns = this.$el.find('.oe_kanban_column .oe_kanban_column_cards, .oe_kanban_column .oe_kanban_folded_column_cards');
+ var prev_widget, is_folded, record, $columns;
+ if (this.group_by) {
+ $columns = this.$el.find('.oe_kanban_column .oe_kanban_column_cards, .oe_kanban_column .oe_kanban_folded_column_cards');
+ } else {
+ $columns = this.$el.find('.oe_kanban_column_cards');
+ }
$columns.sortable({
handle : '.oe_kanban_draghandle',
start: function(event, ui) {
stop: function(event, ui) {
var stop_index = ui.item.index();
if (start_index !== stop_index) {
- var $start_column = $('.oe_kanban_groups_records .oe_kanban_column').eq(start_index);
- var $stop_column = $('.oe_kanban_groups_records .oe_kanban_column').eq(stop_index);
+ var $start_column = self.$('.oe_kanban_groups_records .oe_kanban_column').eq(start_index);
+ var $stop_column = self.$('.oe_kanban_groups_records .oe_kanban_column').eq(stop_index);
var method = (start_index > stop_index) ? 'insertBefore' : 'insertAfter';
$start_column[method]($stop_column);
var tmp_group = self.groups.splice(start_index, 1)[0];
});
var am = instance.webclient.action_manager;
var form = am.dialog_widget.views.form.controller;
- form.on("on_button_cancel", am.dialog, am.dialog.close);
+ form.on("on_button_cancel", am.dialog, function() { return am.dialog.$dialog_box.modal('hide'); });
form.on('record_saved', self, function() {
- am.dialog.close();
+ am.dialog.$dialog_box.modal('hide');
self.view.do_reload();
});
},
var self = this;
this.setup_color_picker();
this.$el.find('[title]').each(function(){
- //in case of kanban, attach tooltip to the element itself
- //otherwise it might stay on screen when kanban view reload
- //since default container is body.
- //(when clicking on ready for next stage for example)
$(this).tooltip({
delay: { show: 500, hide: 0},
container: $(this),
* open on form/edit view : oe_kanban_global_click_edit
*/
on_card_clicked: function(ev) {
- if(this.$el.find('.oe_kanban_global_click_edit').size()>0)
+ if (this.$el.find('.oe_kanban_global_click').size() > 0 && this.$el.find('.oe_kanban_global_click').data('routing')) {
+ instance.web.redirect(this.$el.find('.oe_kanban_global_click').data('routing') + "/" + this.id);
+ }
+ else if (this.$el.find('.oe_kanban_global_click_edit').size()>0)
this.do_action_edit();
else
this.do_action_open();
var button_attrs = $action.data();
this.view.do_execute_action(button_attrs, this.view.dataset, this.id, this.do_reload);
},
+ do_action_url: function($action) {
+ return instance.web.redirect($action.attr("href"));
+ },
do_reload: function() {
var self = this;
this.view.dataset.read_ids([this.id], this.view.fields_keys.concat(['__last_update'])).done(function(records) {
*/
instance.web_kanban.QuickCreate = instance.web.Widget.extend({
template: 'KanbanView.quick_create',
-
+
/**
* close_btn: If true, the widget will display a "Close" button able to trigger
* a "close" event.
this.parent = parent;
},
prepare_priority: function() {
- var data = [];
+ var self = this;
var selection = this.field.selection || [];
- _.map(selection, function(res) {
- value = {
- 'name': res[0],
- 'legend_name': res[1]
+ var init_value = selection && selection[0][0] || 0;
+ var data = _.map(selection.slice(1), function(element, index) {
+ var value = {
+ 'value': element[0],
+ 'name': element[1],
+ 'click_value': element[0],
}
- if (res[0] == '0') {
- value['legend'] = '<span class="oe_e oe_star_off">7</span>';
- } else {
- value['legend'] = '<span class="oe_e oe_star_on">7</span>';
+ if (index == 0 && self.get('value') == element[0]) {
+ value['click_value'] = init_value;
}
- data.push(value)
+ return value;
});
return data;
},
renderElement: function() {
var self = this;
- self.record_id = self.parent.id;
- var data = {'widget': self }
- data['legends'] = self.prepare_priority();
- this.$el = $(QWeb.render("Priority", data));
- this.$el.find('.oe_legend').click(self.do_action.bind(self));
+ this.record_id = self.parent.id;
+ this.priorities = self.prepare_priority();
+ this.$el = $(QWeb.render("Priority", {'widget': this}));
+ this.$el.find('li').click(self.do_action.bind(self));
},
do_action: function(e) {
var self = this;
var li = $(e.target).closest( "li" );
if (li.length) {
var value = {};
- if (self.parent.val == li.data('value') && self.parent.check_star) {
- value[self.name] = String(li.data('value') - 1);
- self.parent.check_star = false
- } else {
- value[self.name] = String(li.data('value'));
- self.parent.check_star = true;
- }
- self.parent.val = li.data('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));
}
},
},
});
-instance.web_kanban.DropdownSelection = instance.web_kanban.AbstractField.extend({
+instance.web_kanban.KanbanSelection = 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() {
- var self = this;
var data = [];
- var selection = self.field.selection || [];
- _.map(selection, function(res) {
- var state_class;
- if (res[0] == 'normal')
- state_class = 'status'
- else if(res[0] == 'done')
- state_class = 'status ok'
- else
- state_class = 'status error'
- value = {
+ _.map(this.field.selection || [], function(res) {
+ var value = {
'name': res[0],
'tooltip': res[1],
'state_name': res[1],
- 'state_class': state_class
}
- data.push(value)
+ if (res[0] == 'normal') { value['state_class'] = 'oe_kanban_status'; }
+ else if (res[0] == 'done') { value['state_class'] = 'oe_kanban_status oe_kanban_status_green'; }
+ else { value['state_class'] = 'oe_kanban_status oe_kanban_status_red'; }
+ data.push(value);
});
return data;
},
renderElement: function() {
var self = this;
- self.record_id = self.parent.id;
- var data = {'widget': self }
- data['states'] = self.prepare_dropdown_selection();
- this.$el = $(QWeb.render("DropdownSelection", data));
- this.$el.find('.oe_legend').click(self.do_action.bind(self));
+ this.record_id = self.parent.id;
+ this.states = self.prepare_dropdown_selection();;
+ this.$el = $(QWeb.render("KanbanSelection", {'widget': self}));
+ this.$el.find('li').click(self.do_action.bind(self));
},
do_action: function(e) {
var self = this;
instance.web_kanban.fields_registry = new instance.web.Registry({});
instance.web_kanban.fields_registry.add('priority','instance.web_kanban.Priority');
-instance.web_kanban.fields_registry.add('dropdown_selection','instance.web_kanban.DropdownSelection');
+instance.web_kanban.fields_registry.add('kanban_state_selection','instance.web_kanban.KanbanSelection');
};
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: