def log_field_changes(new_dict, old_dict): ignored_fields = ["modified", "creation", "__onload"] for k, v in old_dict.iteritems(): if type(new_dict[k]) != type(old_dict[k]): new_dict[k] = str(new_dict[k]) old_dict[k] = str(old_dict[k]) if new_dict[k] != old_dict[k] and k not in ignored_fields: doc = { "doctype": get_analytics_doctype_name(old_dict['doctype']), "changed_doctype": new_dict['doctype'], "changed_doc_name": new_dict['name'], "fieldname": k, "old_value": old_dict[k], "new_value": new_dict[k], "modified_by_user": new_dict["modified_by"], "date": new_dict["modified"] } # can't save old/new value as list -> means child table. if type(doc['old_value']) is not list: make_doctype_maybe(doc['doctype']) history = Document(doc) history.insert() else: for idx, entry in enumerate(doc['old_value']): log_field_changes(doc['new_value'][idx], entry)
def sort_changed_field(doc): """ Gets changed field from doc hook, sorts into correct table, and removes doc from Frappe's Changed Fields table""" to_doctype_name = get_analytics_doctype_name(doc.changed_doctype) make_doctype_maybe(to_doctype_name) new_doc = Document(sanitize_document(doc, to_doctype_name)) new_doc.save() doc.delete()
def make_doc(new_dict, old_dict, k): doc = prep_doc(new_dict, old_dict, k) if type(doc['new_value']) is not list: make_doctype_maybe(doc['doctype']) history = Document(doc) history.insert() elif doc['old_value'] != None: for idx, entry in enumerate(doc['old_value']): log_field_changes(doc['new_value'][idx], entry)
def set_custom_permissions(self): '''Reset `permissions` with Custom DocPerm if exists''' if frappe.flags.in_patch or frappe.flags.in_install: return if not self.istable and self.name not in ('DocType', 'DocField', 'DocPerm', 'Custom DocPerm'): custom_perms = frappe.get_all('Custom DocPerm', fields='*', filters=dict(parent=self.name), update=dict(doctype='Custom DocPerm')) if custom_perms: self.permissions = [Document(d) for d in custom_perms]
def set_custom_permissions(self): """Reset `permissions` with Custom DocPerm if exists""" if frappe.flags.in_patch or frappe.flags.in_install: return if not self.istable and self.name not in ("DocType", "DocField", "DocPerm", "Custom DocPerm"): custom_perms = frappe.get_all( "Custom DocPerm", fields="*", filters=dict(parent=self.name), update=dict(doctype="Custom DocPerm"), ) if custom_perms: self.permissions = [Document(d) for d in custom_perms]
def test_doctype_link_resolve(self, get_meta, get_doc): # set test side effects get_meta.side_effect = build_get_meta_side_effects( [QUOTATION_META, CUSTOMER_META]) get_doc.side_effect = build_get_doc_side_effect([ Document({ "doctype": "Quotation", "name": "test-quotation", "customer_name": "test-customer" }), Document({ "doctype": "Customer", "name": "test-customer", "full_name": "Mr. Test Customer" }) ]) ctx = {"#VARS": {"doc": frappe.get_doc("Quotation", "test-quotation")}} full_name = resolve_expression( [CMD_VAR, "doc", "customer_name", "full_name"], ctx) get_doc.assert_called() get_meta.assert_called() self.assertTrue(full_name == "Mr. Test Customer")