UNPKG

@universis/dining

Version:

Universis api for dining

120 lines (91 loc) 4.67 kB
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.beforeSave = beforeSave;exports.afterSave = afterSave; var _common = require("@themost/common"); var CancelDiningCardListener = _interopRequireWildcard(require("./OnCancelDiningCardListener"));function _getRequireWildcardCache() {if (typeof WeakMap !== "function") return null;var cache = new WeakMap();_getRequireWildcardCache = function () {return cache;};return cache;}function _interopRequireWildcard(obj) {if (obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache();if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;} /** * @param {DataEventArgs} event * @param {Function} callback */function beforeSave(event, callback) {(async () => { // validate student state (on insert or update) if (event.state === 1 || event.state === 2) { let context = event.model.context; /** * @type {Student|DataObject|*} */ const student = context.model('Student').convert(event.target.student); const isActive = await student.silent().isActive(); // allow card to be set as active=false in any case of student if (event.state === 2 && !isActive && event.previous.active != event.target.active && event.previous.active === false) { throw new _common.DataError('ERR_STATUS', 'Invalid student status. Student Dining Card may be published upon an active student only.' + student, null, 'Student', 'studentStatus'); } if (event.state === 2 && event.previous.active === false && event.target.active === true) { // evoked when event started form dining card re-activation const validThrough = await context.model('StudentDiningCard'). where('id'). equal(event.target.id). select('action/diningRequestEvent/validThrough as validThrough'). silent(). value(); event.target.validThrough = validThrough; event.target.cancelReason = null; event.target.dateCancelled = null; } } })().then(() => { return callback(); }).catch(err => { return callback(err); }); } /** * @param {DataEventArgs} event * @param {Function} callback */ function afterSave(event, callback) { (async () => { let context = event.model.context; /** * @type {import("@themost/data").DataModel} */ const translateService = context.application.getStrategy(function TranslateService() {}); // remove listener because the following cards // if exist, should be cancelled const StudentDiningCard = context.model('StudentDiningCard'); StudentDiningCard.removeListener('before.save', CancelDiningCardListener.beforeSave); StudentDiningCard.removeListener('after.save', CancelDiningCardListener.afterSave); // search for diningCards that may be active (true) // in other dining request events that are not opened and cancel them if (event.target.active === true && event.state === 1) { let cardsToCancel = await context.model('StudentDiningCards'). where('student'). equal(event.target.student.id || event.target.student). and('active'). equal(true). and('id'). notEqual(event.target.id). and('action/diningRequestEvent/eventStatus/alternateName'). notEqual('EventOpened'). expand({ name: 'action', options: { $expand: 'diningRequestEvent($expand=eventStatus)' } }). silent(). getItems(); if (Array.isArray(cardsToCancel) && cardsToCancel.length > 0) { const cancelReason = translateService.translate('StudentDiningCardSystemCancelReasonNewWasIssued'); cardsToCancel = cardsToCancel.map(el => {el.active = false; el.validThrough = new Date(); el.cancelReason = cancelReason; return el; }); await context.model('StudentDiningCard').silent().save(cardsToCancel); } } })().then(() => { return callback(); }).catch(err => { return callback(err); }); } //# sourceMappingURL=StudentDiningCardSaveListener.js.map