Explorar o código

08-2表取数量单价费率

TonyKang %!s(int64=3) %!d(string=hai) anos
pai
achega
d392017a31
Modificáronse 1 ficheiros con 53 adicións e 3 borrados
  1. 53 3
      modules/reports/util/rpt_yanghu_data_util.js

+ 53 - 3
modules/reports/util/rpt_yanghu_data_util.js

@@ -159,6 +159,12 @@ class Rpt_Data_Extractor {
                                     //备注:项目工料机的数量是需要根据定额清单来计算的!这里的逻辑是对的
                                 }
                             }
+                            if (key === projectConst.FEERATE) {
+                                if (field[JV.PROP_FIELD_EXP_MAP].indexOf('getFeeRate(') >= 0 && rst.indexOf(projectConst.CALC_PROGRAM) < 0) {
+                                    //定额取费率情况下才需要额外的CALC_PROGRAM数据
+                                    rst.push(projectConst.CALC_PROGRAM);
+                                }
+                            }
                         }
                     }
                 } else if (key === projectConst.PROJECTGLJ) {
@@ -331,7 +337,14 @@ class Rpt_Data_Extractor {
             //把综合费率树结构数据拉扁
             // fsUtil.writeObjToFile(feeRate, "D:/GitHome/temp/feeRateObj.jsp");
             // console.log(feeRate);
-            let newFeeRates = setupFeeRate(feeRate.data._doc);
+            let calcProgram = getModuleDataByKey(rawDataObj.prjData, "calc_program");
+            // fsUtil.writeObjToFile(calcProgram, "D:/GitHome/temp/calcProgramObj.jsp");
+            let newFeeRates;
+            if (calcProgram) {
+                newFeeRates = setupFeeRate(feeRate.data._doc, calcProgram.data._doc);
+            } else {
+                newFeeRates = setupFeeRate(feeRate.data._doc, null);
+            }
             // console.log(newFeeRates);
             // fsUtil.writeObjToFile(newFeeRates, "D:/GitHome/temp/newFeeRateObj.js");
             feeRate.data._doc.rates = newFeeRates;
@@ -1293,7 +1306,7 @@ function setupMainFunc(obj, prop, ownRawObj) {
     obj[prop].getFee = ext_mainGetFee;
 }
 
-function setupFeeRate(feeRateData){
+function setupFeeRate(feeRateData, calcProgramData){
     let cacheObj = {}, topArr = [], rstArr = [], id_pre = 'ID_';
     const rateProperties = [];
     for (let rate of feeRateData.rates) {
@@ -1311,13 +1324,50 @@ function setupFeeRate(feeRateData){
             }
         }
     }
+    let newTopArr = [];
+    if (calcProgramData) {
+        let reg1 = new RegExp('III','g'), reg2 = new RegExp('II','g');
+        for (let tpl of calcProgramData.templates) {
+            //要根据templates重新编排一下(考虑数量单价情况,有数量单价情况下,会有一些费率数据获取不到的(利润、税金等),feeRateID 有数据值)
+            let hasRate = false;
+            for (let rate of topArr) {
+                let rName = rate.obj.name.replace(reg1, 'Ⅲ').replace(reg2, 'Ⅱ');
+                let cName = tpl.name.replace(reg1, 'Ⅲ').replace(reg2, 'Ⅱ');
+                if (rName === cName) {
+                    hasRate = true;
+                    rate.obj.ID = tpl.ID; // 重新安排ID !!!
+                    newTopArr.push(rate);
+                    break;
+                }
+            }
+            if (!hasRate) {
+                //创建一个新的
+                const newRate = {obj: {}, items: []};
+                // name: tpl.name, ID: tpl.ID
+                newRate.obj.name = tpl.name;
+                newRate.obj.ID = tpl.ID;
+                let _doc = tpl._doc?tpl._doc:tpl;
+                for (let cItem of _doc.calcItems) {
+                    cItem = cItem._doc ? cItem._doc : cItem;
+                    if (cItem.hasOwnProperty('feeRateID')) {
+                        if (cacheObj[id_pre + cItem.feeRateID]) {
+                            newRate.items.push(cacheObj[id_pre + cItem.feeRateID]);
+                        }
+                    }
+                }
+                newTopArr.push(newRate);
+            }
+        }
+    } else {
+        newTopArr = topArr;
+    }
     let pri_func_set_property_rate = function (orgRateItem, rstRateItem) {
         rstRateItem[orgRateItem.obj.name] = orgRateItem.obj.rate;
         for (let subOrgRateItem of orgRateItem.items) {
             pri_func_set_property_rate(subOrgRateItem, rstRateItem);
         }
     };
-    for (let topRate of topArr) {
+    for (let topRate of newTopArr) {
         let rstItem = {"name": topRate.obj.name, "ID": topRate.obj.ID};
         for (let property of rateProperties) {
             rstItem[property] = 0;