Browse Source

1. 报表数据预设,项目管理-合同管理相关
2. 移除final缓存的部分无用代码

MaiXinRong 3 years ago
parent
commit
8b4cd0d816

+ 15 - 0
app/const/account_permission.js

@@ -31,6 +31,7 @@ const permission = {
             { title: '维护签约清单', value: 3, hint: '开启该选项,台账审批通过后,可上传签约清单', hintIcon: 'fa-question-circle' },
             { title: '变更意向', value: 5, hint: '开启该选项,变更立项可新建变更意向书', hintIcon: 'fa-question-circle' },
             { title: '材差清单设置', value: 4, hint: '开启该选项,当前账号可设置允许调差的清单', hintIcon: 'fa-question-circle' },
+            { title: '查看项目管理报表数据', value: 6, hint: '开启该选项,当前账号在报表下可查看项目管理数据', hintIcon: 'fa-question-circle' },
         ],
     },
     // cooperation: {
@@ -53,8 +54,22 @@ const permission = {
     },
 };
 
+const PermissionCheck = {
+    check: function (permission, key) {
+        if (!permission) return false;
+        switch (key) {
+            case 'viewPmData': return permission.tender.indexOf('6') >= 0;
+            default: return false;
+        }
+    },
+    viewPmData: function (permission) {
+        return this.check(permission, 'viewPmData');
+    },
+};
+
 module.exports = {
     tenderPermission: create_tender,
     tenderPermissionList: create_tender_group,
     permission,
+    PermissionCheck,
 };

+ 2 - 0
app/controller/report_controller.js

@@ -26,6 +26,7 @@ const needCustomTables = [
     'mem_jh_gather_im_change', 'mem_jh_im_change', 'mem_jh_gather_stage_bills_compare',
     'mem_material_sum_gl',
 ];
+const PermissionCheck = require('../const/account_permission').PermissionCheck;
 
 const STD_COMP_STAMP_SIZE_WIDTH = Math.round(5 * 96 / 2.54); // 公章标准尺寸(宽4.2厘米)转成像素
 const STD_COMP_STAMP_SIZE_HEIGHT = STD_COMP_STAMP_SIZE_WIDTH; // 公章标准尺寸(高4.2厘米)转成像素
@@ -320,6 +321,7 @@ module.exports = app => {
                     rpt_id: ctx.query.rpt_id,
                     isAdmin,
                     OSS_PATH: ctx.app.config.fujianOssPath,
+                    viewPmData: PermissionCheck.viewPmData(this.ctx.session.sessionUser.permission),
                 };
                 await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
                 // await this.layout('report/index.ejs', renderData);

+ 14 - 0
app/controller/tender_controller.js

@@ -1460,6 +1460,19 @@ module.exports = app => {
                             });
                             responseData.data[f] = advance;
                             break;
+                        case 'pm_deal':
+                            if (accountPermission.PermissionCheck.viewPmData(this.ctx.session.sessionUser.permission)) {
+                                const selects = await this.ctx.service.project.getPmDealCache(this.ctx.session.sessionProject.id);
+                                // todo 接入项目管理系统
+                                const tenders = [ {id: 1, name: 'A标'}, {id: 2, name: 'B标'}, {id: 3, name: 'C标'}];
+                                tenders.forEach(x => {
+                                    x.selected = selects.indexOf(x.id + '') >= 0;
+                                });
+                                responseData.data[f] = tenders;
+                            } else {
+                                throw '您无权查看该数据';
+                            }
+                            break;
                         default:
                             throw '未知数据类型';
                     }
@@ -1480,6 +1493,7 @@ module.exports = app => {
                 if (data.change_project) await this.ctx.service.changeProject.defaultUpdateRows(data.change_project);
                 if (data.change_plan) await this.ctx.service.changePlan.defaultUpdateRows(data.change_plan);
                 if (data.advance) await this.ctx.service.advance.defaultUpdateRows(data.advance);
+                if (data.pm_deal) await this.ctx.service.project.setPmDealCache(this.ctx.session.sessionProject.id, data.pm_deal);
                 ctx.body = responseData;
             } catch (err) {
                 ctx.log(err);

+ 18 - 6
app/public/report/js/rpt_other_stage.js

@@ -1,24 +1,36 @@
 const rptOtherStage = (function (){
     const info = {
-        advance: { title: '请选择预付款', colHeader: ['选择', '类型', '期', '审批状态'] },
+        advance: { title: '请选择预付款', colHeader: ['类型', '期', '审批状态'], colValue: ['typeStr', 'orderStr', 'statusStr'] },
+        pm_deal: { title: '请选择合同管理', colHeader: ['名称'], colValue: ['name'], active: true },
     };
     const data = {};
     let curType = '';
     const initList = function () {
-        const header = info[curType].colHeader;
-        const type = info[curType].type;
-        $('#sos-header').html(`<tr class="text-center"><th>${header[0]}</th><th>${header[1]}</th><th>${header[2]}</th><th>${header[3]}</th></tr>`);
+        const header = info[curType].colHeader, value = info[curType].colValue;
+        const headerHtml = [];
+        headerHtml.push('<tr class="text-center"><th>选择</th>');
+        for (const h of header) {
+            headerHtml.push(`<th>${h}</th>`);
+        }
+        headerHtml.push('</tr>');
+        $('#sos-header').html(headerHtml.join());
         const html = [], arr = data[curType];
         for (const a of arr) {
+            const aHtml = [];
             const checked = a.selected ? 'checked' : '';
-            html.push('<tr class="text-center">', `<td><input type="checkbox" name="sos-check" ${checked} value="${a.id}"></td>`, `<td>${a.typeStr}</td>`, `<td>第${a.order}期</td>`, `<td>${a.statusStr}</td>`,  '</tr>');
+            aHtml.push(`<tr class="text-center"><td><input type="checkbox" name="sos-check" ${checked} value="${a.id}"></td>`);
+            for (const v of value) {
+                aHtml.push(`<td>${a[v]}</td>`);
+            }
+            aHtml.push('</tr>');
+            html.push(aHtml.join());
         }
         $('#sos-list').html(html.join(''));
     };
     const showOtherStage = async function (type) {
         curType = type;
         document.getElementById('sos-title').innerText = info[type].title;
-        if (!data[type]) {
+        if (!data[type] || info[curType].active) {
             const result = await postDataAsync(`/tender/${window.location.pathname.split('/')[2]}/load`, { filter: curType });
             data[curType] = result[curType];
         }

+ 0 - 16
app/service/material_audit.js

@@ -345,11 +345,6 @@ module.exports = app => {
                     // }
                 } else {
                     // 本期结束
-                    // 生成截止本期数据 final数据
-                    // console.time('generatePre');
-                    // await this.ctx.service.stageBillsFinal.generateFinalData(transaction, this.ctx.tender, this.ctx.stage);
-                    // await this.ctx.service.stagePosFinal.generateFinalData(transaction, this.ctx.tender, this.ctx.stage);
-                    // console.timeEnd('generatePre');
                     // 同步 期信息
                     await transaction.update(this.ctx.service.material.tableName, {
                         id: materialId, status: checkData.checkType,
@@ -519,11 +514,6 @@ module.exports = app => {
                 };
                 await this.ctx.helper.sendWechat(users, smsTypeConst.const.TC, smsTypeConst.judge.result.toString(), wxConst.template.material, wechatData);
 
-                // 计算该审批人最终数据
-                // await this.ctx.service.stagePay.calcAllStagePays(this.ctx.stage, transaction);
-                // 复制一份最新数据给原报
-                // await this.ctx.service.stagePay.copyAuditStagePays(this.ctx.stage, this.ctx.stage.times + 1, 0, transaction);
-
                 // 添加短信通知-审批退回提醒功能
                 // const mobile_array = [];
                 // const stageInfo = await this.ctx.service.stage.getDataById(stageId);
@@ -704,13 +694,7 @@ module.exports = app => {
                 });
                 await transaction.insert(this.tableName, newAuditors);
 
-                // 复制一份最新数据给下一人
-                // await this.ctx.service.stagePay.copyAuditStagePays(this.ctx.stage, this.ctx.stage.times, audit.order + 2, transaction);
-
                 // 本期结束
-                // 生成截止本期数据 final数据
-                // await this.ctx.service.stageBillsFinal.delGenerateFinalData(transaction, this.ctx.tender, this.ctx.stage);
-                // await this.ctx.service.stagePosFinal.delGenerateFinalData(transaction, this.ctx.tender, this.ctx.stage);
                 // 同步 期信息
                 await transaction.update(this.ctx.service.material.tableName, {
                     id: materialId, status: auditConst.status.checking,

+ 10 - 0
app/service/project.js

@@ -245,6 +245,16 @@ module.exports = app => {
                 });
             });
         }
+
+        async setPmDealCache(pid, data) {
+            const pmDeal = data.filter(x => { return x.selected; }).map(x => { return x.id; });
+            await this.cache.set('pmDeal-' + pid, pmDeal.join(','), 'EX', this.ctx.app.config.cacheTime);
+        }
+
+        async getPmDealCache(pid) {
+            const result = await this.cache.get('pmDeal-' + pid);
+            return result ? result.split(',') : [];
+        }
     }
 
     return Project;

+ 0 - 5
app/service/stage_audit.js

@@ -935,11 +935,6 @@ module.exports = app => {
                 await this.ctx.service.stageSafeProd.updateHistory4CheckAgain(this.ctx.stage, transaction);
                 await this.ctx.service.stageTempLand.updateHistory4CheckAgain(this.ctx.stage, transaction);
 
-                // 本期结束
-                // 生成截止本期数据 final数据
-                await this.ctx.service.stageBillsFinal.delGenerateFinalData(transaction, this.ctx.tender, this.ctx.stage);
-                await this.ctx.service.stagePosFinal.delGenerateFinalData(transaction, this.ctx.tender, this.ctx.stage);
-                await this.ctx.service.stageChangeFinal.delGenerateFinalData(transaction, this.ctx.tender, this.ctx.stage);
                 // 同步 期信息
                 const his = this.ctx.stage.tp_history.find(x => { return x.times === times && x.order === audit.order });
                 this.ctx.stage.tp_history.push({

+ 0 - 14
app/service/stage_bills_final.js

@@ -112,20 +112,6 @@ module.exports = app => {
             await transaction.insert(this.tableName, cur ? cur.concat(pre) : pre);
         }
 
-        /**
-         * 删除生成本期最终数据
-         * @param transaction - 所属事务
-         * @param {Object} tender - 标段
-         * @param {Object} stage - 本期
-         * @returns {Promise<void>}
-         */
-        async delGenerateFinalData(transaction, tender, stage) {
-            if (!transaction || !tender || !stage) {
-                throw '数据错误';
-            }
-            await transaction.delete(this.tableName, { tid: tender.id, sid: stage.id });
-        }
-
         async getSumTotalPrice(tenderId, stageOrder) {
             const sql = 'SELECT Sum(`contract_tp`) As `contract_tp`, Sum(`qc_tp`) As `qc_tp` FROM ' + this.departTableName(tenderId) +
                 '  WHERE sorder = ? and tid = ?';

+ 0 - 14
app/service/stage_change_final.js

@@ -71,20 +71,6 @@ module.exports = app => {
             if (data.length > 0) await transaction.insert(this.tableName, data);
         }
 
-        /**
-         * 删除生成本期最终数据
-         * @param transaction - 所属事务
-         * @param {Object} tender - 标段
-         * @param {Object} stage - 本期
-         * @return {Promise<void>}
-         */
-        async delGenerateFinalData(transaction, tender, stage) {
-            if (!transaction || !tender || !stage) {
-                throw '数据错误';
-            }
-            await transaction.delete(this.tableName, { tid: tender.id, sid: stage.id });
-        }
-
         async getSumLoadFinalData(sid) {
             const sql = 'Select cf.tid, cf.sid, cf.lid, cf.cid, cf.cbid, cf.qty, c.code As c_code' +
                 '  FROM ' + this.tableName + ' cf' +

+ 0 - 14
app/service/stage_pos_final.js

@@ -88,20 +88,6 @@ module.exports = app => {
             await transaction.delete(this.tableName, { tid: tender.id, sid: stage.id });
             await transaction.insert(this.tableName, cur ? cur.concat(pre) : pre);
         }
-
-        /**
-         * 删除生成本期最终数据
-         * @param transaction - 所属事务
-         * @param {Object} tender - 标段
-         * @param {Object} stage - 本期
-         * @returns {Promise<void>}
-         */
-        async delGenerateFinalData(transaction, tender, stage) {
-            if (!transaction || !tender || !stage) {
-                throw '数据错误';
-            }
-            await transaction.delete(this.tableName, { tid: tender.id, sid: stage.id });
-        }
     }
 
     return StagePosFinal;

+ 3 - 0
app/view/report/index.ejs

@@ -36,6 +36,9 @@
                             <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change_apply');">变更申请</a>
                             <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change_plan');">变更方案</a>
                             <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change');">变更令</a>
+                            <% if (viewPmData) { %>
+                            <a class="dropdown-item" href="javascript: void(0)" onclick="rptOtherStage.showOtherStage('pm_deal');">项目管理-合同管理</a>
+                            <% } %>
                         </div>
                     </div>
                 </div>