UNPKG

@universis/dining

Version:

Universis api for dining

139 lines (124 loc) 3.98 kB
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.afterSave = afterSave;var _mailer = require("@themost/mailer"); var _data = require("@themost/data"); var _common = require("@themost/common"); /** * @param {DataEventArgs} event */ async function afterSaveAsync(event) { if (event.state === 2) { const context = event.model.context; /** * @type {import('@themost/mailer').MailerHelper} */ const mailer = (0, _mailer.getMailer)(context); const currentCardStatus = await context. model('StudentDiningCard'). where('id'). equal(event.target.id). select('active'). value(); let previousCardStatus = 'UnknownStatus'; if (event.previous) { previousCardStatus = event.previous.active; } else { throw new _data.DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'StudentDiningCard'); } if (currentCardStatus === previousCardStatus) { return; } // get mail template const mailTemplate = await context. model('MailConfigurations'). where('target'). equal('DiningCardActiveStatusChange'). silent(). getItem(); if (mailTemplate == null) { // return; } //get parent action data let item; if (typeof event.target.action === 'object' && typeof event.target.action.id === 'number' && Number.isInteger(event.target.action.id) && event.target.action.id > 0) { item = await context. model('DiningRequestAction'). where('id'). equal(event.target.action.id). expand({ name: 'student', options: { $expand: 'person' } }). silent(). getItem(); } else if (typeof event.target.action === 'number' && Number.isInteger(event.target.action) && event.target.action > 0) { item = await context. model('DiningRequestAction'). where('id'). equal(event.target.action). expand({ name: 'student', options: { $expand: 'person' } }). silent(). getItem(); } const application = await context. model('WebApplication'). where('alternateName'). equal('students'). and('applicationSuite'). equal('universis'). silent(). getItem(); const config = await context. model('StudentRequestConfiguration'). where('additionalType'). equal('DiningRequestAction'). and('inLanguage'). equal(event.target.inLanguage || context.locale). silent(). getItem(); if (item && application && config) { const email = item.student.person.email; if (email == null || typeof email !== 'string') { _common.TraceUtils.warn(`Cannot send email for ${item.student.person.familyName} ${item.student.person.givenName}. Student [${item.student.id}] email does not exist.`); return; } await new Promise(resolve => { mailer.template(mailTemplate.template). subject(mailTemplate.subject). bcc(mailTemplate.bcc || ''). to(email). send({ model: item, application: application, configuration: config }, err => { if (err) { try { _common.TraceUtils.error('An error occurred while trying to send an email notification after status change.'); _common.TraceUtils.error(`Student=${item.student.id}, template=${mailTemplate.template}`); _common.TraceUtils.error(err); } catch (err1) { // do nothing } return resolve(); } return resolve(); }); }); } } } /** * @param {DataEventArgs} event * @param {Function} callback */ function afterSave(event, callback) { return afterSaveAsync(event).then(() => { return callback(); }).catch(err => { return callback(err); }); } //# sourceMappingURL=SendEmailAfterCardStatusChangeListener.js.map