odoo.define('board.dashboard', function (require) {
"use strict";
var ActionManager = require('web.ActionManager');
var core = require('web.core');
var data = require('web.data');
var Dialog = require('web.Dialog');
var FavoriteMenu = require('web.FavoriteMenu');
var form_common = require('web.form_common');
var Model = require('web.DataModel');
var pyeval = require('web.pyeval');
var ViewManager = require('web.ViewManager');
var data_manager = require('web.data_manager');
var _t = core._t;
var QWeb = core.qweb;
var DashBoard = form_common.FormWidget.extend({
events: {
'click .oe_dashboard_link_change_layout': 'on_change_layout',
'click h2.oe_header span.oe_header_txt': function (ev) {
if(ev.target === ev.currentTarget)
this.on_header_string($(ev.target).parent());
},
'click .oe_dashboard_column .oe_fold': 'on_fold_action',
'click .oe_dashboard_column .oe_close': 'on_close_action',
},
init: function(view, node) {
this._super(view, node);
this.form_template = 'DashBoard';
this.actions_attrs = {};
this.action_managers = [];
this.set_title = _t('My Dashboard');
},
start: function() {
var self = this;
this._super.apply(this, arguments);
this.$el.addClass('o_dashboard');
this.$('.oe_dashboard_column').sortable({
connectWith: '.oe_dashboard_column',
handle: '.oe_header',
scroll: false
}).bind('sortstop', self.do_save_dashboard);
var old_title = this.__parentedParent.get('title');
self.__parentedParent.set({ 'title': this.set_title});
this.__parentedParent.on('load_record', self, function(){
self.__parentedParent.set({ 'title': old_title});
});
// Init actions
_.each(this.node.children, function(column, column_index) {
_.each(column.children, function(action, action_index) {
delete(action.attrs.width);
delete(action.attrs.height);
delete(action.attrs.colspan);
var action_id = _.str.toNumber(action.attrs.name);
if (!_.isNaN(action_id)) {
self.rpc('/web/action/load', {action_id: action_id}).done(function(result) {
self.on_load_action(result, column_index + '_' + action_index, action.attrs);
});
}
});
});
},
on_header_string:function(h2){
var self = this;
var span = h2.find('span:first').hide();
var input = h2.find('.oe_header_text').css('visibility','visible');
var attr = h2.closest(".oe_action").data('action_attrs');
var change_string = function(new_name){
attr['string'] = new_name;
span.text(new_name).show();
input.css('visibility','hidden');
self.do_save_dashboard();
};
input.unbind()
.val(span.text())
.change(function(event){
change_string($(this).val());
})
.keyup(function(event){
if(event.keyCode == 27){
//esc key to cancel changes
input.css('visibility','hidden');
span.show();
}
});
},
on_change_layout: function() {
var self = this;
var qdict = {
current_layout : this.$el.find('.oe_dashboard').attr('data-layout')
};
var dialog = new Dialog(this, {
title: _t("Edit Layout"),
$content: QWeb.render('DashBoard.layouts', qdict)
}).open();
dialog.$el.find('li').click(function() {
var layout = $(this).attr('data-layout');
self.do_change_layout(layout);
dialog.close();
});
},
do_change_layout: function(new_layout) {
var $dashboard = this.$el.find('.oe_dashboard');
var current_layout = $dashboard.attr('data-layout');
if (current_layout != new_layout) {
var clayout = current_layout.split('-').length,
nlayout = new_layout.split('-').length,
column_diff = clayout - nlayout;
if (column_diff > 0) {
var $last_column = $();
$dashboard.find('.oe_dashboard_column').each(function(k, v) {
if (k >= nlayout) {
$(v).find('.oe_action').appendTo($last_column);
} else {
$last_column = $(v);
}
});
}
$dashboard.toggleClass('oe_dashboard_layout_' + current_layout + ' oe_dashboard_layout_' + new_layout);
$dashboard.attr('data-layout', new_layout);
this.do_save_dashboard();
}
},
on_fold_action: function(e) {
var $e = $(e.currentTarget),
$action = $e.parents('.oe_action:first'),
id = parseInt($action.attr('data-id'), 10);
if ($e.is('.oe_minimize')) {
$action.data('action_attrs').fold = '1';
} else {
delete($action.data('action_attrs').fold);
}
$e.toggleClass('oe_minimize oe_maximize');
$action.find('.oe_content').toggle();
this.do_save_dashboard();
},
on_close_action: function(e) {
if (confirm(_t("Are you sure you want to remove this item ?"))) {
var $container = $(e.currentTarget).parents('.oe_action:first');
var am = _.findWhere(this.action_managers, { am_id: $container.data('am_id') });
am.destroy();
this.action_managers.splice(_.indexOf(this.action_managers, am), 1);
$container.remove();
this.do_save_dashboard();
}
},
do_save_dashboard: function() {
var board = {
form_title : this.view.fields_view.arch.attrs.string,
style : this.$el.find('.oe_dashboard').attr('data-layout'),
columns : []
};
this.$el.find('.oe_dashboard_column').each(function() {
var actions = [];
$(this).find('.oe_action').each(function() {
var action_id = $(this).attr('data-id'),
new_attrs = _.clone($(this).data('action_attrs'));
if (new_attrs.domain) {
new_attrs.domain = new_attrs.domain_string;
delete(new_attrs.domain_string);
}
if (new_attrs.context) {
new_attrs.context = new_attrs.context_string;
delete(new_attrs.context_string);
}
actions.push(new_attrs);
});
board.columns.push(actions);
});
var arch = QWeb.render('DashBoard.xml', board);
this.rpc('/web/view/edit_custom', { // do not forward-port > saas-15
custom_id: this.view.fields_view.custom_view_id, // do not forward-port > saas-15
arch: arch
}).then(function() {
data_manager.invalidate();
});
},
on_load_action: function(result, index, action_attrs) {
var self = this,
action = result,
view_mode = action_attrs.view_mode;
if (!action) { return; }
// evaluate action_attrs context and domain
action_attrs.context_string = action_attrs.context;
action_attrs.context = pyeval.eval(
'context', action_attrs.context || {});
action_attrs.domain_string = action_attrs.domain;
action_attrs.domain = pyeval.eval(
'domain', action_attrs.domain || [], action_attrs.context);
if (action_attrs.context['dashboard_merge_domains_contexts'] === false) {
// TODO: replace this 6.1 workaround by attribute on