UNPKG

@universis/dining

Version:

Universis api for dining

98 lines (91 loc) 3.33 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 actionStatus = await context.model('DiningRequestAction'). where('id').equal(event.target.id).select('actionStatus/alternateName').value(); let previousStatus = 'UnknownActionStatus'; if (event.previous) { previousStatus = event.previous.actionStatus.alternateName; } else { throw new _data.DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'DiningRequestAction'); } if (actionStatus === previousStatus) { return; } // get mail template const mailTemplate = await context.model('MailConfiguration').where('target').equal('DiningRequestActionStatusChange').silent().getItem(); if (mailTemplate == null) { // return; } // get parent action data const item = await context.model('DiningRequestAction'). where('id').equal(event.target.id). expand({ name: 'student', options: { $expand: 'person' } }, 'owner'). 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(event.model.name). 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=SendEmailAfterActionStatusChangeListener.js.map