From f957344ff113a7f2021cde9c62337249b61bea03 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 25 Jan 2016 17:02:20 +0530 Subject: [PATCH] [fix] Ignore optional fields in frappe.copy_doc --- frappe/__init__.py | 22 +++++++++++----------- frappe/model/document.py | 6 ++++++ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 07bc368ecb..8d558220ff 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -822,34 +822,34 @@ def import_doc(path, ignore_links=False, ignore_insert=False, insert=False): def copy_doc(doc, ignore_no_copy=True): """ No_copy fields also get copied.""" import copy + from frappe.model import optional_fields, default_fields def remove_no_copy_fields(d): for df in d.meta.get("fields", {"no_copy": 1}): if hasattr(d, df.fieldname): d.set(df.fieldname, None) + fields_to_clear = ['name', 'owner', 'creation', 'modified', 'modified_by'] + if not isinstance(doc, dict): d = doc.as_dict() else: d = doc newdoc = get_doc(copy.deepcopy(d)) - - newdoc.name = None newdoc.set("__islocal", 1) - newdoc.owner = None - newdoc.creation = None - newdoc.amended_from = None - newdoc.amendment_date = None + for fieldname in (fields_to_clear + ['amended_from', 'amendment_date']): + newdoc.set(fieldname, None) + if not ignore_no_copy: remove_no_copy_fields(newdoc) - for d in newdoc.get_all_children(): - d.name = None - d.parent = None + for i, d in enumerate(newdoc.get_all_children()): d.set("__islocal", 1) - d.owner = None - d.creation = None + + for fieldname in fields_to_clear: + d.set(fieldname, None) + if not ignore_no_copy: remove_no_copy_fields(d) diff --git a/frappe/model/document.py b/frappe/model/document.py index 08b61baade..77e13e09a3 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -9,6 +9,7 @@ from frappe.model.base_document import BaseDocument, get_controller from frappe.model.naming import set_new_name from werkzeug.exceptions import NotFound, Forbidden import hashlib, json +from frappe.model import optional_fields # once_only validation # methods @@ -350,6 +351,11 @@ class Document(BaseDocument): for d in children: d._extract_images_from_text_editor() + if self.is_new(): + # don't set fields like _assign, _comments for new doc + for fieldname in optional_fields: + self.set(fieldname, None) + def validate_higher_perm_levels(self): """If the user does not have permissions at permlevel > 0, then reset the values to original / default""" if self.flags.ignore_permissions or frappe.flags.in_install: