Просмотр исходного кода

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

zhangweicheng 7 лет назад
Родитель
Сommit
04a3a110ff
1 измененных файлов с 26 добавлено и 77 удалено
  1. 26 77
      web/building_saas/main/js/models/calc_program.js

+ 26 - 77
web/building_saas/main/js/models/calc_program.js

@@ -273,82 +273,33 @@ let calcTools = {
         else
             return 0;
     },
+
+    // 该方法已精简,不支持价差基数的计算。
     rationBaseFee: function (treeNode, gljTypes, priceType, isTender){
         if (!treeNode.data.gljList) return 0;
         let me = this, result = 0;
         let price = 0, temp = 0, temp2 = 0;
-
-        // 机械组成物价差: 机上人工、动力燃料
-        if ((priceType == priceTypes.ptDiffPrice) && (gljTypes.includes(gljType.MACHINE_LABOUR) || gljTypes.includes(gljType.FUEL_POWER_FEE))){
-            for (let glj of treeNode.data.gljList) {
-                if ([gljType.GENERAL_MACHINE, gljType.INSTRUMENT].includes(glj.type)){
-                    if (isTender){
-                        calcTools.calcGLJTenderPrice(glj);
-                        calcTools.calcGLJTenderQty(treeNode, glj);
-                    };
-                    let mds = projectObj.project.composition.getCompositionByGLJ(glj);
-                    if (!mds) mds = [];
-                    for (let md of mds){
-                        if (gljTypes.includes(md.type)){
-                            let gljQ = isTender ? me.uiGLJQty(glj["tenderQuantity"]) : me.uiGLJQty(glj["quantity"]);
-                            let mdQ = me.uiGLJQty(md.consumption);
-                            let mdMP = isTender ? md["tenderPrice"] : md["marketPrice"];
-                            let mdAP = calcTools.hasAdjustPrice() ? md["adjustPrice"] : md["basePrice"];
-                            // if (aprice != mprice){
-                            temp = (temp + (gljQ * mdQ * mdMP).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
-                            temp2 = (temp2 + (gljQ * mdQ * mdAP).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
-                            // }
-                        }
-                    }
-                }
-            }
-        }
-        // 普通基数计算(包括普通价差)
-        else{
-            for (let glj of treeNode.data.gljList) {
-                if (gljTypes.indexOf(glj.type) >= 0) {
-                    if (isTender){
-                        calcTools.calcGLJTenderPrice(glj);
-                        calcTools.calcGLJTenderQty(treeNode, glj);
-                    };
-                    let qty = isTender ? me.uiGLJQty(glj["tenderQuantity"]) : me.uiGLJQty(glj["quantity"]);
-                    let mprice = isTender ? me.uiGLJPrice(glj["tenderPrice"], glj) : me.uiGLJPrice(glj["marketPrice"], glj);
-                    let aprice = calcTools.hasAdjustPrice() ? me.uiGLJPrice(glj["adjustPrice"], glj) : me.uiGLJPrice(glj["basePrice"], glj);
-
-                    if (priceType == priceTypes.ptDiffPrice){
-                        // if (aprice != mprice){
-                        temp = (temp + (qty * mprice).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
-                        temp2 = (temp2 + (qty * aprice).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
-                        // }
-                    }
-                    else {
-                        if (priceType == priceTypes.ptBasePrice){ price = me.uiGLJPrice(glj["basePrice"], glj);}
-                        else if (priceType == priceTypes.ptAdjustPrice){price = aprice;}
-                        else if (priceType == priceTypes.ptMarketPrice){price = mprice;}
-                        temp = (qty * price).toDecimal(decimalObj.process);
-                        result = (result + temp).toDecimal(decimalObj.process);
-                    };
+        for (let glj of treeNode.data.gljList) {
+            if (gljTypes.indexOf(glj.type) >= 0) {
+                if (isTender){
+                    calcTools.calcGLJTenderPrice(glj);
+                    calcTools.calcGLJTenderQty(treeNode, glj);
                 };
-            };
-        };
 
-        if (priceType == priceTypes.ptDiffPrice){
-            if (typeof isCQ2018 != 'undefined'){
-                // 如下这一句十分重要!JS计算误差导致379.08-331.695=47.38499999999999。如果直接取2位会变成47.38。所以先取6位47.385,再取2位47.39。
-                result = (temp - temp2).toDecimal(decimalObj.process);
-                result = result.toDecimal(decimalObj.ration.unitPrice)    // 重庆2018所有都是先汇总相减后再取舍
-            }
-            else{
-                if (gljTypes == baseMaterialTypes)
-                    result = (temp - temp2).toDecimal(decimalObj.ration.unitPrice)
-                else
-                    result = (temp.toDecimal(decimalObj.ration.unitPrice) - temp2.toDecimal(decimalObj.ration.unitPrice)).toDecimal(decimalObj.ration.unitPrice);
+                let gljQ = isTender ? me.uiGLJQty(glj["tenderQuantity"]) : me.uiGLJQty(glj["quantity"]);
+                let mprice = isTender ? me.uiGLJPrice(glj["tenderPrice"], glj) : me.uiGLJPrice(glj["marketPrice"], glj);
+                let aprice = calcTools.hasAdjustPrice() ? me.uiGLJPrice(glj["adjustPrice"], glj) : me.uiGLJPrice(glj["basePrice"], glj);
+
+                if (priceType == priceTypes.ptBasePrice){ price = me.uiGLJPrice(glj["basePrice"], glj);}
+                else if (priceType == priceTypes.ptAdjustPrice){price = aprice;}
+                else if (priceType == priceTypes.ptMarketPrice){price = mprice;}
+
+                let nodeQ = calcTools.uiNodeQty(treeNode);
+                temp = (price * gljQ * nodeQ).toDecimal(decimalObj.process);
+                result = (result + temp).toDecimal(decimalObj.process);
             };
-        }
-        else{
-            result = result.toDecimal(decimalObj.ration.unitPrice);
         };
-
+        result = result.toDecimal(decimalObj.ration.totalPrice);
         return result;
     },
     // masterTypeFilter 过滤机械机型:[]全部, [1,2]特大机械  [3,4]中小机械。  detailType 如机上人工费、机械折旧费等
@@ -379,13 +330,10 @@ let calcTools = {
                         mdSum = (mdSum).toDecimal(decimalObj.glj.unitPriceHasMix);
                     }
                 }
-                if (typeof isCQ2018 != 'undefined')
-                    result = (result + (gljQ * mdSum).toDecimal(decimalObj.process)).toDecimal(decimalObj.process)
-                else
-                    result = (result + (gljQ * mdSum).toDecimal(decimalObj.ration.unitPrice)).toDecimal(decimalObj.ration.unitPrice);
+                result = (result + (gljQ * mdSum).toDecimal(decimalObj.process)).toDecimal(decimalObj.process)
             }
         }
-        result = (result).toDecimal(decimalObj.ration.unitPrice);
+        result = (result).toDecimal(decimalObj.ration.totalPrice);
         return result;
     },
     // 总造价清单、叶子清单、定额的暂估费。父清单是汇总子清单的暂估费,走计算程序逻辑,不在这里。
@@ -1387,7 +1335,7 @@ let executeObj = {
 
     at: function(ID, isTender) {
         let item = executeObj.template.compiledCalcItems[ID];
-        let rst = isTender ? item.tenderUnitFee : item.unitFee;
+        let rst = isTender ? item.tenderTotalFee : item.totalFee;
         rst = parseFloat(rst);
         return rst;
     },
@@ -1850,9 +1798,10 @@ class CalcProgram {
                     if (calcItem.feeRate != undefined)
                         feeRate = parseFloat(calcItem.feeRate).toDecimal(decimalObj.feeRate);
                     // console.log(`[${calcItem.ID}]: ${calcItem.compiledExpr}`);   // for test.
-
-                    calcItem.unitFee = (eval(calcItem.compiledExpr) * feeRate * 0.01).toDecimal(decimalObj.decimal('unitPrice', treeNode));
-                    calcItem.totalFee = (calcItem.unitFee * calcTools.uiNodeQty(treeNode)).toDecimal(decimalObj.decimal('totalPrice', treeNode));
+                    let tf = (eval(calcItem.compiledExpr) * feeRate * 0.01).toDecimal(decimalObj.process);
+                    calcItem.totalFee = tf.toDecimal(decimalObj.decimal('totalPrice', treeNode));
+                    let nodeQ = calcTools.uiNodeQty(treeNode) ? calcTools.uiNodeQty(treeNode) : 1;
+                    calcItem.unitFee = (tf / nodeQ).toDecimal(decimalObj.decimal('unitPrice', treeNode));
 
                     if (tender == tenderTypes.ttCalc) {
                         let tExpr = analyzer.getCompiledTenderExpr(calcItem.compiledExpr);