From 748cac0d99c0d1aeec1c40dc7fe743f243a1ce79 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 14 Aug 2015 12:19:35 +0530 Subject: [PATCH] [enhancement] added 'assigned by me' in todo list --- frappe/desk/doctype/todo/todo_list.js | 20 +++++++++++++++++++ frappe/desk/form/meta.py | 15 +++++++++++--- frappe/public/css/form.css | 4 ++++ .../public/js/frappe/form/footer/assign_to.js | 2 ++ frappe/public/js/frappe/list/doclistview.js | 5 +++++ .../public/js/frappe/list/list_sidebar.html | 4 +++- frappe/public/js/frappe/list/list_sidebar.js | 14 ++++++++++++- frappe/public/js/frappe/ui/page.js | 15 ++++++++++++++ frappe/public/less/form.less | 5 +++++ 9 files changed, 79 insertions(+), 5 deletions(-) diff --git a/frappe/desk/doctype/todo/todo_list.js b/frappe/desk/doctype/todo/todo_list.js index 3bf70ec9f9..192057eb4e 100644 --- a/frappe/desk/doctype/todo/todo_list.js +++ b/frappe/desk/doctype/todo/todo_list.js @@ -5,6 +5,26 @@ frappe.listview_settings['ToDo'] = { "status": "Open" }; me.page.set_title(__("To Do")); + + }, + refresh: function(me) { + // override assigned to me by owner + me.page.sidebar.find(".assigned-to-me a").off("click").on("click", function() { + var assign_filter = me.filter_list.get_filter("assigned_by"); + assign_filter && assign_filter.remove(true); + + me.filter_list.add_filter(me.doctype, "owner", '=', user); + me.run(); + }); + + // add assigned by me + me.page.add_sidebar_item(__("Assigned By Me"), function() { + var assign_filter = me.filter_list.get_filter("owner"); + assign_filter && assign_filter.remove(true); + + me.filter_list.add_filter(me.doctype, "assigned_by", '=', user); + me.run(); + }, ".assigned-to-me"); }, add_fields: ["reference_type", "reference_name"], } diff --git a/frappe/desk/form/meta.py b/frappe/desk/form/meta.py index c993dce046..e0c03753db 100644 --- a/frappe/desk/form/meta.py +++ b/frappe/desk/form/meta.py @@ -121,7 +121,14 @@ class FormMeta(Meta): df.search_fields = map(lambda sf: sf.strip(), search_fields.split(",")) def add_linked_with(self): - """add list of doctypes this doctype is 'linked' with""" + """add list of doctypes this doctype is 'linked' with. + + Example, for Customer: + + {"Address": {"fieldname": "customer"}..} + """ + + # find fields where this doctype is linked links = frappe.db.sql("""select parent, fieldname from tabDocField where (fieldtype="Link" and options=%s) or (fieldtype="Select" and options=%s)""", (self.name, "link:"+ self.name)) @@ -137,15 +144,17 @@ class FormMeta(Meta): ret[dt] = { "fieldname": links[dt] } if links: - for grand_parent, options in frappe.db.sql("""select parent, options from tabDocField + # find out if linked in a child table + for parent, options in frappe.db.sql("""select parent, options from tabDocField where fieldtype="Table" and options in (select name from tabDocType where istable=1 and name in (%s))""" % ", ".join(["%s"] * len(links)) ,tuple(links)): - ret[grand_parent] = {"child_doctype": options, "fieldname": links[options] } + ret[parent] = {"child_doctype": options, "fieldname": links[options] } if options in ret: del ret[options] + # find links of parents links = frappe.db.sql("""select dt from `tabCustom Field` where (fieldtype="Table" and options=%s)""", (self.name)) links += frappe.db.sql("""select parent from tabDocField diff --git a/frappe/public/css/form.css b/frappe/public/css/form.css index a85f9ae799..63db368199 100644 --- a/frappe/public/css/form.css +++ b/frappe/public/css/form.css @@ -157,3 +157,7 @@ select.form-control { -moz-appearance: none; appearance: none; } +.form-control.bold { + font-weight: bold; + background-color: #fffce7; +} diff --git a/frappe/public/js/frappe/form/footer/assign_to.js b/frappe/public/js/frappe/form/footer/assign_to.js index ea7af7ed7e..8df3b19914 100644 --- a/frappe/public/js/frappe/form/footer/assign_to.js +++ b/frappe/public/js/frappe/form/footer/assign_to.js @@ -120,8 +120,10 @@ frappe.ui.form.AssignTo = Class.extend({ me.dialog.get_input("myself").on("click", function() { if($(this).prop("checked")) { me.dialog.set_value("assign_to", user); + me.dialog.set_value("notify", 0); } else { me.dialog.set_value("assign_to", ""); + me.dialog.set_value("notify", 1); } }); }, diff --git a/frappe/public/js/frappe/list/doclistview.js b/frappe/public/js/frappe/list/doclistview.js index 2f1109b525..0fb4b59522 100644 --- a/frappe/public/js/frappe/list/doclistview.js +++ b/frappe/public/js/frappe/list/doclistview.js @@ -216,6 +216,11 @@ frappe.views.DocListView = frappe.ui.Listing.extend({ refresh: function() { var me = this; this.init_stats(); + + if(this.listview.settings.refresh) { + this.listview.settings.refresh(this); + } + if(frappe.route_options) { me.set_route_options(); } else if(me.dirty) { diff --git a/frappe/public/js/frappe/list/list_sidebar.html b/frappe/public/js/frappe/list/list_sidebar.html index 57ef1cff6b..f254d52698 100644 --- a/frappe/public/js/frappe/list/list_sidebar.html +++ b/frappe/public/js/frappe/list/list_sidebar.html @@ -6,7 +6,9 @@
  • {%= __("Report") %}
  • -
  • {%= __("Assigned To Me") %}
  • +
  • + {%= __("Assigned To Me") %} +
  • {% if(frappe.help.has_help(doctype)) { %}
  • {{ __("Help") }}
  • {% } %} diff --git a/frappe/public/js/frappe/list/list_sidebar.js b/frappe/public/js/frappe/list/list_sidebar.js index 9dbc5bf70a..296dac87bf 100644 --- a/frappe/public/js/frappe/list/list_sidebar.js +++ b/frappe/public/js/frappe/list/list_sidebar.js @@ -12,8 +12,8 @@ frappe.provide('frappe.views'); frappe.views.ListSidebar = Class.extend({ init: function(opts) { $.extend(this, opts); - this.get_stats(); this.make(); + this.get_stats(); }, make: function() { var sidebar_content = frappe.render_template("list_sidebar", {doctype: this.doclistview.doctype}); @@ -25,10 +25,22 @@ frappe.views.ListSidebar = Class.extend({ this.sidebar = this.page_sidebar.add(this.offcanvas_list_sidebar); + this.setup_assigned_to_me(); + if(frappe.views.calendar[this.doctype]) { this.sidebar.find(".calendar-link, .gantt-link").removeClass("hide"); } }, + setup_assigned_to_me: function() { + var me = this; + this.page.sidebar.find(".assigned-to-me a").on("click", function() { + me.doclistview.assigned_to_me(); + }); + + this.offcanvas_list_sidebar.find(".assigned-to-me a").on("click", function() { + me.doclistview.assigned_to_me(); + }); + }, get_stats: function() { var me = this return frappe.call({ diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js index 6e23e7ca6c..ddcabd34ff 100644 --- a/frappe/public/js/frappe/ui/page.js +++ b/frappe/public/js/frappe/ui/page.js @@ -232,6 +232,21 @@ frappe.ui.Page = Class.extend({ .on("click", action).appendTo(this.inner_toolbar.removeClass("hide")) }, + //-- Sidebar --// + + add_sidebar_item: function(label, action, insert_after) { + var parent = this.sidebar.find(".sidebar-menu.standard-actions"); + var li = $('
  • '); + var link = $('').html(label).on("click", action).appendTo(li); + + if(insert_after) { + li.insertAfter(parent.find(insert_after)); + } else { + li.appendTo(parent); + } + return link; + }, + //---// clear_user_actions: function() { diff --git a/frappe/public/less/form.less b/frappe/public/less/form.less index a60dcf3c4a..917fdb16d1 100644 --- a/frappe/public/less/form.less +++ b/frappe/public/less/form.less @@ -204,3 +204,8 @@ select.form-control { -moz-appearance: none; appearance: none; } + +.form-control.bold { + font-weight: bold; + background-color: @light-yellow; +}