const UserError = require('vn-loopback/util/user-error'); module.exports = Self => { Self.remoteMethodCtx('updateMailState', { description: 'Updates the state of WorkerTimeControlMail', accessType: 'WRITE', accepts: [{ arg: 'id', type: 'number', description: 'The worker id', http: {source: 'path'} }, { arg: 'year', type: 'number', required: true }, { arg: 'week', type: 'number', required: true }, { arg: 'state', type: 'string', required: true }, { arg: 'reason', type: 'string' }], returns: { type: 'boolean', root: true }, http: { path: `/:id/updateMailState`, verb: 'POST' } }); Self.updateMailState = async(ctx, id, options) => { const models = Self.app.models; const args = ctx.args; const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); const [sent] = await models.WorkerTimeControlMail.find({ where: { year: args.year, week: args.week, }, limit: 1 }, myOptions); if (!sent) throw new UserError(`There aren't records for this week`); const workerTimeControlMail = await models.WorkerTimeControlMail.upsertWithWhere( { year: args.year, week: args.week, workerFk: id }, { state: args.state, reason: args.reason, year: args.year, week: args.week, workerFk: id }, myOptions); if (args.state == 'SENDED') { await workerTimeControlMail.updateAttributes({ sendedCounter: workerTimeControlMail.sendedCounter ? workerTimeControlMail.sendedCounter + 1 : 1 }, myOptions); } }; };