Bläddra i källkod

锁定单价导入Excel,造价计算后单价会被冲掉: 新增锁定单价计算模式。

chenshilong 3 år sedan
förälder
incheckning
eeb4ec8de0

+ 28 - 43
web/building_saas/main/js/models/calc_program.js

@@ -58,7 +58,8 @@ let calcTools = {
     return (
       this.isLeafBill(treeNode) &&
       treeNode.children.length === 0 &&
-      !treeNode.data.calcBase
+      !treeNode.data.calcBase &&
+      !treeNode.data.lockUnitPrice
     );
   },
   isInvalidNode: function (treeNode) {
@@ -980,17 +981,16 @@ let calcTools = {
     } else if (this.isNullBill(treeNode)) {
       return treeNodeCalcType.ctNull;
     } else if (this.isLeafBill(treeNode)) {
-      if (treeNode.children && treeNode.children.length > 0) {
+      if (treeNode.data.lockUnitPrice)  // 叶子清单锁定单价(有定额或无定额)
+        return treeNodeCalcType.ctLockUnitPrice
+      else if (treeNode.children && treeNode.children.length > 0) {  // 叶子清单有定额
         // 清单单价计算模式下的叶子清单:取自己的计算程序ID,找到自己的计算程序计算。(汇总清单所有定额的工料机)
-        if (
-          projectObj.project.property.billsCalcMode ===
-          leafBillGetFeeType.billsPrice
-        )
+        if (projectObj.project.property.billsCalcMode === leafBillGetFeeType.billsPrice)
           return treeNodeCalcType.ctBillCalcProgram;
         // 前三种计算模式下的叶子清单:汇总定额的计算程序的费用类别
         else return treeNodeCalcType.ctGatherRationsFees;
-      } else {
-        // 公式计算
+      }
+      else {  // 叶子清单无锁定单价、无定额:公式计算
         return treeNodeCalcType.ctCalcBaseValue;
       }
     } else if (this.isBill(treeNode)) {
@@ -2127,13 +2127,16 @@ class CalcProgram {
 
     // 父清单汇总子清单的费用类别
     if (treeNode.calcType == treeNodeCalcType.ctGatherBillsFees)
-      me.innerCalcBill(treeNode, 2);
-    // 叶子清单汇总定额的费用类别
+      me.innerCalcBill(treeNode, 2)
+    // 叶子清单汇总定额的费用类别
     else if (treeNode.calcType == treeNodeCalcType.ctGatherRationsFees)
-      me.innerCalcBill(treeNode, 1);
+      me.innerCalcBill(treeNode, 1)
+    // 叶子清单:锁定单价
+    else if (treeNode.calcType == treeNodeCalcType.ctLockUnitPrice)
+      me.innerCalcBill(treeNode, 4)
     // 叶子清单:公式计算
     else if (treeNode.calcType == treeNodeCalcType.ctCalcBaseValue)
-      me.innerCalcBillExpr(treeNode);
+      me.innerCalcBillExpr(treeNode)
     // 叶子清单:手工修改单价或金额(无定额、无公式计算,什么都没有时)。
     else if (treeNode.calcType == treeNodeCalcType.ctNull)
       me.innerCalcBillCustom(treeNode);
@@ -2198,20 +2201,8 @@ class CalcProgram {
             ).toDecimal(decimalObj.process);
           }
         }
-      } else if (commonCalcType == 1 || commonCalcType == 3) {
-        if (treeNode.data.lockUnitPrice == true) {
-          // 清单单价锁定
-          if (treeNode.data.feesIndex && treeNode.data.feesIndex[ft.type]) {
-            buf = parseFloatPlus(
-              treeNode.data.feesIndex[ft.type].unitFee
-            ).toDecimal(decimalObj.bills.unitPrice);
-            btuf = parseFloatPlus(
-              treeNode.data.feesIndex[ft.type].tenderUnitFee
-            ).toDecimal(decimalObj.bills.unitPrice);
-            btf = (bq * buf).toDecimal(decimalObj.bills.totalPrice);
-            bttf = (btq * btuf).toDecimal(decimalObj.bills.totalPrice);
-          }
-        } else {
+      }
+      else if (commonCalcType == 1 || commonCalcType == 3) {
           let sum_rtf = 0,
             sum_rttf = 0;
           for (let node of nodes) {
@@ -2260,30 +2251,24 @@ class CalcProgram {
             sum_rttf = (sum_rttf + rttf).toDecimal(decimalObj.process);
           }
 
-          if (
-            me.project.property.billsCalcMode ==
-              leafBillGetFeeType.rationPriceConverse ||
-            me.project.property.billsCalcMode == leafBillGetFeeType.rationPrice
-          ) {
+          if (me.project.property.billsCalcMode == leafBillGetFeeType.rationPriceConverse || me.project.property.billsCalcMode == leafBillGetFeeType.rationPrice) {
             buf = (sum_rtf / bq).toDecimal(decimalObj.process);
             btuf = (sum_rttf / btq).toDecimal(decimalObj.process);
           }
-          if (
-            isBaseFeeType(ft.type) ||
-            (me.project.property.billsCalcMode ===
-              leafBillGetFeeType.rationPrice &&
-              ft.type == "common")
-          ) {
+          if (isBaseFeeType(ft.type) || (me.project.property.billsCalcMode === leafBillGetFeeType.rationPrice && ft.type == "common")) {
             btf = sum_rtf;
             bttf = sum_rttf;
           } else {
-            btf = (buf.toDecimal(decimalObj.bills.unitPrice) * bq).toDecimal(
-              decimalObj.process
-            );
-            bttf = (btuf.toDecimal(decimalObj.bills.unitPrice) * btq).toDecimal(
-              decimalObj.process
-            );
+            btf = (buf.toDecimal(decimalObj.bills.unitPrice) * bq).toDecimal(decimalObj.process);
+            bttf = (btuf.toDecimal(decimalObj.bills.unitPrice) * btq).toDecimal(decimalObj.process);
           }
+      }
+      else if (commonCalcType == 4){ // 清单单价锁定
+        if (treeNode.data.feesIndex && treeNode.data.feesIndex[ft.type]) {
+            buf = parseFloatPlus(treeNode.data.feesIndex[ft.type].unitFee).toDecimal(decimalObj.bills.unitPrice);
+            btuf = parseFloatPlus(treeNode.data.feesIndex[ft.type].tenderUnitFee).toDecimal(decimalObj.bills.unitPrice);
+            btf = (bq * buf).toDecimal(decimalObj.bills.totalPrice);
+            bttf = (btq * btuf).toDecimal(decimalObj.bills.totalPrice);
         }
       }
 

+ 2 - 2
web/building_saas/main/js/models/main_consts.js

@@ -84,8 +84,8 @@ const treeNodeCalcType = {
     ctGatherRationsFees: 3,     // 汇总定额的各个费
     ctGatherBillsFees: 4,       // 汇总清单的各个费
     ctCalcBaseValue: 5,
-    ctNull: 6
-    // ctCommonUnitFee: 6       // 树结点的手工输入综合单价的方式已废弃,现综合单价只读,引入市场单价。
+    ctNull: 6,
+    ctLockUnitPrice: 7         // 锁定单价
 };
 
 const tenderTypes = {