浏览代码

1、机上人工费价差算法调整。
2、燃料动力费价差算法调整。
3、覆盖调整:基数要区分一般计税和简易计税。

chenshilong 6 年之前
父节点
当前提交
e49d73d36e

+ 48 - 19
web/building_saas/main/js/models/calc_program.js

@@ -309,28 +309,57 @@ let calcTools = {
         if (!treeNode.data.gljList) return 0;
         let me = this, result = 0;
         let price = 0, temp = 0, temp2 = 0;
-        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){
+        // 机械组成物价差: 机上人工、动力燃料
+        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);
+                        // }
+                    }
+                    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);
+                    };
                 };
             };
         };

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

@@ -824,6 +824,8 @@ var projectObj = {
                 let quantityTime = +new Date();
                 console.log(`计算quantity时间——${quantityTime - mTime}`);
                 that.project.property = projectInfoObj.projectInfo.property;
+                if (overwriteRationCalcBases)
+                    overwriteRationCalcBases(that.project.property.taxType);
                 //that.project.calcProgram.compileAllTemps();
                 that.project.calcBase.init(that.project);
                 // that.project.calcFields = JSON.parse(JSON.stringify(cpFeeTypes));

+ 121 - 120
web/over_write/js/chongqing_2018.js

@@ -46,12 +46,6 @@ if(typeof materialComponent !== 'undefined'){
 }
 
 // CSL, 2018-08-21 计算程序、基数 的覆盖。---------------------------------------------------------------------------------
-const baseMachineTypes_CQ_2018_JX = [           // 重庆2018新定额施工机具之三大机械类型
-    gljType.GENERAL_MACHINE,
-    gljType.INSTRUMENT,
-    gljType.OTHER_MACHINE_USED
-];
-
 baseMaterialTypes.push(gljType.OTHER_MATERIAL);
 allMaterialTypes.delete(gljType.EQUIPMENT);
 baseMachineTypes.delete(gljType.MACHINE_COMPOSITION);
@@ -60,122 +54,129 @@ baseMachineTypes.push(gljType.INSTRUMENT, gljType.FUEL_POWER_FEE, gljType.DEPREC
     gljType.VERIFICATION_FEE, gljType.OTHER_FEE, gljType.OTHER_MACHINE_USED);
 baseMachineMasterTypes.push(gljType.INSTRUMENT);
 
-if (rationCalcBases){
-    for (let key in rationCalcBases) {
-        delete rationCalcBases[key];
-    };
+let overwriteRationCalcBases = function (taxType){
+    if (rationCalcBases){
+        for (let key in rationCalcBases) {
+            delete rationCalcBases[key];
+        };
+        let isJY = taxType == '2';
 
-    rationCalcBases['定额人工费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice, isTender);
-    };
-    rationCalcBases['定额材料费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice, isTender);
-    };
-    rationCalcBases['定额其他材料费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.OTHER_MATERIAL], priceTypes.ptBasePrice, isTender);
-    };
-    rationCalcBases['定额施工机具使用费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, baseMachineTypes_CQ_2018_JX, priceTypes.ptBasePrice, isTender);
-    };
-    rationCalcBases['主材费(市场价)'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.MAIN_MATERIAL], priceTypes.ptMarketPrice, isTender);
-    };
-    rationCalcBases['人工工日'] = function (node, isTender) {
-        return calcTools.labourDays(node, isTender);
-    };
-    rationCalcBases['人工费价差'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptDiffPrice, isTender);
-    };
-    rationCalcBases['材料费价差'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptDiffPrice, isTender);
-    };
-    rationCalcBases['计价材料价差'] = function (node, isTender) {
-        let baseMaterialTypesWithoutOtherMaterial = [
-            gljType.GENERAL_MATERIAL,
-            gljType.CONCRETE,
-            gljType.MORTAR,
-            gljType.MIX_RATIO,
-            gljType.COMMERCIAL_CONCRETE,
-            gljType.COMMERCIAL_MORTAR
-        ];
-        return calcTools.rationBaseFee(node, baseMaterialTypesWithoutOtherMaterial, priceTypes.ptDiffPrice, isTender);
-    };
-    rationCalcBases['机上人工费价差'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.MACHINE_LABOUR], priceTypes.ptDiffPrice, isTender);
-    };
-    rationCalcBases['燃料动力费价差'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.FUEL_POWER_FEE], priceTypes.ptDiffPrice, isTender);
-    };
-    rationCalcBases['定额其他施工机具使用费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender);
-    };
-    rationCalcBases['机械折旧费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
-            gljType.DEPRECIATION_FEE, isTender);
-    };
-    rationCalcBases['特大机械检修费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [1, 2], baseMachineMasterTypes,
-            gljType.INSPECTION_FEE, isTender);
-    };
-    rationCalcBases['中小机械检修费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [3, 4], baseMachineMasterTypes,
-            gljType.INSPECTION_FEE, isTender);
-    };
-    rationCalcBases['特大机械维护费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [1, 2], baseMachineMasterTypes,
-            gljType.MAINTENANCE, isTender);
-    };
-    rationCalcBases['中小机械维护费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [3, 4], baseMachineMasterTypes,
-            gljType.MAINTENANCE, isTender);
-    };
-    rationCalcBases['安拆费及场外运输费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
-            gljType.DISMANTLING_FREIGHT_FEE, isTender);
-    };
-    rationCalcBases['燃料动力费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
-            gljType.FUEL_POWER_FEE, isTender);
-    };
-    rationCalcBases['定额仪器仪表费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.INSTRUMENT], priceTypes.ptBasePrice, isTender);
-    };
-    rationCalcBases['建筑面积'] = function (node, isTender) {
-        return calcTools.getProjectFeatureProperty('buildingArea');
-    };
-    rationCalcBases['甲供定额人工费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, '甲供定额人工费', isTender);
-    };
-    rationCalcBases['甲供定额材料费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, '甲供定额材料费', isTender);
-    };
-    rationCalcBases['甲供定额施工机具费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, '甲供定额施工机具费', isTender);
-    };
-    rationCalcBases['甲供主材费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, '甲供主材费', isTender);
-    };
-    rationCalcBases['甲定定额人工费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, '甲定定额人工费', isTender);
-    };
-    rationCalcBases['甲定定额材料费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, '甲定定额材料费', isTender);
-    };
-    rationCalcBases['甲定定额施工机具费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, '甲定定额施工机具费', isTender);
-    };
-    rationCalcBases['甲定主材费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, '甲定主材费', isTender);
-    };
-    rationCalcBases['暂估材料费'] = function (node, isTender) {
-        return calcTools.estimateFee(node, true, isTender);
+        rationCalcBases['定额人工费'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice, isTender);
+        };
+        rationCalcBases['定额材料费'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice, isTender);
+        };
+        rationCalcBases['定额其他材料费'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.OTHER_MATERIAL], priceTypes.ptBasePrice, isTender);
+        };
+        rationCalcBases['定额施工机具使用费'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE, gljType.INSTRUMENT], priceTypes.ptBasePrice, isTender);
+        };
+        rationCalcBases['主材费(市场价)'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.MAIN_MATERIAL], priceTypes.ptMarketPrice, isTender);
+        };
+        rationCalcBases['人工工日'] = function (node, isTender) {
+            return calcTools.labourDays(node, isTender);
+        };
+        rationCalcBases['人工费价差'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptDiffPrice, isTender);
+        };
+        rationCalcBases['材料费价差'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptDiffPrice, isTender);
+        };
+        if (isJY){
+            rationCalcBases['计价材料价差'] = function (node, isTender) {
+                let baseMaterialTypesWithoutOtherMaterial = [
+                    gljType.GENERAL_MATERIAL,
+                    gljType.CONCRETE,
+                    gljType.MORTAR,
+                    gljType.MIX_RATIO,
+                    gljType.COMMERCIAL_CONCRETE,
+                    gljType.COMMERCIAL_MORTAR
+                ];
+                return calcTools.rationBaseFee(node, baseMaterialTypesWithoutOtherMaterial, priceTypes.ptDiffPrice, isTender);
+            };
+        };
+        rationCalcBases['机上人工费价差'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.MACHINE_LABOUR], priceTypes.ptDiffPrice, isTender);
+        };
+        rationCalcBases['燃料动力费价差'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.FUEL_POWER_FEE], priceTypes.ptDiffPrice, isTender);
+        };
+        if (isJY) {
+            rationCalcBases['定额其他施工机具使用费'] = function (node, isTender) {
+                return calcTools.rationBaseFee(node, [gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender);
+            };
+            rationCalcBases['机械折旧费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
+                    gljType.DEPRECIATION_FEE, isTender);
+            };
+            rationCalcBases['特大机械检修费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [1, 2], baseMachineMasterTypes,
+                    gljType.INSPECTION_FEE, isTender);
+            };
+            rationCalcBases['中小机械检修费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [3, 4], baseMachineMasterTypes,
+                    gljType.INSPECTION_FEE, isTender);
+            };
+            rationCalcBases['特大机械维护费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [1, 2], baseMachineMasterTypes,
+                    gljType.MAINTENANCE, isTender);
+            };
+            rationCalcBases['中小机械维护费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [3, 4], baseMachineMasterTypes,
+                    gljType.MAINTENANCE, isTender);
+            };
+            rationCalcBases['安拆费及场外运输费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
+                    gljType.DISMANTLING_FREIGHT_FEE, isTender);
+            };
+            rationCalcBases['燃料动力费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
+                    gljType.FUEL_POWER_FEE, isTender);
+            };
+            rationCalcBases['定额仪器仪表费'] = function (node, isTender) {
+                return calcTools.rationBaseFee(node, [gljType.INSTRUMENT], priceTypes.ptBasePrice, isTender);
+            };
+        };
+        rationCalcBases['建筑面积'] = function (node, isTender) {
+            return calcTools.getProjectFeatureProperty('buildingArea');
+        };
+        rationCalcBases['甲供定额人工费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲供定额人工费', isTender);
+        };
+        rationCalcBases['甲供定额材料费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲供定额材料费', isTender);
+        };
+        rationCalcBases['甲供定额施工机具费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲供定额施工机具费', isTender);
+        };
+        rationCalcBases['甲供主材费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲供主材费', isTender);
+        };
+        rationCalcBases['甲定定额人工费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲定定额人工费', isTender);
+        };
+        rationCalcBases['甲定定额材料费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲定定额材料费', isTender);
+        };
+        rationCalcBases['甲定定额施工机具费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲定定额施工机具费', isTender);
+        };
+        rationCalcBases['甲定主材费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲定主材费', isTender);
+        };
+        rationCalcBases['暂估材料费'] = function (node, isTender) {
+            return calcTools.estimateFee(node, true, isTender);
+        };
+        // rationCalcBases['分包定额施工机具费'] = function (node, isTender) {
+        //     if (node.data.isSubcontract)
+        //         return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE, gljType.INSTRUMENT, gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender)
+        //     else
+        //         return 0;
+        // };
     };
-    // rationCalcBases['分包定额施工机具费'] = function (node, isTender) {
-    //     if (node.data.isSubcontract)
-    //         return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE, gljType.INSTRUMENT, gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender)
-    //     else
-    //         return 0;
-    // };
 };
 
 var cpFeeTypes2018 = [