Browse Source

Merge branch '1.0.0_online' of http://192.168.1.12:3000/SmartCost/ConstructionCost into 1.0.0_online

TonyKang 6 years ago
parent
commit
1233eb00f5

+ 9 - 1
modules/all_models/std_glj.js

@@ -8,7 +8,11 @@ const Schema = mongoose.Schema;
 const std_gljComponent = new Schema(
     {
         ID: Number,
-        consumeAmt: Number
+        consumeAmt: Number,
+        consumeAmtProperties: {
+            type: Schema.Types.Mixed,
+            default: {}
+        }
     },
     {_id: false},
     {versionKey: false}
@@ -22,6 +26,10 @@ const std_glj = new Schema({
     name: String,
     specs: String,
     basePrice: Number,
+    basePriceProperties: {
+        type: Schema.Types.Mixed,
+        default: {}
+    },
     gljClass: Number,
     gljType: Number,
     model: Number,// 机型

+ 5 - 1
modules/main/facade/ration_facade.js

@@ -101,7 +101,11 @@ async function insertNewRation(newData,firstLibID,std,calQuantity) {//插入新
         else if(std.rationRepId === firstLibID && newData.from === 'cpt') {
             newData.prefix = '补';
         }
-        newData.programID = std.feeType;
+        if(std.feeType == undefined || std.feeType == null || std.feeType ==''){//定额取费专业为空的情况下,取项目属性中的定额取费专业ID
+            newData.programID = await getProgramForProject(newData.projectID);
+        }else {
+            newData.programID = std.feeType;
+        }
         newData.rationAssList =  createRationAss(std);
         // calculate ration Quantity
     }

+ 24 - 8
modules/pm/facade/pm_facade.js

@@ -81,10 +81,18 @@ async function copyProject(userID, compilationID,data) {
 
     //更新项目的属性;
     projectMap['copy'].document.ID = newProjectID;
-    projectMap['copy'].document.property.calcProgramFile.ID = calcProgramFileID;
-    projectMap['copy'].document.property.labourCoeFile.ID = labourCoeFileID;
-    projectMap['copy'].document.property.feeFile.id = feeRateFileID;
-    projectMap['copy'].document.property.unitPriceFile.id = unitPriceFileID;
+    if(projectMap['copy'].document.property.calcProgramFile){
+        projectMap['copy'].document.property.calcProgramFile.ID = calcProgramFileID;
+    }
+    if(projectMap['copy'].document.property.labourCoeFile){
+        projectMap['copy'].document.property.labourCoeFile.ID = labourCoeFileID;
+    }
+    if(projectMap['copy'].document.property.feeFile){
+        projectMap['copy'].document.property.feeFile.id = feeRateFileID;
+    }
+    if(projectMap['copy'].document.property.unitPriceFile){
+        projectMap['copy'].document.property.unitPriceFile.id = unitPriceFileID;
+    }
     projectMap['copy'].document.userID = userID;
     projectMap['copy'].document.compilation = compilationID;
     projectMap['copy'].document.createDateTime = new Date();
@@ -104,16 +112,24 @@ async function copyProject(userID, compilationID,data) {
         copyBills(newProjectID,billMap),
         copyRations(newProjectID,billMap.uuidMaping,rationMap,projectGLJMap.IDMap),
         copyProjectGLJ(projectGLJMap.datas),
-        commonCopy(newProjectID,originalProperty.calcProgramFile.ID,calcProgramFileID,calcProgramsModel),
-        commonCopy(newProjectID,originalProperty.labourCoeFile.ID,labourCoeFileID,labourCoesModel),
-        copyFeeRate(originalProperty.rootProjectID,userID,originalProperty.feeFile.id,feeRateFileID,newFeeName),
-        copyUnitPriceFile(newProjectID,originalProperty.rootProjectID,userID,originalProperty.unitPriceFile.id,unitPriceFileID,newUnitName),
         copyInstallFee(originalID,newProjectID),
         copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,rationGLJModel),
         copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,rationCoeModel),
         copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,quantityDetailModel),
         copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,rationInstallationModel)
     ];
+    if(originalProperty.calcProgramFile){
+        copyTasks.push(commonCopy(newProjectID,originalProperty.calcProgramFile.ID,calcProgramFileID,calcProgramsModel));
+    }
+    if(originalProperty.labourCoeFile){
+        copyTasks.push(commonCopy(newProjectID,originalProperty.labourCoeFile.ID,labourCoeFileID,labourCoesModel));
+    }
+    if(originalProperty.feeFile){
+        copyTasks.push(copyFeeRate(originalProperty.rootProjectID,userID,originalProperty.feeFile.id,feeRateFileID,newFeeName));
+    }
+    if(originalProperty.unitPriceFile){
+        copyTasks.push(copyUnitPriceFile(newProjectID,originalProperty.rootProjectID,userID,originalProperty.unitPriceFile.id,unitPriceFileID,newUnitName));
+    }
     let p = await Promise.all(copyTasks);
     return p[0];
 }

+ 115 - 80
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);
+                    };
                 };
             };
         };
@@ -523,11 +552,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 === rationCalcBasesNameMap.DEJJRGF) ||
-            (baseMaterialTypes.includes(treeNode.data.subType) && baseName === rationCalcBasesNameMap.DEJJCLF) ||
-            (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === rationCalcBasesNameMap.DEJJJXF) ||
-            (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === rationCalcBasesNameMap.ZCF) ||
-            (treeNode.data.subType === gljType.EQUIPMENT && baseName === rationCalcBasesNameMap.SBF)) {
+            (treeNode.data.subType === gljType.LABOUR && calcTools.inBase(baseName, 'RGF')) ||
+            (baseMaterialTypes.includes(treeNode.data.subType) && calcTools.inBase(baseName, 'CLF')) ||
+            (treeNode.data.subType === gljType.GENERAL_MACHINE && calcTools.inBase(baseName, 'JXF')) ||
+            (treeNode.data.subType === gljType.MAIN_MATERIAL && calcTools.inBase(baseName, 'ZCF')) ||
+            (treeNode.data.subType === gljType.EQUIPMENT && calcTools.inBase(baseName, '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)
@@ -535,7 +564,7 @@ let calcTools = {
                 // 这里因为是算基数所以要取基价,但不能直接取basePrice,受限于项目属性的三个选项。
                 result = gljOprObj.getBasePrice(treeNode);
         }
-        else if (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === rationCalcBasesNameMap.DEJJJSRGF) {
+        else if (treeNode.data.subType === gljType.GENERAL_MACHINE && calcTools.inBase(baseName, 'JSRGF')) {
             let glj = {
                 'code': treeNode.data.code,
                 'name': treeNode.data.name,
@@ -548,11 +577,11 @@ let calcTools = {
         }
         else if (
             (treeNode.data.type == rationType.gljRation) &&
-            ((treeNode.data.subType === gljType.LABOUR && baseName === rationCalcBasesNameMap.RGFJC) ||
-                (baseMaterialTypes.includes(treeNode.data.subType) && baseName === rationCalcBasesNameMap.CLFJC) ||
-                (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === rationCalcBasesNameMap.JXFJC) ||
-                (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === rationCalcBasesNameMap.ZCFJC) ||
-                (treeNode.data.subType === gljType.EQUIPMENT && baseName === rationCalcBasesNameMap.SBFJC))
+            ((treeNode.data.subType === gljType.LABOUR && calcTools.inBase(baseName, 'JC_RGF')) ||
+                (baseMaterialTypes.includes(treeNode.data.subType) && calcTools.inBase(baseName, 'JC_CLF')) ||
+                (treeNode.data.subType === gljType.GENERAL_MACHINE && calcTools.inBase(baseName, 'JC_JXF')) ||
+                (treeNode.data.subType === gljType.MAIN_MATERIAL && calcTools.inBase(baseName, 'JC_ZCF')) ||
+                (treeNode.data.subType === gljType.EQUIPMENT && calcTools.inBase(baseName, 'JC_SBF')))
         ) {
             let aprice = me.uiGLJPrice(treeNode.data.basePrice);   // 量价虚拟的工料机不可能有发文,这里直接取定额价。
             let mprice = me.uiGLJPrice(treeNode.data.marketUnitFee);
@@ -571,26 +600,22 @@ let calcTools = {
             supplyT = [supplyType.JDYG];
 
         let gljT = [], compT = [];
-        if ([rationCalcBasesNameMap.JGDEJJRGF, rationCalcBasesNameMap.JDDEJJRGF].includes(baseName)){               // 甲供、甲定人工
+        if (calcTools.inBase(baseName, 'JG_RGF') || calcTools.inBase(baseName, 'JD_RGF')){
             gljT = [gljType.LABOUR];
         }
-        else if ([rationCalcBasesNameMap.JGDEJJCLF, rationCalcBasesNameMap.JDDEJJCLF].includes(baseName)){          // 甲供、甲定材料
+        else if (calcTools.inBase(baseName, 'JG_CLF') || calcTools.inBase(baseName, 'JD_CLF')){             // 甲供、甲定材料
             gljT = baseMaterialTypes;
             compT = compositionTypes;
         }
-        else if ([rationCalcBasesNameMap.JGDEJJJXF, rationCalcBasesNameMap.JDDEJJJXF].includes(baseName)){          // 甲供、甲定机械
+        else if (calcTools.inBase(baseName, 'JG_JXF') || calcTools.inBase(baseName, 'JD_JXF')) {            // 甲供、甲定机械
             gljT = baseMachineTypes;
-            compT = [gljType.GENERAL_MACHINE];
+            compT = [gljType.GENERAL_MACHINE, gljType.INSTRUMENT, gljType.OTHER_MACHINE_USED];              // 取并集,兼容重庆2018新定额
         }
-        else if ([rationCalcBasesNameMap.JGDESGJJF, rationCalcBasesNameMap.JDDESGJJF].includes(baseName)){          // 甲供、甲定机械(重庆2018新定额)
-            gljT = baseMachineTypes;
-            compT = baseMachineTypes_CQ_2018_JX;
-        }
-        else if ([rationCalcBasesNameMap.JGZCF, rationCalcBasesNameMap.JDZCF].includes(baseName)){                  // 甲供、甲定主材
+        else if (calcTools.inBase(baseName, 'JG_ZCF') || calcTools.inBase(baseName, 'JD_ZCF')) {            // 甲供、甲定主材
             gljT = [gljType.MAIN_MATERIAL];
             compT = [gljType.MAIN_MATERIAL];
         }
-        else if ([rationCalcBasesNameMap.JGSBF, rationCalcBasesNameMap.JDSBF].includes(baseName)){                  // 甲供、甲定设备
+        else if (calcTools.inBase(baseName, 'JG_SBF') || calcTools.inBase(baseName, 'JD_SBF')) {           // 甲供、甲定设备
             gljT = [gljType.EQUIPMENT];
         };
         // alert(JSON.stringify(projectGLJ.testGLJs()));
@@ -871,39 +896,47 @@ let calcTools = {
                   return o.value;
               }
         };
+    },
+    inBase(baseName, kindName){
+        return rationCalcBasesNameKinds[kindName].includes(baseName);
     }
 };
 
-let rationCalcBasesNameMap = {
-    DEJJRGF: '定额基价人工费',
-    DEJJCLF: '定额基价材料费',
-    DEJJJXF: '定额基价机械费',
-    DEJJJSRGF: '定额基价机上人工费',
-    RGFJC: '人工费价差',
-    CLFJC: '材料费价差',
-    JXFJC: '机械费价差',
-    ZCFJC: '主材费价差',
-    SBFJC: '设备费价差',
-    ZCF: '主材费',
-    SBF: '设备费',
-    RGGR: '人工工日',
-    JGDEJJRGF: '甲供定额基价人工费',
-    JGDEJJCLF: '甲供定额基价材料费',
-    JGDEJJJXF: '甲供定额基价机械费',
-    JGZCF: '甲供主材费',
-    JGSBF: '甲供设备费',
-    JDDEJJRGF: '甲定定额基价人工费',
-    JDDEJJCLF: '甲定定额基价材料费',
-    JDDEJJJXF: '甲定定额基价机械费',
-    JDZCF: '甲定主材费',
-    JDSBF: '甲定设备费',
-    ZGCLF: '暂估材料费',
-    FBDEJJRGF: '分包定额基价人工费',
-    FBDEJJCLF: '分包定额基价材料费',
-    FBDEJJJXF: '分包定额基价机械费',
-    FBZCF: '分包主材费',
-    FBSBF: '分包设备费',
-    FBRGGR: '分包人工工日'
+let rationCalcBasesNameKinds = {
+    RGF:        ['定额基价人工费', '定额人工费'],
+    CLF:        ['定额基价材料费', '定额材料费'],
+    QTCLF:      ['定额其他材料费'],
+    JXF:        ['定额基价机械费', '定额施工机具使用费'],
+    JSRGF:      ['定额基价机上人工费'],
+    ZCF:        ['主材费'],
+    SBF:        ['设备费'],
+    RGGR:       ['人工工日'],
+    ZGCLF:      ['暂估材料费'],
+
+    JC_RGF:     ['人工费价差'],
+    JC_CLF:     ['材料费价差'],
+    JC_JXF:     ['机械费价差'],
+    JC_ZCF:     ['主材费价差'],
+    JC_SBF:     ['设备费价差'],
+
+    JG_RGF:     ['甲供定额基价人工费', '甲供定额人工费'],
+    JG_CLF:     ['甲供定额基价材料费', '甲供定额材料费'],
+    JG_JXF:     ['甲供定额基价机械费', '甲供定额施工机具费'],
+    JG_ZCF:     ['甲供主材费'],
+    JG_SBF:     ['甲供设备费'],
+
+    JD_RGF:     ['甲定定额基价人工费', '甲定定额人工费'],
+    JD_CLF:     ['甲定定额基价材料费', '甲定定额材料费'],
+    JD_JXF:     ['甲定定额基价机械费', '甲定定额施工机具费'],
+    JD_ZCF:     ['甲定主材费'],
+    JD_SBF:     ['甲定设备费'],
+
+    FB_RGF:     ['分包定额基价人工费'],
+    FB_CLF:     ['分包定额基价材料费'],
+    FB_JXF:     ['分包定额基价机械费'],
+    FB_ZCF:     ['分包主材费'],
+    FB_SBF:     ['分包设备费'],
+    FB_RGGR:    ['分包人工工日']
 };
 
 let rationCalcBases = {
@@ -944,34 +977,34 @@ let rationCalcBases = {
         return calcTools.labourDays(node, isTender);
     },
     '甲供定额基价人工费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGDEJJRGF, isTender);
+        return calcTools.partASupplyFee(node, '甲供定额基价人工费', isTender);
     },
     '甲供定额基价材料费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGDEJJCLF, isTender);
+        return calcTools.partASupplyFee(node, '甲供定额基价材料费', isTender);
     },
     '甲供定额基价机械费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGDEJJJXF, isTender);
+        return calcTools.partASupplyFee(node, '甲供定额基价机械费', isTender);
     },
     '甲供主材费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGZCF, isTender);
+        return calcTools.partASupplyFee(node, '甲供主材费', isTender);
     },
     '甲供设备费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGSBF, isTender);
+        return calcTools.partASupplyFee(node, '甲供设备费', isTender);
     },
     '甲定定额基价人工费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDDEJJRGF, isTender);
+        return calcTools.partASupplyFee(node, '甲定定额基价人工费', isTender);
     },
     '甲定定额基价材料费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDDEJJCLF, isTender);
+        return calcTools.partASupplyFee(node, '甲定定额基价材料费', isTender);
     },
     '甲定定额基价机械费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDDEJJJXF, isTender);
+        return calcTools.partASupplyFee(node, '甲定定额基价机械费', isTender);
     },
     '甲定主材费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDZCF, isTender);
+        return calcTools.partASupplyFee(node, '甲定主材费', isTender);
     },
     '甲定设备费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDSBF, isTender);
+        return calcTools.partASupplyFee(node, '甲定设备费', isTender);
     },
     '暂估材料费': function (node, isTender) {
         return calcTools.estimateFee(node, true, isTender);
@@ -1088,6 +1121,7 @@ let analyzer = {
                 expr = expr.replace(/\[[\u4E00-\u9FA5]+\]/gi, '0');
                 expr = expr.replace(/@\d+/gi, '0');
                 expr = expr.replace(/L/gi, '0');
+                expr = expr.replace(/%/gi, '*0.01');
                 if (expr.includes('00'))
                     return false;
 
@@ -1227,6 +1261,7 @@ let analyzer = {
             let val = `$CE.at(${IDArr[i]},false)`;
             rst = rst.replace(patt, val);
         };
+        rst = rst.replace(/%/g, "*0.01");
         rst = rst.replace(/\[/g, "$CE.base('");
         rst = rst.replace(/\]/g, "',false)");
         rst = rst.replace(/L/g, labourCoe);

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

@@ -213,7 +213,7 @@ let calcBaseView = {
                 }
             }
             let bnArr = Object.keys(rationCalcBases);
-            bnArr.sort();
+            // bnArr.sort();
             let baseArr = [];
             for (let bn of bnArr) {
                 baseArr.push({base: bn})

+ 8 - 5
web/building_saas/main/js/views/fee_rate_view.js

@@ -345,7 +345,7 @@ var feeRateObject={
                 var imageHeight = hitinfo.cellRect.height-2*imageMagin;
                 var imageWidth = hitinfo.cellRect.width*2/7;
                 if(hitinfo.x<offset&&hitinfo.x>offset-imageWidth){
-                    if(!projectReadOnly && me.ifFeeRateEdit(hitinfo.row)){
+                    if(!projectReadOnly && me.ifFeeRateEdit(hitinfo.row,hitinfo.sheet.name())){
                         $('#calcBaseFeeRateConf').attr('toggle', 'feeRate');
                         changeCalcBaseFeeRate('feeRate');
                         $('#tabFeeRate').tab('show');
@@ -362,7 +362,7 @@ var feeRateObject={
             if(me.editingCell==null){
                 var showSelectBtn = true;
                 if(hitinfo.sheet.name()!='calc_detail'){
-                    showSelectBtn=me.ifFeeRateEdit(hitinfo.row);
+                    showSelectBtn=me.ifFeeRateEdit(hitinfo.row,hitinfo.sheet.name());
                 }
                 if(showSelectBtn){
                     me.editingCell={
@@ -421,9 +421,12 @@ var feeRateObject={
         }
         return children.length+sum;
     },
-    ifFeeRateEdit:function (row) {
-        var selected = projectObj.project.mainTree.items[row];
-        return selected&&MainTreeCol.readOnly.forFeeRate(selected)?false:true;
+    ifFeeRateEdit:function (row,name) {
+        if( name == 'mainSheet'){
+            var selected = projectObj.project.mainTree.items[row];
+            return selected&&MainTreeCol.readOnly.forFeeRate(selected)?false:true;
+        }
+        return true;
     },
     createSpreadView:function () {
         if (this.mainViews) {

+ 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 (typeof overwriteRationCalcBases === 'function')
+                    overwriteRationCalcBases(that.project.property.taxType);
                 //that.project.calcProgram.compileAllTemps();
                 that.project.calcBase.init(that.project);
                 // that.project.calcFields = JSON.parse(JSON.stringify(cpFeeTypes));

+ 121 - 116
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,118 +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){
-    changePropNames(rationCalcBases,
-        ['定额基价人工费', '定额基价材料费', '甲供定额基价人工费', '甲供定额基价材料费', '甲定定额基价人工费', '甲定定额基价材料费', '分包定额基价人工费','分包定额基价材料费'],
-        ['定额人工费', '定额材料费', '甲供定额人工费', '甲供定额材料费', '甲定定额人工费', '甲定定额材料费', '分包定额人工费','分包定额材料费']
-    );
-    deletePropNames(rationCalcBases, [
-        '定额基价机械费', '定额基价机上人工费', '机械费价差', '主材费价差', '设备费价差','甲供定额基价机械费','甲定定额基价机械费',
-        '设备费', '甲供设备费', '甲定设备费', '分包设备费', '分包定额基价机械费']);
-
-    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) {
-        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.MAIN_MATERIAL], priceTypes.ptMarketPrice, isTender);
-    };
-    rationCalcBases['机械燃料动力费价差'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.FUEL_POWER_FEE], priceTypes.ptDiffPrice, 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.rationBaseFee(node, [gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender);
-    },
-    rationCalcBases['甲供定额施工机具费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGDESGJJF, isTender);
-    };
-    rationCalcBases['甲定定额施工机具费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDDESGJJF, 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) {
-        return calcTools.getProjectFeatureProperty('buildingArea');
-    };
-};
+function overwriteRationCalcBases (taxType){
+    if (rationCalcBases){
+        for (let key in rationCalcBases) {
+            delete rationCalcBases[key];
+        };
+        let isJY = taxType == '2';
 
-if (rationCalcBasesNameMap) {
-    let str = '基价';
-    for (let pn in rationCalcBasesNameMap){
-        if (rationCalcBasesNameMap[pn].includes(str))
-            rationCalcBasesNameMap[pn] = rationCalcBasesNameMap[pn].replace(new RegExp(str, "g"), '');
+        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;
+        // };
     };
-
-    rationCalcBasesNameMap.DEQTCLF = '定额其他材料费';
-    rationCalcBasesNameMap.DESGJJSYF = '定额施工机具使用费';
-    rationCalcBasesNameMap.JJCLJC = '计价材料价差';
-    rationCalcBasesNameMap.JSRGFJC = '机上人工费价差';
-    rationCalcBasesNameMap.JXRLDLFJC = '机械燃料动力费价差';
-    rationCalcBasesNameMap.JXZJF = '机械折旧费';
-    rationCalcBasesNameMap.TDJXJXF = '特大机械检修费';
-    rationCalcBasesNameMap.ZXJXJXF = '中小机械检修费';
-    rationCalcBasesNameMap.TDJXWHF = '特大机械维护费';
-    rationCalcBasesNameMap.ZXJXWHF = '中小机械维护费';
-    rationCalcBasesNameMap.XXACJCWYSF = '机械安拆费及场外运输费';
-    rationCalcBasesNameMap.JXRLDLF = '机械燃料动力费';
-    rationCalcBasesNameMap.DEYQYBF = '定额仪器仪表费';
-    rationCalcBasesNameMap.DEQTSGJJSYF = '定额其他施工机具使用费';
-    rationCalcBasesNameMap.JGDESGJJF = '甲供定额施工机具费';
-    rationCalcBasesNameMap.JDDESGJJF = '甲定定额施工机具费';
-    rationCalcBasesNameMap.FGDESGJJF = '分包定额施工机具费';
-    rationCalcBasesNameMap.ZCF_SCJ = '主材费(市场价)';
-    rationCalcBasesNameMap.JZMJ = '建筑面积';
 };
 
 var cpFeeTypes2018 = [