// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// MIT License. See license.txt
wn.provide("wn.views.calendar");
wn.views.GanttFactory = wn.views.Factory.extend({
make: function(route) {
var me = this;
wn.model.with_doctype(route[1], function() {
var page = me.make_page();
$(page).on("show", function() {
me.set_filters_from_route_options();
});
var options = {
doctype: route[1],
page: page
};
$.extend(options, wn.views.calendar[route[1]] || {});
page.ganttview = new wn.views.Gantt(options);
});
}
});
wn.views.Gantt = Class.extend({
init: function(opts) {
$.extend(this, opts);
wn.require('assets/webnotes/js/lib/jQuery.Gantt/css/style.css');
wn.require('assets/webnotes/js/lib/jQuery.Gantt/js/jquery.fn.gantt.js');
this.make_page();
wn.route_options ?
this.set_filters_from_route_options() :
this.refresh();
},
make_page: function() {
var module = locals.DocType[this.doctype].module,
me = this;
this.appframe = this.page.appframe;
this.appframe.set_title(wn._("Gantt Chart") + " - " + wn._(this.doctype));
this.appframe.add_module_icon(module)
this.appframe.set_views_for(this.doctype, "gantt");
this.appframe.set_title_right("Refresh",
function() { me.refresh(); }, "icon-refresh")
this.appframe.add_field({fieldtype:"Date", label:"From",
fieldname:"start", "default": wn.datetime.month_start(), input_css: {"z-index": 3}});
this.appframe.add_field({fieldtype:"Date", label:"To",
fieldname:"end", "default": wn.datetime.month_end(), input_css: {"z-index": 3}});
if(this.filters) {
$.each(this.filters, function(i, df) {
me.appframe.add_field(df);
return false;
});
}
},
refresh: function() {
var parent = $(this.page)
.find(".layout-main")
.empty()
.css('min-height', '300px')
.html('
Loading...
');
var me = this;
return wn.call({
method: this.get_events_method,
type: "GET",
args: {
doctype: this.doctype,
start: this.appframe.fields_dict.start.get_parsed_value(),
end: this.appframe.fields_dict.end.get_parsed_value(),
filters: this.get_filters()
},
callback: function(r) {
$(parent).empty();
if(!r.message || !r.message.length) {
$(parent).html('' + wn._('Nothing to show for this selection') + '
');
} else {
var gantt_area = $('').appendTo(parent);
gantt_area.gantt({
source: me.get_source(r),
navigate: "scroll",
scale: "days",
minScale: "hours",
maxScale: "months",
onItemClick: function(data) {
wn.set_route('Form', me.doctype, data.name);
},
onAddClick: function(dt, rowId) {
newdoc(me.doctype);
}
});
}
}
})
},
set_filter: function(doctype, value) {
var me = this;
if(this.filters) {
$.each(this.filters, function(i, df) {
if(df.options===value)
me.appframe.fields_dict[df.fieldname].set_input(value);
return false;
});
}
},
get_filters: function() {
var filter_vals = {},
me = this;
if(this.filters) {
$.each(this.filters, function(i, df) {
filter_vals[df.fieldname || df.label] =
me.appframe.fields_dict[df.fieldname || df.label].get_parsed_value();
});
}
return filter_vals;
},
get_source: function(r) {
var source = [],
me = this;
// projects
$.each(r.message, function(i,v) {
// standardize values
$.each(me.field_map, function(target, source) {
v[target] = v[source];
});
if(v.start && !v.end) {
v.end = new Date(v.start)
v.end.setHours(v.end.getHours() + 1);
}
if(v.start && v.end) {
source.push({
name: v.title,
desc: v.status,
values: [{
name: v.title,
desc: v.title + "
" + v.status,
from: '/Date("'+v.start+'")/',
to: '/Date("'+v.end+'")/',
customClass: {
'danger':'ganttRed',
'warning':'ganttOrange',
'info':'ganttBlue',
'success':'ganttGreen',
'':'ganttGray'
}[me.style_map ?
me.style_map[v.status] :
wn.utils.guess_style(v.status, "standard")],
dataObj: v
}]
})
}
});
return source
},
set_filters_from_route_options: function() {
var me = this;
if(wn.route_options) {
$.each(wn.route_options, function(k, value) {
if(me.appframe.fields_dict[k]) {
me.appframe.fields_dict[k].set_input(value);
me.refresh();
return false;
};
})
wn.route_options = null;
}
}
});