Kaynağa Gözat

新增单价锁定算法

chenshilong 4 yıl önce
ebeveyn
işleme
9ad8fb0d13
1 değiştirilmiş dosya ile 40 ekleme ve 30 silme
  1. 40 30
      web/building_saas/main/js/models/calc_program.js

+ 40 - 30
web/building_saas/main/js/models/calc_program.js

@@ -1813,39 +1813,49 @@ class CalcProgram {
                 };
             }
             else if ((commonCalcType == 1) || (commonCalcType == 3)){
-                let sum_rtf = 0, sum_rttf = 0;
-                for (let node of nodes) {
-                    let ruf = 0, rtuf = 0, rtf = 0, rttf = 0;
-                    if (node.data.feesIndex && node.data.feesIndex[ft.type]) {
-                        ruf = parseFloatPlus(node.data.feesIndex[ft.type].unitFee).toDecimal(decimalObj.bills.unitPrice);
-                        rtuf = parseFloatPlus(node.data.feesIndex[ft.type].tenderUnitFee).toDecimal(decimalObj.bills.unitPrice);
-                        rtf = parseFloatPlus(node.data.feesIndex[ft.type].totalFee).toDecimal(decimalObj.bills.totalPrice);
-                        rttf = parseFloatPlus(node.data.feesIndex[ft.type].tenderTotalFee).toDecimal(decimalObj.bills.totalPrice);
-                    };
-                    // 取费方式为子目含量,清单行/列的XX单价应 =ROUND( ∑ROUND(定额XX单价*含量,清单单价精度),清单单价精度)
-                    if (me.project.property.billsCalcMode === leafBillGetFeeType.rationContent) {
-                        buf = (buf + (ruf * parseFloatPlus(node.data.contain)).toDecimal(decimalObj.bills.unitPrice)).toDecimal(decimalObj.process);
-                        node.data.tenderContaion = (node.data.tenderQuantity / bq).toDecimal(decimalObj.process);
-                        btuf = (btuf + (rtuf * parseFloatPlus(node.data.tenderContaion)).toDecimal(decimalObj.bills.unitPrice)).toDecimal(decimalObj.process);
+                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{
+                    let sum_rtf = 0, sum_rttf = 0;
+                    for (let node of nodes) {
+                        let ruf = 0, rtuf = 0, rtf = 0, rttf = 0;
+                        if (node.data.feesIndex && node.data.feesIndex[ft.type]) {
+                            ruf = parseFloatPlus(node.data.feesIndex[ft.type].unitFee).toDecimal(decimalObj.bills.unitPrice);
+                            rtuf = parseFloatPlus(node.data.feesIndex[ft.type].tenderUnitFee).toDecimal(decimalObj.bills.unitPrice);
+                            rtf = parseFloatPlus(node.data.feesIndex[ft.type].totalFee).toDecimal(decimalObj.bills.totalPrice);
+                            rttf = parseFloatPlus(node.data.feesIndex[ft.type].tenderTotalFee).toDecimal(decimalObj.bills.totalPrice);
+                        };
+                        // 取费方式为子目含量,清单行/列的XX单价应 =ROUND( ∑ROUND(定额XX单价*含量,清单单价精度),清单单价精度)
+                        if (me.project.property.billsCalcMode === leafBillGetFeeType.rationContent) {
+                            buf = (buf + (ruf * parseFloatPlus(node.data.contain)).toDecimal(decimalObj.bills.unitPrice)).toDecimal(decimalObj.process);
+                            node.data.tenderContaion = (node.data.tenderQuantity / bq).toDecimal(decimalObj.process);
+                            btuf = (btuf + (rtuf * parseFloatPlus(node.data.tenderContaion)).toDecimal(decimalObj.bills.unitPrice)).toDecimal(decimalObj.process);
+                        };
+                        sum_rtf = (sum_rtf + rtf).toDecimal(decimalObj.process);
+                        sum_rttf = (sum_rttf + rttf).toDecimal(decimalObj.process);
                     };
-                    sum_rtf = (sum_rtf + rtf).toDecimal(decimalObj.process);
-                    sum_rttf = (sum_rttf + rttf).toDecimal(decimalObj.process);
-                };
 
-                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")){
-                    btf = sum_rtf;
-                    bttf = sum_rttf;
+                    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")){
+                        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);
+                    };
                 }
-                else{
-                    btf = (buf.toDecimal(decimalObj.bills.unitPrice) * bq).toDecimal(decimalObj.process);
-                    bttf = (btuf.toDecimal(decimalObj.bills.unitPrice) * btq).toDecimal(decimalObj.process);
-                };
             };
 
             ftObj.totalFee = btf.toDecimal(decimalObj.bills.totalPrice);