Explorar o código

甲供、甲定。

chenshilong %!s(int64=7) %!d(string=hai) anos
pai
achega
8bac0c3dcc

+ 93 - 14
web/building_saas/main/js/models/calc_program.js

@@ -97,7 +97,6 @@ let defaultBillTemplate = {
         }
     ]
 };*/
-
 let calcTools = {
     getNodeByFlag: function (flag) {
         let bill = cbTools.findBill(flag);
@@ -249,10 +248,10 @@ let calcTools = {
         }
         return result;
     },
-    // 这里的小数取舍比较复杂,必须严格遵循需求,不能随意改动,否则计算结果会差1分钱。
+    // 父清单暂估费的汇总计算走计算程序逻辑,不在这里。这里的小数取舍比较复杂,必须严格遵循需求,不能随意改动,否则计算结果会有误差:如差1分钱。
     estimateFee: function (treeNode, isBase = false){
         let me = this, sumU = 0, sumT = 0;
-        // 父清单暂估费的汇总计算走计算程序逻辑,不在这里。
+        // 总造价暂估费
         if (me.isTotalCostBill(treeNode)){
             let nodes = projectObj.project.mainTree.roots;
             for (let node of nodes){
@@ -348,11 +347,11 @@ let calcTools = {
         if (treeNode.data.type != rationType.volumePrice && treeNode.data.type != rationType.gljRation) return;
         let result = 0, me = this;
         if (
-            (treeNode.data.subType === gljType.LABOUR && baseName === '定额基价人工费') ||
-            (baseMaterialTypes.includes(treeNode.data.subType) && baseName === '定额基价材料费') ||
-            (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === '定额基价机械费') ||
-            (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === '主材费') ||
-            (treeNode.data.subType === gljType.EQUIPMENT && baseName === '设备费')) {
+            (treeNode.data.subType === gljType.LABOUR && baseName === calcBaseNames.DEJJRGF) ||
+            (baseMaterialTypes.includes(treeNode.data.subType) && baseName === calcBaseNames.DEJJCLF) ||
+            (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === calcBaseNames.DEJJJXF) ||
+            (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === calcBaseNames.ZCF) ||
+            (treeNode.data.subType === gljType.EQUIPMENT && baseName === calcBaseNames.SBF)) {
             if (treeNode.data.type == rationType.volumePrice)
                 result = treeNode.data.marketUnitFee ? parseFloat(treeNode.data.marketUnitFee).toDecimal(decimalObj.ration.unitPrice) : 0
             else if (treeNode.data.type == rationType.gljRation)
@@ -360,7 +359,7 @@ let calcTools = {
                 // 这里因为是算基数所以要取基价,但不能直接取basePrice,受限于项目属性的三个选项。
                 result = gljOprObj.getBasePrice(treeNode);
         }
-        else if (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === '定额基价机上人工费') {
+        else if (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === calcBaseNames.DEJJJSRGF) {
             let glj = {
                 'code': treeNode.data.code,
                 'name': treeNode.data.name,
@@ -373,9 +372,9 @@ let calcTools = {
         }
         else if (
             (treeNode.data.type == rationType.gljRation) &&
-            ((treeNode.data.subType === gljType.LABOUR && baseName === '人工费价差') ||
-                (baseMaterialTypes.includes(treeNode.data.subType) && baseName === '材料费价差') ||
-                (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === '机械费价差'))
+            ((treeNode.data.subType === gljType.LABOUR && baseName === calcBaseNames.RGFJC) ||
+                (baseMaterialTypes.includes(treeNode.data.subType) && baseName === calcBaseNames.CLFJC) ||
+                (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === calcBaseNames.JXFJC))
         ) {
             let aprice = me.uiGLJPrice(treeNode.data.adjustPrice);
             let mprice = me.uiGLJPrice(treeNode.data.marketUnitFee);
@@ -383,6 +382,56 @@ let calcTools = {
         }
         return result;
     },
+    supplyABFee: function (treeNode, baseName) {
+        if (!treeNode.data.gljList) return 0;
+        let projectGLJ = projectObj.project.projectGLJ;
+
+        let supplyT = [];
+        if (baseName.includes('甲供'))
+            supplyT = [supplyType.BFJG, supplyType.WQJG]
+        else if (baseName.includes('甲定'))
+            supplyT = [supplyType.JDYG];
+
+        let gljT = [], compositionArr = [];
+        if (baseName == calcBaseNames.JGDEJJRGF || baseName == calcBaseNames.JDDEJJRGF){
+            gljT = [gljType.LABOUR];
+        }
+        else if (baseName == calcBaseNames.JGDEJJCLF || baseName == calcBaseNames.JDDEJJCLF){
+            gljT = baseMaterialTypes;
+            compositionArr = compositionTypes;
+        }
+        else if (baseName == calcBaseNames.JGDEJJJXF || baseName == calcBaseNames.JDDEJJJXF){
+            gljT = baseMachineTypes;
+            compositionArr = [gljType.GENERAL_MACHINE];
+        }
+        else if (baseName == calcBaseNames.JGZCF || baseName == calcBaseNames.JDZCF){
+            gljT = [gljType.MAIN_MATERIAL];
+            compositionArr = [gljType.MAIN_MATERIAL];
+        }
+        else if (baseName == calcBaseNames.JGSBF || baseName == calcBaseNames.JDSBF){
+            gljT = [gljType.EQUIPMENT];
+        };
+
+        let pGLJs = projectGLJ.getGLJsBySupply(supplyT, gljT);
+        if (pGLJs.length == 0) return 0;
+
+        let pGLJIdx = {};
+        for (let pglj of pGLJs){pGLJIdx[pglj.GLJID] = pglj};
+
+        let sum = 0;
+        for (let glj of treeNode.data.gljList){
+            if (pGLJIdx[glj.GLJID]) {
+                if (compositionArr.includes(glj.type) && 1) {
+                }
+                else {
+                    sum = sum + glj.basePrice * glj.quantity;
+                };
+
+            }
+        };
+        sum = sum.toDecimal(decimalObj.ration.unitPrice);
+        return sum;
+    },
     getCalcType: function (treeNode) {
         if (this.isRationCategory(treeNode)){
             return treeNodeCalcType.ctRationCalcProgram;
@@ -467,6 +516,36 @@ let calcTools = {
     }
 };
 
+const calcBaseNames = {
+    DEJJRGF: '定额基价人工费',
+    DEJJCLF: '定额基价材料费',
+    DEJJJXF: '定额基价机械费',
+    DEJJJSRGF: '定额基价机上人工费',
+    RGFJC: '人工费价差',
+    CLFJC: '材料费价差',
+    JXFJC: '机械费价差',
+    ZCF: '主材费',
+    SBF: '设备费',
+    RGGR: '人工工日',
+    JGDEJJRGF: '甲供定额基价人工费',
+    JGDEJJCLF: '甲供定额基价材料费',
+    JGDEJJJXF: '甲供定额基价机械费',
+    JGZCF: '甲供主材费',
+    JGSBF: '甲供设备费',
+    JDDEJJRGF: '甲定定额基价人工费',
+    JDDEJJCLF: '甲定定额基价材料费',
+    JDDEJJJXF: '甲定定额基价机械费',
+    JDZCF: '甲定主材费',
+    JDSBF: '甲定设备费',
+    ZGCLF: '暂估材料费',
+    FBDEJJRGF: '分包定额基价人工费',
+    FBDEJJCLF: '分包定额基价材料费',
+    FBDEJJJXF: '分包定额基价机械费',
+    FBZCF: '分包主材费',
+    FBSBF: '分包设备费',
+    FBRGGR: '分包人工工日'
+};
+
 const rationCalcBases = {
     '定额基价人工费': function (node) {
         return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice);
@@ -1012,8 +1091,8 @@ class CalcProgram {
                             rttf = parseFloatPlus(node.data.feesIndex[ft.type].tenderTotalFee).toDecimal(decimalObj.bills.totalPrice);
                         };
                         if (me.project.property.billsCalcMode === leafBillGetFeeType.rationContent) {
-                            buf = (buf + (ruf * rq / bq).toDecimal(decimalObj.bills.unitPrice)).toDecimal(decimalObj.bills.unitPrice);
-                            btuf = (btuf + (rtuf * rq / bq).toDecimal(decimalObj.bills.unitPrice)).toDecimal(decimalObj.bills.unitPrice);
+                            buf = (buf + (ruf * rq / bq).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
+                            btuf = (btuf + (rtuf * rq / bq).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
                         };
                         sum_rtf = (sum_rtf + rtf).toDecimal(decimalObj.process);
                         sum_rttf = (sum_rttf + rttf).toDecimal(decimalObj.process);

+ 4 - 1
web/building_saas/main/js/models/main_consts.js

@@ -55,6 +55,7 @@ const baseMaterialTypes = [
     gljType.COMMERCIAL_CONCRETE,
     gljType.COMMERCIAL_MORTAR
 ];
+// 计算基数 [定额基价机械费] 要用到的机械类型。
 const baseMachineTypes = [
     gljType.GENERAL_MACHINE,
     gljType.MACHINE_COMPOSITION,
@@ -76,7 +77,9 @@ const compositionTypes = [
     gljType.MAIN_MATERIAL,
     gljType.CONCRETE,
     gljType.MORTAR,
-    gljType.MIX_RATIO];
+    gljType.MIX_RATIO
+];
+
 const notEditType = [
     gljType.CONCRETE,
     gljType.MORTAR,

+ 7 - 0
web/building_saas/main/js/models/project_glj.js

@@ -68,6 +68,13 @@ ProjectGLJ.prototype.getDataByID = function (ID) {//根据项目工料机ID取
    return _.find(this.datas.gljList, {'id': ID});
 };
 
+// CSL, 2018-02-08 甲供、甲定。
+ProjectGLJ.prototype.getGLJsBySupply = function (supplyTypeArr, gljTypeArr) {
+    return _.filter(this.datas.gljList, function (glj) {
+        return supplyTypeArr.includes(glj.supply) && gljTypeArr.includes(glj.type);
+    });
+};
+
 /**
  * 修改工料机数据
  *

+ 2 - 0
web/building_saas/main/js/views/project_view.js

@@ -44,6 +44,8 @@ var projectObj = {
         c.dispExpr = '[定额基价人工费] + [定额基价材料费]  + F6 + [主材费]';
         let rst = analyzer.analyzeUserExpr(t, c);
         alert(`${rst}: ` + JSON.stringify(c));*/
+
+        // console.log(projectObj.project.projectGLJ.getGLJsBySupply([7]));
     },
     refreshBaseActn: function (tree) {
         let setButtonValid = function (valid, btn) {