settle_controller.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. 'use strict';
  2. /**
  3. * 过程结算 控制器
  4. *
  5. * @author Mai
  6. * @date 2023/10/27
  7. * @version
  8. */
  9. const auditConst = require('../const/audit');
  10. module.exports = app => {
  11. class SettleController extends app.BaseController {
  12. /**
  13. * 构造函数
  14. *
  15. * @param {Object} ctx - egg全局变量
  16. * @return {void}
  17. */
  18. constructor(ctx) {
  19. super(ctx);
  20. ctx.showProject = true;
  21. ctx.showTender = true;
  22. ctx.showTitle = true;
  23. }
  24. /**
  25. * 期列表(Get)
  26. * @param ctx
  27. * @return {Promise<void>}
  28. */
  29. async list(ctx) {
  30. try {
  31. const renderData = {
  32. tender: ctx.tender.data,
  33. preUrl: `/tender/${ctx.tender.id}/measure/stage`,
  34. auditConst: auditConst.settle,
  35. auditType: auditConst.auditType,
  36. };
  37. renderData.settles = await ctx.service.settle.getValidSettles(ctx.tender.id);
  38. renderData.checkedStageCount = await ctx.service.stage.count({ tid: ctx.tender.id, status: auditConst.stage.status.checked });
  39. await this.layout('settle/list.ejs', renderData, 'settle/list_modal.ejs');
  40. } catch (err) {
  41. this.log(err);
  42. ctx.redirect(this.menu.menu.dashboard.url);
  43. }
  44. }
  45. /**
  46. * 期审批流程(Get)
  47. * @param ctx
  48. * @return {Promise<void>}
  49. */
  50. async loadAuditors(ctx) {
  51. try {
  52. const order = JSON.parse(ctx.request.body.data).order;
  53. const tenderId = ctx.params.id;
  54. const settle = await ctx.service.settle.getDataByCondition({ tid: tenderId, settle_order: order });
  55. await ctx.service.settle.loadRelaUser(settle);
  56. await ctx.service.settle.loadAuditViewData(settle);
  57. ctx.body = { err: 0, msg: '', data: settle };
  58. } catch (error) {
  59. this.log(error);
  60. ctx.body = { err: 1, msg: error.toString(), data: null };
  61. }
  62. }
  63. async add(ctx) {
  64. try {
  65. if (ctx.session.sessionUser.accountId !== ctx.tender.data.user_id) throw '您无权创建计量期';
  66. const date = ctx.request.body.date;
  67. const period = ctx.request.body.period;
  68. if (!date || !period) throw '请选择结算年月和结算周期';
  69. const newSettle = await ctx.service.settle.addSettle(ctx.tender.id, date, period);
  70. ctx.redirect('/tender/' + ctx.tender.id + '/settle/' + newSettle.settle_order);
  71. } catch (err) {
  72. ctx.log(err);
  73. ctx.postError(err, '新增结算期失败,请重试');
  74. ctx.redirect('/tender/' + ctx.tender.id + '/settle');
  75. }
  76. }
  77. async save(ctx) {
  78. try {
  79. const data = {
  80. order: ctx.request.body.order,
  81. date: ctx.request.body.date,
  82. period: ctx.request.body.period,
  83. };
  84. const settle = await ctx.service.settle.getDataByCondition({ tid: ctx.tender.id, settle_order: data.order });
  85. if (!settle) throw '修改的结算期不存在';
  86. if (ctx.session.sessionUser.accountId !== stage.user_id) throw '您无权修改该数据';
  87. await this.ctx.service.stage.saveSettle(ctx.tender.id, data.order, data.date, data.period);
  88. ctx.redirect('/tender/' + ctx.tender.id + '/settle');
  89. } catch (err) {
  90. ctx.log(err);
  91. ctx.postError(err, '保存结算期数据失败,请重试');
  92. ctx.redirect('/tender/' + ctx.tender.id + '/settle');
  93. }
  94. }
  95. async delete(ctx) {
  96. try {
  97. if (ctx.request.body.confirm !== undefined && ctx.request.body.confirm !== '确认删除本期') {
  98. throw '请输入正确的文本信息';
  99. }
  100. const sid = ctx.request.body.settle_id;
  101. const settle = await ctx.service.settle.getDataById(sid);
  102. const settleCount = await ctx.service.settle.count({ tid: ctx.tender.id });
  103. if (!settle || settle.tid !== ctx.tender.id) throw '选择的结算期已不存在';
  104. if (settleCount === settle.settle_order) throw '选择的结算期无法删除';
  105. if (ctx.session.sessionUser.accountId !== settle.user_id && !ctx.session.sessionUser.is_admin) throw '您无权删除结算期';
  106. await ctx.service.deleteSettle(sid);
  107. ctx.redirect('/tender/' + ctx.tender.id + '/settle/');
  108. } catch (err) {
  109. ctx.log(err);
  110. ctx.postError(err, '删除结算期数据失败,请重试');
  111. ctx.redirect('/tender/' + ctx.tender.id + '/settle/');
  112. }
  113. }
  114. async index(ctx) {
  115. await ctx.service.stage.loadStageAuditViewData(ctx.stage);
  116. }
  117. }
  118. return SettleController;
  119. };