فهرست منبع

02-2 工料机总汇总表

TonyKang 6 سال پیش
والد
کامیت
69a48a78e9

+ 56 - 3
modules/reports/controllers/rpt_controller.js

@@ -403,7 +403,7 @@ function getMultiRptsCommon(user_id, prj_id, rpt_ids, pageSize, orientation, cus
     });
 }
 
-function getSummaryReportPages(user_id, prjIds, rpt_id, pageSize, orientation, customizeCfg, option, outputType, cb) {
+function getBillsSummaryReportPages(user_id, prjIds, rpt_id, pageSize, orientation, customizeCfg, option, outputType, cb) {
     let rptTpl = null;
     rptTplDataFacade.getBudgetSummayDatas(prjIds).then(function(summaryRawDataRst) {
         rptTplFacade.getRptTemplate(rpt_id).then(function(rptTpl) {
@@ -442,6 +442,45 @@ function getSummaryReportPages(user_id, prjIds, rpt_id, pageSize, orientation, c
     });
 }
 
+function getGljSummaryReportPages(user_id, prjIds, rpt_id, pageSize, orientation, customizeCfg, option, outputType, cb) {
+    let rptTpl = null;
+    rptTplDataFacade.getGLJSummayDatas(prjIds).then(function(summaryRawDataRst) {
+        rptTplFacade.getRptTemplate(rpt_id).then(function(rptTpl) {
+            let rptDataUtil = new rptDataExtractor();
+            rptDataUtil.initialize((rptTpl._doc)?rptTpl._doc:rptTpl);
+            try {
+                let tplData = rptDataUtil.assembleData(summaryRawDataRst);
+                let printCom = JpcEx.createNew();
+                if (pageSize) rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
+                //console.log("orientation: " + (orientation === 'null'));
+                if (orientation && (orientation !== 'null')) rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] = orientation;
+                let defProperties = rptUtil.getReportDefaultCache();
+                if (customizeCfg) setupCustomizeCfg(customizeCfg, rptTpl, defProperties);
+                let dftOption = option||JV.PAGING_OPTION_NORMAL;
+                printCom.initialize(rptTpl);
+                printCom.analyzeData(rptTpl, tplData, defProperties, dftOption, outputType);
+                let maxPages = printCom.totalPages;
+                let pageRst = null;
+                if (maxPages > 0) {
+                    pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties, customizeCfg);
+                } else {
+                    pageRst = printCom.outputAsPreviewPage(rptTpl, defProperties);
+                }
+                if (pageRst) {
+                    cb(null, pageRst);
+                } else {
+                    cb('Have errors while on going...', null);
+                }
+            } catch (ex) {
+                console.log("报表数据异常: userId " + user_id + ", project id: " + prj_id);
+                console.log(ex);
+                cb('Exception occurs while on going...', null);
+            }
+        });
+
+    });
+}
+
 module.exports = {
     getReportAllPages: function (req, res) {
         let params = JSON.parse(req.body.params),
@@ -511,7 +550,21 @@ module.exports = {
         });
     },
 
-    getSummaryReportPages: function (req, res) {
+    getBillSummaryReportPages: function (req, res) {
+        let params = JSON.parse(req.body.params),
+            rpt_id = params.rpt_tpl_id,
+            prjIds = params.prjIds,
+            pageSize = params.pageSize,
+            orientation = params.orientation,
+            customizeCfg = params.custCfg
+        ;
+        let user_id = req.session.sessionUser.id;
+        getBillsSummaryReportPages(user_id, prjIds, rpt_id, pageSize, orientation, customizeCfg, null, JV.OUTPUT_TYPE_NORMAL, function (err, pageRst) {
+            callback(req, res, err, pageRst);
+        });
+    },
+
+    getGljSummaryReportPages: function (req, res) {
         let params = JSON.parse(req.body.params),
             rpt_id = params.rpt_tpl_id,
             prjIds = params.prjIds,
@@ -520,7 +573,7 @@ module.exports = {
             customizeCfg = params.custCfg
         ;
         let user_id = req.session.sessionUser.id;
-        getSummaryReportPages(user_id, prjIds, rpt_id, pageSize, orientation, customizeCfg, null, JV.OUTPUT_TYPE_NORMAL, function (err, pageRst) {
+        getGljSummaryReportPages(user_id, prjIds, rpt_id, pageSize, orientation, customizeCfg, null, JV.OUTPUT_TYPE_NORMAL, function (err, pageRst) {
             callback(req, res, err, pageRst);
         });
     },

+ 7 - 2
modules/reports/facade/rpt_tpl_data_facade.js

@@ -11,7 +11,8 @@ let projectFacade = require('../../../modules/main/facade/project_facade');
 
 module.exports = {
     prepareProjectData: prepareProjectData,
-    getBudgetSummayDatas: getBudgetSummayDatas
+    getBudgetSummayDatas: getBudgetSummayDatas,
+    getGLJSummayDatas: getGLJSummayDatas
 };
 
 function prepareProjectData(userId, prjId, filter, callback) {
@@ -44,4 +45,8 @@ function prepareProjectData(userId, prjId, filter, callback) {
 
 async function getBudgetSummayDatas(prjIds) {
     return await projectFacade.getBudgetSummayDatas(prjIds);
-}
+}
+
+async function getGLJSummayDatas(prjIds) {
+    return await projectFacade.getGLJSummayDatas(prjIds);
+}

+ 2 - 1
modules/reports/routes/report_router.js

@@ -30,7 +30,8 @@ module.exports =function (app) {
     rptRouter.post('/createExcelFiles', reportController.createExcelFiles);
     rptRouter.post('/createExcelFilesInOneBook', reportController.createExcelFilesInOneBook);
     rptRouter.post('/createPdfFiles', reportController.createPdfFiles);
-    rptRouter.post('/getBillsSummaryReport', reportController.getSummaryReportPages);
+    rptRouter.post('/getBillsSummaryReport', reportController.getBillSummaryReportPages);
+    rptRouter.post('/getGljSummaryReport', reportController.getGljSummaryReportPages);
 
     rptRouter.get('/getExcelInOneBook/:prj_id/:rpt_ids/:size/:rptName/:option', reportController.getExcelInOneBook);
     rptRouter.get('/getExcel/:prj_id/:rpt_id/:size/:orientation/:rptName/:isOneSheet/:option', reportController.getExcel);

+ 51 - 3
test/unit/reports/test_summary_multi_prjs.js

@@ -14,9 +14,10 @@ let dbm = require("../../../config/db/db_manager");
 let rpt_cfg = require('./rpt_cfg');
 dbm.connect(process.env.NODE_ENV);
 
-let demoPrjs = [618, 635]; //
+let demoPrjs = [1510, 1511]; //
 // let demoRptId = 68; //01-2
-let demoRptId = 72; //01-1
+// let demoRptId = 72; //01-1
+let demoRptId = 73; //02-2
 let pagesize = "A4";
 let userId_Leng = "5c3ffa9aa0a92732f41216e0"; //小冷User Id (养护的)
 // let userId_me = "5b6a60b1c4ba33000dd417c0"; //我的
@@ -44,7 +45,8 @@ fs.readFile(__dirname.slice(0, __dirname.length - 18) + '/public/web/date_util.j
     eval(data);
 });
 
-test('测试 - 测试模板啦: ', function (t) {
+/*
+test('测试 - 测试清单汇总: ', function (t) {
     rptTplDataFacade.getBudgetSummayDatas(demoPrjs).then(function(summaryRst) {
         //console.log(summaryRst);
         rptTplFacade.getRptTemplate(demoRptId).then(function(rptTpl) {
@@ -88,6 +90,52 @@ test('测试 - 测试模板啦: ', function (t) {
         });
     });
 });
+/*/
+test('测试 - 测试工料机汇总: ', function (t) {
+    rptTplDataFacade.getGLJSummayDatas(demoPrjs).then(function(summaryRst) {
+        // console.log(summaryRst);
+        rptTplFacade.getRptTemplate(demoRptId).then(function(rptTpl) {
+            try {
+                let dt = new Date();
+                // fsUtil.writeObjToFile(summaryRst, "D:/GitHome/YangHuCost/tmp/02_2原始数据.jsp");
+                let rptDataUtil = new rptDataExtractor();
+                rptDataUtil.initialize(rptTpl._doc);
+                let tplData = rptDataUtil.assembleData(summaryRst);
+                // fsUtil.writeObjToFile(summaryRst, "D:/GitHome/YangHuCost/tmp/多清单汇总表(01_2)整理后数据.jsp");
+                // fsUtil.writeObjToFile(tplData, "D:/GitHome/YangHuCost/tmp/rptTplAssembledData_测试模板.jsp");
+                //it's time to build the report!!!
+                let printCom = JpcEx.createNew();
+                rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pagesize;
+                let defProperties = rpt_cfg;
+                let dftOption = JV.PAGING_OPTION_NORMAL;
+                printCom.initialize(rptTpl);
+                printCom.analyzeData(rptTpl, tplData, defProperties, dftOption, JV.OUTPUT_TYPE_EXCEL);
+                let maxPages = printCom.totalPages;
+                let customizeCfg = {"fillZero": true};
+                let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties, customizeCfg);
+                if (pageRst) {
+                    fsUtil.writeObjToFile(pageRst, "D:/GitHome/YangHuCost/tmp/多清单汇总表(02_2)page数据" + dt.getTime() + ".jsp");
+                    // rpt_xl_util.exportExcel(pageRst, pagesize, "local_test_rpt_excel", true, null, null, function(uuidName){
+                    //     console.log("excel uuid: " + uuidName);
+                    // });
+                    // rpt_pdf_util.export_pdf_file(pageRst, pagesize, 'local_test_rpt_pdf', function(uuidName){
+                    //     console.log("pdf uuid: " + uuidName);
+                    // });
+                } else {
+                    console.log("oh! no pages were created!");
+                }
+            } catch (ex) {
+                console.log(ex);
+                t.pass('pass with exception!');
+                t.end();
+            }
+
+            t.pass('pass succeeded!');
+            t.end();
+        });
+    });
+});
+//*/
 
 test('close the connection', function (t) {
     setTimeout(function () {

+ 5 - 1
web/building_saas/report/html/rpt_select_projects.html

@@ -12,10 +12,14 @@
                     <ul id="prjFolderTree" class="ztree"></ul>
                 </div>
             </div>
-            <div class="modal-footer">
+            <div class="modal-footer" id="divReqBillSummary" style="display:none">
                 <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
                 <a onclick="zTreeOprObj.requestBillsSummaryRpt()" class="btn btn-primary" data-dismiss="modal">确定</a>
             </div>
+            <div class="modal-footer" id="divReqGljSummary" style="display:none">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <a onclick="zTreeOprObj.requestGljSummaryRpt()" class="btn btn-primary" data-dismiss="modal">确定</a>
+            </div>
         </div>
     </div>
 </div>

+ 66 - 9
web/building_saas/report/js/rpt_main.js

@@ -215,11 +215,13 @@ let zTreeOprObj = {
     onClick: function(event,treeId,treeNode) {
         let me = zTreeOprObj;
         if (treeNode.nodeType === TPL_TYPE_TEMPLATE && treeNode.refId > 0) {
-            if (treeNode.hasOwnProperty('flags') && treeNode.flags.hasOwnProperty('reportType')
-                && treeNode['flags']['reportType'] === 'billSummary') {
-                me.currentNode = treeNode;
-                me.requestPrjFolder();
-                me.countChkedRptTpl();
+            me.currentNode = treeNode;
+            if (treeNode.hasOwnProperty('flags') && treeNode.flags.hasOwnProperty('reportType') && treeNode['flags']['reportType'] !== 'NA') {
+                if (treeNode['flags']['reportType'] === 'billSummary') {
+                    me.requestPrjFolderForBillsSummary();
+                } else if (treeNode['flags']['reportType'] === 'gljSummary') {
+                    me.requestPrjFolderForGljSummary();
+                }
             } else {
                 let params = {};
                 let pageSize = rptControlObj.getCurrentPageSize();
@@ -227,10 +229,9 @@ let zTreeOprObj = {
                 params.rpt_tpl_id = treeNode.refId;
                 params.prj_id = projectObj.project.projectInfo.ID;
                 params.custCfg = me.reportPageCfg;
-                me.currentNode = treeNode;
                 me.requestReport(params);
-                me.countChkedRptTpl();
             }
+            me.countChkedRptTpl();
         }
     },
     changePageSize: function(dom) {
@@ -304,8 +305,7 @@ let zTreeOprObj = {
             }
         );
     },
-    requestPrjFolder: function () {
-        //$("#show_project_folder").trigger("click");
+    requestPrjFolderCommon: function () {
         let me = zTreeOprObj;
         hintBox.waitBox();
         $.ajax({
@@ -339,6 +339,18 @@ let zTreeOprObj = {
             }
         });
     },
+    requestPrjFolderForBillsSummary: function () {
+        let me = zTreeOprObj;
+        $("#divReqBillSummary")[0].style.display = "";
+        $("#divReqGljSummary")[0].style.display = "none";
+        me.requestPrjFolderCommon();
+    },
+    requestPrjFolderForGljSummary: function () {
+        let me = zTreeOprObj;
+        $("#divReqBillSummary")[0].style.display = "none";
+        $("#divReqGljSummary")[0].style.display = "";
+        me.requestPrjFolderCommon();
+    },
     requestBillsSummaryRpt: function () {
         let me = zTreeOprObj;
         let nodes = me.prjFolderTreeObj.getCheckedNodes(true);
@@ -384,6 +396,51 @@ let zTreeOprObj = {
             );
         }
     },
+    requestGljSummaryRpt: function () {
+        let me = zTreeOprObj;
+        let nodes = me.prjFolderTreeObj.getCheckedNodes(true);
+        if (nodes.length > 0) {
+            hintBox.waitBox();
+            let params = {};
+            params.pageSize = rptControlObj.getCurrentPageSize();
+            params.rpt_tpl_id = me.currentNode.refId;
+            params.custCfg = me.reportPageCfg;
+            params.prjIds = [];
+            for (let node of nodes) {
+                params.prjIds.push(node.ID);
+            }
+            CommonAjax.postEx("report_api/getGljSummaryReport", params, 26000, true,
+                function(result){
+                    hintBox.unWaitBox();
+                    let pageRst = result;
+                    let canvas = document.getElementById("rptCanvas");
+                    if (pageRst && pageRst.items && pageRst.items.length > 0) {
+                        me.resetAfter(pageRst);
+                        me.currentRptPageRst = pageRst;
+                        me.maxPages = pageRst.items.length;
+                        me.currentPage = 1;
+                        me.displayPageValue();
+                        let size = JpcCanvasOutput.getReportSizeInPixel(me.currentRptPageRst, getScreenDPI());
+                        canvas.width = size[0] + 20;
+                        if (size[1] > size[0]) {
+                            canvas.height = size[1] + 100;
+                        } else {
+                            canvas.height = size[1] + 50;
+                        }
+                        me.showPage(1, canvas);
+                    } else {
+                        //返回了无数据表
+                        JpcCanvasOutput.cleanCanvas(canvas);
+                        JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
+                    }
+                }, function(err){
+                    hintBox.unWaitBox();
+                }, function(ex){
+                    hintBox.unWaitBox();
+                }
+            );
+        }
+    },
     showPage: function (pageNum, canvas) {
         let me = zTreeOprObj;
         if (pageNum >= 1 && pageNum <= me.maxPages) {