Browse Source

Merge branch 'master' of http://192.168.1.41:3000/SmartCost/YangHuCost

chenshilong 3 years ago
parent
commit
9e2ed98a29

+ 27 - 0
modules/reports/rpt_component/jpc_rte.js

@@ -173,6 +173,33 @@ const JE = {
                 dataObj[field.DataNodeName][field.DataSeq][dataObj[field.DataNodeName][field.DataSeq].length] = newValue;
             }
         }
+    },
+    alignFieldDecimal: function(sourceID, destID) {
+        // 把source指标的精度align到dest
+        const me = JE;
+        let sourceField = null;
+        if (isNaN(parseInt(sourceID))) {
+            sourceField = sourceID;
+        } else {
+            sourceField = me.F(sourceID,$CURRENT_RPT);
+        }
+        let destField = null;
+        if (isNaN(parseInt(destID))) {
+            destField = destID;
+        } else {
+            destField = me.F(destID,$CURRENT_RPT);
+        }
+        if (sourceField[JV.PROP_PRECISION]) {
+            destField[JV.PROP_PRECISION] = sourceField[JV.PROP_PRECISION];
+            destField[JV.PROP_FIXED_PRECISION_AMT] = sourceField[JV.PROP_FIXED_PRECISION_AMT];
+        }
+    },
+    batchIniFields: function(IDArr) {
+        // 批处理查找指标
+        const me = JE;
+        for (let idxF = 0; idxF < IDArr.length; idxF++) {
+            IDArr[idxF] = me.F(IDArr[idxF],$CURRENT_RPT);
+        }
     }
 };
 

+ 0 - 5
public/calculate_util.js

@@ -113,11 +113,6 @@
             : beyondFee && fee > beyondFee
                 ? beyondFee
                 : fee;
-        return deficiencyFee
-            ? fee > 0 && fee < deficiencyFee
-                ? deficiencyFee
-                : fee
-            : fee;
     }
 
     /**

+ 2 - 1
web/building_saas/main/js/models/calc_base.js

@@ -1195,7 +1195,8 @@ let cbParser = {
   },
   //获取表达式中的中文式
   getCN: function (expr) {
-    let cnRex = /\d*[\u4e00-\u9fa5]{1,}\({0,}[\u4e00-\u9fa5]{0,}\*?\d*%*、?[\u4e00-\u9fa5]{0,}\){0,}[\u4e00-\u9fa5]{0,}/g;
+    //let cnRex = /\d*[\u4e00-\u9fa5]{1,}\({0,}[\u4e00-\u9fa5]{0,}\*?\d*%*、?[\u4e00-\u9fa5]{0,}\){0,}[\u4e00-\u9fa5]{0,}/g;
+    let cnRex = /\d*[\u4e00-\u9fa5]{1,}\({0,}[\u4e00-\u9fa5]{0,}\*?\d*%*、?[\u4e00-\u9fa5]{0,}\){0,}[\u4e00-\u9fa5]{0,}\(?[\u4e00-\u9fa5]{0,}\)?/g;
     return _.filter(expr.match(cnRex), function (data) {
       return data
     });

File diff suppressed because it is too large
+ 39 - 39
web/building_saas/main/js/models/feeRateConsts.js


+ 6 - 1
web/building_saas/main/js/views/calc_base_view.js

@@ -161,7 +161,12 @@ let calcBaseView = {
     toViewData: function (obj) {
         let rst = [];
         for(let figure in obj){
-            if (invisibleBases && invisibleBases.includes(figure)) {
+            if (typeof invisibleBases !== 'undefined' && invisibleBases.includes(figure)) {
+                continue;
+            }
+            const engName = projectObj.project.property.engineeringName;
+            const figureItem = obj[figure];
+            if (figureItem.engineeringList && figureItem.engineeringList.length && !figureItem.engineeringList.some(name => new RegExp(name).test(engName))) {
                 continue;
             }
             let figureObj = Object.create(null);

+ 5 - 2
web/building_saas/main/js/views/material_calc_view.js

@@ -197,7 +197,8 @@ materialCalcObj = {
     getUserFreightOptions :function () {
         let options = [];
         for(let uf of this.userFreightList){
-            options.push(uf.freight.start);
+            let start = uf.freight.start?uf.freight.start:'';
+            options.push(start);
         }
         return options;
     },
@@ -497,7 +498,9 @@ materialCalcObj = {
     checkSavedFreight:function (start) {
         let t = null;
         for(let f of this.userFreightList){
-            if(f.freight.start == start){
+            let old = f.freight.start?f.freight.start:'';
+            let newStart = start?start:'';
+            if(old == newStart){
                 t = f;
                 break;
             }

+ 2 - 2
web/building_saas/main/js/views/std_billsGuidance_lib.js

@@ -174,7 +174,7 @@ const billsGuidance = (function () {
             }
         }
     };
-    if (compilationName === '内蒙古高速公路日常养护估算(2021)') {
+    if (compilationName === '内蒙古高速公路日常养护估算(2021)' || compilationName === '广东农村养护(2021)') {
         bills.treeSetting.cols.push(
             {
                 width: 100,
@@ -1141,7 +1141,7 @@ const billsGuidance = (function () {
             }
             initViews();
             let callback = function () {
-                if (compilationName === '内蒙古高速公路日常养护估算(2021)') {
+                if (compilationName === '内蒙古高速公路日常养护估算(2021)' || compilationName === '广东农村养护(2021)') {
                     //给清单加点料 baseEstUnitPrice
                     chkAndAddEstUnitPrice(rstData.bills);
                 }

+ 21 - 16
web/building_saas/main/js/views/std_bills_unit_price_feature.js

@@ -128,7 +128,7 @@ function _commonChkAndSetPrice(curItem, isNeedFactor) {
         if (isMatch) {
             //再根据相关项目属性指定基数
             for (const bms of bm.subs) {
-                if (_chkUnitPriceFeatureKeys(bms.keys)) {
+                if (_chkUnitPriceFeatureKeys(bms.keys, curItem)) {
                     basicValue = bms.basicValue;
                     break;
                 }
@@ -155,7 +155,7 @@ function _commonChkAndSetPrice(curItem, isNeedFactor) {
             }
             if (isMatch) {
                 for (const fms of fm.subs) {
-                    if (_chkUnitPriceFeatureKeys(fms.keys)) {
+                    if (_chkUnitPriceFeatureKeys(fms.keys, curItem)) {
                         factors.push(fms.basicValue);
                     }
                 }
@@ -172,24 +172,29 @@ function _commonChkAndSetPrice(curItem, isNeedFactor) {
     return rst;
 }
 
-function _chkUnitPriceFeatureKeys(keys) {
-    let rst = false;
+function _chkUnitPriceFeatureKeys(keys, curItem) {
+    let rst = (keys.length > 0);
     for (const subKey of keys) {
-        let isPrjFeatureMatch = false;
-        for (let prjF of projectObj.project.projectInfo.property.projectFeature) {
-            if (prjF.key === subKey.key) {
-                if (prjF.value === subKey.value) {
-                    isPrjFeatureMatch = true;
-                    // isKeyMatch = true;
-                    break;
-                } else {
-                    //key相同而value不同,则无需再循环,直接退出
-                    break;
+        let isKeyMatch = false;
+        if (subKey.type === 'prjFeature') {
+            for (let prjF of projectObj.project.projectInfo.property.projectFeature) {
+                if (prjF.key === subKey.key) {
+                    if (prjF.value === subKey.value) {
+                        isKeyMatch = true;
+                        break;
+                    } else {
+                        //key相同而value不同,则说明不是这个设置值,无需再循环,直接退出
+                        break;
+                    }
                 }
             }
+        } else if (subKey.type === 'bills') {
+            //判断当前清单curItem
+            isKeyMatch = (curItem[subKey.key] === subKey.value);
         }
-        if (isPrjFeatureMatch) {
-            rst = true;
+        if (!isKeyMatch) {
+            //要所有的keys都匹配才行,否则false;
+            rst = false;
             break;
         }
     }

+ 4 - 4
web/building_saas/pm/html/project-management.html

@@ -362,9 +362,9 @@
                             <% } else { %>
                                 <div class="custom-control custom-radio custom-control-inline">
                                     <input type="radio" value="bill" id="radioBill" name="valuation_type" class="custom-control-input">
-                                    <label class="custom-control-label" <%= (compilationName.includes('公路造价') || compilationName.includes('广东农村养护(2021)')) ? '' : 'checked' %> for="radioBill">预算</label>
+                                    <label class="custom-control-label" <%= (compilationName.includes('公路造价')) ? '' : 'checked' %> for="radioBill">预算</label>
                                 </div>
-                                <div class="custom-control custom-radio custom-control-inline" <% if (compilationName.includes("广东农村养护(2021)")) { %> style="display:none" <% } %>>
+                                <div class="custom-control custom-radio custom-control-inline" <% if (!compilationName.includes("广东农村养护(2021)")) { %> style="display:none" <% } %>>
                                     <input type="radio" value="ration" id="radioRation" name="valuation_type" class="custom-control-input">
                                     <label class="custom-control-label" for="radioRation">工程量清单</label>
                                 </div>
@@ -386,7 +386,7 @@
                             </select>
                         </div>
                     </div>
-                    <div class="form-group row" id="tender-engineering-group" <% if (compilationName.includes("内蒙古高速公路日常养护估算(2021)") ) { %> style="display:none" <% } %>>
+                    <div class="form-group row" id="tender-engineering-group" <% if (compilationName.includes('内蒙古高速公路日常养护估算(2021)') ) { %> style="display:none" <% } %>>
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">养护类别</label>
                         <div class="col">
                             <select class="form-control  form-control-sm" id="tender-engineering">
@@ -394,7 +394,7 @@
                         </div>
                     </div>
                     <span class="form-text text-danger" id="engineering-info" style="display: none;">请选择养护类别</span>
-                    <div class="form-group row" id="tender-feeStandard-group" <% if (compilationName.includes("内蒙古高速公路日常养护估算(2021)") || compilationName.includes("广东农村养护(2021)") ) { %> style="display:none" <% } %>>
+                    <div class="form-group row" id="tender-feeStandard-group" <% if (compilationName.includes("内蒙古高速公路日常养护估算(2021)") ) { %> style="display:none" <% } %>>
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm" >费用标准</label>
                         <div class="col">
                             <select class="form-control  form-control-sm" id="tender-feeStandard"></select>

+ 2 - 6
web/building_saas/pm/js/pm_newMain.js

@@ -2592,15 +2592,11 @@ function initProjectOptSet($target) {
                                 ${_getOptionDivDomStr(FEASIBILITY, "valuation-type", "可行性估算", "type-feasibility", false)}
                                 ${_getOptionDivDomStr(ROUGH, "valuation-type", "概算", "type-rough", false)}
                             ` : ''}
-                            ${COMPILATION_NAME.includes('内蒙古高速公路日常养护估算(2021)') ? `
+                            ${ (COMPILATION_NAME.includes('内蒙古高速公路日常养护估算(2021)')) ? `
                                 ${_getOptionDivDomStr(ESTIMATION, "valuation-type", "估算", "type-suggestion", true)}
                                 ` : ``
                             }
-                            ${COMPILATION_NAME.includes('广东农村养护(2021)') ? `
-                                    ${_getOptionDivDomStr(BUDGET, "valuation-type", "预算", "type-budget", true)}
-                                ` : ``
-                            }
-                            ${(COMPILATION_NAME !== '内蒙古高速公路日常养护估算(2021)' && COMPILATION_NAME !== '广东农村养护(2021)') ? `
+                            ${(COMPILATION_NAME !== '内蒙古高速公路日常养护估算(2021)') ? `
                                 ${_getOptionDivDomStr(BUDGET, "valuation-type", "预算", "type-budget", !COMPILATION_NAME.includes('公路造价'))}
                                 ${_getOptionDivDomStr(BOQ, "valuation-type", "工程量清单", "type-boq", false)}
                                 ` : ``

+ 1 - 1
web/building_saas/standard_interface/import/guangdong_zhongshan.js

@@ -162,7 +162,7 @@ INTERFACE_IMPORT = (() => {
         seq: b._Code,
         code: b._Number,
         name: b._Name,
-        specs: b.Specification,
+        specs: b._Specification,
         unit: b._Unit,
         market_price: b._Price,
         quantity: b._Quantity,

+ 135 - 19
web/over_write/js/gansu_2021.js

@@ -18,8 +18,9 @@ if (typeof feeRateObject !== 'undefined') {
 }
 
 // 清单基数
-const progression = ['养护单位(业主)管理费', '养护单位(业主)管理费(未单独设置)', '养护工程监理费(路线工程)', '养护工程监理费(桥梁及隧道工程)', '设计文件审查费', '养护工程设计费(路线工程)', '养护工程设计费(独立桥梁、隧道工程)', '施工场地建设费'];
-const deficiency = {};
+const littleFixNames = ['小修', '养护检查预算', '日常养护预算'];
+const progression = ['养护单位(业主)管理费', '养护单位(业主)管理费(未单独设置)', '养护工程监理费', '养护工程监理费(路线工程)', '养护工程监理费(桥梁及隧道工程)', '设计文件审查费', '养护工程设计费(路线工程)', '养护工程设计费(独立桥梁、隧道工程)', '施工场地建设费'];
+const deficiency = { '养护工程监理费': 10000, '设计文件审查费': 10000 };
 if (typeof baseFigureMap !== 'undefined') {
     const { fixedFlag } = commonConstants;
     const budgetMap = {
@@ -86,6 +87,15 @@ if (typeof baseFigureMap !== 'undefined') {
             filter: [fixedFlag.MAINTENANCE_EXPENSES],
             pick: true,
         },
+        // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。 仅小修保养类别可以显示
+        '养护工程监理费': {
+            isProgressive: true,
+            base: 'YHGCJLF',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
+            engineeringList: littleFixNames,
+        },
         // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
         '养护工程监理费(路线工程)': {
             isProgressive: true,
@@ -93,6 +103,7 @@ if (typeof baseFigureMap !== 'undefined') {
             fixedFlag: null,
             filter: [fixedFlag.MAINTENANCE_EXPENSES],
             pick: true,
+            engineeringList: ['大修', '中修'],
         },
         // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
         '养护工程监理费(桥梁及隧道工程)': {
@@ -101,6 +112,7 @@ if (typeof baseFigureMap !== 'undefined') {
             fixedFlag: null,
             filter: [fixedFlag.MAINTENANCE_EXPENSES],
             pick: true,
+            engineeringList: ['大修', '中修'],
         },
         // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
         '设计文件审查费': {
@@ -109,6 +121,13 @@ if (typeof baseFigureMap !== 'undefined') {
             fixedFlag: null,
             filter: [fixedFlag.MAINTENANCE_EXPENSES],
             pick: true,
+            engineeringList: ['大修', '中修']
+        },
+        '养护项目信息化费': {
+            base: 'YHXMXXHF',
+            fixedFlag: null,
+            filter: [fixedFlag.MAINTENANCE_EXPENSES],
+            pick: true,
         },
         // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
         '养护工程设计费(路线工程)': {
@@ -117,6 +136,7 @@ if (typeof baseFigureMap !== 'undefined') {
             fixedFlag: null,
             filter: [fixedFlag.MAINTENANCE_EXPENSES],
             pick: true,
+            engineeringList: ['大修', '中修']
         },
         // 显示:只有清单固定类别是“养护工程其他费用”部分可显示。
         '养护工程设计费(独立桥梁、隧道工程)': {
@@ -125,6 +145,7 @@ if (typeof baseFigureMap !== 'undefined') {
             fixedFlag: null,
             filter: [fixedFlag.MAINTENANCE_EXPENSES],
             pick: true,
+            engineeringList: ['大修', '中修']
         },
         '施工场地建设费': {
             isProgressive: true,
@@ -172,6 +193,11 @@ if (typeof baseFigureMap !== 'undefined') {
     baseFigureMap.boq = boqMap;
 }
 
+// 是否是小修
+const isLittleFix = (engName) => {
+    return littleFixNames.some(name => new RegExp(name).test(engName));
+}
+
 if (typeof baseFigureTemplate !== 'undefined') {
     const { fixedFlag } = commonConstants;
     baseFigureTemplate.budget = {
@@ -181,17 +207,36 @@ if (typeof baseFigureTemplate !== 'undefined') {
         },
         // 建筑安装工程费(不含设备费)算法:取清单固定类别是“建筑安装工程费”的金额 - {设备费}。
         JZAZGCFBHSB(tender) {
-            return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.EQUIPMENT_ACQUISITION_FEE], tender, 'common');
+            const engName = projectObj.project.property.engineeringName;
+            if (isLittleFix(engName)) {
+                // 小修的没有设备购置固定行
+                const baseFee = cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
+                const fixedNode = projectObj.project.mainTree.roots.find(node => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
+                const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, 'common');
+                return (baseFee - equipmentFee).toDecimal(decimalObj.bills.totalPrice);
+            } else {
+                return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.EQUIPMENT_ACQUISITION_FEE], tender, 'common');
+            }
         },
         // 定额建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)。
         DEJZAZGCF(tender) {
+            const engName = projectObj.project.property.engineeringName;
             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);
+            if (isLittleFix(engName)) {
+                // 小修的没有设备购置固定行
+                const baseFee = cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, feeField);
+                const fixedNode = projectObj.project.mainTree.roots.find(node => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
+                const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, 'equipment');
+                return (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.bills.totalPrice);
+            } else {
+                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, 'equipment');
+                const equipmentAcTaxFee = cbTools.getBaseFee(deductFlags[0], tender, 'tax');
+                return (afterDeductFee + equipmentAcFee * 0.4 + equipmentAcTaxFee).toDecimal(decimalObj.bills.totalPrice);
+            }
         },
         // 设备费 算法:取清单固定类别是“设备购置”的建安费
         SBF(tender) {
@@ -207,13 +252,23 @@ if (typeof baseFigureTemplate !== 'undefined') {
         },
         // 定额养护工程费 算法:取清单固定类别是“养护工程费”的定额建安费(其中定额设备费按40%计算)。
         DEYHGCF(tender) {
+            const engName = projectObj.project.property.engineeringName;
             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);
+            if (isLittleFix(engName)) {
+                // 小修的没有设备购置固定行
+                const baseFee = cbTools.getBaseFee(fixedFlag.MAINTENANCE_FEE, tender, feeField);
+                const fixedNode = projectObj.project.mainTree.items.find(node => node.getFlag() === fixedFlag.MAINTENANCE_FEE);
+                const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender, 'equipment');
+                return (baseFee - equipmentFee * 0.6).toDecimal(decimalObj.bills.totalPrice);
+            } else {
+                const deductFlags = [fixedFlag.EQUIPMENT_ACQUISITION_FEE];
+                //建安费扣除定额设备购置费
+                const afterDeductFee = cbTools.getFeeWithDeduction(fixedFlag.MAINTENANCE_FEE, deductFlags, tender, feeField, false);
+                //定额设备购置费
+                const equipmentAcFee = cbTools.getBaseFee(deductFlags[0], tender, 'equipment');
+                const equipmentAcTaxFee = cbTools.getBaseFee(deductFlags[0], tender, 'tax');
+                return (afterDeductFee + equipmentAcFee * 0.4 + equipmentAcTaxFee).toDecimal(decimalObj.bills.totalPrice);
+            }
         },
         // 养护单位(业主)管理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。。
         YHDWYZGLF(tender) {
@@ -231,6 +286,14 @@ if (typeof baseFigureTemplate !== 'undefined') {
             }
             return calculateUtil.getProgressiveFee(baseFee, '养护单位(业主)管理费(未单独设置)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
         },
+        // 养护工程监理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
+        YHGCJLF(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);
@@ -255,6 +318,19 @@ if (typeof baseFigureTemplate !== 'undefined') {
             }
             return calculateUtil.getProgressiveFee(baseFee, '设计文件审查费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
         },
+        // 养护项目信息化费 (大中修):取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)*0.32%计算。不足10000取10000
+        // 养护项目信息化费 (小修):算法:取清单固定类别是“建筑安装工程费”的定额建安费(其中定额设备费按40%计算)*0.2%计算。信息化管理费不足5000元时按5000元计取。
+        YHXMXXHF(tender) {
+            const engName = projectObj.project.property.engineeringName;
+            const baseFee = this['DEJZAZGCF'](tender);
+            if (isLittleFix(engName)) {
+                const fee = (baseFee * 0.002).toDecimal(decimalObj.bills.totalPrice);
+                return fee > 0 && fee < 5000 ? 5000 : fee;
+            } else {
+                const fee = (baseFee * 0.0032).toDecimal(decimalObj.bills.totalPrice);
+                return fee > 0 && fee < 10000 ? 10000 : fee;
+            }
+        },
         // 养护工程设计费(路线工程) 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
         YHGCSJFLXGC(tender) {
             const baseFee = this['DEJZAZGCF'](tender);
@@ -271,9 +347,14 @@ if (typeof baseFigureTemplate !== 'undefined') {
             }
             return calculateUtil.getProgressiveFee(baseFee, '养护工程设计费(独立桥梁、隧道工程)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
         },
-        // 施工场地建设费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算
-        SGCDJSG(tender) {
-            const baseFee = this['DEJZAZGCF'](tender);
+        // 施工场地建设费 算法:以{定额养护工程费}为基数,采用累进办法计算
+        SGCDJSF(tender) {
+            const baseFee = this['DEYHGCF'](tender);
+            // 小修保养类别,施工场地建设费的计算基数定额建筑安装工程费超过30000000元时,不进行累进计算,直接按500000元计取。
+            const engName = projectObj.project.property.engineeringName;
+            if (isLittleFix(engName) && baseFee > 30000000) {
+                return 500000;
+            }
             if (!tender) {
                 calcBase.baseProgressiveFee = baseFee;
             }
@@ -341,10 +422,45 @@ if (typeof baseFigureTemplate !== 'undefined') {
 }
 
 if (typeof module !== 'undefined') {
+    // 甘肃养护,项目属性-小数位数,费率小数位数默认为2。
+    const defaultDecimal = {
+        bills: {unitPrice: 2, totalPrice: 0},
+        ration: {quantity: 3, unitPrice: 2, totalPrice: 0},
+        glj: {quantity: 3, unitPriceHasMix: 2, unitPrice: 2},
+        feeRate: 4,
+        quantity_detail: 4,
+        material:5,//三材系数
+        process: 6,
+        marketPriceProcess: 2,
+        temProcess:6
+    };
+
   module.exports = {
       progression,
       deficiency,
+      defaultDecimal
   };
 }
 // 不显示但可的基数
-const invisibleBases = ['设备费', '定额设备费'];
+const invisibleBases = ['设备费', '定额设备费'];
+
+if (typeof projectObj !== 'undefined') {
+    projectObj.isInsertEquipmentVisable = function (selected) {
+        if(projectObj.project.property.valuationType !=='ration' ){//属于预算项目的情况下,在固定清单可见
+            const engName = projectObj.project.property.engineeringName;
+            //属于的固定清单
+            const belongFlag = cbTools.getBelongFlag(selected);
+            if (isLittleFix(engName)) {
+                if (belongFlag && belongFlag === fixedFlag.MAINTENANCE_FEE) {
+                    return true;
+                }
+            } else {
+                if (belongFlag && belongFlag === fixedFlag.EQUIPMENT_ACQUISITION_FEE) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        return true
+    }
+}

+ 171 - 1
web/over_write/js/sichuan_2013.js

@@ -52,11 +52,181 @@ if (typeof gljUtil !== "undefined") {
   }
 }
 
+// 清单基数
+const progression = [
+  '养护单位管理费', 
+];
+const deficiency = { 
+};
+if (typeof baseFigureMap !== 'undefined') {
+  const { fixedFlag } = commonConstants;
+  const budgetMap = {
+      // 显示:除清单固定类别是“公路养护工程费”的以外部分可显示
+      '公路养护工程费': {
+          base: 'GLYHGCF',
+          fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+          filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+          pick: false,
+      },
+      // 显示:除清单固定类别是“公路养护工程费”的以外部分可显示
+      '定额公路养护工程费': {
+          base: 'DEGLYHGCF',
+          fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
+          filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
+          pick: false,
+      },
+      // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
+      '养护单位管理费': {
+        isProgressive: true,
+        base: 'YHDWGLF',
+        fixedFlag: null,
+        filter: [fixedFlag.MAINTENANCE_EXPENSES],
+        pick: true,
+      },
+      // 显示:除清单固定类别是“公路养护工程费”、“设备购置费用”、“养护公路工程其他费用”、“一二三部分合计”的以外部分可显示
+      '一、二、三部分合计': {
+        base: 'YESBFHJ',
+        fixedFlag: fixedFlag.ONE_TO_THREE_TOTAL,
+        filter: [ fixedFlag.ONE_TO_THREE_TOTAL],
+        pick: false,
+      },
+      // 显示:仅“价差预备费”可显示
+      '价差预备费': {
+          base: 'JCYBF',
+          fixedFlag: null,
+          filter: [fixedFlag.SPREAD_BUDGET_FEE],
+          pick: true,
+      },
+  };
+  const boqMap = {
+      //仅允许用于固定类别是“第100章至700章清单”以外的清单
+      '各章清单合计': {
+          base: 'GZQDHJ',
+          fixedFlag: fixedFlag.ONE_SEVEN_BILLS,
+          filter: [fixedFlag.ONE_SEVEN_BILLS],
+          pick: false
+      },
+      //仅允许用于固定类别是“第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 = {
+      // 公路养护工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
+      GLYHGCF(tender) {
+          return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
+      },
+      // 定额公路养护工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
+      DEGLYHGCF(tender) {
+          return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'rationCommon');
+      },
+      // 养护单位管理费 算法:以{公路养护工程费总额}为基数,采用累进办法计算
+      YHDWGLF(tender) {
+        const baseFee = this['GLYHGCF'](tender);
+        if (!tender) {
+            calcBase.baseProgressiveFee = baseFee;
+        }
+        return calculateUtil.getProgressiveFee(baseFee, '养护单位管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
+      },
+      // 二三部分合计 算法:取清单固定类别是“一二三部分合计”的金额
+      YESBFHJ(tender) {
+        return cbTools.getBaseFee(fixedFlag.ONE_TO_THREE_TOTAL, tender, 'common');
+      },
+      // 基本预备费 算法:以第一、二、三部分费用之和为基数按3%计取
+      JBYBF(tender) {
+        const baseFee = this['YESBFHJ'](tender);
+        return (baseFee * 0.03).toDecimal(decimalObj.bills.totalPrice);
+      },
+      /*  价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
+          价差预备费 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章清单”的金额
+      'GZQDHJ': function (tender) {
+          return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, 'common');
+      },
+      //{专项暂定合计}
+      // 第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 = {
       getDefalutAssistProductionFeeRate: function () {
           return 5
-      }
+      },
+      progression,
+      deficiency,
   };
 }