diff --git a/frappe/desk/form/assign_to.py b/frappe/desk/form/assign_to.py index c1382750f6..0e38c66f39 100644 --- a/frappe/desk/form/assign_to.py +++ b/frappe/desk/form/assign_to.py @@ -41,34 +41,29 @@ def add(args=None): else: from frappe.utils import nowdate - - todo_doc = [] - for docname in get_docname_list(args): - if args.get("re_assign"): - remove_from_todo_if_already_assign(args['doctype'], docname) - - d = frappe.get_doc({ - "doctype":"ToDo", - "owner": args['assign_to'], - "reference_type": args['doctype'], - "reference_name": docname, - "description": args.get('description'), - "priority": args.get("priority", "Medium"), - "status": "Open", - "date": args.get('date', nowdate()), - "assigned_by": args.get('assigned_by', frappe.session.user), - }).insert(ignore_permissions=True) + if args.get("re_assign"): + remove_from_todo_if_already_assigned(args['doctype'], args['name']) - todo_doc.append(d) - # set assigned_to if field exists - if frappe.get_meta(args['doctype']).get_field("assigned_to"): - frappe.db.set_value(args['doctype'], docname, "assigned_to", args['assign_to']) + d = frappe.get_doc({ + "doctype":"ToDo", + "owner": args['assign_to'], + "reference_type": args['doctype'], + "reference_name": args['name'], + "description": args.get('description'), + "priority": args.get("priority", "Medium"), + "status": "Open", + "date": args.get('date', nowdate()), + "assigned_by": args.get('assigned_by', frappe.session.user), + }).insert(ignore_permissions=True) + + # set assigned_to if field exists + if frappe.get_meta(args['doctype']).get_field("assigned_to"): + frappe.db.set_value(args['doctype'], args['name'], "assigned_to", args['assign_to']) # notify if not args.get("no_notification"): - for d in todo_doc: - notify_assignment(d.assigned_by, d.owner, d.reference_type, d.reference_name, action='ASSIGN',\ + notify_assignment(d.assigned_by, d.owner, d.reference_type, d.reference_name, action='ASSIGN',\ description=args.get("description"), notify=args.get('notify')) if not args.get("bulk_assign"): @@ -76,25 +71,15 @@ def add(args=None): else: return {} -def get_docname_list(args=None): +def add_multiple(args=None): import json - docname_list = [] + docname_list = son.loads(args['name']) - if not args: - args = frappe.local.form_dict - - if isinstance(args['name'], basestring): - try: - docname_list = json.loads(args['name']) - except: - docname_list = [args['name']] - - elif isinstance(args['name'], list): - docname_list = args['name'] - - return docname_list - -def remove_from_todo_if_already_assign(doctype, docname): + for docname in docname_list: + args.update("name": docname) + add(args) + +def remove_from_todo_if_already_assigned(doctype, docname): owner = frappe.db.get_value("ToDo", {"reference_type": doctype, "reference_name": docname, "status":"Open"}, "owner") if owner: remove(doctype, docname, owner) diff --git a/frappe/public/js/frappe/form/footer/assign_to.js b/frappe/public/js/frappe/form/footer/assign_to.js index e2a6c32369..85dbde4b88 100644 --- a/frappe/public/js/frappe/form/footer/assign_to.js +++ b/frappe/public/js/frappe/form/footer/assign_to.js @@ -91,6 +91,7 @@ frappe.ui.form.AssignTo = Class.extend({ if(!me.dialog) { me.dialog = frappe.ui.to_do_dialog({ obj: me, + method: 'frappe.desk.form.assign_to.add' doctype: me.frm.doctype, docname: me.frm.docname, callback: function(r) { @@ -170,7 +171,7 @@ frappe.ui.add_assignment = function(opts, dialog) { var args = opts.obj.dialog.get_values(); if(args && assign_to) { return frappe.call({ - method:'frappe.desk.form.assign_to.add', + method: opts.method, args: $.extend(args, { doctype: opts.doctype, name: opts.docname, diff --git a/frappe/public/js/frappe/list/doclistview.js b/frappe/public/js/frappe/list/doclistview.js index 27aab27874..bdec7e3e78 100644 --- a/frappe/public/js/frappe/list/doclistview.js +++ b/frappe/public/js/frappe/list/doclistview.js @@ -434,6 +434,7 @@ frappe.views.DocListView = frappe.ui.Listing.extend({ if(docname.length >= 1){ me.dialog = frappe.ui.to_do_dialog({ obj: me, + method: 'frappe.desk.form.assign_to.add_multiple', doctype: me.doctype, docname: docname, bulk_assign: true,