feat: dependency syncing in update type operation of mapped doctypes
This commit is contained in:
parent
45cc2eb26d
commit
d19326f5df
3 changed files with 34 additions and 24 deletions
|
|
@ -33,7 +33,8 @@ class DocumentTypeMapping(Document):
|
|||
if doc.get(mapping.remote_fieldname):
|
||||
if mapping.mapping_type == 'Document':
|
||||
dependency = self.get_mapped_dependency(mapping, producer_site, doc.get(mapping.remote_fieldname), mapping.remote_fieldname)
|
||||
dependencies.append((mapping.local_fieldname, dependency))
|
||||
if dependency:
|
||||
dependencies.append((mapping.local_fieldname, dependency))
|
||||
|
||||
if mapping.mapping_type == 'Child Table' and update_type != 'Update':
|
||||
doc[mapping.local_fieldname] = get_mapped_child_table_docs(mapping.mapping, doc[mapping.remote_fieldname])
|
||||
|
|
@ -63,9 +64,13 @@ class DocumentTypeMapping(Document):
|
|||
def get_mapped_update(self, update, producer_site):
|
||||
update_diff = frappe._dict(json.loads(update.data))
|
||||
mapping = update_diff
|
||||
dependencies = []
|
||||
if update_diff.changed:
|
||||
mapped_doc = self.get_mapping(update_diff.changed, producer_site, 'Update').get('doc')
|
||||
doc_map = self.get_mapping(update_diff.changed, producer_site, 'Update')
|
||||
mapped_doc = doc_map.get('doc')
|
||||
mapping.changed = json.loads(mapped_doc)
|
||||
if doc_map.get('dependencies'):
|
||||
dependencies += doc_map.get('dependencies')
|
||||
|
||||
if update_diff.removed:
|
||||
mapping = self.map_row_removed(update_diff, mapping)
|
||||
|
|
@ -74,7 +79,10 @@ class DocumentTypeMapping(Document):
|
|||
if update_diff.row_changed:
|
||||
mapping = self.map_rows(update_diff, mapping, producer_site, operation='row_changed')
|
||||
|
||||
return frappe.as_json(mapping)
|
||||
update = {'doc': frappe.as_json(mapping)}
|
||||
if len(dependencies):
|
||||
update['dependencies'] = dependencies
|
||||
return update
|
||||
|
||||
def get_mapped_dependency(self, mapping, producer_site, dependent_field_val, dependent_field):
|
||||
inner_mapping = frappe.get_doc('Document Type Mapping', mapping.mapping)
|
||||
|
|
@ -87,9 +95,10 @@ class DocumentTypeMapping(Document):
|
|||
matching_docs = producer_site.get_doc(inner_mapping.remote_doctype, filters=filters)
|
||||
if len(matching_docs):
|
||||
remote_docname = matching_docs[0].get('name')
|
||||
remote_doc = producer_site.get_doc(inner_mapping.remote_doctype, remote_docname)
|
||||
doc = inner_mapping.get_mapping(remote_doc, producer_site, 'Insert').get('doc')
|
||||
return doc
|
||||
remote_doc = producer_site.get_doc(inner_mapping.remote_doctype, remote_docname)
|
||||
doc = inner_mapping.get_mapping(remote_doc, producer_site, 'Insert').get('doc')
|
||||
return doc
|
||||
return
|
||||
|
||||
def map_row_removed(self, update_diff, mapping):
|
||||
removed = []
|
||||
|
|
|
|||
|
|
@ -245,28 +245,28 @@ def set_insert(update, producer_site, event_producer):
|
|||
def set_update(update, producer_site):
|
||||
"""Sync update type update"""
|
||||
local_doc = get_local_doc(update)
|
||||
try:
|
||||
if local_doc:
|
||||
data = frappe._dict(update.data)
|
||||
if local_doc:
|
||||
data = frappe._dict(update.data)
|
||||
|
||||
if data.changed:
|
||||
local_doc.update(data.changed)
|
||||
if data.removed:
|
||||
update_row_removed(local_doc, data.removed)
|
||||
if data.row_changed:
|
||||
update_row_changed(local_doc, data.row_changed)
|
||||
if data.added:
|
||||
local_doc = update_row_added(local_doc, data.added)
|
||||
if data.changed:
|
||||
local_doc.update(data.changed)
|
||||
if data.removed:
|
||||
update_row_removed(local_doc, data.removed)
|
||||
if data.row_changed:
|
||||
update_row_changed(local_doc, data.row_changed)
|
||||
if data.added:
|
||||
local_doc = update_row_added(local_doc, data.added)
|
||||
|
||||
local_doc.save()
|
||||
local_doc.db_update_all()
|
||||
|
||||
except frappe.DoesNotExistError:
|
||||
if update.mapping:
|
||||
pass
|
||||
dependencies_created = sync_mapped_dependencies(update.dependencies, producer_site)
|
||||
for fieldname, value in iteritems(dependencies_created):
|
||||
local_doc.update({ fieldname : value })
|
||||
else:
|
||||
sync_dependencies(local_doc, producer_site)
|
||||
|
||||
local_doc.save()
|
||||
local_doc.db_update_all()
|
||||
|
||||
|
||||
def update_row_removed(local_doc, removed):
|
||||
"""Sync child table row deletion type update"""
|
||||
|
|
@ -444,7 +444,9 @@ def get_mapped_update(update, producer_site):
|
|||
update.data = mapped_update.get('doc')
|
||||
update.dependencies = mapped_update.get('dependencies', None)
|
||||
elif update.update_type == 'Update':
|
||||
update.data = mapping.get_mapped_update(update, producer_site)
|
||||
mapped_update = mapping.get_mapped_update(update, producer_site)
|
||||
update.data = mapped_update.get('doc')
|
||||
update.dependencies = mapped_update.get('dependencies', None)
|
||||
|
||||
update['ref_doctype'] = mapping.local_doctype
|
||||
return update
|
||||
|
|
|
|||
|
|
@ -199,7 +199,6 @@ class FrappeClient(object):
|
|||
|
||||
res = self.session.get(self.url + "/api/resource/" + doctype + "/" + name,
|
||||
params=params, verify=self.verify, headers=self.headers)
|
||||
print('==================res', res.text, filters)
|
||||
|
||||
return self.post_process(res)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue