// Local DB //----------- var locals = {}; var fields = {}; // fields[doctype][fieldname] var fields_list = {}; // fields_list[doctype] var LocalDB={}; var READ = 0; var WRITE = 1; var CREATE = 2; var SUBMIT = 3; var CANCEL = 4; var AMEND = 5; LocalDB.getchildren = function(child_dt, parent, parentfield, parenttype) { var l = []; for(var key in locals[child_dt]) { var d = locals[child_dt][key]; if((d.parent == parent)&&(d.parentfield == parentfield)) { if(parenttype) { if(d.parenttype==parenttype)l.push(d); } else { // ignore for now l.push(d); } } } l.sort(function(a,b){return (cint(a.idx)-cint(b.idx))}); return l; } // Add Doc // ====================================================================================== LocalDB.add=function(dt, dn) { if(!locals[dt]) locals[dt] = {}; if(locals[dt][dn]) delete locals[dt][dn]; locals[dt][dn] = {'name':dn, 'doctype':dt, 'docstatus':0}; return locals[dt][dn]; } // Delete Doc // ====================================================================================== LocalDB.delete_doc=function(dt, dn) { var doc = get_local(dt, dn); for(var ndt in locals) { // all doctypes if(locals[ndt]) { for(var ndn in locals[ndt]) { var doc = locals[ndt][ndn]; if(doc && doc.parenttype==dt && (doc.parent==dn||doc.__oldparent==dn)) { delete locals[ndt][ndn]; } } } } delete locals[dt][dn]; } function get_local(dt, dn) { return locals[dt] ? locals[dt][dn] : null; } // Sync Records from Server // ====================================================================================== LocalDB.sync = function(list) { if(list._kl)list = expand_doclist(list); for(var i=0;i0) { for(pl in perm) perm[pl][WRITE]=0; // read only } return perm; } // ====================================================================================== LocalDB.create = function(doctype, n) { if(!n) n = LocalDB.get_localname(doctype); var doc = LocalDB.add(doctype, n) doc.__islocal=1; doc.owner = user; LocalDB.set_default_values(doc); return 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; } // ====================================================================================== LocalDB.get_default_value = function(fn, ft, df) { if(df=='_Login' || df=='__user') return user; else if(df=='_Full Name') return user_fullname; else if(ft=='Date'&& (df=='Today' || df=='__today')) { return get_today(); } else if(df) return df; else if(user_defaults[fn]) return user_defaults[fn][0]; else if(sys_defaults[fn]) return sys_defaults[fn]; } // ====================================================================================== LocalDB.add_child = function(doc, childtype, parentfield) { // create row doc var n = LocalDB.create(childtype); var d = locals[childtype][n]; d.parent = doc.name; d.parentfield = parentfield; d.parenttype = doc.doctype; return d; } // ====================================================================================== LocalDB.no_copy_list = ['amended_from','amendment_date','cancel_reason']; LocalDB.copy=function(dt, dn, from_amend) { var newdoc = LocalDB.create(dt); for(var key in locals[dt][dn]) { if(key!=='name' && key.substr(0,2)!='__') { // dont copy name and blank fields locals[dt][newdoc][key] = locals[dt][dn][key]; } var df = get_field(dt, key); if(df && ((!from_amend && cint(df.no_copy)==1) || in_list(LocalDB.no_copy_list, df.fieldname))) { // blank out 'No Copy' locals[dt][newdoc][key]=''; } } return locals[dt][newdoc]; } // ====================================================================================== function make_doclist(dt, dn, deleted) { var dl = []; dl[0] = locals[dt][dn]; // get children for(var ndt in locals) { // all doctypes 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); } } } } return dl; } // Renaming notification list // ====================================================================================== var rename_observers = []; function notify_rename_observers(dt, old_name, new_name) { // delete from local try { var old = locals[dt][old_name]; old.parent = null; old.__deleted = 1; } catch(e) { alert("[rename_from_local] No Document for: "+ old_name); } // everyone who observers for(var i=0; i