diff --git a/js/legacy/model/doclist.js b/js/legacy/model/doclist.js index 598d437020..bc7a41351f 100644 --- a/js/legacy/model/doclist.js +++ b/js/legacy/model/doclist.js @@ -26,8 +26,8 @@ function compress_doclist(list) { var o = list[i]; var fl = []; if(!kl[o.doctype]) { // make key only once # doctype must be first - var tfl = ['doctype', 'name', 'docstatus', 'owner', 'parent', 'parentfield', 'parenttype', 'idx', 'creation', 'modified', 'modified_by', '__islocal', '__deleted','__newname', '__modified', '_user_tags']; // for text - var fl = ['doctype', 'name', 'docstatus', 'owner', 'parent', 'parentfield', 'parenttype', 'idx', 'creation', 'modified', 'modified_by', '__islocal', '__deleted','__newname', '__modified', '_user_tags']; // for unique + var tfl = ['doctype', 'name', 'docstatus', 'owner', 'parent', 'parentfield', 'parenttype', 'idx', 'creation', 'modified', 'modified_by', '__islocal', '__newname', '__modified', '_user_tags']; // for text + var fl = [].concat(tfl); for(key in wn.meta.docfield_map[o.doctype]) { // all other values if(!in_list(fl, key) diff --git a/js/legacy/model/local_data.js b/js/legacy/model/local_data.js index 03cafc6bc7..602113edcf 100644 --- a/js/legacy/model/local_data.js +++ b/js/legacy/model/local_data.js @@ -225,12 +225,7 @@ LocalDB.create = function(doctype, n) { // ====================================================================================== LocalDB.delete_record = function(dt, dn) { - var d = locals[dt][dn]; - if(!d.__islocal) // newly created (not required to tag) - d.__oldparent = d.parent; - d.parent = 'old_parent:' + d.parent; // should be .. - d.docstatus = 2; - d.__deleted = 1; + delete locals[dt][dn]; } // ====================================================================================== @@ -280,7 +275,7 @@ LocalDB.copy=function(dt, dn, from_amend) { // ====================================================================================== -function make_doclist(dt, dn, deleted) { +function make_doclist(dt, dn) { if(!locals[dt]) { return []; } var dl = []; dl[0] = locals[dt][dn]; @@ -290,9 +285,8 @@ function make_doclist(dt, dn, deleted) { if(locals[ndt]) { for(var ndn in locals[ndt]) { var doc = locals[ndt][ndn]; - if(doc && doc.parenttype==dt && (doc.parent==dn||(deleted&&doc.__oldparent==dn))) { - dl[dl.length]=doc; - //if(deleted&&(doc.__oldparent==dn))alert(doc.name+','+doc.__oldparent); + if(doc && doc.parenttype==dt && doc.parent==dn) { + dl.push(doc) } } } diff --git a/js/legacy/widgets/form/form.js b/js/legacy/widgets/form/form.js index a0b05e71d3..fc9814a956 100644 --- a/js/legacy/widgets/form/form.js +++ b/js/legacy/widgets/form/form.js @@ -1018,19 +1018,6 @@ _f.Frm.prototype.reload_doc = function() { // reload only doctype $c('webnotes.widgets.form.load.getdoctype', {'doctype':me.doctype }, ret_fn, null, null, 'Refreshing ' + me.doctype + '...'); } else { - // delete all unsaved rows - var gl = me.grids; - for(var i = 0; i < gl.length; i++) { - var dt = gl[i].df.options; - for(var dn in locals[dt]) { - if(locals[dt][dn].__islocal && locals[dt][dn].parent == me.docname) { - var d = locals[dt][dn]; - d.parent = ''; - d.docstatus = 2; - d.__deleted = 1; - } - } - } // reload doc and docytpe $c('webnotes.widgets.form.load.getdoc', {'name':me.docname, 'doctype':me.doctype, 'getdoctype':1, 'user':user}, ret_fn, null, null, 'Refreshing ' + me.docname + '...'); } diff --git a/js/legacy/widgets/form/form_grid.js b/js/legacy/widgets/form/form_grid.js index dc20c8ffde..4b06e3ab65 100644 --- a/js/legacy/widgets/form/form_grid.js +++ b/js/legacy/widgets/form/form_grid.js @@ -222,7 +222,7 @@ _f.FormGrid.prototype.check_selected = function() { _f.FormGrid.prototype.delete_row = function(dt, dn) { if(dt && dn) { LocalDB.delete_record(dt, dn); - this.refresh(); + this.refresh(); } else { if(!this.check_selected()) return; var r = _f.cur_grid_cell.row; diff --git a/js/legacy/widgets/form/grid.js b/js/legacy/widgets/form/grid.js index fac3a7d35b..db9763214a 100644 --- a/js/legacy/widgets/form/grid.js +++ b/js/legacy/widgets/form/grid.js @@ -215,7 +215,7 @@ _f.Grid.prototype.set_cell_value = function(cell) { // show static var hc = this.head_row.cells[cell.cellIndex]; - if(hc.fieldname) { + if(hc.fieldname && locals[hc.doctype][cell.row.docname]) { var v = locals[hc.doctype][cell.row.docname][hc.fieldname]; } else { var v = (cell.row.rowIndex + 1); // Index diff --git a/py/webnotes/model/doc.py b/py/webnotes/model/doc.py index 0b49788169..47c03870f0 100755 --- a/py/webnotes/model/doc.py +++ b/py/webnotes/model/doc.py @@ -515,7 +515,9 @@ class Document: # delete from db webnotes.conn.sql("""\ delete from `tab%s` - where name in ("%s")""" % (table_list[0].doctype, '", "'.join(delete_list))) + where parent=%s and parenttype=%s""" + % (table_list[0].doctype, '%s', '%s'), + (self.name, self.doctype)) self.fields['__unsaved'] = 1 diff --git a/py/webnotes/model/doclist.py b/py/webnotes/model/doclist.py index 43345e5704..5a8d014655 100644 --- a/py/webnotes/model/doclist.py +++ b/py/webnotes/model/doclist.py @@ -214,18 +214,24 @@ class DocList: """ Save Children, with the new parent name """ + child_map = {} + for d in self.children: - deleted, local = d.fields.get('__deleted',0), d.fields.get('__islocal',0) - - if cint(local) and cint(deleted): - pass - - elif d.fields.has_key('parent'): + if d.fields.has_key('parent'): if d.parent and (not d.parent.startswith('old_parent:')): d.parent = self.doc.name # rename if reqd d.parenttype = self.doc.doctype - d.save(new = cint(local)) + d.save(new = cint(d.fields.get('__islocal'))) + + child_map.setdefault(d.doctype, []).append(d.name) + + # delete all children in database that are not in the child_map + for dt in child_map: + cnames = child_map[dt] + webnotes.conn.sql("""delete from `tab%s` where parent=%s and parenttype=%s and + name not in (%s)""" % (dt, '%s', '%s', ','.join(['%s'] * len(cnames))), + tuple([self.doc.name, self.doc.doctype] + cnames), debug=1) def save(self, check_links=1): """