diff --git a/frappe/desk/calendar.py b/frappe/desk/calendar.py index 2cf7a1c2d6..0ba81be0b6 100644 --- a/frappe/desk/calendar.py +++ b/frappe/desk/calendar.py @@ -9,6 +9,7 @@ import json @frappe.whitelist() def update_event(args, field_map): + """Updates Event (called via calendar) based on passed `field_map`""" args = frappe._dict(json.loads(args)) field_map = frappe._dict(json.loads(field_map)) w = frappe.get_doc(args.doctype, args.name) @@ -16,3 +17,18 @@ def update_event(args, field_map): w.set(field_map.end, args.get(field_map.end)) w.save() +def get_event_conditions(doctype, filters=None): + """Returns SQL conditions with user permissions and filters for event queries""" + from frappe.desk.reportview import build_match_conditions + if not frappe.has_permission(doctype): + frappe.throw(_("Not Permitted"), frappe.PermissionError) + + conditions = build_match_conditions(doctype) + conditions = conditions and (" and " + conditions) or "" + if filters: + filters = json.loads(filters) + for key in filters: + if filters[key]: + conditions += " and " + key + ' = "' + filters[key].replace('"', '\"') + '"' + + return conditions diff --git a/frappe/public/js/frappe/model/meta.js b/frappe/public/js/frappe/model/meta.js index d2497b2dbc..1e49ed0729 100644 --- a/frappe/public/js/frappe/model/meta.js +++ b/frappe/public/js/frappe/model/meta.js @@ -121,7 +121,8 @@ $.extend(frappe.meta, { if(fn==="owner") { return "Owner"; } else { - return this.get_docfield(dt, fn, dn).label || fn; + var df = this.get_docfield(dt, fn, dn); + return (df ? df.label : "") || fn; } }, diff --git a/frappe/public/js/frappe/views/calendar.js b/frappe/public/js/frappe/views/calendar.js index 7d19b15fc2..e0c0155227 100644 --- a/frappe/public/js/frappe/views/calendar.js +++ b/frappe/public/js/frappe/views/calendar.js @@ -124,6 +124,9 @@ frappe.views.Calendar = frappe.views.CalendarBase.extend({ "important": { "color": "#FFDCDC" }, + "danger": { + "color": "#FFDCDC" + }, "warning": { "color": "#FFE6BF", }, @@ -135,6 +138,9 @@ frappe.views.Calendar = frappe.views.CalendarBase.extend({ }, "inverse": { "color": "#D9F6FF" + }, + "": { + "color": "#F0F4F7" } }, get_system_datetime: function(date) { @@ -249,14 +255,12 @@ frappe.views.Calendar = frappe.views.CalendarBase.extend({ me.fix_end_date_for_event_render(d); - if(d.status) { - if(me.style_map) { - $.extend(d, me.styles[me.style_map[d.status]] || {}); - } else { - $.extend(d, me.styles[frappe.utils.guess_style(d.status, "standard")]); - } + if(me.get_css_class) { + $.extend(d, me.styles[me.get_css_class(d)] || {}); + } else if(me.style_map) { + $.extend(d, me.styles[me.style_map[d.status]] || {}); } else { - $.extend(d, me.styles["standard"]); + $.extend(d, me.styles[frappe.utils.guess_style(d.status, "standard")]); } d["textColor"] = "#36414C"; }) diff --git a/frappe/public/js/frappe/views/ganttview.js b/frappe/public/js/frappe/views/ganttview.js index 2d671f3da8..62f2b240fd 100644 --- a/frappe/public/js/frappe/views/ganttview.js +++ b/frappe/public/js/frappe/views/ganttview.js @@ -10,17 +10,19 @@ frappe.views.GanttFactory = frappe.views.Factory.extend({ frappe.require('assets/frappe/js/lib/jQuery.Gantt/css/style.css'); frappe.require('assets/frappe/js/lib/jQuery.Gantt/js/jquery.fn.gantt.js'); - frappe.model.with_doctype(route[1], function() { + this.doctype = route[1]; + + frappe.model.with_doctype(this.doctype, function() { var page = me.make_page(); $(page).on("show", function() { page.ganttview.set_filters_from_route_options(); }); var options = { - doctype: route[1], + doctype: me.doctype, parent: page }; - $.extend(options, frappe.views.calendar[route[1]] || {}); + $.extend(options, frappe.views.calendar[me.doctype] || {}); page.ganttview = new frappe.views.Gantt(options); }); @@ -47,10 +49,14 @@ frappe.views.Gantt = frappe.views.CalendarBase.extend({ function() { me.refresh(); }, "icon-refresh") this.page.add_field({fieldtype:"Date", label:"From", - fieldname:"start", "default": frappe.datetime.month_start(), input_css: {"z-index": 3}}); + fieldname:"start", "default": frappe.datetime.month_start(), + change: function() { me.refresh(); }, + input_css: {"z-index": 3}}); this.page.add_field({fieldtype:"Date", label:"To", - fieldname:"end", "default": frappe.datetime.month_end(), input_css: {"z-index": 3}}); + fieldname:"end", "default": frappe.datetime.month_end(), + change: function() { me.refresh(); }, + input_css: {"z-index": 3}}); this.add_filters(); this.wrapper = $("
").appendTo(this.page.main); @@ -98,6 +104,21 @@ frappe.views.Gantt = frappe.views.CalendarBase.extend({ // projects $.each(r.message, function(i,v) { + v["title"] = v[me.field_map["title"]]; + + // description + v.desc = v.title + + (v.name ? ("