Jelajahi Sumber

分摊定额计算程序接口方法。

chenshilong 5 tahun lalu
induk
melakukan
633ac61aba
1 mengubah file dengan 50 tambahan dan 0 penghapusan
  1. 50 0
      web/building_saas/main/js/models/calc_program.js

+ 50 - 0
web/building_saas/main/js/models/calc_program.js

@@ -1864,6 +1864,56 @@ class CalcProgram {
         if (treeNode.changed && !changedArr.includes(treeNode)) changedArr.push(treeNode);
     };
 
+    innerCalcForFTRation(treeNode, tender = tenderTypes.ttCalc){          // 用于分摊定额计算:只有普通定额和量价类。
+        let me = this;
+        let fnArr = [];
+        calcTools.getGLJList(treeNode, true);
+
+        // 量价、工料机类型的定额要求市场合价
+        if (treeNode.data.type == rationType.volumePrice){
+            treeNode.data.totalPrice = (treeNode.data.unitPrice * treeNode.data.quantity).toDecimal(decimalObj.ration.totalPrice);
+        };
+
+        let template = me.compiledTemplates[treeNode.data.programID];
+        treeNode.data.calcTemplate = template;
+
+        if (treeNode && template && template.hasCompiled) {//2018-08-27 空行的时候,取费专业为空,template也为空,加入template非空判断
+            let $CE = executeObj;
+            $CE.treeNode = treeNode;
+            $CE.template = template;
+
+            calcTools.initFees(treeNode);
+
+            for (let idx of template.compiledSeq) {
+                let calcItem = template.calcItems[idx];
+                $CE.tempCalcItem = calcItem;
+                let feeRate = 100;  // 100%
+                if (calcItem.feeRate != undefined)
+                    feeRate = parseFloat(calcItem.feeRate).toDecimal(decimalObj.feeRate);
+
+                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);
+                    calcItem.tenderUnitFee = (eval(tExpr) * feeRate * 0.01).toDecimal(decimalObj.decimal('unitPrice', treeNode));
+                    calcItem.tenderTotalFee = (calcItem.tenderUnitFee * treeNode.data.tenderQuantity).toDecimal(decimalObj.decimal('totalPrice', treeNode));
+                };
+
+                if (calcItem.fieldName) {
+                    fnArr.push(calcItem.fieldName);
+                    calcTools.checkFeeField(treeNode, calcItem);
+                };
+            };
+
+            if (tender == tenderTypes.ttReverseRation || tender == tenderTypes.ttReverseGLJ)
+                this.calcTenderReverse(treeNode, tender);
+            deleteUselessFees(treeNode, fnArr);
+        };
+    };
+
     // 存储、刷新零散的多个结点。
     saveNodes(treeNodes, callback){
         if (treeNodes.length < 1) {