瀏覽代碼

09-1表,清单中的量材与材料加进到工料机data对象处理

TonyKang 7 年之前
父節點
當前提交
7d52c8e2e3

+ 17 - 8
modules/reports/rpt_component/jpc_flow_tab.js

@@ -456,6 +456,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 let grpSeqInfo = (me.group_node_info)?me.group_node_info[segIdx]:null;
                 let grpSeqInfo = (me.group_node_info)?me.group_node_info[segIdx]:null;
                 let grpRecAmt = (grpSeqInfo)?(grpSeqInfo.length*me.group_lines_amt):0;
                 let grpRecAmt = (grpSeqInfo)?(grpSeqInfo.length*me.group_lines_amt):0;
                 let grpRecAmtEx = 0;
                 let grpRecAmtEx = 0;
+                let accAutoHeightAmt = 0; //累计的自动行高数量
                 if (followTabEx && followTabEx.group_node_info) {
                 if (followTabEx && followTabEx.group_node_info) {
                     grpRecAmtEx = followTabEx.group_node_info.length * followTabEx.group_lines_amt;
                     grpRecAmtEx = followTabEx.group_node_info.length * followTabEx.group_lines_amt;
                 }
                 }
@@ -505,10 +506,13 @@ JpcFlowTabSrv.prototype.createNew = function(){
                     }
                     }
                     if ((ttlSegRecAmtNormal < ttlSegRecAmt) || (followTabEx !== null)) {
                     if ((ttlSegRecAmtNormal < ttlSegRecAmt) || (followTabEx !== null)) {
                         //有流水拓展,并且是follow mode
                         //有流水拓展,并且是follow mode
-                        if (currentRecAmt + adHocAutoHeightAmt + maxRowRec > ttlSegRecAmtNormal) {
-                            if (currentRecAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
+                        // if (currentRecAmt + adHocAutoHeightAmt + maxRowRec > ttlSegRecAmtNormal) {
+                        if (currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt + maxRowRec > ttlSegRecAmtNormal) {
+                            // if (currentRecAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
+                            if (currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
                                 //纯 followTabEx 数据
                                 //纯 followTabEx 数据
-                                if (currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
+                                // if (currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
+                                if (currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
                                     pageStatus[JV.STATUS_SEGMENT_END] = true;
                                     pageStatus[JV.STATUS_SEGMENT_END] = true;
                                     private_resetBandArea();
                                     private_resetBandArea();
                                     let hasAdHocRow = !JpcFlowTabHelper.chkSegEnd(bands, rptTpl, ttlSegRecAmt, currentRecAmt + adHocAutoHeightAmt, maxRowRec, me.isEx);
                                     let hasAdHocRow = !JpcFlowTabHelper.chkSegEnd(bands, rptTpl, ttlSegRecAmt, currentRecAmt + adHocAutoHeightAmt, maxRowRec, me.isEx);
@@ -525,7 +529,8 @@ JpcFlowTabSrv.prototype.createNew = function(){
                                 }
                                 }
                             } else {
                             } else {
                                 //混合数据
                                 //混合数据
-                                if (currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
+                                // if (currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
+                                if (currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt) {
                                     pageStatus[JV.STATUS_SEGMENT_END] = true;
                                     pageStatus[JV.STATUS_SEGMENT_END] = true;
                                     private_resetBandArea();
                                     private_resetBandArea();
                                     let hasAdHocRow = !JpcFlowTabHelper.chkSegEnd(bands, rptTpl, ttlSegRecAmt, currentRecAmt + adHocAutoHeightAmt, maxRowRec, me.isEx);
                                     let hasAdHocRow = !JpcFlowTabHelper.chkSegEnd(bands, rptTpl, ttlSegRecAmt, currentRecAmt + adHocAutoHeightAmt, maxRowRec, me.isEx);
@@ -536,7 +541,8 @@ JpcFlowTabSrv.prototype.createNew = function(){
                                     }
                                     }
                                     //add page info
                                     //add page info
                                     pageStatus[JV.STATUS_SEGMENT_END] = true;
                                     pageStatus[JV.STATUS_SEGMENT_END] = true;
-                                    if (currentRecAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
+                                    // if (currentRecAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
+                                    if (currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt >= ttlSegRecAmtNormal) {
                                         //纯 followTabEx 数据啦
                                         //纯 followTabEx 数据啦
                                         private_addPage(segIdx, null, true, false, -1);
                                         private_addPage(segIdx, null, true, false, -1);
                                     } else {
                                     } else {
@@ -552,9 +558,11 @@ JpcFlowTabSrv.prototype.createNew = function(){
                         }
                         }
                     } else {
                     } else {
                         //普通流水数据情况
                         //普通流水数据情况
-                        if ((currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt)
+                        // if ((currentRecAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt)
+                        if ((currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt + maxRowRec >= ttlSegRecAmt)
                              //&& (adHocAutoHeightAmt < 2 * maxRowRec) ) {
                              //&& (adHocAutoHeightAmt < 2 * maxRowRec) ) {
-                             && ((currentRecAmt + adHocAutoHeightAmt + maxRowRec - ttlSegRecAmt) < maxRowRec) ) {
+                             // && ((currentRecAmt + adHocAutoHeightAmt + maxRowRec - ttlSegRecAmt) < maxRowRec) ) {
+                            && ((currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt + maxRowRec - ttlSegRecAmt) < maxRowRec) ) {
                             //备注: 理论上自动行高是没有上限的,有可能正常一页的数据可以拓展到3页及以上,在此极端情况下,必须做一些限制判断,否则会出现缺页情况。
                             //备注: 理论上自动行高是没有上限的,有可能正常一页的数据可以拓展到3页及以上,在此极端情况下,必须做一些限制判断,否则会出现缺页情况。
                             pageStatus[JV.STATUS_SEGMENT_END] = true;
                             pageStatus[JV.STATUS_SEGMENT_END] = true;
                             pageStatus[JV.STATUS_REPORT_END] = true;
                             pageStatus[JV.STATUS_REPORT_END] = true;
@@ -578,10 +586,11 @@ JpcFlowTabSrv.prototype.createNew = function(){
                         }
                         }
                     }
                     }
                     //检测是否可退出
                     //检测是否可退出
-                    if ((currentRecAmt + adHocAutoHeightAmt >= ttlSegRecAmt) && (pageIdx % me.multiCols === 0)) {
+                    if ((currentRecAmt + accAutoHeightAmt + adHocAutoHeightAmt >= ttlSegRecAmt) && (pageIdx % me.multiCols === 0)) {
                         //备注:这里必须得考虑多栏的情况,否则会造成pageStatus出界的问题
                         //备注:这里必须得考虑多栏的情况,否则会造成pageStatus出界的问题
                         break;
                         break;
                     }
                     }
+                    accAutoHeightAmt += adHocAutoHeightAmt;
                     //控制阈值,超过阈值则强制退出,防止死循环
                     //控制阈值,超过阈值则强制退出,防止死循环
                     threshold++;
                     threshold++;
                     if (threshold > 1000) {
                     if (threshold > 1000) {

+ 89 - 13
modules/reports/util/rpt_construct_data_util.js

@@ -199,7 +199,9 @@ class Rpt_Data_Extractor {
                         filterData(srcData, preHandle, rawDataObj.prjData);
                         filterData(srcData, preHandle, rawDataObj.prjData);
                         break;
                         break;
                     case JV.PROP_HANDLE_TYPE_SUM:
                     case JV.PROP_HANDLE_TYPE_SUM:
+                        // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/insertedRawDataData10.jsp");
                         summaryData(srcData, preHandle, rawDataObj.prjData);
                         summaryData(srcData, preHandle, rawDataObj.prjData);
+                        // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/insertedRawDataData11.jsp");
                         break;
                         break;
                     case JV.PROP_HANDLE_TYPE_ADD_DUMMY:
                     case JV.PROP_HANDLE_TYPE_ADD_DUMMY:
                         addDummyData(srcData, preHandle);
                         addDummyData(srcData, preHandle);
@@ -207,6 +209,9 @@ class Rpt_Data_Extractor {
                     case JV.PROP_HANDLE_TYPE_ADJUST:
                     case JV.PROP_HANDLE_TYPE_ADJUST:
                         adjustData(srcData, preHandle);
                         adjustData(srcData, preHandle);
                         break;
                         break;
+                    case JV.PROP_HANDLE_TYPE_BILLS_DATA_MOVE:
+                        moveRationData(srcData, rawDataObj);
+                        break;
                     default:
                     default:
                         break;
                         break;
                 }
                 }
@@ -239,6 +244,9 @@ class Rpt_Data_Extractor {
         assembleFields(tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS_EX], rptDataObj[JV.DATA_DETAIL_DATA_EX], $PROJECT);
         assembleFields(tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS_EX], rptDataObj[JV.DATA_DETAIL_DATA_EX], $PROJECT);
         // console.log(JV.DATA_DETAIL_DATA_EX);
         // console.log(JV.DATA_DETAIL_DATA_EX);
         // console.log(rptDataObj[JV.DATA_DETAIL_DATA_EX]);
         // console.log(rptDataObj[JV.DATA_DETAIL_DATA_EX]);
+        // fsUtil.writeObjToFile(rptDataObj, "D:/GitHome/ConstructionCost/tmp/insertedOriginalData.jsp");
+        // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/insertedRawDataData.jsp");
+        // fsUtil.writeObjToFile($PROJECT, "D:/GitHome/ConstructionCost/tmp/$PROJECTData.jsp");
         return rptDataObj;
         return rptDataObj;
     };
     };
 
 
@@ -314,7 +322,7 @@ function summaryData(sourceData, handleCfg, prjData){
     }
     }
     delete sourceData.data;
     delete sourceData.data;
     sourceData.data = rstArr;
     sourceData.data = rstArr;
-    // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sumRst.js");
+    // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sumRst.jsp");
 }
 }
 
 
 function filterData(sourceData, handleCfg, prjData) {
 function filterData(sourceData, handleCfg, prjData) {
@@ -452,6 +460,64 @@ function adjustData(sourceData, adjustCfg) {
     sourceData.data = rstArr;
     sourceData.data = rstArr;
 }
 }
 
 
+function moveRationData(rationData, rawDataObj) {
+    if (rawDataObj) {
+        // let rationData = getModuleDataByKey(rawDataObj.prjData, projectConst.RATION);
+        let rationGljData = getModuleDataByKey(rawDataObj.prjData, projectConst.RATION_GLJ);
+        let prjGljData = getModuleDataByKey(rawDataObj.prjData, projectConst.PROJECTGLJ);
+        let dummyCode = " ", dummyPRJID = 10101010;
+        for (let rationItem of rationData.data) {
+            if (rationItem.type === 2 || rationItem.type === 3) {
+                //2: 量材(人工/材料/机械/主材/设备) 3:材料(材料/主材/设备)
+                let copyItem = {};
+                copyItem.ID = rationItem.ID;
+                copyItem.projectID = rationItem.projectID;
+                copyItem.GLJID = rationItem.GLJID;
+                copyItem.rationID = rationItem.ID;
+                copyItem.rationItemQuantity = 1;
+                copyItem.quantity = 1;
+                copyItem.specialType_quantity = rationItem.quantity;
+                copyItem.name = rationItem.name;
+                if (rationItem.code) {
+                    copyItem.code = rationItem.ID + "_" + rationItem.code;
+                } else {
+                    copyItem.code = dummyCode;
+                    dummyCode = dummyCode + " ";
+                }
+                copyItem.original_code = rationItem.original_code;
+                copyItem.unit = rationItem.unit;
+                copyItem.specs = rationItem.specs;
+                copyItem.shortName = rationItem.shortName;
+                copyItem.billsItemID = rationItem.billsItemID;
+                copyItem.type = rationItem.subType;
+                // copyItem.repositoryId = rationItem.?;
+                if (rationItem.projectGLJID) {
+                    copyItem.projectGLJID = rationItem.projectGLJID;
+                } else {
+                    //add dummy project GLJ
+                    let dummyPrjItem = {};
+                    copyItem.projectGLJID = dummyPRJID;
+                    dummyPrjItem.id = dummyPRJID;
+                    dummyPRJID++;
+                    dummyPrjItem.unit_price = {};
+                    // dummyPrjItem.unit_price.base_price = 0;
+                    // dummyPrjItem.unit_price.market_price = 0;
+                    dummyPrjItem.unit_price.base_price = 0;
+                    dummyPrjItem.unit_price.market_price = rationItem["marketUnitFee"];
+                    dummyPrjItem.quantity = 0;
+                    dummyPrjItem.is_evaluate = 0;
+                    prjGljData.data.gljList.push(dummyPrjItem);
+                }
+                // copyItem.adjCoe = rationItem.?;
+                // copyItem.from = rationItem.?;
+                // copyItem.createType = rationItem.?;
+                rationGljData.data.push(copyItem);
+            }
+        }
+        // fsUtil.writeObjToFile(rationGljData.data, "D:/GitHome/ConstructionCost/tmp/afterMoveGLJ.jsp");
+    }
+}
+
 function getDupGrpKeyVals(sourceData, segKeys) {
 function getDupGrpKeyVals(sourceData, segKeys) {
     let rst = [];
     let rst = [];
     function pushKeyVal(item) {
     function pushKeyVal(item) {
@@ -638,13 +704,13 @@ function sortData(sourceData, sortCfg, prjData) {
             treeUtil.getFlatArray(newTopArr, destArr);
             treeUtil.getFlatArray(newTopArr, destArr);
             delete sourceData.data;
             delete sourceData.data;
             sourceData.data = destArr;
             sourceData.data = destArr;
-            // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sortedAndFlattedRst.js");
+            // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sortedAndFlattedRst.jsp");
             break;
             break;
         case "normal":
         case "normal":
             private_normal_sort(tempRstArr, sortCfg[JV.PROP_SORT_KEYS]);
             private_normal_sort(tempRstArr, sortCfg[JV.PROP_SORT_KEYS]);
             delete sourceData.data;
             delete sourceData.data;
             sourceData.data = tempRstArr;
             sourceData.data = tempRstArr;
-            // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/normalSortedRst.js");
+            // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/normalSortedRst.jsp");
             break;
             break;
         case "accord_to_parent":
         case "accord_to_parent":
             let pcKey = sortCfg[JV.PROP_PARENT_CHILD_SORT_KEY];
             let pcKey = sortCfg[JV.PROP_PARENT_CHILD_SORT_KEY];
@@ -795,17 +861,27 @@ function ext_getPropety(propKey) {
     if (propKey && dtObj) {
     if (propKey && dtObj) {
         for (let dItem of dtObj.data) {
         for (let dItem of dtObj.data) {
             let doc = (dItem._doc === null || dItem._doc === undefined)?dItem:dItem._doc;
             let doc = (dItem._doc === null || dItem._doc === undefined)?dItem:dItem._doc;
-            if (doc.hasOwnProperty("property")) {
-                // if (!doc["property"][propKey] && doc[propKey]) {
-                //     rst.push(doc[propKey]);
-                // } else {
-                //     getDeepProperty(propKey, doc["property"], rst);
-                // }
-                rst.push(doc["property"][propKey]);
-            } else if (doc.hasOwnProperty(propKey)) {
-                rst.push(doc[propKey]);
+            if (propKey instanceof Array) {
+                for (let pi = 0; pi < propKey.length; pi++) {
+                    if (doc.hasOwnProperty("property")) {
+                        if (doc["property"].hasOwnProperty(propKey[pi])) {
+                            rst.push(doc["property"][propKey[pi]]);
+                            break;
+                        }
+                    } else if (doc.hasOwnProperty(propKey[pi])) {
+                        rst.push(doc[propKey[pi]]);
+                        break;
+                    }
+                    if (pi === propKey.length - 1) rst.push('');
+                }
             } else {
             } else {
-                rst.push('');
+                if (doc.hasOwnProperty("property")) {
+                    rst.push(doc["property"][propKey]);
+                } else if (doc.hasOwnProperty(propKey)) {
+                    rst.push(doc[propKey]);
+                } else {
+                    rst.push('');
+                }
             }
             }
         }
         }
     }
     }

+ 1 - 0
public/web/rpt_value_define.js

@@ -64,6 +64,7 @@ const JV = {
     PROP_HANDLE_TYPE_SORT: "排序",
     PROP_HANDLE_TYPE_SORT: "排序",
     PROP_HANDLE_TYPE_ADD_DUMMY: "增加Dummy数据",
     PROP_HANDLE_TYPE_ADD_DUMMY: "增加Dummy数据",
     PROP_HANDLE_TYPE_ADJUST: "数据调整",
     PROP_HANDLE_TYPE_ADJUST: "数据调整",
+    PROP_HANDLE_TYPE_BILLS_DATA_MOVE: "量材数据转移",
 
 
     PROP_ADJUST_COLLECTION: "数据调整集",
     PROP_ADJUST_COLLECTION: "数据调整集",
     PROP_ADJUST_ACTION: "action",
     PROP_ADJUST_ACTION: "action",

+ 7 - 2
test/unit/reports/test_tpl_09_1.js

@@ -27,9 +27,11 @@ let fsUtil = require("../../../public/fsUtil");
 let demoPrjId = - 1;
 let demoPrjId = - 1;
 let demoRptId = 226, pagesize = "A4";
 let demoRptId = 226, pagesize = "A4";
 
 
-let userId_Leng = "59cdf14a0034a1000ba52b97"; //小冷User Id 换成_id了
+// let userId_Leng = "59cdf14a0034a1000ba52b97"; //小冷User Id 换成_id了 QQ号
+let userId_Leng = "5acac1e885bf55000bd055ba"; //小冷User Id2
 // demoPrjId = 720; //QA: DW3
 // demoPrjId = 720; //QA: DW3
-demoPrjId = 1626; //QA:
+//demoPrjId = 1626; //QA:
+demoPrjId = 2260; //QA:
 //*/
 //*/
 let userId_Dft = userId_Leng;
 let userId_Dft = userId_Leng;
 /*/
 /*/
@@ -58,6 +60,9 @@ test('测试 - 测试模板啦: ', function (t) {
         rptTplDataFacade.prepareProjectData(userId_Dft, demoPrjId, filter, function (err, msg, rawDataObj) {
         rptTplDataFacade.prepareProjectData(userId_Dft, demoPrjId, filter, function (err, msg, rawDataObj) {
             if (!err) {
             if (!err) {
                 try {
                 try {
+                    // if (filter.indexOf('ration') >= 0 && filter.indexOf('ration_glj') >= 0) {
+                    //     rptDataUtil.moveRationData(rawDataObj, filter);
+                    // }
                     // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject_建筑09-1表.jsp");
                     // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject_建筑09-1表.jsp");
                     let tplData = rptDataUtil.assembleData(rawDataObj);
                     let tplData = rptDataUtil.assembleData(rawDataObj);
                     // fsUtil.writeObjToFile(tplData, "D:/GitHome/ConstructionCost/tmp/rptTplAssembledData_建筑09-1表.jsp");
                     // fsUtil.writeObjToFile(tplData, "D:/GitHome/ConstructionCost/tmp/rptTplAssembledData_建筑09-1表.jsp");

+ 7 - 2
web/building_saas/report/js/jpc_output.js

@@ -14,6 +14,7 @@ let JpcCanvasOutput = {
     drawToCanvas : function(pageObj, canvas, pageIdx) {
     drawToCanvas : function(pageObj, canvas, pageIdx) {
         let me = this;
         let me = this;
         let ctx = canvas.getContext("2d");
         let ctx = canvas.getContext("2d");
+        let floatReg = /^(-?\d+)(\.\d+)?$/;
 
 
         function private_setupAreaH(area, type, fontAngle, dftFontHeight, outputPoint) {
         function private_setupAreaH(area, type, fontAngle, dftFontHeight, outputPoint) {
             let lType = type;
             let lType = type;
@@ -169,7 +170,7 @@ let JpcCanvasOutput = {
             ctx.restore();
             ctx.restore();
         }
         }
         function private_drawCellText(cell, fonts, controls) {
         function private_drawCellText(cell, fonts, controls) {
-            if (cell[JV.PROP_VALUE]) {
+            if (cell[JV.PROP_VALUE] !== null && cell[JV.PROP_VALUE] !== undefined) {
                 let values = ("" + cell[JV.PROP_VALUE]).split('|');
                 let values = ("" + cell[JV.PROP_VALUE]).split('|');
                 let font = null;
                 let font = null;
                 if (typeof cell[JV.PROP_FONT] === "string") {
                 if (typeof cell[JV.PROP_FONT] === "string") {
@@ -185,7 +186,11 @@ let JpcCanvasOutput = {
                     control = cell[JV.PROP_CONTROL];
                     control = cell[JV.PROP_CONTROL];
                 }
                 }
                 if (control.ShowZero === "F") {
                 if (control.ShowZero === "F") {
-                    if (parseFloat(cell[JV.PROP_VALUE]) === 0.0) {
+                    if (typeof cell[JV.PROP_VALUE] === "string") {
+                        if (floatReg.test(cell[JV.PROP_VALUE]) && parseFloat(cell[JV.PROP_VALUE]) === 0.0) {
+                            values = [""];
+                        }
+                    } else if (parseFloat(cell[JV.PROP_VALUE]) === 0.0) {
                         values = [""];
                         values = [""];
                     }
                     }
                 }
                 }