Browse Source

[fix] Ignore optional fields in frappe.copy_doc

version-14
Anand Doshi 9 years ago
parent
commit
f957344ff1
2 changed files with 17 additions and 11 deletions
  1. +11
    -11
      frappe/__init__.py
  2. +6
    -0
      frappe/model/document.py

+ 11
- 11
frappe/__init__.py View File

@@ -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)



+ 6
- 0
frappe/model/document.py View File

@@ -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:


Loading…
Cancel
Save