Parcourir la source

定额开通计算程序

chenshilong il y a 4 ans
Parent
commit
37742ef5f7

+ 5 - 5
web/building_saas/main/html/main.html

@@ -80,7 +80,7 @@
         <li class="nav-item"><a data-toggle="tab" href="#calc_program_manage" id="tab_calc_program_manage" role="tab"
             style="display:none">总计算程序</a></li>
         <li class="nav-item"><a data-toggle="tab" href="#tender_price" id="tab_tender_price" role="tab" style="display:none">调价</a></li>
-     
+
         <li class="nav-item"><a data-toggle="tab" href="#reports" role="tab" id="tab_report"
             onclick="rptTplObj.iniPage();">报表</a></li>
         <li class="nav-item"><a data-toggle="tab" href="#index" id="tab_index" role="tab" style="display:none">指标信息</a>
@@ -174,7 +174,7 @@
                  <!--  <a id="menu_index_info" href="javascript:void(0);" style="display: none" class="dropdown-item"><i
                       class="fa fa-database" aria-hidden="true"></i> 指标信息</a> -->
                 </div>
-              </div> 
+              </div>
              <!--  <a href="javascript:void(0)" class="btn btn-light btn-sm" id="locate-sub">分项</a>
               <a href="javascript:void(0)" class="btn btn-light btn-sm" id="locate-measure">措施</a>
               <a href="javascript:void(0)" class="btn btn-light btn-sm" id="locate-other">其他</a> -->
@@ -281,9 +281,9 @@
                       <a class="nav-link sub-item" id="linkGCLMX" data-toggle="tab" href="#subSpread"
                         role="tab">工程量明细</a>
                     </li>
-                    <!--<li class="nav-item">-->
-                      <!--<a class="nav-link sub-item" id="linkJSCX" data-toggle="tab" href="#subSpread" role="tab">计算程序</a>-->
-                    <!--</li>-->
+                    <li class="nav-item">
+                      <a class="nav-link sub-item" id="linkJSCX" data-toggle="tab" href="#subSpread" role="tab">计算程序</a>
+                    </li>
                     <!-- <li class="nav-item">   2018-11-08  新需求,隐藏说明信息
                                       <a class="nav-link" data-toggle="tab" href="#comments" role="tab" id="linkComments">说明信息</a>
                                   </li>-->

+ 51 - 12
web/building_saas/main/js/models/calc_program.js

@@ -51,6 +51,15 @@ let calcTools = {
     isNullBill: function (treeNode) {
         return this.isLeafBill(treeNode) && (treeNode.children.length === 0) && (!treeNode.data.calcBase);
     },
+    // 无效的、影响正常计算的行(无意义的空行、没有金额的行等)
+    isInvalidNode: function (treeNode) {
+        return !(
+            treeNode.data &&
+            treeNode.data.feesIndex &&
+            treeNode.data.feesIndex.common &&
+            treeNode.data.feesIndex.common.totalFee
+        );
+    },
     isCalcBaseBill: function(treeNode){
         return this.isLeafBill(treeNode) && (treeNode.children.length === 0) && (treeNode.data.calcBase);
     },
@@ -1823,7 +1832,7 @@ class CalcProgram {
             me.innerCalcBillCustom(treeNode)
         // 定额:计算程序
         else
-            me.innerCalcRation2(treeNode, tenderType);
+            me.innerCalcRation(treeNode, tenderType);
 
         if (!calcTools.isTotalCostBill(treeNode))  // 已在上面的分支中计算过
             calcTools.estimateFee(treeNode);
@@ -2072,10 +2081,22 @@ class CalcProgram {
             if (calcTools.isVP_or_GLJR(treeNode)){
                 let u = treeNode.data.marketUnitFee ? treeNode.data.marketUnitFee : 0;
                 let t = (u * nQ).toDecimal(decimalObj.ration.totalPrice);
-                if (treeNode.data.marketTotalFee != t){
+                if ((treeNode.data.marketTotalFee != t) ||
+                    (!treeNode.data.feesIndex || !treeNode.data.feesIndex.common || (treeNode.data.feesIndex.common.totalFee != t))
+                ){
+
                     treeNode.data.marketTotalFee = t;
+                    let obj = {};
+                    obj.fieldName = 'common';
+                    obj.unitFee = u;
+                    obj.totalFee = t;
+                    obj.tenderUnitFee = obj.unitFee;
+                    obj.tenderTotalFee = obj.totalFee;
+                    calcTools.checkFeeField(treeNode, obj);
+                    me.deleteUselessFees(treeNode, budgetFields);
                     treeNode.changed = true;
                 } ;
+                return;
             };
         };
 
@@ -2089,6 +2110,33 @@ class CalcProgram {
 
             calcTools.initFees(treeNode);
 
+            // 只有人、材、机、主、设。
+            let sum = 0;
+            for (let i = 0; i < 5; i++) {
+                if (!rationCalcBases[budgetBaseNames[i]]){
+                    hintBox.infoBox('错误提示', `定额基数${hintBox.font('[' +funcNames[i] + ']')}未定义!`, 1);
+                    return;
+                }
+                let obj = {};
+                obj.fieldName = budgetFields[i];
+                obj.unitFee = (rationCalcBases[budgetBaseNames[i]](treeNode)).toDecimal(decimalObj.decimal('unitPrice', treeNode));
+                obj.totalFee = (obj.unitFee * nQ).toDecimal(decimalObj.decimal('totalPrice', treeNode));
+                obj.tenderUnitFee = obj.unitFee;
+                obj.tenderTotalFee = obj.totalFee;
+                sum = sum + obj.unitFee;
+                calcTools.checkFeeField(treeNode, obj);
+            };
+
+            let obj = {};
+            obj.fieldName = 'common';
+            obj.unitFee = obj.unitFee = sum.toDecimal(decimalObj.decimal('unitPrice', treeNode));
+            obj.totalFee = (obj.unitFee * nQ).toDecimal(decimalObj.decimal('totalPrice', treeNode));
+            obj.tenderUnitFee = obj.unitFee;
+            obj.tenderTotalFee = obj.totalFee;
+            calcTools.checkFeeField(treeNode, obj);
+
+            me.deleteUselessFees(treeNode, budgetFields);
+
             for (let idx of template.compiledSeq) {
                 let calcItem = template.calcItems[idx];
                 $CE.tempCalcItem = calcItem;
@@ -2102,17 +2150,7 @@ class CalcProgram {
                 let tExpr = analyzer.getCompiledTenderExpr(calcItem.compiledExpr);
                 calcItem.tenderUnitFee = (eval(tExpr) * feeRate * 0.01).toDecimal(decimalObj.decimal('unitPrice', treeNode));
                 calcItem.tenderTotalFee = (calcItem.tenderUnitFee * nTQ).toDecimal(decimalObj.decimal('totalPrice', treeNode));
-
-                if (calcItem.fieldName) {
-                    fnArr.push(calcItem.fieldName);
-                    calcTools.checkFeeField(treeNode, calcItem);
-                };
             };
-
-            if (tenderType == tenderTypes.ttReverseRation || tenderType == tenderTypes.ttReverseGLJ)
-              this.reverseTenderCalc(treeNode, tenderType);
-
-            me.deleteUselessFees(treeNode, fnArr);
         };
     };
 
@@ -2613,6 +2651,7 @@ class CalcProgram {
             let arr = [];
             for (let i = 0; i < tender_obj.tenderTree.items.length; i++) {
                 let node = tender_obj.tenderTree.items[i];
+                if (calcTools.isInvalidNode(node)) continue;
                 // 量价还是要参与,因为它贡献了金额,如果它的金额比重很大,它退出了,会导致其它结点过调。
                 // if (calcTools.isRationCategory(node) && (!calcTools.isVP_or_GLJR(node))){
                 if (calcTools.isRationCategory(node)){