Tony Kang 4 日 前
コミット
3b168e9cab

+ 2 - 0
app/const/rpt_archive.js

@@ -17,6 +17,8 @@ const BusinessType = [
     { stageId: -303, type: 'change_apply' },
     { stageId: -400, type: 'advance' },
     { stageId: -500, type: 'material' },
+    { stageId: -600, type: 'contract' },
+    { stageId: -700, type: 'phase_pay' },
 ];
 const getStageId = function(type) {
     const bType = BusinessType.find(x => { return x.type === type; });

+ 130 - 0
app/controller/report_controller.js

@@ -898,6 +898,136 @@ module.exports = app => {
             }
         }
 
+        async indexForPhasePay(ctx) {
+            // 计量管理
+            try {
+                await this.ctx.service.phasePay.loadAuditViewData(ctx.phasePay);
+                const pageShow = ctx.session.sessionProject.page_show;
+                pageShow.closeWatermark = 1;
+                pageShow.showArchive = 1;
+                pageShow.closeShowAllCustomized = 0;
+                pageShow.isPreset = 0;
+                const tenderId = ctx.params.id || -1; // 在router定义的
+                const bglObj = {};
+                // const bglObj = { status: stage_status };
+                bglObj.BUSINESS_ID = ctx.phasePay.id;
+                const stage = null;
+                const stage_order = -1;
+                const sorder = -1;
+                const stage_times = -1;
+                // const stage_status = -1;
+                const stage_status = 3; // 目前强制为通过,等后续审核逻辑完善后再改
+                const project_id = ctx.tender.data.project_id;
+                const { treeNodes, custCfg, commonArrs, allTreeItems, allIndivTreeItems } = await this._createNodes(ctx, sourceTypeConst.sourceType.phase_pay, project_id);
+                const cust_select_keys = JSON.stringify(['common', 'customize']); // 因其他地方也有可能保存用户报表的显示选择项,因当初设计问题,不好改数据库结构了,但可以调节内部json来满足需求
+                const rpt_tpl_items = { customize: [], common: [] };
+                commonArrs.forEach(item => {
+                    rpt_tpl_items.common.push(item.name);
+                });
+                if (treeNodes && treeNodes.length > 0) {
+                    for (let tIdx = treeNodes.length - 1; tIdx >= 0; tIdx--) {
+                        if (treeNodes[tIdx].name !== '通用报表') {
+                            rpt_tpl_items.customize.push(treeNodes[tIdx].name);
+                        }
+                    }
+                }
+
+                // 获取所有项目参与者
+                const { accountList, newAccountGroup, advance } = await this._getInvolveAcc(ctx, tenderId);
+                const unitList = await ctx.service.constructionUnit.getAllDataByCondition({ where: { pid: ctx.session.sessionProject.id } }); // 找公司章用的
+                const roleList = await ctx.service.signatureRole.getSignatureRolesByTenderId(tenderId);
+                const usedList = await ctx.service.signatureUsed.getSignatureUsedByTenderId(tenderId);
+                const isAdmin = ctx.session.sessionUser.is_admin;
+                const prjAccList = await this._getPrjAccList(ctx, pageShow);
+                this._resetAccCompanySignPath(ctx, prjAccList);
+                for (const prjAcc of prjAccList) {
+                    prjAcc.account_group = prjAcc.company;
+                }
+                // 分类列表
+                const categoryData = await this.ctx.service.category.getAllCategory(ctx.subProject);
+                // // 获取用户权限
+                const accountInfo = await this.ctx.service.projectAccount.getDataById(this.ctx.session.sessionUser.accountId);
+                const tenderList = [];
+                const cid = this.ctx.helper._.map(treeNodes, 'id');
+                const customSelects = null;
+                const dataSelects = {};
+                dataSelects.material_select = await ctx.service.rptCustomDefine.getDataSelectByRpt(cid,
+                    reportConst.rptDataType[JV.NODE_CUS_MATERIAL_SELECT]);
+
+                // const materialList = await ctx.service.material.getValidMaterials(ctx.tenderId);
+                // const materialAdjAuditList = await ctx.service.materialAudit.getAuditorsByTender(tenderId);
+
+                const renderData = {
+                    accountGroup: newAccountGroup,
+                    accountList,
+                    unitList: JSON.stringify(unitList),
+                    tender: null,
+                    tenderInfo: null,
+                    rpt_tpl_data: JSON.stringify(treeNodes),
+                    cust_tpl_data: JSON.stringify(rpt_tpl_items),
+                    all_common_tpl_data: JSON.stringify(allTreeItems),
+                    all_indivi_tpl_data: JSON.stringify(allIndivTreeItems),
+                    // all_common_tpl_data: JSON.stringify([]),
+                    // all_indivi_tpl_data: JSON.stringify([]),
+                    cust_select_keys,
+                    cust_cfg: JSON.stringify(custCfg),
+                    project_id,
+                    tender_id: tenderId,
+                    budget_id: -1,
+                    sp_id: -1,
+                    tender_name: ctx.tender.data.name,
+                    detail_id: -1,
+                    stg_id: -700,
+                    stg_order: stage_order,
+                    cur_order: sorder,
+                    stg_times: stage_times,
+                    stg_status: stage_status,
+                    stage_list: '[]',
+                    prj_account_list: JSON.stringify(prjAccList),
+                    role_list: JSON.stringify(roleList),
+                    used_list: JSON.stringify(usedList),
+                    tenderMenu,
+                    // preUrl,
+                    // thisUrl,
+                    measureType,
+                    categoryData,
+                    tenderList,
+                    auditConst: auditConst.stage,
+                    ledgerAuditConst: auditConst.ledger,
+                    jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.report.main),
+                    customSelects,
+                    rptCustomType: reportConst.rptCustomType,
+                    advanceList: JSON.stringify([]),
+                    advanceAuditList: JSON.stringify([]),
+                    materialAdjList: JSON.stringify([]),
+                    materialAdjAuditList: JSON.stringify([]),
+                    materialList: [],
+                    stages: [],
+                    dataSelects,
+                    pageShow,
+                    authMobile: accountInfo.auth_mobile,
+                    shenpiConst,
+                    archiveList: [],
+                    lastAuditor: null,
+                    rpt_id: ctx.query.rpt_id,
+                    isAdmin,
+                    prePay: JSON.stringify(advance),
+                    OSS_PATH: ctx.app.config.fujianOssPath,
+                    viewPmData: PermissionCheck.viewPmData(this.ctx.session.sessionUser.permission),
+                    source_type: sourceTypeConst.sourceType.phase_pay,
+                    bglObj: JSON.stringify(bglObj),
+                    changes: 'null',
+                    otherChangeList: 'null',
+                    otherHintName: '',
+                    bizId: bglObj.BUSINESS_ID,
+                    permissions: '[]',
+                };
+                await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
+            } catch (err) {
+                this.log(err);
+            }
+        }
+
         async _indexForBGL(ctx, source_type, stage_id) {
             // 变更令、变更方案、变更立项、变更申请 报表入口
             try {

+ 3 - 6
app/router.js

@@ -911,13 +911,13 @@ module.exports = app => {
     app.get('/tender/:id/change/project/:cprjid/report', sessionAuth, tenderCheck, subProjectCheck, uncheckTenderCheck, 'reportController.indexForChangeProject');
     app.get('/tender/:id/change/apply/:caid/report', sessionAuth, tenderCheck, subProjectCheck, uncheckTenderCheck, 'reportController.indexForChangeApply');
     app.get('/tender/:id/measure/stage/:order/report', sessionAuth, tenderCheck, subProjectCheck, uncheckTenderCheck, stageCheck, 'reportController.index');
-    // app.get('/sp/:prjid/contract/report', sessionAuth, subProjectCheck, 'reportController.indexForProjectContract');
-    // app.get('/sp/:id/contract/panel', sessionAuth, subProjectCheck, contractCheck, 'contractController.panel');
     app.get('/sp/:id/contract/report', sessionAuth, subProjectCheck, contractCheck, 'reportController.indexForProjectContract');
     app.get('/sp/:id/contract/tender/:tid/report', sessionAuth, subProjectCheck, contractCheck, 'reportController.indexForTenderContract');
-    // app.get('/sp?/contract/report', sessionAuth, tenderCheck, subProjectCheck, uncheckTenderCheck, 'reportController.indexForTenderContract');
     app.get('/sp/:id/payment/:pid/safe/:did/report', sessionAuth, subProjectCheck, paymentTenderCheck, paymentDetailCheck, 'reportController.indexForPaymentSafe');
     app.get('/budget/:id/report', sessionAuth, budgetCheck, 'reportController.indexForDynamicGrandTotal');
+    // app.get('/tender/:id/pay/:order/detail', sessionAuth, tenderCheck, subProjectCheck, phasePayCheck, 'payController.detail');
+    // app.get('/tender/:id/pay/:order/report', sessionAuth, tenderCheck, subProjectCheck, phasePayCheck, 'reportController.indexForPhasePay'); // 计量管理
+    app.get('/tender/:id/pay/:order/report', sessionAuth, tenderCheck, subProjectCheck, phasePayCheck, 'reportController.indexForPhasePay'); // 计量管理(无 phasePayCheck)
     app.get('/tender/:id/archiveReport', sessionAuth, tenderCheck, subProjectCheck, 'reportArchiveController.index');
     app.post('/tender/report_api/getReportArchive', sessionAuth, 'reportArchiveController.getReportArchive');
     app.post('/tender/report_api/getReportArchive4bz', sessionAuth, 'reportArchiveController.getReportArchive4bz');
@@ -928,9 +928,6 @@ module.exports = app => {
     app.get('/individualReport/:size', sessionAuth, 'reportController.showIndividualPage');
     app.post('/tender/report_api/getReport', sessionAuth, subProjectCheck, 'reportController.getReport');
     app.post('/contract/report_api/getReport', sessionAuth, subProjectCheck, 'reportController.getReport');
-    // app.post('/sp/contract/report_api/getReport', sessionAuth, subProjectCheck, 'reportController.getReport');
-    // /sp/:id
-    // app.post('/safe_calc/report_api/getReport', sessionAuth, subProjectCheck, tenderCheck, tenderPermissionCheck, safeStageCheck, 'reportController.getReport');
     app.post('/safe_calc/report_api/getReport', sessionAuth, subProjectCheck, 'reportController.getReport');
     app.post('/report_api/getReport', sessionAuth, 'reportController.getReport');
     app.post('/report_api/getReportTemplate', sessionAuth, 'reportController.getReportTemplate');

+ 1 - 0
app/view/phase_pay/sub_menu_list.ejs

@@ -1,3 +1,4 @@
 <nav-menu title="返回" url="/tender/<%= ctx.tender.id %>/pay" tclass="text-primary" ml="1" icon="fa-chevron-left"></nav-menu>
 <nav-menu title="支付明细" url="/tender/<%= ctx.tender.id %>/pay/<%= ctx.phasePay.phase_order + '/detail'%>" ml="3" active="<%= (ctx.url.indexOf('detail') >= 0 ? 1 : -1) %>"></nav-menu>
+<nav-menu title="输出报表" url="/tender/<%= ctx.tender.id %>/pay/<%= ctx.phasePay.phase_order + '/report'%>" ml="3" active="<%= (ctx.url.indexOf('report') >= 0 ? 1 : -1) %>"></nav-menu>
 <% include ./audit_btn.ejs %>

+ 7 - 5
app/view/report/index.ejs

@@ -10,6 +10,8 @@
     <% include ../tender/tender_sub_menu.ejs %>
 <% } else if ([-600].includes(stg_id)) { %>
     <% include ../contract/sub_menu.ejs %>
+<% } else if ([-700].includes(stg_id)) { %>
+    <% include ../phase_pay/sub_menu.ejs %>
 <% } else { %>
     <% include ../stage/stage_sub_menu.ejs %>
 <% } %>
@@ -18,7 +20,7 @@
         <div class="title-main d-flex">
             <% if(stg_id === -1) { %>
                 <% include ../tender/tender_sub_mini_menu.ejs %>
-            <% } else if ([-100, -150, -200, -300, -301, -302, -303, -600].includes(stg_id)) { %>
+            <% } else if ([-100, -150, -200, -300, -301, -302, -303, -600, -700].includes(stg_id)) { %>
             <% } else { %>
                 <% include ../stage/stage_sub_mini_menu.ejs %>
             <% } %>
@@ -50,7 +52,7 @@
                     </div>
                 </div>
                 <% } %>
-                <% if (false || ![-100, -150, -200, -300, -301, -302, -303, -600].includes(stg_id)) { %>
+                <% if (false || ![-100, -150, -200, -300, -301, -302, -303, -600, -700].includes(stg_id)) { %>
                 <div class="d-inline-block" id="divSelectableBizs_up">
                     <div class="dropdown" id="divSelectableStages">
                         <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="btnCurrentStage" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
@@ -66,7 +68,7 @@
                     </div>
                 </div>
                 <% } %>
-                <% if (stg_id === -200 || ![-100, -150, -300, -301, -302, -303, -600].includes(stg_id)) { %>
+                <% if (stg_id === -200 || ![-100, -150, -300, -301, -302, -303, -600, -700].includes(stg_id)) { %>
                 <div class="d-inline-block" id="report_selects_div">
                     <ul class="nav nav-pills m-0" id="report_selects_ul">
                         <% if (ctx.session.sessionUser.is_admin || ctx.session.sessionProject.page_show.isCommonSetup) { %>
@@ -128,7 +130,7 @@
                 </div>
                 <% } %>
                 <% } %>
-                <% if (isAdmin && ![-150, -600].includes(stg_id)) { %>
+                <% if (isAdmin && ![-150, -600, -700].includes(stg_id)) { %>
                 <div class="d-inline-block">
                     <a href="/tender/<%- tender_id %>/report/format/setup" class=" btn btn-light btn-sm  text-primary">设置</a>
                 </div>
@@ -697,7 +699,7 @@
         current_stage_status = STAGE_LIST[STAGE_LIST.length - 1].status;
     }
 
-    <% if (false || ![-100, -150, -200, -300, -301, -302, -303, -600].includes(stg_id)) { %>
+    <% if (false || ![-100, -150, -200, -300, -301, -302, -303, -600, -700].includes(stg_id)) { %>
     buildStageSelection();
     <% } %>
     setupSignature();

+ 2 - 2
app/view/report/rpt_all_popup.ejs

@@ -814,7 +814,7 @@
     </div>
 </div>
 
-<% if (![-100, -150, -200, -300, -301, -302, -303, -600].includes(stg_id)) { %>
+<% if (![-100, -150, -200, -300, -301, -302, -303, -600, -700].includes(stg_id)) { %>
 <% include ../stage/audit_modal.ejs %>
 <% } %>
 <% if (stg_id === -150) { %>
@@ -825,7 +825,7 @@
     zTreeOprObj.getCustomerCfg();
     zTreeOprObj.iniFontCfgDom(CUST_CFG);
     
-    <% if (![-100, -150, -300, -301, -302, -303, -600].includes(stg_id)) { %>
+    <% if (![-100, -150, -300, -301, -302, -303, -600, -700].includes(stg_id)) { %>
     buildCustRptCommon('report_cust_group_common', ORG_TOP_TREE_NODES[1], CUST_TREE_NODES.common, 'true');
     buildCustRptCommon('report_cust_group_individual', ORG_TOP_TREE_NODES[0], CUST_TREE_NODES.customize, 'false');
     <% } %>