|
@@ -1,7 +1,6 @@
|
|
|
'use strict';
|
|
|
const accountGroup = require('../const/account_group').group;
|
|
|
const auditConst = require('../const/audit').advance;
|
|
|
-const ledgerAuditConst = require('../const/audit').ledger.status;
|
|
|
const sendToWormhole = require('stream-wormhole');
|
|
|
const path = require('path');
|
|
|
const fs = require('fs');
|
|
@@ -19,11 +18,10 @@ module.exports = app => {
|
|
|
*/
|
|
|
async index(ctx) {
|
|
|
const type = auditConst.type.start;
|
|
|
- const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type);
|
|
|
- const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
|
|
|
const advancePayTotal = ctx.tender.info.deal_param.startAdvance;
|
|
|
+ const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type, this.decimal, advancePayTotal);
|
|
|
+ const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
|
|
|
const progress = await ctx.service.advance.calcProgress(latestOrder, advancePayTotal);
|
|
|
- // const showAddBtn = ctx.tender.data.ledger_status !== ledgerAuditConst.uncheck && ctx.tender.data.user_id === ctx.session.sessionUser.accountId ? !latestOrder || (latestOrder.status === auditConst.status.checked && latestOrder.prev_total_amount < advancePayTotal) : false;
|
|
|
const showAddBtn = ctx.tender.data.user_id === ctx.session.sessionUser.accountId ? (!latestOrder || (latestOrder.status === auditConst.status.checked && latestOrder.prev_total_amount < advancePayTotal)) : false;
|
|
|
const renderData = {
|
|
|
type,
|
|
@@ -46,9 +44,9 @@ module.exports = app => {
|
|
|
*/
|
|
|
async materialList(ctx) {
|
|
|
const type = auditConst.type.material;
|
|
|
- const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type);
|
|
|
- const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
|
|
|
const advancePayTotal = ctx.tender.info.deal_param.materialAdvance;
|
|
|
+ const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type, this.decimal, advancePayTotal);
|
|
|
+ const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
|
|
|
const progress = await ctx.service.advance.calcProgress(latestOrder, advancePayTotal);
|
|
|
const showAddBtn = ctx.tender.data.user_id === ctx.session.sessionUser.accountId ? !latestOrder || (latestOrder.status === auditConst.status.checked && latestOrder.prev_total_amount < advancePayTotal) : false;
|
|
|
const renderData = {
|
|
@@ -109,9 +107,21 @@ module.exports = app => {
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
- _checkCanEntry(ctx) {
|
|
|
- if (ctx.session.sessionUser.accountId !== ctx.advance.uid) {
|
|
|
- if (ctx.advance.status === auditConst.status.uncheck) {
|
|
|
+ /**
|
|
|
+ * 权限判断-进入详情页
|
|
|
+ * @param {Object} ctx - 全局上下文
|
|
|
+ * @return {void}
|
|
|
+ * @private
|
|
|
+ */
|
|
|
+ async _checkCanEntry(ctx) {
|
|
|
+ if (ctx.advance.status === auditConst.status.uncheck) {
|
|
|
+ if (ctx.session.sessionUser.accountId !== ctx.advance.uid) {
|
|
|
+ throw '无权访问';
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ const auditors = await ctx.service.advanceAudit.getAuditorsWithOwner(ctx.advance.id, ctx.advance.times);
|
|
|
+ const cur_uid = ctx.session.sessionUser.accountId;
|
|
|
+ if (auditors.findIndex(item => item.audit_id === cur_uid) === -1) {
|
|
|
throw '无权访问';
|
|
|
}
|
|
|
}
|
|
@@ -124,18 +134,26 @@ module.exports = app => {
|
|
|
async detail(ctx) {
|
|
|
const advancePayTotal = ctx.advance.type === 0 ? ctx.tender.info.deal_param.startAdvance : ctx.tender.info.deal_param.materialAdvance;
|
|
|
try {
|
|
|
- this._checkCanEntry(ctx);
|
|
|
- const renderData = await this._getDefaultRenderData(ctx);
|
|
|
+ await this._checkCanEntry(ctx);
|
|
|
const { uncheck, checkNo } = auditConst.status;
|
|
|
const { status } = ctx.advance;
|
|
|
+ const isEdited = ctx.session.sessionUser.accountId === ctx.advance.uid && (status === uncheck || status === checkNo);
|
|
|
+ const renderData = await this._getDefaultRenderData(ctx);
|
|
|
// 获取上一期预付款记录
|
|
|
const prevAdvance = await ctx.service.advance.getPreviousRecord(ctx.tender.id, ctx.advance.type);
|
|
|
// 最大支付比例
|
|
|
const max_pr = ctx.helper.mul(ctx.helper.div(ctx.helper.sub(advancePayTotal, (prevAdvance && prevAdvance.prev_total_amount || 0)), advancePayTotal, 10), 100);
|
|
|
- renderData.isEdited = status === uncheck || status === checkNo;
|
|
|
+ // 特殊处理金额的显示(formatMoney)
|
|
|
+ const s1 = parseFloat(ctx.advance.prev_amount).toString().split('.')[1];
|
|
|
+ const s2 = parseFloat(ctx.advance.prev_total_amount).toString().split('.')[1];
|
|
|
+ const prev_amount = ctx.helper.formatMoney(ctx.advance.prev_amount, ',', s1 && s1.length || 0);
|
|
|
+ const prev_total_amount = ctx.helper.formatMoney(ctx.advance.prev_total_amount, ',', s2 && s2.length || 0);
|
|
|
+ renderData.isEdited = isEdited;
|
|
|
renderData.advance = ctx.advance;
|
|
|
- renderData.decimal = this.decimal;
|
|
|
+ renderData.prev_amount = prev_amount;
|
|
|
+ renderData.prev_total_amount = prev_total_amount;
|
|
|
renderData.max_pr = max_pr;
|
|
|
+ renderData.decimal = this.decimal;
|
|
|
renderData.advancePayTotal = advancePayTotal;
|
|
|
renderData.prevAdvance = prevAdvance;
|
|
|
await this.layout('advance/detail.ejs', renderData, 'advance/modal_audit.ejs');
|
|
@@ -152,6 +170,7 @@ module.exports = app => {
|
|
|
async update(ctx) {
|
|
|
const { id } = ctx.advance;
|
|
|
const data = JSON.parse(ctx.request.body.data);
|
|
|
+ console.log('data', data);
|
|
|
try {
|
|
|
const result = await ctx.service.advance.updateAdvance(data, id);
|
|
|
if (result) {
|
|
@@ -251,6 +270,7 @@ module.exports = app => {
|
|
|
*/
|
|
|
async start(ctx) {
|
|
|
const data = JSON.parse(ctx.request.body.data);
|
|
|
+ console.log('data', data);
|
|
|
try {
|
|
|
// 检查权限等
|
|
|
if (!ctx.advance) {
|