|
@@ -236,19 +236,19 @@ var Bills = {
|
|
|
return this.tree.delete(node);
|
|
|
};
|
|
|
|
|
|
- bills.prototype.singleDeleteBills=function(node,controller){
|
|
|
+ bills.prototype.singleDeleteBills=function(node,controller){//只删除选中的分部,不删除其子项
|
|
|
let updateData = {};
|
|
|
let updateNode={};
|
|
|
+ let newParent=null;
|
|
|
let me = this;
|
|
|
if(node){
|
|
|
- updateData[node.data.ID]=true;
|
|
|
if(node.children.length>0){//有子项
|
|
|
if(node.preSibling){//有前兄弟,则子项变成前兄弟的子项
|
|
|
if(node.preSibling.children.length>0){//前兄弟有子项,
|
|
|
let preNode = node.preSibling.children[node.preSibling.children.length-1];
|
|
|
updateData[preNode.data.ID]={
|
|
|
NextSiblingID:node.children[0].data.ID
|
|
|
- }
|
|
|
+ };
|
|
|
updateNode[preNode.data.ID] = preNode;
|
|
|
}
|
|
|
for(let i=0;i<node.children.length;i++){
|
|
@@ -257,6 +257,7 @@ var Bills = {
|
|
|
};
|
|
|
updateNode[node.children[i].data.ID]=node.children[i];
|
|
|
}
|
|
|
+ newParent=node.preSibling;
|
|
|
}else {//没有前兄弟,则子项升一级
|
|
|
let parent = node.nextSibling.parent;
|
|
|
for(let i=0;i<node.children.length;i++){
|
|
@@ -272,10 +273,11 @@ var Bills = {
|
|
|
}
|
|
|
updateNode[node.children[i].data.ID]=node.children[i];
|
|
|
}
|
|
|
+ newParent=parent;
|
|
|
}
|
|
|
}
|
|
|
$.bootstrapLoading.start();
|
|
|
- CommonAjax.post("/bills/singleDelete", {updateData:updateData,projectID:node.data.projectID,user_id:userID}, function () {
|
|
|
+ CommonAjax.post("/bills/singleDelete", {updateData:updateData,projectID:node.data.projectID,user_id:userID,ID:node.data.ID}, function () {
|
|
|
controller.singleDelete();//删除树节点
|
|
|
me.tree.singleDelete(node);
|
|
|
//更新缓存
|
|
@@ -287,6 +289,7 @@ var Bills = {
|
|
|
updateNode[n_key].data[u_key] =updateDoc[u_key];
|
|
|
}
|
|
|
}
|
|
|
+ project.calcProgram.calcAndSave(newParent);
|
|
|
$.bootstrapLoading.end();
|
|
|
}, function () {
|
|
|
$.bootstrapLoading.end();
|
|
@@ -481,6 +484,137 @@ var Bills = {
|
|
|
return false;
|
|
|
}
|
|
|
};
|
|
|
+ bills.prototype.calcEngineeringCostNode=function(controller){
|
|
|
+ let roots = controller.tree.roots;
|
|
|
+ for(let root of roots){
|
|
|
+ if(project.Bills.isEngineeringCost(root)==true){
|
|
|
+ project.calcProgram.calcAndSave(root);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ bills.prototype.deleteSelectedNode=function(){//删除选中单行时的节点
|
|
|
+ let controller = projectObj.mainController, project = projectObj.project;
|
|
|
+ let selected = controller.tree.selected, parent = selected.parent;
|
|
|
+ if (selected) {
|
|
|
+ if (selected.sourceType === project.Bills.getSourceType()) {
|
|
|
+ if (cbTools.isUsedByFormula(selected)){
|
|
|
+ alert('该清单行被其它公式结点引用,不允许删除!');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ project.Bills.deleteBills(selected.source);
|
|
|
+ controller.delete();
|
|
|
+ } else if (selected.sourceType === project.Ration.getSourceType()) {
|
|
|
+ project.Ration.delete(selected.source);
|
|
|
+ controller.delete();
|
|
|
+ }else if(selected.sourceType==ModuleNames.ration_glj){
|
|
|
+ project.ration_glj.updataOrdelete(selected.source);
|
|
|
+ }
|
|
|
+ if(parent){
|
|
|
+ projectObj.converseCalculateBills(parent);
|
|
|
+ }else { //删除的是大项费用要重新计算工程造价节点
|
|
|
+ project.Bills.calcEngineeringCostNode(controller);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ bills.prototype.deleteSelectedNodes=function() {//删除选中多行时的节点
|
|
|
+ let controller = projectObj.mainController, project = projectObj.project;
|
|
|
+ let selected = controller.tree.selected, parent = selected.parent;
|
|
|
+ let me = this;
|
|
|
+ let idTreeMap = {};
|
|
|
+ let mainTreeMap = {};
|
|
|
+ let mainNodes = [];
|
|
|
+ let idTreeNodes=[];
|
|
|
+ let updateData={};
|
|
|
+ let selection = projectObj.mainSpread.getActiveSheet().getSelections()[0];
|
|
|
+ for(let i =0;i<selection.rowCount;i++){
|
|
|
+ let tem_node = controller.tree.items[selection.row+i];
|
|
|
+ if(i==0){//第一个直接添加;
|
|
|
+ mainTreeMap[tem_node.getID()] = tem_node;
|
|
|
+ mainNodes.push(tem_node);
|
|
|
+ if(tem_node.sourceType == project.Bills.getSourceType()){
|
|
|
+ idTreeMap[tem_node.source.getID()] = tem_node;
|
|
|
+ idTreeNodes.push(tem_node);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ this.setNodeToMapAndArray(tem_node,mainTreeMap,mainNodes);
|
|
|
+ if(tem_node.sourceType == project.Bills.getSourceType()){
|
|
|
+ this.setNodeToMapAndArray(tem_node,idTreeMap,idTreeNodes,true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let updateNodes = [];//需要删除的所有节点;
|
|
|
+ let billsUpdate={};
|
|
|
+ let rationUpdate = {};
|
|
|
+ let updateBill = false;
|
|
|
+ let updateRation = false;
|
|
|
+ for(let m_node of mainNodes){
|
|
|
+ if(m_node.sourceType == project.Bills.getSourceType()){
|
|
|
+ if(m_node.preSibling){
|
|
|
+ billsUpdate[m_node.preSibling.data.ID] = {
|
|
|
+ NextSiblingID:m_node.nextSibling?m_node.nextSibling.data.ID:-1
|
|
|
+ };
|
|
|
+ updateBill=true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ updateNodes.push(m_node);
|
|
|
+ controller.tree.getAllSubNode(m_node,updateNodes);
|
|
|
+ }
|
|
|
+ for(let u_node of updateNodes){
|
|
|
+ if(u_node.sourceType == project.Bills.getSourceType()){
|
|
|
+ billsUpdate[u_node.data.ID] = true;
|
|
|
+ updateBill=true;
|
|
|
+ }
|
|
|
+ if(u_node.sourceType == project.Ration.getSourceType()){
|
|
|
+ rationUpdate[u_node.data.ID] = true;
|
|
|
+ updateRation = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ updateBill==true?updateData['bills']=billsUpdate:'';
|
|
|
+ updateRation==true?updateData['ration']=rationUpdate:'';
|
|
|
+ updateData.projectID = selected.data.projectID;
|
|
|
+ updateData.user_id = userID;
|
|
|
+ $.bootstrapLoading.start();
|
|
|
+ CommonAjax.post("/bills/multiDelete", updateData, function () {
|
|
|
+ controller.m_delete(mainNodes);//删除树节点
|
|
|
+ me.tree.m_delete(idTreeNodes);
|
|
|
+
|
|
|
+ /* //更新缓存
|
|
|
+ console.log(updateNode);
|
|
|
+ _.remove(me.datas,{'ID':node.data.ID});
|
|
|
+ for(let n_key in updateNode){
|
|
|
+ let updateDoc = updateData[n_key];
|
|
|
+ for(let u_key in updateDoc){
|
|
|
+ updateNode[n_key].data[u_key] =updateDoc[u_key];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ project.calcProgram.calcAndSave(newParent);*/
|
|
|
+ $.bootstrapLoading.end();
|
|
|
+ }, function () {
|
|
|
+ $.bootstrapLoading.end();
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ };
|
|
|
+ bills.prototype.setNodeToMapAndArray=function (node,map,array,billType) {
|
|
|
+ let nodeID = billType ==true?node.source.getID():node.getID();
|
|
|
+ if(map[nodeID]==undefined||map[nodeID]==null){
|
|
|
+ newMap(node,node.parent,map,array)
|
|
|
+ }
|
|
|
+ function newMap(node,parent,map,array) {
|
|
|
+ let nodeID = billType ==true?node.source.getID():node.getID();
|
|
|
+ if(parent==null){//说明已经是最顶层了
|
|
|
+ map[nodeID]=node;
|
|
|
+ array.push(node);
|
|
|
+ }else {
|
|
|
+ let parentID = billType == true?parent.source.getID():parent.getID();
|
|
|
+ if(map[parentID]==undefined||map[parentID]==null){
|
|
|
+ newMap(node,parent.parent,map,array);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
return new bills(project);
|
|
|
}
|
|
|
};
|