fix: child table not getting updated

This commit is contained in:
Rucha Mahabal 2019-11-11 16:55:52 +05:30
parent 96d287bbd8
commit 7e3a3c3bd8
2 changed files with 30 additions and 25 deletions

View file

@ -198,44 +198,48 @@ def set_insert(update, producer_site, event_producer):
doc = frappe.get_doc(update.data)
check_doc_has_dependencies(doc, producer_site)
if update.use_same_name:
doc.insert(set_name=update.docname)
doc.insert(set_name=update.docname, set_child_names=False)
else:
#if event consumer is not saving documents with the same name as the producer
#store the remote docname in a custom field for future updates
local_doc = doc.insert()
local_doc = doc.insert(set_child_names=False)
set_custom_fields(local_doc, update.docname, event_producer)
def set_update(update, producer_site):
local_doc = get_local_doc(update)
if local_doc:
data = frappe._dict(update.data)
try:
if local_doc:
data = frappe._dict(update.data)
try:
if data.changed:
local_doc.update(data.changed)
local_doc.db_update_all()
if data.removed:
for tablename, rownames in iteritems(data.removed):
table = local_doc.get_table_field_doctype(tablename)
for row in rownames:
table = local_doc.get_table_field_doctype(tablename)
frappe.db.delete(table, row)
if data.added:
for tablename, rows in iteritems(data.added):
for row in rows:
local_doc.append(tablename, data.added)
local_doc.db_update()
if data.row_changed:
for tablename, rows in iteritems(data.row_changed):
for row in rows:
table = local_doc.get_table_field_doctype(tablename)
child_doc = frappe.get_doc(table, row.get('name'))
child_doc.update(row)
old = local_doc.get(tablename)
for doc in old:
for row in rows:
if row['name'] == doc.get('name'):
doc.update(row)
except Exception as e:
check_doc_has_dependencies(local_doc, producer_site)
if data.added:
for tablename, rows in iteritems(data.added):
local_doc.extend(tablename, rows)
for child in rows:
child_doc = frappe.get_doc(child)
child_doc.insert(set_name=child_doc.name, set_child_names=False)
local_doc.save()
local_doc.db_update_all()
except frappe.DoesNotExistError:
check_doc_has_dependencies(local_doc, producer_site)
def set_delete(update):
local_doc = get_local_doc(update)

View file

@ -191,7 +191,7 @@ class Document(BaseDocument):
frappe.flags.error_message = _('Insufficient Permission for {0}').format(self.doctype)
raise frappe.PermissionError
def insert(self, ignore_permissions=None, ignore_links=None, ignore_if_duplicate=False, ignore_mandatory=None, set_name=None):
def insert(self, ignore_permissions=None, ignore_links=None, ignore_if_duplicate=False, ignore_mandatory=None, set_name=None, set_child_names=True):
"""Insert the document in the database (as a new document).
This will check for user permissions and execute `before_insert`,
`validate`, `on_update`, `after_insert` methods if they are written.
@ -220,7 +220,7 @@ class Document(BaseDocument):
self.check_if_latest()
self.run_method("before_insert")
self._validate_links()
self.set_new_name(set_name=set_name)
self.set_new_name(set_name=set_name, set_child_names=set_child_names)
self.set_parent_in_children()
self.validate_higher_perm_levels()
@ -385,7 +385,7 @@ class Document(BaseDocument):
def get_doc_before_save(self):
return getattr(self, '_doc_before_save', None)
def set_new_name(self, force=False, set_name=None):
def set_new_name(self, force=False, set_name=None, set_child_names=True):
"""Calls `frappe.naming.se_new_name` for parent and child docs."""
if self.flags.name_set and not force:
return
@ -395,9 +395,10 @@ class Document(BaseDocument):
else:
set_new_name(self)
# set name for children
for d in self.get_all_children():
set_new_name(d)
if set_child_names:
# set name for children
for d in self.get_all_children():
set_new_name(d)
self.flags.name_set = True