Selaa lähdekoodia

广东超高降效bug、清单能否自身计算判断

1.处理广东定额库人材机消耗量的精度 ok
2 .超高降效选项二时,指定的固定类别是措施其他项目,而非技术措施项目 ok
3.在超高降效选项中指定的节点,基数不可选 ok
4.广东费用定额下删除定额时,清单价格的处理 ok
5.广东费用定额相关部分单价、合价的可读性处理 ok
vian 5 vuotta sitten
vanhempi
commit
4108f09ef1

+ 11 - 1
modules/common/const/bills_fixed.js

@@ -66,7 +66,17 @@ const fixedFlag = {
     //组织措施费
     ORGANIZATION:32,
     //其他措施费
-    OTHER_MEASURE_FEE:33
+    OTHER_MEASURE_FEE:33,
+    // 绿色施工安全防护措施费
+    GREEN_MEASURE_FEE: 34,
+    // 预算包干费
+    BUDGET_INCLUDE_WORK_FEE: 35,
+    // 工程优质费
+    PROJECT_HIGH_QUALITY_FEE: 36,
+    // 概算幅度差
+    BUDGET_ESTIMATE_DIFF: 37,
+    // 其他费用(与其他项目不同,参考广东的用法)
+    OTHER_FEE: 38
 };
 
 export default fixedFlag;

+ 2 - 1
modules/pm/controllers/pm_controller.js

@@ -75,7 +75,8 @@ module.exports = {
         });
     },
     getProjects: async function(req, res){
-         await ProjectsData.getUserProjects(req.session.sessionUser.id, req.session.sessionCompilation._id, function(err, message, projects){
+        await ProjectsData.getUserProjects(req.session.sessionUser.id, req.session.sessionCompilation._id, function(err, message, projects){
+            console.log(err);
             if (projects) {
                 callback(req, res, err, message, projects);
             } else {

+ 12 - 0
public/web/id_tree.js

@@ -410,6 +410,18 @@ var idTree = {
             }
             return null;
         };
+        // 节点是否属于某些固定ID,会一直向上找,直到找到或到达顶层
+        Node.prototype.isBelongToFlags = function (flags) {
+            let node = this;
+            while (node) {
+                const flag = node.getFlag();
+                if (flags.includes(flag)) {
+                    return true;
+                }
+                node = node.parent;
+            }
+            return false;
+        }
         // 获取节点所有后代节点
         Node.prototype.getPosterity = function() {
             let posterity = [];

+ 12 - 0
web/building_saas/main/js/models/bills.js

@@ -623,6 +623,18 @@ var Bills = {
             }
             return techMeasureCheck(node);
         };
+        // 相关固定类别清单部分,【不】允许清单自身计算得到合价: “数量 * 单价 = 合价”
+        // 删除【不】允许通过自身数据计算的清单的定额时,该清单价格【会清空】
+        // 这种清单的单价和合价都是只读的
+        bills.prototype.cantCalcToTalFeeByOwn = function (node) {
+            const flags = [
+                fixedFlag.SUB_ENGINERRING,
+                fixedFlag.CONSTRUCTION_TECH,
+                fixedFlag.GREEN_MEASURE_FEE,
+                fixedFlag.OTHER_MEASURE_FEE,
+            ];
+            return node.isBelongToFlags(flags);
+        };
 
         bills.prototype.isEngineeringCost = function (node) {//判断这个节点是否是工程造价节点
             if(isFlag(node.data)&&node.data.flagsIndex.fixed.flag==fixedFlag.ENGINEERINGCOST){

+ 12 - 0
web/building_saas/main/js/models/cache_tree.js

@@ -312,6 +312,18 @@ var cacheTree = {
             }
             return null;
         };
+        // 节点是否属于某些固定ID,会一直向上找,直到找到或到达顶层
+        Node.prototype.isBelongToFlags = function (flags) {
+            let node = this;
+            while (node) {
+                const flag = node.getFlag();
+                if (flags.includes(flag)) {
+                    return true;
+                }
+                node = node.parent;
+            }
+            return false;
+        }
         // 获取节点所有后代节点
         Node.prototype.getPosterity = function() {
             let posterity = [];

+ 7 - 2
web/building_saas/main/js/models/calc_program.js

@@ -179,7 +179,10 @@ let calcTools = {
         return projectObj.project.Bills.isFBFX(treeNode);
     },
     isTechMeasure:function(treeNode){
-       return projectObj.project.Bills.isTechMeasure(treeNode)
+        return projectObj.project.Bills.isTechMeasure(treeNode)
+    },
+    canCalcToTalFeeByOwn: function (treeNode) {
+        return !projectObj.project.Bills.cantCalcToTalFeeByOwn(treeNode);
     },
     getChildrenFormulaNodes: function (self, allFormulaNodesArr, parentNodes){       // 获取结点parentNodes下有公式的子结点
         let nodes = [];
@@ -1862,7 +1865,9 @@ class CalcProgram {
 
             // 第1、2部分以外的叶子清单在没有公式的情况下可以手工修改综合单价并参与计算。
             // 2017-09-27 需求改了,除了第 1 、 2.2部分以外,都可以手工修改综合单价、综合合价并参与计算
-            if(!calcTools.isFBFX(treeNode) && !calcTools.isTechMeasure(treeNode)){ // if(!calcTools.isInheritFrom(treeNode, [fixedFlag.SUB_ENGINERRING, fixedFlag.MEASURE]))
+            //if(!calcTools.isFBFX(treeNode) && !calcTools.isTechMeasure(treeNode)){ // if(!calcTools.isInheritFrom(treeNode, [fixedFlag.SUB_ENGINERRING, fixedFlag.MEASURE]))
+            // 在没有公式的情况下可以手工修改综合单价并参与计算
+            if(calcTools.canCalcToTalFeeByOwn(treeNode)){
                 if (treeNode.data.feesIndex && treeNode.data.feesIndex.common){
                     let ftObj = {};
                     ftObj.fieldName = 'common';

+ 11 - 1
web/building_saas/main/js/models/main_consts.js

@@ -276,7 +276,17 @@ const fixedFlag = {
     //组织措施费
     ORGANIZATION:32,
     //其他措施费
-    OTHER_MEASURE_FEE:33
+    OTHER_MEASURE_FEE:33,
+    // 绿色施工安全防护措施费
+    GREEN_MEASURE_FEE: 34,
+    // 预算包干费
+    BUDGET_INCLUDE_WORK_FEE: 35,
+    // 工程优质费
+    PROJECT_HIGH_QUALITY_FEE: 36,
+    // 概算幅度差
+    BUDGET_ESTIMATE_DIFF: 37,
+    // 其他费用(与其他项目不同,参考广东的用法)
+    OTHER_FEE: 38
 };
 // 只读的固定类别(工程量、单价、综合合价只读,相当于是标题)
 const titleFlags = [

+ 19 - 12
web/building_saas/main/js/models/overHeight.js

@@ -286,10 +286,10 @@ const OVER_HEIGHT = (() => {
         TREE_SHEET_HELPER.massOperationSheet(sheet, func);
     }
 
-    // 获取措施技术项目底下固定的节点(011704001...): 选项二时
-    function getTechFixedNode() {
-        const measureNode = projectObj.project.mainTree.items.find(node => node.getFlag() === fixedFlag.CONSTRUCTION_TECH);
-        const measureChildren = measureNode.getPosterity();
+    // 获取其他措施费项目底下固定的节点(011704001...): 选项二时
+    function getMeasureFixedNode() {
+        const otherMeasureNode = projectObj.project.mainTree.items.find(node => node.getFlag() === fixedFlag.OTHER_MEASURE_FEE);
+        const measureChildren = otherMeasureNode.getPosterity();
         return measureChildren.find(node => node.data.code && fixedCodeReg.test(node.data.code));
     }
 
@@ -306,7 +306,7 @@ const OVER_HEIGHT = (() => {
         if (option === Option.SEPARATION) {
             return true;
         } else if (option === Option.MEASURE) {
-            const isValid = !!getTechFixedNode();
+            const isValid = !!getMeasureFixedNode();
             if (!isValid) {
                 $('#overHeightMeasure').modal('show');
             }
@@ -564,16 +564,17 @@ const OVER_HEIGHT = (() => {
         const { option, specificID } = action;
         // 生成清单数据
         function initMountedBills() {
-            // 生成的清单位置为施工技术措施项目的最末子项
-            const measureNode = projectObj.project.mainTree.items.find(node => node.getFlag() === fixedFlag.CONSTRUCTION_TECH);
-            const parent = measureNode.children[measureNode.children.length - 1];
+            // 生成的清单位置为其他措施项目的首项
+            const measureNode = projectObj.project.mainTree.items.find(node => node.getFlag() === fixedFlag.OTHER_MEASURE_FEE);
+            const firstNode = measureNode.children[0];
+            //const parent = measureNode.children[measureNode.children.length - 1];
             // 具体完整数据需要在后端跟标准数据对比完善
             return {
                 projectID: projectObj.project.ID(),
                 billsLibId: +projectObj.project.projectInfo.engineeringInfo.bill_lib[0].id,
                 ID: uuid.v1(),
-                ParentID: parent.data.ID,
-                NextSiblingID: -1,
+                ParentID: measureNode.data.ID,
+                NextSiblingID: firstNode ? firstNode.data.ID : -1,
                 type: billType.BILL,
                 code: fixedCode,
                 name: '超高施工增加',
@@ -588,7 +589,7 @@ const OVER_HEIGHT = (() => {
                 bills: null,
             };
         } else if (option === Option.MEASURE) {   // 选项二且造价书没有相关清单,需要插入清单
-            const fixedNode = getTechFixedNode();
+            const fixedNode = getMeasureFixedNode();
             return {
                 isNew: !fixedNode,
                 bills: fixedNode ? fixedNode.data : initMountedBills(),
@@ -876,6 +877,7 @@ const OVER_HEIGHT = (() => {
             // 重算相关节点
             projectObj.project.calcProgram.calcNodesAndSave(reCalcNodes);
         } catch (err) {
+            alert(err);
             console.log(err);
             recoverCellsText();
             $.bootstrapLoading.end();
@@ -947,6 +949,11 @@ const OVER_HEIGHT = (() => {
             if (project) {
                 const property = projectObj.project.projectInfo.property;
                 Object.assign(property, project);
+                // 更新节点(控制基数只读性,指定清单基数列只读)
+                const specificNode = getSpecificNode(property.overHeightSpecificID);
+                if (specificNode) {
+                    TREE_SHEET_HELPER.refreshTreeNodeData(projectObj.mainController.setting, projectObj.mainController.sheet, [specificNode], false);
+                }
             }
             const mainTree = projectObj.project.mainTree;
             // 更新节点超高降效
@@ -1129,7 +1136,7 @@ const OVER_HEIGHT = (() => {
                     handleConfirmed(false, { option, specificID: null });
                     break;
                 case Option.MEASURE:
-                    const fixedNode = getTechFixedNode();
+                    const fixedNode = getMeasureFixedNode();
                     // 造价书不存在相关清单,提示是否新增清单,由提示窗口进行后续操作
                     if (!fixedNode) {
                         $('#overHeightMeasure').modal('show');

+ 14 - 15
web/building_saas/main/js/views/main_tree_col.js

@@ -117,8 +117,10 @@ let MainTreeCol = {
                 if (calcTools.isTitleBills(node)) {
                     return true;
                 }
-                // 当前属于分部分项、施工技术措施项目,综合单价只读。
-                if(Bills.isFBFX(node)||Bills.isTechMeasure(node)) return true;
+                // 当前属于不可通过自身数据计算合价的部分,单价只读
+                if (Bills.cantCalcToTalFeeByOwn(node)) {
+                    return true;
+                }
                 // 不属于分部分项、施工技术措施项目的部分,如果不是叶子清单,或有基数计算/定额/量价/人材机 只读
                 if(!calcTools.isLeafBill(node)||calcTools.isCalcBaseBill(node)||node.children.length > 0)return true;
             }
@@ -134,8 +136,8 @@ let MainTreeCol = {
             }
             // 09-29 zhang
             let Bills =projectObj.project.Bills;
-            // 当前属于分部分项、施工技术措施项目,综合单价只读。
-            if(Bills.isFBFX(node)||Bills.isTechMeasure(node)){
+            // 当前属于不可通过自身数据计算合价的部分,合价只读
+            if (Bills.cantCalcToTalFeeByOwn(node)) {
                 return true;
             }
             // 不属于分部分项、施工技术措施项目的部分,如果不是叶子清单,或有基数计算/定额/量价/人材机 只读
@@ -146,28 +148,24 @@ let MainTreeCol = {
         },
         //根据节点、父节点类型判断是否可用计算基数
         calcBaseType: function (node) {
-            function isDef(v) {
-                return v !== undefined && v !== null;
-            }
-
             function isFlag(v) {
                 return this.isDef(v.flagsIndex) && this.isDef(v.flagsIndex.fixed);
             }
-
+            // 如果清单为超高子目指定清单,则只读
+            if (node.data.ID === projectObj.project.projectInfo.property.overHeightSpecificID) {
+                return true;
+            }
             let calcBase = projectObj.project.calcBase;
             let parent = node.parent;
             if (isFlag(node.data) && (node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.SUB_ENGINERRING
                 || node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_TECH)) {
                 return true;
-            }
-            else if (isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION) {
+            } else if (isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION) {
                 return false;
-            }
-            else {
+            } else {
                 if (!parent) {
                     return false;
-                }
-                else {
+                } else {
                     return this.calcBaseType(parent);
                 }
             }
@@ -693,6 +691,7 @@ let colSettingObj = {
         for(let i = 0; i < cols.length; i++){
             let colSetting = cols[i];
             if(colSetting.data.field === field){
+                
                 return i;
             }
         }

+ 0 - 1
web/building_saas/pm/js/pm_share.js

@@ -765,7 +765,6 @@ const pmShare = (function () {
         $.bootstrapLoading.start();
         //获取分享数据
         CommonAjax.post('/pm/api/receiveProjects', {user_id: userID}, function (rstData) {
-            debugger;
             // 排序 --分享的文件按照时间先后顺序排序,分享文件下的子文件,按照原本树结构显示,不需要排序
             sortByDate(rstData.grouped);
             sortByDate(rstData.ungrouped);