'use strict'; /** * * * @author Ellisran * @date 2020/7/2 * @version */ const moment = require('moment'); const measureType = require('../const/tender').measureType; const scheduleConst = require('../const/schedule'); const billsPosConvert = require('../lib/bills_pos_convert'); const _ = require('lodash'); module.exports = app => { class ScheduleController extends app.BaseController { async _getSelectedLedgerList(ctx) { const scheduleLedgerList = await ctx.service.scheduleLedger.getAllDataByCondition({ where: { tid: ctx.tender.id } }); return _.map(scheduleLedgerList, 'ledger_id'); } async _getLastPlanMonth(ctx) { const lastMonth = await ctx.service.scheduleMonth.getLastPlanMonth(); return lastMonth && lastMonth[0] && lastMonth[0].yearmonth ? lastMonth[0].yearmonth : null; } async index(ctx) { try { const renderData = { tender: ctx.tender.data, tenderMenu: this.menu.tenderMenu, planMonth: await this._getLastPlanMonth(ctx), scheduleLedgerList: await this._getSelectedLedgerList(ctx), preUrl: '/tender/' + ctx.tender.id, }; await this.layout('schedule/index.ejs', renderData, 'schedule/modal.ejs'); } catch (err) { this.log(err); ctx.redirect(this.menu.menu.dashboard.url); } } async ledger(ctx) { const tender = ctx.tender; const renderData = { tender: tender.data, tenderInfo: tender.info, measureType, scheduleLedgerList: await this._getSelectedLedgerList(ctx), jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.schedule.ledger), }; await this.layout('schedule/ledger.ejs', renderData); } async plan(ctx) { const tender = ctx.tender; const schedule = await ctx.service.schedule.getDataByCondition({ tid: tender.id }); const scheduleMonth = await ctx.service.scheduleMonth.getAllDataByCondition({ where: { tid: tender.id }, orders: [['yearmonth', 'asc']] }); const renderData = { tender: tender.data, tenderInfo: tender.info, schedule, scheduleMonth, planMonth: await this._getLastPlanMonth(ctx), measureType, mode: scheduleConst.plan_mode, scheduleLedgerList: await this._getSelectedLedgerList(ctx), jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.schedule.plan), }; await this.layout('schedule/plan.ejs', renderData, 'schedule/plan_modal.ejs'); } /** * 获取部位明细数据(Ajax) * * @param ctx * @return {Promise} */ async loadLedgerData(ctx) { try { const ledgerData = await ctx.service.ledger.getData(ctx.tender.id); const posData = ctx.tender.data.measure_type === measureType.tz.value ? await ctx.service.pos.getPosData({ tid: ctx.tender.id }) : []; const convert = new billsPosConvert(ctx); convert.loadData(ledgerData, posData, []); const result = await convert.convert(); ctx.body = { err: 0, msg: '', data: result }; } catch (err) { this.log(err); ctx.body = { err: 1, msg: err.toString(), data: [] }; } } /** * 台账选中提交(Ajax) * * @param ctx * @return {Promise} */ async saveLedger(ctx) { try { const data = JSON.parse(ctx.request.body.data); const result = await ctx.service.scheduleLedger.saveLedger(data); ctx.body = { err: 0, msg: '', data: result }; } catch (err) { this.log(err); ctx.body = { err: 1, msg: err.toString(), data: [] }; } } /** * 计划进度计算方式提交(Ajax) * * @param ctx * @return {Promise} */ async savePlan(ctx) { try { const data = JSON.parse(ctx.request.body.data); const responseData = { err: 0, msg: '', data: {}, }; switch (data.type) { case 'mode': responseData.data = await ctx.service.schedule.saveMode(data.postData); break; case 'addmonth': responseData.data = await ctx.service.scheduleMonth.add(data.postData); break; case 'delmonth': responseData.data = await ctx.service.scheduleMonth.del(data.postData); break; default: throw '参数有误'; } ctx.body = responseData; } catch (err) { this.log(err); ctx.body = { err: 1, msg: err.toString(), data: null }; } } } return ScheduleController; };