@@ -26,8 +26,8 @@ function compress_doclist(list) { | |||||
var o = list[i]; | var o = list[i]; | ||||
var fl = []; | var fl = []; | ||||
if(!kl[o.doctype]) { // make key only once # doctype must be first | 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 | for(key in wn.meta.docfield_map[o.doctype]) { // all other values | ||||
if(!in_list(fl, key) | if(!in_list(fl, key) | ||||
@@ -225,12 +225,7 @@ LocalDB.create = function(doctype, n) { | |||||
// ====================================================================================== | // ====================================================================================== | ||||
LocalDB.delete_record = function(dt, dn) { | 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 []; } | if(!locals[dt]) { return []; } | ||||
var dl = []; | var dl = []; | ||||
dl[0] = locals[dt][dn]; | dl[0] = locals[dt][dn]; | ||||
@@ -290,9 +285,8 @@ function make_doclist(dt, dn, deleted) { | |||||
if(locals[ndt]) { | if(locals[ndt]) { | ||||
for(var ndn in locals[ndt]) { | for(var ndn in locals[ndt]) { | ||||
var doc = locals[ndt][ndn]; | 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) | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -1018,19 +1018,6 @@ _f.Frm.prototype.reload_doc = function() { | |||||
// reload only doctype | // reload only doctype | ||||
$c('webnotes.widgets.form.load.getdoctype', {'doctype':me.doctype }, ret_fn, null, null, 'Refreshing ' + me.doctype + '...'); | $c('webnotes.widgets.form.load.getdoctype', {'doctype':me.doctype }, ret_fn, null, null, 'Refreshing ' + me.doctype + '...'); | ||||
} else { | } 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 | // 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 + '...'); | $c('webnotes.widgets.form.load.getdoc', {'name':me.docname, 'doctype':me.doctype, 'getdoctype':1, 'user':user}, ret_fn, null, null, 'Refreshing ' + me.docname + '...'); | ||||
} | } | ||||
@@ -222,7 +222,7 @@ _f.FormGrid.prototype.check_selected = function() { | |||||
_f.FormGrid.prototype.delete_row = function(dt, dn) { | _f.FormGrid.prototype.delete_row = function(dt, dn) { | ||||
if(dt && dn) { | if(dt && dn) { | ||||
LocalDB.delete_record(dt, dn); | LocalDB.delete_record(dt, dn); | ||||
this.refresh(); | |||||
this.refresh(); | |||||
} else { | } else { | ||||
if(!this.check_selected()) return; | if(!this.check_selected()) return; | ||||
var r = _f.cur_grid_cell.row; | var r = _f.cur_grid_cell.row; | ||||
@@ -215,7 +215,7 @@ _f.Grid.prototype.set_cell_value = function(cell) { | |||||
// show static | // show static | ||||
var hc = this.head_row.cells[cell.cellIndex]; | 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]; | var v = locals[hc.doctype][cell.row.docname][hc.fieldname]; | ||||
} else { | } else { | ||||
var v = (cell.row.rowIndex + 1); // Index | var v = (cell.row.rowIndex + 1); // Index | ||||
@@ -515,7 +515,9 @@ class Document: | |||||
# delete from db | # delete from db | ||||
webnotes.conn.sql("""\ | webnotes.conn.sql("""\ | ||||
delete from `tab%s` | 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 | self.fields['__unsaved'] = 1 | ||||
@@ -214,18 +214,24 @@ class DocList: | |||||
""" | """ | ||||
Save Children, with the new parent name | Save Children, with the new parent name | ||||
""" | """ | ||||
child_map = {} | |||||
for d in self.children: | 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:')): | if d.parent and (not d.parent.startswith('old_parent:')): | ||||
d.parent = self.doc.name # rename if reqd | d.parent = self.doc.name # rename if reqd | ||||
d.parenttype = self.doc.doctype | 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): | def save(self, check_links=1): | ||||
""" | """ | ||||