Browse Source

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

chenshilong 7 years ago
parent
commit
0c87a265bd

+ 2 - 1
modules/ration_glj/facade/glj_calculate_facade.js

@@ -103,7 +103,7 @@ async function calculateQuantityPerGLJ(glj,index,coeList,assList,adjustState,noN
         if(noNeedCal==null){
             if(!glj._doc.hasOwnProperty('customQuantity')||glj.customQuantity==null||glj.customQuantity==""){
                 quantity =scMathUtil.roundTo(parseFloat(glj.rationItemQuantity),-decimal);
-                quantity =calculateAss(quantity,assList,glj);
+                quantity =scMathUtil.roundTo(calculateAss(quantity,assList,glj),-decimal);
                 quantity = calculateQuantityByCoes(quantity,coeList,glj);
             }else {
                 quantity = glj.customQuantity;
@@ -111,6 +111,7 @@ async function calculateQuantityPerGLJ(glj,index,coeList,assList,adjustState,noN
             }
             let customerCoe = _.last(coeList);
             if(customerCoe&&customerCoe.isAdjust==1){
+                quantity = scMathUtil.roundToString(quantity,decimal);
                 quantity = calculateQuantityByCustomerCoes(quantity,customerCoe,glj);
             }
             result.doc.quantity =scMathUtil.roundToString(quantity,decimal);

+ 20 - 5
modules/ration_glj/facade/ration_glj_facade.js

@@ -176,11 +176,14 @@ async function getInfoFromProjectGLJ(ration_glj) {
     try {
         let projectGljModel = new GLJListModel();
         let result = await projectGljModel.addList(data);
+        let typeString = result.type+"";
         ration_glj.marketPrice = result.unit_price.market_price;
         ration_glj.adjustPrice = result.unit_price.base_price;
         ration_glj.basePrice = result.unit_price.base_price;
         ration_glj.projectGLJID = result.id;
-        ration_glj.isEstimate = result.is_evaluate;
+        if (typeString.startsWith("2")||typeString=='4'||typeString=='5') {//只有材料类型才显示是否暂估
+            ration_glj.isEstimate = result.is_evaluate;
+        }
         if (result.hasOwnProperty('subList') && result.subList.length > 0) {
             ration_glj.subList = getMixRatioShowDatas(result.subList);
         }
@@ -591,12 +594,15 @@ async function addGLJ(rgList) {
     for (let g of rgList) {
         let projectGljModel = new GLJListModel();
         let result = await projectGljModel.addList(getGLJSearchInfo(g));
+        let typeString = result.type+'';
         g.marketPrice = result.unit_price.market_price;
         g.adjustPrice = result.unit_price.base_price;
         g.basePrice = result.unit_price.base_price;
         g.isAdd = result.unit_price.is_add;
         g.projectGLJID = result.id;
-        g.isEstimate = result.is_evaluate;
+        if (typeString.startsWith("2")||typeString=='4'||typeString=='5') {//只有材料类型才显示是否暂估
+            g.isEstimate = result.is_evaluate;
+        }
         g.ID = uuidV1();
         if (result.hasOwnProperty('subList') && result.subList.length > 0) {
             g.subList = getMixRatioShowDatas(result.subList);
@@ -621,6 +627,7 @@ async function replaceGLJ(data) {
     let rdata = {};
     let projectGljModel = new GLJListModel();
     let result = await projectGljModel.addList(getGLJSearchInfo(data));
+    let typeString = result.type+'';
     data.projectGLJID = result.id;
     let updateResult = await ration_glj.findOneAndUpdate({ID: data.ID, projectID: data.projectID}, data);//更新定额工料机
     //组装回传数据
@@ -628,7 +635,9 @@ async function replaceGLJ(data) {
     data.adjustPrice = result.unit_price.base_price;
     data.basePrice = result.unit_price.base_price;
     data.isAdd = result.unit_price.is_add;
-    data.isEstimate = result.is_evaluate;
+    if (typeString.startsWith("2")||typeString=='4'||typeString=='5') {//只有材料类型才显示是否暂估
+        data.isEstimate = result.is_evaluate;
+    }
     if (result.hasOwnProperty('subList') && result.subList.length > 0) {
         data.subList = getMixRatioShowDatas(result.subList);
     }
@@ -644,6 +653,7 @@ async function mReplaceGLJ(data) {
     let mresult = {};
     let projectGljModel = new GLJListModel();
     let result = await projectGljModel.addList(getGLJSearchInfo(data.doc));
+    let typeString = result.type+'';
     data.doc.projectGLJID = result.id;
     let rationList = await ration_glj.distinct('rationID', data.query);
     let updateResult = await ration_glj.update(data.query, data.doc, {multi: true});
@@ -652,7 +662,9 @@ async function mReplaceGLJ(data) {
     data.doc.adjustPrice = result.unit_price.base_price;
     data.doc.basePrice = result.unit_price.base_price;
     data.doc.isAdd = result.unit_price.is_add;
-    data.doc.isEstimate = result.is_evaluate;
+    if (typeString.startsWith("2")||typeString=='4'||typeString=='5') {//只有材料类型才显示是否暂估
+        data.doc.isEstimate = result.is_evaluate;
+    }
     if (result.hasOwnProperty('subList') && result.subList.length > 0) {
         data.doc.subList = getMixRatioShowDatas(result.subList);
     }
@@ -759,12 +771,15 @@ async function insertGLJAsRation(data) {
         let p_glj = getGLJSearchInfo(glj);
         let projectGljModel = new GLJListModel();
         let result = await projectGljModel.addList(p_glj);//逐条添加到项目工料机
+        let typeString = result.type+'';
         glj.marketPrice = result.unit_price.market_price;
         glj.adjustPrice = result.unit_price.base_price;
         glj.basePrice = result.unit_price.base_price;
         glj.isAdd = result.unit_price.is_add;
         glj.projectGLJID = result.id;
-        glj.isEstimate = result.is_evaluate;
+        if (typeString.startsWith("2")||typeString=='4'||typeString=='5') {//只有材料类型才显示是否暂估
+            glj.isEstimate = result.is_evaluate;
+        }
     }
     await ration.insertMany(gljList);
     console.log(gljList);

+ 1 - 1
modules/ration_glj/models/ration_glj_temp.js

@@ -139,7 +139,7 @@ var rationItemSchema = mongoose.Schema({
 mongoose.model("std_ration_lib_ration_items",rationItemSchema, "std_ration_lib_ration_items");
 
 let billsSchema = new Schema({
-    ID: Number,
+    ID: String,
     ParentID: Number,
     NextSiblingID: Number,
     projectID: Number,

+ 1 - 1
web/building_saas/main/js/controllers/project_controller.js

@@ -104,7 +104,7 @@ ProjectController = {
     },
     addRootBill:function (project, sheetController) {//添加大项费用
         if (!project || !sheetController) { return null; }
-        this.addSpecialBill(project, sheetController,null, null,true,billType.DXFY);
+        this.addSpecialBill(project, sheetController,null, project.mainTree.selected.nextSibling,true,billType.DXFY);
     },
     addFB:function(project, sheetController) {//添加分部
         if (!project || !sheetController) { return null; }

+ 54 - 23
web/building_saas/main/js/models/bills.js

@@ -279,8 +279,6 @@ var Bills = {
                 }
                 $.bootstrapLoading.start();
                 CommonAjax.post("/bills/singleDelete", {updateData:updateData,projectID:node.data.projectID,user_id:userID,ID:node.data.ID}, function () {
-                    controller.singleDelete();//删除树节点
-                    me.tree.singleDelete(node);
                     //更新缓存
                     console.log(updateNode);
                     _.remove(me.datas,{'ID':node.data.ID});
@@ -291,6 +289,8 @@ var Bills = {
                         }
                     }
                     project.calcProgram.calcAndSave(newParent);
+                    controller.singleDelete();//删除树节点
+                    me.tree.singleDelete(node.source);
                     $.bootstrapLoading.end();
                 }, function () {
                     $.bootstrapLoading.end();
@@ -494,6 +494,14 @@ var Bills = {
                 }
             }
         };
+        bills.prototype.getEngineeringCostNode=function(controller){//取工程造价节点
+            let roots =  controller.tree.roots;
+            for(let root of roots){
+                if(project.Bills.isEngineeringCost(root)==true){
+                    return root;
+                }
+            }
+        };
         bills.prototype.deleteSelectedNode=function(){//删除选中单行时的节点
             let controller = projectObj.mainController, project = projectObj.project;
             let selected = controller.tree.selected, parent = selected.parent;
@@ -527,6 +535,8 @@ var Bills = {
             let mainNodes = [];
             let idTreeNodes=[];
             let updateData={};
+            let includeRootNode=false;
+            let parentNodes = [];
             let selection = projectObj.mainSpread.getActiveSheet().getSelections()[0];
             for(let i =0;i<selection.rowCount;i++){
                 let tem_node = controller.tree.items[selection.row+i];
@@ -534,13 +544,13 @@ var Bills = {
                     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);
+                        idTreeMap[tem_node.source.getID()] = tem_node.source;
+                        idTreeNodes.push(tem_node.source);
                     }
                 }else {
                     this.setNodeToMapAndArray(tem_node,mainTreeMap,mainNodes);
                     if(tem_node.sourceType == project.Bills.getSourceType()){
-                        this.setNodeToMapAndArray(tem_node,idTreeMap,idTreeNodes,true);
+                        this.setNodeToMapAndArray(tem_node.source,idTreeMap,idTreeNodes);
                     }
                 }
             }
@@ -558,6 +568,12 @@ var Bills = {
                         updateBill=true;
                     }
                 }
+                if(m_node.parent==null&&includeRootNode==false){//删除的节点中包含了根节点,要重新计算工程造价,并且工程造价节点只要加入一次就行了
+                    parentNodes.push(me.getEngineeringCostNode(controller));
+                    includeRootNode=true
+                }else {
+                    parentNodes.push(m_node.parent);
+                }
                 updateNodes.push(m_node);
                 controller.tree.getAllSubNode(m_node,updateNodes);
             }
@@ -577,39 +593,54 @@ var Bills = {
             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];
+                let quantity_detail_datas = project.quantity_detail.datas;
+                let ration_datas = project.Ration.datas;
+                let ration_glj_datas = project.ration_glj.datas;
+                let ration_coe_datas = project.ration_coe.datas;
+                let nodes = controller.tree.nodes;
+                let prefix = controller.tree.prefix;
+                //更新缓存
+                if(updateData['bills']){//更新bills
+                    for(let b_key in updateData['bills']){
+                        if(updateData['bills'][b_key]===true){//删除清单和工程量明细
+                            _.remove(me.datas,{'ID':b_key});
+                            _.remove(quantity_detail_datas,{'billID':b_key});
+                        }else {//更新清单属性
+                            for(let p_key in updateData['bills'][b_key]){
+                                nodes[prefix+b_key].data[p_key] = updateData['bills'][b_key][p_key]
+                            }
+                        }
+                    }
+                }
+                if(updateData['ration']){
+                    for(let r_key in updateData['ration']){//定额只有删除,没有更新
+                        _.remove(ration_datas,{'ID':r_key});
+                        _.remove(quantity_detail_datas,{'rationID':r_key});
+                        _.remove(ration_glj_datas,{'rationID':r_key});
+                        _.remove(ration_coe_datas,{'rationID':r_key});
                     }
                 }
-                project.calcProgram.calcAndSave(newParent);*/
+                controller.m_delete(mainNodes);//删除树节点
+                me.tree.m_delete(idTreeNodes);
+                //重新计算
+                project.calcProgram.calcBillsAndSave(parentNodes);
                 $.bootstrapLoading.end();
             }, function () {
                 $.bootstrapLoading.end();
             });
-
-
-
         };
-        bills.prototype.setNodeToMapAndArray=function (node,map,array,billType) {
-            let nodeID = billType ==true?node.source.getID():node.getID();
+        bills.prototype.setNodeToMapAndArray=function (node,map,array) {
+            let nodeID = 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();
+                let nodeID =node.getID();
                 if(parent==null){//说明已经是最顶层了
                     map[nodeID]=node;
                     array.push(node);
                 }else {
-                    let parentID = billType == true?parent.source.getID():parent.getID();
+                    let parentID = parent.getID();
                     if(map[parentID]==undefined||map[parentID]==null){
                         newMap(node,parent.parent,map,array);
                     }

+ 1 - 0
web/building_saas/main/js/views/glj_view.js

@@ -829,6 +829,7 @@ var gljOprObj = {
             }
             quantity = scMathUtil.roundForObj(quantity, getDecimal("ration.quantity"));//计算前进行4舍5入
             glj.quantity = scMathUtil.roundForObj(glj.quantity, getDecimal("glj.quantity"));
+            console.log(glj.quantity);
             glj.totalQuantity = scMathUtil.roundToString(quantity * glj.quantity, getDecimal("glj.quantity"));
             if (glj.hasOwnProperty('subList')) {//需要计算glj下挂的组成物的总消耗量
                 this.calcMixRationTotalQuantity(glj.subList,glj.totalQuantity);

+ 41 - 17
web/building_saas/main/js/views/project_view.js

@@ -80,6 +80,9 @@ var projectObj = {
         };
         let canDelete_m = function (selection) {
             for(let i =0;i<selection.rowCount;i++){
+                if(tree.items[selection.row+i]==undefined||tree.items[selection.row+i]==null){
+                    return false;
+                }
                 if(i==0&&tree.items[selection.row].sourceType === that.project.ration_glj.getSourceType()){
                     return false
                 }
@@ -537,7 +540,7 @@ var projectObj = {
                     icon: 'fa-sign-in',
                     disabled: function () {
                         let selected = project.mainTree.selected;
-                        if(selected.sourceType==project.Bills.getSourceType()){
+                        if(selected&&selected.sourceType==project.Bills.getSourceType()){
                             if(selected.data.type==billType.FB){
                                 return false;
                             }
@@ -555,7 +558,11 @@ var projectObj = {
                         ProjectController.addFB(project, controller);
                     },
                     visible: function(key, opt){
-                        return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
+                        if(project.mainTree.selected){
+                            return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
+                        }else {
+                            return false;
+                        }
                     }
                 },
                 "insertFX": {
@@ -563,7 +570,7 @@ var projectObj = {
                     icon: 'fa-sign-in',
                     disabled: function () {
                         let selected = project.mainTree.selected;
-                        if(selected.sourceType==project.Bills.getSourceType()){
+                        if(selected&&selected.sourceType==project.Bills.getSourceType()){
                             if(selected.data.type==billType.FX){//焦点行是分项,有效显示
                                 return false
                             }
@@ -588,7 +595,11 @@ var projectObj = {
                         ProjectController.addFX(project, controller);
                     },
                     visible: function(key, opt){
-                        return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
+                        if(project.mainTree.selected){
+                            return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
+                        }else {
+                            return false;
+                        }
                     }
                 },
                 "insertBills": {
@@ -607,7 +618,11 @@ var projectObj = {
                         ProjectController.addBills(project, controller);
                     },
                      visible: function(key, opt){
-                         return  project.Bills.isFBFX(project.mainTree.selected)==true?false:true;//不属于分部分项的话隐藏
+                         if(project.mainTree.selected){
+                             return  project.Bills.isFBFX(project.mainTree.selected)==true?false:true;
+                         }else {
+                             return false;
+                         }
                      }
                 },
                 "insertRation": {
@@ -622,11 +637,14 @@ var projectObj = {
                     },
                     visible: function(key, opt){
                         var selected = project.mainTree.selected;
-                        if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
-                            return false
-                        }else {
-                            return true
+                        if(selected){
+                            if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
+                                return false
+                            }else {
+                                return true
+                            }
                         }
+                       return false;
                     }
                 },
                 "insertLJ": {
@@ -641,11 +659,14 @@ var projectObj = {
                     },
                     visible: function(key, opt){
                         var selected = project.mainTree.selected;
-                        if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
-                            return false
-                        }else {
-                            return true
+                        if(selected){
+                            if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
+                                return false
+                            }else {
+                                return true
+                            }
                         }
+                       return false;
                     }
                 },
                 "insertGLJ": {
@@ -669,11 +690,14 @@ var projectObj = {
                     },
                     visible: function(key, opt){
                         var selected = project.mainTree.selected;
-                        if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
-                            return false
-                        }else {
-                            return true
+                        if(selected){
+                            if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
+                                return false;
+                            }else {
+                                return true;
+                            }
                         }
+                        return false;
                     }
                 },
                 "spr1": '--------',