From d6206ed411c812aead75cb2b412703f7b6689ebd Mon Sep 17 00:00:00 2001 From: prssanna Date: Fri, 29 May 2020 16:50:31 +0530 Subject: [PATCH 1/4] fix: update assignemnts on merging docs --- frappe/model/rename_doc.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index 4491a352bc..24df3ab91b 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals, print_function import frappe +import json from frappe import _, bold from frappe.utils import cint from frappe.model.naming import validate_name @@ -56,6 +57,8 @@ def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=F if not merge: rename_parent_and_child(doctype, old, new, meta) + else: + update_assignments(old, new, doctype) # update link fields' values link_fields = get_link_fields(doctype) @@ -104,6 +107,27 @@ def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=F return new +def update_assignments(old, new, doctype): + old_assignments = frappe.parse_json(frappe.db.get_value(doctype, old, '_assign')) or [] + new_assignments = frappe.parse_json(frappe.db.get_value(doctype, new, '_assign')) or [] + common_assignments = list(set(old_assignments).intersection(new_assignments)) + + for user in common_assignments: + # delete todos linked to old doc + todos = frappe.db.get_all('ToDo', + { + 'owner': user, + 'reference_type': doctype, + 'reference_name': old, + }, + ['name', 'description'] + ) + + for todo in todos: + frappe.delete_doc('ToDo', todo.name) + + unique_assignments = list(set(old_assignments + new_assignments)) + frappe.db.set_value(doctype, new, '_assign', json.dumps(unique_assignments)) def update_user_settings(old, new, link_fields): ''' From 454a574d43782b5dd79e48633a4461241f351778 Mon Sep 17 00:00:00 2001 From: Prssanna Desai Date: Mon, 1 Jun 2020 12:19:04 +0530 Subject: [PATCH 2/4] fix: use frappe.as_json Co-authored-by: gavin --- frappe/model/rename_doc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index 24df3ab91b..f016b16d2b 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -127,7 +127,7 @@ def update_assignments(old, new, doctype): frappe.delete_doc('ToDo', todo.name) unique_assignments = list(set(old_assignments + new_assignments)) - frappe.db.set_value(doctype, new, '_assign', json.dumps(unique_assignments)) + frappe.db.set_value(doctype, new, '_assign', frappe.as_json(unique_assignments), indent=0) def update_user_settings(old, new, link_fields): ''' From f9b863706098c2a7658c617da4af004599e0254b Mon Sep 17 00:00:00 2001 From: prssanna Date: Mon, 1 Jun 2020 12:20:34 +0530 Subject: [PATCH 3/4] fix: remove unused import --- frappe/model/rename_doc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index 24df3ab91b..ce44b9f71f 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals, print_function import frappe -import json from frappe import _, bold from frappe.utils import cint from frappe.model.naming import validate_name From a7aefdfb88d7a702dc8e77c9d03a203847a60496 Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Mon, 1 Jun 2020 21:13:13 +0530 Subject: [PATCH 4/4] fix: Syntax error --- frappe/model/rename_doc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index 5b795f279b..1e3f127b99 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -126,7 +126,7 @@ def update_assignments(old, new, doctype): frappe.delete_doc('ToDo', todo.name) unique_assignments = list(set(old_assignments + new_assignments)) - frappe.db.set_value(doctype, new, '_assign', frappe.as_json(unique_assignments), indent=0) + frappe.db.set_value(doctype, new, '_assign', frappe.as_json(unique_assignments, indent=0)) def update_user_settings(old, new, link_fields): '''