// 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; } } });