| 
					
				 | 
			
			
				@@ -5,32 +5,39 @@ var dbController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     insert: function(controller){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(controller.tree.items.length === 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             controller.tree.maxNodeID(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            controller.insert(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            controller.tree.selected.jobs = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            controller.tree.selected.items = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            billsAjax.createBills(billsLibId, controller.tree.selected.getID(), -1 , -1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let newNodeId = controller.tree.newNodeID(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            billsAjax.createBills(billsLibId, newNodeId, -1 , -1, null, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                controller.insert(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                controller.tree.selected.jobs = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                controller.tree.selected.items = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var node = controller.tree.selected; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let node = controller.tree.selected; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(node){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var updateId = node.getID(), createpid = node.getParentID(), createnid = node.getNextSiblingID(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                controller.insert(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                controller.tree.selected.jobs = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                controller.tree.selected.items = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                billsAjax.createBills(billsLibId, node.getNextSiblingID(), createpid, createnid, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    billsAjax.updatePNId(billsLibId, [{ID: updateId, NextSiblingID: node.getNextSiblingID()}]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    rechargeController.createRecharge(controller.tree.selected); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let newNodeId = controller.tree.newNodeID(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let updatePreData = {ID: updateId, NextSiblingID: newNodeId}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                billsAjax.createBills(billsLibId, newNodeId, createpid, createnid, updatePreData, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.insert(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.tree.selected.jobs = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.tree.selected.items = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var updateNode = controller.tree.roots[controller.tree.roots.length - 1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var updateId = updateNode.getID(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                controller.insert(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                controller.tree.selected.jobs = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                controller.tree.selected.items = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                billsAjax.createBills(billsLibId, updateNode.getNextSiblingID(), -1, -1, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    billsAjax.updatePNId(billsLibId, [{ID: updateId, NextSiblingID: updateNode.getNextSiblingID()}]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    rechargeController.createRecharge(controller.tree.selected); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let updateNode = controller.tree.roots[controller.tree.roots.length - 1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let updateId = updateNode.getID(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let newNodeId = controller.tree.newNodeID(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let updatePreData = {ID: updateId, NextSiblingID: newNodeId}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                billsAjax.createBills(billsLibId, newNodeId, -1, -1, updatePreData, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.insert(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.tree.selected.jobs = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.tree.selected.items = new Array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -49,36 +56,38 @@ var dbController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //node 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(node){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(node.parent){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var updateA = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let updateA = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     ID: node.getID(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     ParentID: node.parent.getParentID(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     NextSiblingID: node.parent.getNextSiblingID() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 updateData.push(updateA); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //parent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var updateB = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let updateB = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     ID: node.getParentID(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     NextSiblingID: node.getID() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 updateData.push(updateB); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if(node.nextSibling){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     getNextSibling(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var updateC = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let updateC = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         ID: ids, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         ParentID: node.getID() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     updateData.push(updateC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if(node.preSibling){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var updateD = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let updateD = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         ID: node.preSibling.getID(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         NextSibingID: -1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     updateData.push(updateD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                billsAjax.updatePNId(billsLibId, updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                controller.upLevel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rechargeController.createRecharge(controller.tree.selected); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                billsAjax.updatePNId(billsLibId, updateData, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.upLevel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //rechargeController.createRecharge(controller.tree.selected); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -106,9 +115,11 @@ var dbController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     updateData.push(updateC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                billsAjax.updatePNId(billsLibId, updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                controller.downLevel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rechargeController.createRecharge(controller.tree.selected); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                billsAjax.updatePNId(billsLibId, updateData, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.downLevel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //rechargeController.createRecharge(controller.tree.selected); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -128,67 +139,80 @@ var dbController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         getDeleteIds(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        billsAjax.deleteBills(billsLibId, deleteIds, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(node.preSibling){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                billsAjax.updatePNId(billsLibId, [{ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID()}]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //controller.delete(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        tools.delteSheets(controller, totalJobs, totalItems, jobsSpread.getActiveSheet(), itemsSpread.getActiveSheet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //to solve refresh after deleted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let jobsSheet = jobsSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let itemsSheet = itemsSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(node){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let jobs = controller.tree.selected.jobs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            $('#exampleTextarea').val(controller.tree.selected.data.recharge); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            setSheet.setMaxRowCount(jobsSheet, jobs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(jobs.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                tools.reshowData(jobsSheet, jobs, jobsSetting, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orgJobData = jobsSheet.getValue(0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let updateNode = node.preSibling ? {ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID()} : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        billsAjax.deleteBills(billsLibId, deleteIds, updateNode, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            console.log(`entetcb`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            controller.delete(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //to solve refresh after deleted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let jobsSheet = jobsSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let itemsSheet = itemsSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let nowNode = controller.tree.selected ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(nowNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let jobs = controller.tree.selected.jobs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $('#exampleTextarea').val(controller.tree.selected.data.recharge); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setSheet.setMaxRowCount(jobsSheet, jobs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(jobs.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    tools.orderReshowData(jobsSheet, jobs, jobsSetting, 'job', false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    orgJobData = jobsSheet.getValue(0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let items = controller.tree.selected.items; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setSheet.setMaxRowCount(itemsSheet, items); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(items.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    tools.orderReshowData(itemsSheet, items, itemsSetting, 'item', false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    orgItemData = itemsSheet.getValue(0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sheetDatas = tools.getsheetDatas(jobsSheet, 'jobs'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let items = controller.tree.selected.items; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            setSheet.setMaxRowCount(itemsSheet, items); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(items.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                tools.reshowData(itemsSheet, items, itemsSetting, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                orgItemData = itemsSheet.getValue(0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tools.clearData(jobsSheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tools.clearData(itemsSheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $('#exampleTextarea').val(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sheetItemsDatas = tools.getsheetDatas(itemsSheet, 'items'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            tools.clearData(jobsSheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            tools.clearData(itemsSheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             sheetDatas = tools.getsheetDatas(jobsSheet, 'jobs'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             sheetItemsDatas = tools.getsheetDatas(itemsSheet, 'items'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //to solve refresh after deleted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //to solve refresh after deleted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     upMove: function(controller){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         var node = controller.tree.selected; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log(`nodeId ${node.getID()}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log(`preNode ${node.preSibling.getID()}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         var updateData = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(node){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //1 2 5 3 4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(node.preSibling){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var updateA = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let preNode = node.preSibling, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    nextNode = node.nextSibling, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    prePreNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let updateA = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     ID: node.preSibling.getID(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     NextSiblingID: node.getNextSiblingID() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var updateB = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                console.log(`update preNode: ID: ${updateA.ID} NextSiblingID: ${updateA.NextSiblingID}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let updateB = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     ID: node.getID(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     NextSiblingID: node.preSibling.getID() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                console.log(`update oprNode: ID: ${updateB.ID} NextSiblingID: ${updateB.NextSiblingID}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 updateData.push(updateA); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 updateData.push(updateB); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if(node.preSibling.preSibling){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var updateC = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    prePreNode = node.preSibling.preSibling; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let updateC = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         ID: node.preSibling.preSibling.getID(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         NextSiblingID: node.getID() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     updateData.push(updateC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                billsAjax.updatePNId(billsLibId, updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                controller.upMove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    console.log(`update prePreNode: ID: ${updateC.ID} NextSiblingID: ${updateC.NextSiblingID}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                /*billsAjax.updatePNId(billsLibId, updateData, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.upMove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                });*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                billsAjax.upMove(billsLibId, updateData, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    controller.upMove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -217,6 +241,7 @@ var dbController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 billsAjax.updatePNId(billsLibId, updateData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 controller.downMove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -233,6 +258,7 @@ var dbController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 billsAjax.updateBills(billsLibId, updateId, field, args.editingText); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 args.sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(''); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -390,15 +416,29 @@ var tools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     isRepeat: function(arr, field, newData, ref, classify){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         var isRepeat = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(arr){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            arr.forEach(function(item){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(ref === 'reference' && item[classify].data[field] == newData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    isRepeat = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else if(ref === 'document' && item[field] === newData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    isRepeat = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(classify){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(arr){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                arr.forEach(function(item){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(ref === 'reference' && item[classify].data[field] == newData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        isRepeat = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else if(ref === 'document' && item[field] === newData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        isRepeat = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(arr){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                arr.forEach(function(item){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(ref === 'reference' && item.data[field] == newData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        isRepeat = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else if(ref === 'document' && item[field] === newData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        isRepeat = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return isRepeat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -450,34 +490,109 @@ var tools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getValidDatas: function(sheet, setting, args){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let validDatas = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const colLen = 4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let i=orgRow; i<= maxRow; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(tools.getValidRow(sheet, i)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let validData = {code: '', name: '', unit: '', ruleText: ''}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for(var j=0; j<colLen; j++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let field; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    setting.cols.forEach(function(col, colIdx){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if(colIdx === j){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            field = col.data.field; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    validData[field] = sheet.getValue(i, j); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                validDatas.push(validData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return validDatas; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getValidRow: function(sheet, rowIdx){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const colCount = 4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let isValid = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let i=0; i< colCount; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(sheet.getValue(rowIdx, i, GC.Spread.Sheets.SheetArea.viewport)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                isValid = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return isValid; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getDelDatas: function(controller, totalJobs, totalItems){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let delJobs = controller.tree.selected.jobs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delItems = controller.tree.selected.items, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delJobsIds = [], delItemsIds = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(delJobs.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delJobs.forEach() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*delteSheets: function(controller, totalJobs, totalItems, jobsSheet, itemsSheet){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var delJobs = controller.tree.selected.jobs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var delItems = controller.tree.selected.items; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var delJobsIds = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var delItemsIds = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(delJobs.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delJobs.forEach(function(obj){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                obj.job.count --; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(obj.job.count <=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(obj), 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    delJobsIds.push(obj.job.data.id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jobsAjax.deleteJobContent(delJobsIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tools.clearData(jobsSheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tools.orderReshowData(jobsSheet, controller.tree.selected.jobs, jobsSetting, 'job', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(delItems.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delItems.forEach(function(obj){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                obj.item.count --; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(obj.item.count <=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(obj), 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    delItemsIds.push(obj.item.data.id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            itemsAjax.deleteItemCharacter(delItemsIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tools.clearData(itemsSheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tools.orderReshowData(itemsSheet, controller.tree.selected.items, itemsSetting, 'item', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        controller.delete(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    },*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     delteSheets: function(controller, totalJobs, totalItems, jobsSheet, itemsSheet){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         var delJobs = controller.tree.selected.jobs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         var delItems = controller.tree.selected.items; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         var delJobsIds = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         var delItemsIds = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(delJobs.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            delJobs.forEach(function(job){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                job.count --; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(job.count <=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(job), 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    delJobsIds.push(job.data.id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delJobs.forEach(function(obj){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                obj.job.count --; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(obj.job.count <=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(obj), 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    delJobsIds.push(obj.job.data.id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             jobsAjax.deleteJobContent(delJobsIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             tools.clearData(jobsSheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            tools.reshowData(jobsSheet, controller.tree.selected.jobs, jobsSetting, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tools.orderReshowData(jobsSheet, controller.tree.selected.jobs, jobsSetting, 'job', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(delItems.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            delItems.forEach(function(item){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                item.count --; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(item.count <=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(item), 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    delItemsIds.push(item.data.id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delItems.forEach(function(obj){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                obj.item.count --; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(obj.item.count <=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(obj), 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    delItemsIds.push(obj.item.data.id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             itemsAjax.deleteItemCharacter(delItemsIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             tools.clearData(itemsSheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            tools.reshowData(itemsSheet, controller.tree.selected.items, itemsSetting, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tools.orderReshowData(itemsSheet, controller.tree.selected.items, itemsSetting, 'item', true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         controller.delete(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -542,6 +657,7 @@ var tools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     orderReshowData: function(sheet, arr, setting, classify, isResort){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tools.clearData(sheet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(arr.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setSheet.setMaxRowCount(sheet, arr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(isResort){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 tools.resortSerialNo(arr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -657,7 +773,7 @@ var tools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return newArr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    getsheetDatas: function(sheet, classify){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getsheetDatas: function(sheet, classify, controller){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let rowCount = sheet.getRowCount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const colIdx = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let sheetDatas = []; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -677,6 +793,14 @@ var tools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else if(classify === 'bills'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for(let i= 0; i< controller.tree.items.length; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let code = sheet.getValue(i, 0), name = sheet.getValue(i, 1), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    unit = sheet.getValue(i, 2), ruleText = sheet.getValue(i, 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let data = {code: code, name: name, unit: unit, ruleText: ruleText, rowIdx: i}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sheetDatas.push(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for(let i=0; i<rowCount; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let data = sheet.getCell(i, colIdx).value(), id = sheet.getTag(i, colIdx); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -907,7 +1031,9 @@ var tools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         rebuildArr.forEach(function(data){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(data.type !== 'CreateT' && data.field === 'content' ){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let code = maxJobsNumber ++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                console.log(`!=CT&& content content: ${data.data}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                maxJobsNumber++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let code = maxJobsNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 data.code = code; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -962,7 +1088,8 @@ var tools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         rebuildArr.forEach(function(data){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(data.type !== 'CreateT' && data.field === 'content' ){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let code = maxItemsNumber ++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                maxItemsNumber ++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let code = maxItemsNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 data.code = code; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1250,9 +1377,11 @@ let pasteController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        setSheet.setMaxRowCount(sheet, totalJobs.jobsArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     pasteItemsFront: function(sheet, totalItems, datas){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log(`enterFront`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         const Update = 'Update', CreateT = 'CreateT'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(datas.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for(let i=0; i<datas.length; i++){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1285,6 +1414,7 @@ let pasteController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        setSheet.setMaxRowCount(sheet, totalItems.itemsArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1779,7 +1909,7 @@ var totalJobsController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     field = col.data.field; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            isRepeat = tools.isRepeat(totalJobs.jobsArr, field, newData, 'reference'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isRepeat = tools.isRepeat(totalJobs.jobsArr, field, newData, 'reference', null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(!tagId && !isRepeat && newData){//create 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 totalJobsController.createJob(sheet, totalJobs, field, newData, args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1800,26 +1930,27 @@ var totalJobsController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     createJob: function(sheet, totalJobs, field, newData, args){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(field === 'content'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             maxJobsNumber++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let id = maxJobsNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let code = tools.getNewCode(totalJobs, 'jobs'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            code++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            jobsAjax.createJobContent(billsLibId, newData, code, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var newJobData, newJob; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                newJobData = {id: id, content: newData, code: code}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let code = maxJobsNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jobsAjax.createJobContent(billsLibId, newData, code, function(newJobId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let newJobData, newJob; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                newJobData = {id: newJobId, content: newData, code: code}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 newJob = createObj.newJob(newJobData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 totalJobs.jobsArr.push(newJob); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                tools.reSetCell(sheet, args.row, 0, code, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tools.reSetCell(sheet, args.row, 0, code, newJobId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setSheet.setMaxRowCount(sheet, totalJobs.jobsArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(typeof newData === 'number'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 maxJobsNumber = maxJobsNumber >= newData ? maxJobsNumber : newData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let id = maxJobsNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                jobsAjax.createJobContent(billsLibId, '', newData, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    var newJobData, newJob; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    newJobData = {id: id, content: '', code: newData}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                jobsAjax.createJobContent(billsLibId, '', newData, function(newJobId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let newJobData, newJob; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    newJobData = {id: newJobId, content: '', code: newData}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     newJob = createObj.newJob(newJobData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     totalJobs.jobsArr.push(newJob); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    tools.reSetCell(sheet, args.row, 0, null, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    tools.reSetCell(sheet, args.row, 0, null, newJobId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    setSheet.setMaxRowCount(sheet, totalJobs.jobsArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //编号只能为数字! 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1857,7 +1988,7 @@ var totalItemsController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     console.log('colIdx' + colIdx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            isRepeat = tools.isRepeat(totalItems.itemsArr, field, newData, 'reference'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isRepeat = tools.isRepeat(totalItems.itemsArr, field, newData, 'reference', null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(!tagId && !isRepeat && newData){//create 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 totalItemsController.createItem(sheet, totalItems, field, newData, args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1878,28 +2009,29 @@ var totalItemsController = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     createItem: function(sheet, totalItems, field, newData, args){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(field === 'content'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             maxItemsNumber++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let id = maxItemsNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let code = tools.getNewCode(totalItems, 'items'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            code++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            itemsAjax.createItemCharacter(billsLibId, newData, code, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let code = maxItemsNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            itemsAjax.createItemCharacter(billsLibId, newData, code, function(newItemId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var newItemData, newItem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                newItemData = {id: id, content: newData, code: code, itemValue: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                newItemData = {id: newItemId, content: newData, code: code, itemValue: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 newItem = createObj.newItem(newItemData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 totalItems.itemsArr.push(newItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                totalItems.items[totalItems.prefix + id] = newItem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                tools.reSetCell(sheet, args.row, 0, code, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                totalItems.items[totalItems.prefix + newItemId] = newItem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tools.reSetCell(sheet, args.row, 0, code, newItemId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setSheet.setMaxRowCount(sheet, totalItems.itemsArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(typeof newData === 'number'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 maxItemsNumber = maxItemsNumber >= newData ? maxItemsNumber : newData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let id = maxItemsNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                itemsAjax.createItemCharacter(billsLibId, '', newData, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                itemsAjax.createItemCharacter(billsLibId, '', newData, function(newItemId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     var newItemData, newItem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    newItemData = {id: id, content: '', code: newData, itemValue: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    newItemData = {id: newItemId, content: '', code: newData, itemValue: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     newItem = createObj.newItem(newItemData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     totalItems.itemsArr.push(newItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     totalItems.items[totalItems.prefix + id] = newItem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    tools.reSetCell(sheet, args.row, 0, null, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    totalItems.items[totalItems.prefix + newItemId] = newItem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    tools.reSetCell(sheet, args.row, 0, null, newItemId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    setSheet.setMaxRowCount(sheet, totalItems.itemsArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //编号只能为数字 
			 |