'use strict'; /** * 过程结算 控制器 * * @author Mai * @date 2023/10/27 * @version */ const auditConst = require('../const/audit'); module.exports = app => { class SettleController extends app.BaseController { /** * 构造函数 * * @param {Object} ctx - egg全局变量 * @return {void} */ constructor(ctx) { super(ctx); ctx.showProject = true; ctx.showTender = true; ctx.showTitle = true; } /** * 期列表(Get) * @param ctx * @return {Promise} */ async list(ctx) { try { const renderData = { tender: ctx.tender.data, preUrl: `/tender/${ctx.tender.id}/measure/stage`, auditConst: auditConst.settle, auditType: auditConst.auditType, }; renderData.settles = await ctx.service.settle.getValidSettles(ctx.tender.id); renderData.checkedStageCount = await ctx.service.stage.count({ tid: ctx.tender.id, status: auditConst.stage.status.checked }); await this.layout('settle/list.ejs', renderData, 'settle/list_modal.ejs'); } catch (err) { this.log(err); ctx.redirect(this.menu.menu.dashboard.url); } } /** * 期审批流程(Get) * @param ctx * @return {Promise} */ async loadAuditors(ctx) { try { const order = JSON.parse(ctx.request.body.data).order; const tenderId = ctx.params.id; const settle = await ctx.service.settle.getDataByCondition({ tid: tenderId, settle_order: order }); await ctx.service.settle.loadRelaUser(settle); await ctx.service.settle.loadAuditViewData(settle); ctx.body = { err: 0, msg: '', data: settle }; } catch (error) { this.log(error); ctx.body = { err: 1, msg: error.toString(), data: null }; } } async add(ctx) { try { if (ctx.session.sessionUser.accountId !== ctx.tender.data.user_id) throw '您无权创建计量期'; const date = ctx.request.body.date; const period = ctx.request.body.period; if (!date || !period) throw '请选择结算年月和结算周期'; const newSettle = await ctx.service.settle.addSettle(ctx.tender.id, date, period); ctx.redirect('/tender/' + ctx.tender.id + '/settle/' + newSettle.settle_order); } catch (err) { ctx.log(err); ctx.postError(err, '新增结算期失败,请重试'); ctx.redirect('/tender/' + ctx.tender.id + '/settle'); } } async save(ctx) { try { const data = { order: ctx.request.body.order, date: ctx.request.body.date, period: ctx.request.body.period, }; const settle = await ctx.service.settle.getDataByCondition({ tid: ctx.tender.id, settle_order: data.order }); if (!settle) throw '修改的结算期不存在'; if (ctx.session.sessionUser.accountId !== stage.user_id) throw '您无权修改该数据'; await this.ctx.service.stage.saveSettle(ctx.tender.id, data.order, data.date, data.period); ctx.redirect('/tender/' + ctx.tender.id + '/settle'); } catch (err) { ctx.log(err); ctx.postError(err, '保存结算期数据失败,请重试'); ctx.redirect('/tender/' + ctx.tender.id + '/settle'); } } async delete(ctx) { try { if (ctx.request.body.confirm !== undefined && ctx.request.body.confirm !== '确认删除本期') { throw '请输入正确的文本信息'; } const sid = ctx.request.body.settle_id; const settle = await ctx.service.settle.getDataById(sid); const settleCount = await ctx.service.settle.count({ tid: ctx.tender.id }); if (!settle || settle.tid !== ctx.tender.id) throw '选择的结算期已不存在'; if (settleCount === settle.settle_order) throw '选择的结算期无法删除'; if (ctx.session.sessionUser.accountId !== settle.user_id && !ctx.session.sessionUser.is_admin) throw '您无权删除结算期'; await ctx.service.deleteSettle(sid); ctx.redirect('/tender/' + ctx.tender.id + '/settle/'); } catch (err) { ctx.log(err); ctx.postError(err, '删除结算期数据失败,请重试'); ctx.redirect('/tender/' + ctx.tender.id + '/settle/'); } } async index(ctx) { await ctx.service.stage.loadStageAuditViewData(ctx.stage); } } return SettleController; };