'use strict'; module.exports = app => { class Schedule extends app.BaseService { constructor(ctx) { super(ctx); this.tableName = 'schedule'; } async saveMode(data) { const transaction = await this.db.beginTransaction(); try { const options = { where: { tid: this.ctx.tender.id, }, }; const updateData = { mode: data.mode, }; await transaction.update(this.tableName, updateData, options); if (data.update_under_ledger.length > 0) { const month_list = []; const update_options = []; for (const un of data.update_under_ledger) { const option = { row: { plan_tp: un.plan_tp, plan_gcl: un.plan_gcl, }, where: { tid: this.ctx.tender.id, lid: un.lid, yearmonth: un.yearmonth, }, }; update_options.push(option); if (!this._.find(month_list, un.yearmonth)) { month_list.push(un.yearmonth); } } if (update_options.length > 0) { await transaction.updateRows(this.ctx.service.scheduleLedgerMonth.tableName, update_options); for (const m of month_list) { await this.ctx.service.scheduleLedgerMonth.calcMonthPlan(transaction, this.ctx.tender.id, m); } await this.ctx.service.scheduleMonth.calcPlan(transaction, this.ctx.tender.id); } } await transaction.commit(); return true; } catch (err) { await transaction.rollback(); throw err; } } } return Schedule; };