Преглед изворни кода

feat: 甘肃养护2021清单基数

vian пре 4 година
родитељ
комит
3b62503c91
2 измењених фајлова са 352 додато и 1 уклоњено
  1. 3 0
      web/building_saas/main/js/views/calc_base_view.js
  2. 349 1
      web/over_write/js/gansu_2021.js

+ 3 - 0
web/building_saas/main/js/views/calc_base_view.js

@@ -161,6 +161,9 @@ let calcBaseView = {
     toViewData: function (obj) {
         let rst = [];
         for(let figure in obj){
+            if (invisibleBases && invisibleBases.includes(figure)) {
+                continue;
+            }
             let figureObj = Object.create(null);
             figureObj.base = figure;
             figureObj.price = projectObj.project.calcBase.getBase(figure);

+ 349 - 1
web/over_write/js/gansu_2021.js

@@ -15,4 +15,352 @@ if (typeof feeRateObject !== 'undefined') {
         }
         return result;
     }
-}
+}
+
+// 清单基数
+const progression = ['养护单位(业主)管理费', '养护单位(业主)管理费(未单独设置)', '养护项目审计费', '养护工程监理费(路线工程)', '养护工程监理费(桥梁及隧道工程)', '设计文件审查费', '养护工程设计费(路线工程)', '养护工程设计费(独立桥梁、隧道工程)', '施工场地建设费'];
+const deficiency = {};
+if (typeof baseFigureMap !== 'undefined') {
+    const { fixedFlag } = commonConstants;
+    const budgetMap = {
+        // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示。
+        '建筑安装工程费': {
+            base: 'JZAZGCF',
+            fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+            filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+            pick: false,
+        },
+        // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示
+        '建筑安装工程费(不含设备费)': {
+            base: 'JZAZGCFBHSB',
+            fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+            filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+            pick: false
+        },
+        // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示
+        '定额建筑安装工程费': {
+            base: 'DEJZAZGCF',
+            fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+            filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+            pick: false
+        },
+        '设备费': {
+            base: 'SBF',
+            fixedFlag: fixedFlag.EQUIPMENT_ACQUISITION_FEE,
+            filter: [fixedFlag.EQUIPMENT_ACQUISITION_FEE],
+            pick: false
+        },
+        '定额设备费': {
+            base: 'DESBF',
+            fixedFlag: fixedFlag.EQUIPMENT_ACQUISITION_FEE,
+            filter: [fixedFlag.EQUIPMENT_ACQUISITION_FEE],
+            pick: false
+        },
+        // 显示:除清单固定类别是“养护工程费”的以外部分可显示
+        '养护工程费': {
+            base: 'YHGCF',
+            fixedFlag: fixedFlag.MAINTENANCE_FEE,
+            filter: [fixedFlag.MAINTENANCE_FEE],
+            pick: false
+        },
+        // 显示:除清单固定类别是“养护工程费”的以外部分可显示。
+        '定额养护工程费': {
+            base: 'DEYHGCF',
+            fixedFlag: fixedFlag.MAINTENANCE_FEE,
+            filter: [fixedFlag.MAINTENANCE_FEE],
+            pick: false
+        },
+        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+        '养护单位(业主)管理费': {
+            isProgressive: true,
+            base: 'YHDWYZGLF',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+        '养护单位(业主)管理费(未单独设置)': {
+            isProgressive: true,
+            base: 'YHDWYZGLFWDDSZ',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+        '养护项目审计费': {
+            isProgressive: true,
+            base: 'YHXMSJF',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+        '养护工程监理费(路线工程)': {
+            isProgressive: true,
+            base: 'YHGCJLFLXGC',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+        '养护工程监理费(桥梁及隧道工程)': {
+            isProgressive: true,
+            base: 'YHGCJLFQLJSDGC',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
+        '设计文件审查费': {
+            isProgressive: true,
+            base: 'SJWJSCF',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
+        '养护工程设计费(路线工程)': {
+            isProgressive: true,
+            base: 'YHGCSJFLXGC',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
+        '养护工程设计费(独立桥梁、隧道工程)': {
+            isProgressive: true,
+            base: 'YHGCSJFQLSDGC',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        '施工场地建设费': {
+            isProgressive: true,
+            base: 'SGCDJSF',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+        },
+        // 显示:除清单固定类别是“一二三四部分合计”的以外部分可显示。
+        '一二三四部分合计': {
+            base: 'YESSBFHJ',
+            fixedFlag: fixedFlag.ONE_TO_FOUR_TOTAL,
+            filter: [fixedFlag.ONE_TO_FOUR_TOTAL],
+            pick: false,
+        },
+        // 显示:仅“价差预备费”可显示
+        '价差预备费': {
+            base: 'JCYBF',
+            fixedFlag: null,
+            filter: [fixedFlag.SPREAD_BUDGET_FEE],
+            pick: true,
+        },
+    };
+    const boqMap = {
+        //仅允许用于固定类别是“第100章至700章清单”以外的清单
+        '专项暂定合计': {
+            base: 'ZXZDHJ',
+            fixedFlag: null,
+            filter: [fixedFlag.ONE_SEVEN_BILLS],
+            pick: false
+        },
+        /*
+        *  清单固定行[第100章至700章清单]下的[第100章清单]需要允许清单可使用基数{100章以外合计}
+        *  因此{100章以外合计}不设置关联的清单固定行
+        * */
+        //仅允许用于固定类别为“100章清单”引用
+        '100章以外清单合计': {
+            base: 'YBZYHQDHJ',
+            fixedFlag: null,
+            filter: [fixedFlag.ONE_HUNDRED_BILLS],
+            pick: true
+        }
+    };
+    baseFigureMap.budget = budgetMap;
+    baseFigureMap.boq = boqMap;
+}
+
+if (typeof baseFigureTemplate !== 'undefined') {
+    const { fixedFlag } = commonConstants;
+    baseFigureTemplate.budget = {
+        // 建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的建安费。
+        JZAZGCF(tender) {
+            return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
+        },
+        // 建筑安装工程费(不含设备费)算法:取清单固定类别是“建筑安装工程费”的金额 - {设备费}。
+        JZAZGCFBHSB(tender) {
+            return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.EQUIPMENT_ACQUISITION_FEE], tender, 'common');
+        },
+        // 定额建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)。
+        DEJZAZGCF(tender) {
+            const feeField = 'rationCommon';
+            const deductFlags = [fixedFlag.EQUIPMENT_ACQUISITION_FEE];
+            //建安费扣除定额设备购置费
+            const afterDeductFee = cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, deductFlags, tender, feeField, false);
+            //定额设备购置费
+            const equipmentAcFee = cbTools.getBaseFee(deductFlags[0], tender, feeField);
+            return (afterDeductFee + equipmentAcFee * 0.4).toDecimal(decimalObj.bills.totalPrice);
+        },
+        // 设备费 算法:取清单固定类别是“设备购置”的建安费
+        SBF(tender) {
+            return cbTools.getBaseFee(fixedFlag.EQUIPMENT_ACQUISITION_FEE, tender, 'common');
+        },
+        // 设备费 算法:取清单固定类别是“设备购置”的定额建安费
+        DESBF(tender) {
+            return cbTools.getBaseFee(fixedFlag.EQUIPMENT_ACQUISITION_FEE, tender, 'rationCommon');
+        },
+        // 养护工程费 算法:取清单固定类别是“养护工程费”的金额。
+        YHGCF(tender) {
+            return cbTools.getBaseFee(fixedFlag.MAINTENANCE_FEE, tender, 'common');
+        },
+        // 定额养护工程费 算法:取清单固定类别是“养护工程费”的定额建安费(其中定额设备费按40%计算)。
+        DEYHGCF(tender) {
+            const feeField = 'rationCommon';
+            const deductFlags = [fixedFlag.EQUIPMENT_ACQUISITION_FEE];
+            //建安费扣除定额设备购置费
+            const afterDeductFee = cbTools.getFeeWithDeduction(fixedFlag.MAINTENANCE_FEE, deductFlags, tender, feeField, false);
+            //定额设备购置费
+            const equipmentAcFee = cbTools.getBaseFee(deductFlags[0], tender, feeField);
+            return (afterDeductFee + equipmentAcFee * 0.4).toDecimal(decimalObj.bills.totalPrice);
+        },
+        // 养护单位(业主)管理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。。
+        YHDWYZGLF(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护单位(业主)管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护单位(业主)管理费(未单独设置) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
+        YHDWYZGLFWDDSZ(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护单位(业主)管理费(未单独设置)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护项目审计费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
+        YHXMSJF(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护项目审计费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护工程监理费(路线工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+        YHGCJLFLXGC(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护工程监理费(路线工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护工程监理费(桥梁及隧道工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+        YHGCJLFQLJSDGC(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护工程监理费(桥梁及隧道工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 设计文件审查费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
+        SJWJSCF(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '设计文件审查费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护工程设计费(路线工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+        YHGCSJFLXGC(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护工程设计费(路线工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 养护工程设计费(独立桥梁、隧道工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+        YHGCSJFQLSDGC(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '养护工程设计费(独立桥梁、隧道工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 施工场地建设费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+        SGCDJSG(tender) {
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (!tender) {
+                calcBase.baseProgressiveFee = baseFee;
+            }
+            return calculateUtil.getProgressiveFee(baseFee, '施工场地建设费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+        },
+        // 一二三四部分合计 算法:取清单固定类别是“一二三四部分合计”的金额
+        YESSBFHJ(tender) {
+            return cbTools.getBaseFee(fixedFlag.ONE_TO_FOUR_TOTAL, tender, 'common');
+        },
+        /*  价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
+            价差预备费 P * [(1+i)^(n-1) -1]
+            P——建筑安装工程费总额(元);
+            i——年工程造价增涨率(%);
+            n——设计文件编制年至养护项目开工年+养护项目建设期限(年)。
+        */
+        JCYBF(tender) {
+            //建筑安装工程费作为基数
+            const installFee = this['JZAZGCF'](tender);
+            //年造价增涨
+            const costGrowthRate = calcBase.project.property.costGrowthRate
+                ? calcBase.project.property.costGrowthRate
+                : 0;
+            //增涨计费年限
+            const growthPeriod = projectObj.project.property.growthPeriod
+                ? calcBase.project.property.growthPeriod
+                : 0;
+            //= P * [(1+i)^(n-1) -1]
+            return (installFee * (Math.pow(1 + costGrowthRate, growthPeriod - 1) - 1)).toDecimal(decimalObj.bills.totalPrice);
+        }
+
+    };
+
+    baseFigureTemplate.boq = {
+        //{专项暂定合计}
+        // 第100章至700章清单行的暂估合价
+        'ZXZDHJ': function (tender) {
+            return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, 'estimate');
+        },
+        //{100章以外清单合计}
+        // 取清单固定清单[第100章至700章清单]的金额,但扣除清单100章下的金额。
+        // 如果是固定清单[第100章至700章清单]下100章以外清单引用此基数,要排除自身(目前只允许100章的清单使用,所以暂时不需要此判断)
+        'YBZYHQDHJ': function (tender) {
+            let oneToSeven = cbTools.findNodeByFlag(fixedFlag.ONE_SEVEN_BILLS);
+            if (!oneToSeven) {
+                return 0;
+            }
+            //100-700章固定节点的所有子节点
+            let allChildren = [];
+            function getChildren(nodes) {
+                allChildren = allChildren.concat(nodes);
+                for (let node of nodes) {
+                    if (node.children.length > 0) {
+                        getChildren(node.children);
+                    }
+                }
+            }
+            getChildren(oneToSeven.children);
+            //扣除的节点:100章的节点[100-200)
+            let deductNodes = allChildren.filter(cbTools.withingOneHundred);
+            //计算金额
+            let fullFeeField = tender ? 'common.tenderTotalFee' : 'common.totalFee';
+            return projectObj.project.calcProgram.getTotalFee([oneToSeven], deductNodes, fullFeeField).toDecimal(decimalObj.bills.totalPrice);
+        }
+    };
+}
+
+if (typeof module !== 'undefined') {
+  module.exports = {
+      progression,
+      deficiency,
+  };
+}
+// 不显示但可的基数
+const invisibleBases = ['设备费', '定额设备费'];