@@ -33,7 +33,17 @@ class BaseDocument(object): | |||||
self.set("doctype", d.get("doctype")) | self.set("doctype", d.get("doctype")) | ||||
for key, value in d.iteritems(): | for key, value in d.iteritems(): | ||||
self.set(key, value) | self.set(key, value) | ||||
def update_if_missing(self, d): | |||||
if isinstance(d, BaseDocument): | |||||
d = d.get_valid_dict() | |||||
if "doctype" in d: | |||||
self.set("doctype", d.get("doctype")) | |||||
for key, value in d.iteritems(): | |||||
if self.get(key) is None: | |||||
self.set(key, value) | |||||
def get(self, key=None, filters=None, limit=None, default=None): | def get(self, key=None, filters=None, limit=None, default=None): | ||||
if key: | if key: | ||||
if isinstance(key, dict): | if isinstance(key, dict): | ||||
@@ -86,7 +96,7 @@ class BaseDocument(object): | |||||
raise ValueError | raise ValueError | ||||
def remove(self, doc): | def remove(self, doc): | ||||
self.get(doc.parentfield).remove(d) | |||||
self.get(doc.parentfield).remove(doc) | |||||
def _init_child(self, value, key): | def _init_child(self, value, key): | ||||
if not self.doctype: | if not self.doctype: | ||||
@@ -164,11 +174,6 @@ class BaseDocument(object): | |||||
if self.docstatus is not None: | if self.docstatus is not None: | ||||
self.docstatus = cint(self.docstatus) | self.docstatus = cint(self.docstatus) | ||||
def set_missing_values(self, d): | |||||
for key, value in d.get_valid_dict().iteritems(): | |||||
if self.get(key) is None: | |||||
self.set(key, value) | |||||
def _get_missing_mandatory_fields(self): | def _get_missing_mandatory_fields(self): | ||||
"""Get mandatory fields that do not have any values""" | """Get mandatory fields that do not have any values""" | ||||
@@ -29,7 +29,7 @@ class DocListController(Document): | |||||
if not doc: | if not doc: | ||||
doc = self | doc = self | ||||
df = self.meta.get_field(fieldname, parent=doc.doctype) | |||||
df = doc.meta.get_field(fieldname) | |||||
val1 = doc.get(fieldname) | val1 = doc.get(fieldname) | ||||
@@ -49,7 +49,7 @@ class DocListController(Document): | |||||
if doc.parentfield: | if doc.parentfield: | ||||
msg += _("Row") + (" # %d: " % doc.idx) | msg += _("Row") + (" # %d: " % doc.idx) | ||||
msg += _(self.meta.get_label(fieldname, parent=doc.doctype)) \ | |||||
msg += _(doc.meta.get_label(fieldname)) \ | |||||
+ " " + error_condition_map.get(condition, "") + " " + cstr(val2) | + " " + error_condition_map.get(condition, "") + " " + cstr(val2) | ||||
# raise passed exception or True | # raise passed exception or True | ||||
@@ -63,14 +63,14 @@ class DocListController(Document): | |||||
def round_floats_in(self, doc, fieldnames=None): | def round_floats_in(self, doc, fieldnames=None): | ||||
if not fieldnames: | if not fieldnames: | ||||
fieldnames = [df.fieldname for df in self.meta.get({"doctype": "DocField", "parent": doc.doctype, | |||||
"fieldtype": ["in", ["Currency", "Float"]]})] | |||||
fieldnames = [df.fieldname for df in doc.meta.get("fields", | |||||
{"fieldtype": ["in", ["Currency", "Float"]]})] | |||||
for fieldname in fieldnames: | for fieldname in fieldnames: | ||||
doc.set(fieldname, flt(doc.get(fieldname), self.precision(fieldname, doc.parentfield))) | doc.set(fieldname, flt(doc.get(fieldname), self.precision(fieldname, doc.parentfield))) | ||||
def precision(self, fieldname, parentfield=None): | def precision(self, fieldname, parentfield=None): | ||||
if not isinstance(parentfield, basestring): | |||||
if parentfield and not isinstance(parentfield, basestring): | |||||
parentfield = parentfield.parentfield | parentfield = parentfield.parentfield | ||||
if not hasattr(self, "_precision"): | if not hasattr(self, "_precision"): | ||||
@@ -78,9 +78,10 @@ class DocListController(Document): | |||||
"default": cint(frappe.db.get_default("float_precision")) or 3, | "default": cint(frappe.db.get_default("float_precision")) or 3, | ||||
"options": {} | "options": {} | ||||
}) | }) | ||||
if self._precision.setdefault(parentfield or "main", {}).get(fieldname) is None: | if self._precision.setdefault(parentfield or "main", {}).get(fieldname) is None: | ||||
df = self.meta.get_field(fieldname, parentfield=parentfield) | |||||
meta = frappe.get_meta(self.meta.get_field(parentfield).options if parentfield else self.doctype) | |||||
df = meta.get_field(fieldname) | |||||
if df.fieldtype == "Currency" and df.options and not self._precision.options.get(df.options): | if df.fieldtype == "Currency" and df.options and not self._precision.options.get(df.options): | ||||
self._precision.options[df.options] = get_field_precision(df, self) | self._precision.options[df.options] = get_field_precision(df, self) | ||||
@@ -222,7 +222,7 @@ class Document(BaseDocument): | |||||
return | return | ||||
new_doc = frappe.new_doc(self.doctype) | new_doc = frappe.new_doc(self.doctype) | ||||
self.set_missing_values(new_doc) | |||||
self.update_if_missing(new_doc) | |||||
# children | # children | ||||
for df in self.meta.get_table_fields(): | for df in self.meta.get_table_fields(): | ||||
@@ -230,7 +230,7 @@ class Document(BaseDocument): | |||||
value = self.get(df.fieldname) | value = self.get(df.fieldname) | ||||
if isinstance(value, list): | if isinstance(value, list): | ||||
for d in value: | for d in value: | ||||
d.set_missing_values(new_doc) | |||||
d.update_if_missing(new_doc) | |||||
def check_if_latest(self): | def check_if_latest(self): | ||||
conflict = False | conflict = False | ||||
@@ -14,7 +14,7 @@ def get_mapped_doc(from_doctype, from_docname, table_maps, target_doc=None, | |||||
source_doc = frappe.get_doc(from_doctype, from_docname) | source_doc = frappe.get_doc(from_doctype, from_docname) | ||||
if not ignore_permissions and not doc.has_permission("read"): | |||||
if not ignore_permissions and not source_doc.has_permission("read"): | |||||
frappe.msgprint("No Permission", raise_exception=frappe.PermissionError) | frappe.msgprint("No Permission", raise_exception=frappe.PermissionError) | ||||
# main | # main | ||||