UNPKG

@universis/dining

Version:

Universis api for dining

171 lines (139 loc) 6.2 kB
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.beforeSave = beforeSave;exports.afterSave = afterSave;var _common = require("@themost/common"); var _data = require("@themost/data"); var _moment = _interopRequireDefault(require("moment"));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };} /** * @param {DataEventArgs} event */ async function beforeSaveAsync(event) { // const context = event.model.context; const service = context.getApplication().getService(function DiningService() {}); let shouldInsert = false; let currentActionStatus = 'UnknownActionStatus'; // check if dining request event is present on request if (Object.prototype.hasOwnProperty.call(event.target, 'diningRequestEvent') === false) { if (event && event.state === _data.DataObjectState.Insert) { throw new _common.DataError('E_DATA', '', null, 'DiningRequestEvent'); } else { // when dining request event is not present on dining request action // load and set dining request event from dining request action event.target.diningRequestEvent = await context.model('DiningRequestAction'). where('id'). equal(event.target.id). select('diningRequestEvent'). silent(). value(); } } // find dining request event and event status type let diningRequestEvent = await context.model('DiningRequestEvent'). where('id'). equal(event.target.diningRequestEvent.id || event.target.diningRequestEvent). expand('eventStatus'). expand('academicYear'). silent(). getItem(); if (diningRequestEvent == null) { throw new _common.DataError('E_EVENT', 'The specified dining request event cannot be found', null, 'DiningRequestEvent'); } if (event && event.state === _data.DataObjectState.Insert) { // get action status if (Object.prototype.hasOwnProperty.call(event.target, 'actionStatus') === false) { throw new _common.DataError('E_DATA', 'Action status is required while inserting new DiningRequestAction', null, 'DiningRequestAction'); } currentActionStatus = await context.model('ActionStatusType').find(event.target.actionStatus).select('alternateName'); shouldInsert = currentActionStatus === 'ActiveActionStatus'; if (validateDiningRequestEvent(diningRequestEvent) === false) { throw new _common.DataError('E_DATA', 'Dining request event has expired or is not yet available', null, 'DiningRequestEvent'); } if (diningRequestEvent.eventStatus && diningRequestEvent.eventStatus.alternateName !== 'EventOpened') { throw new _common.DataError('E_DATA', 'Dining request event is not available', null, 'DiningRequestEvent'); } // when event state is Insert then isert code as requestNumber event.target.requestNumber = event.target.code; } else if (event.state === _data.DataObjectState.Update) { // get current status if (Object.prototype.hasOwnProperty.call(event.target, 'actionStatus') === false) { return; } currentActionStatus = await context.model('ActionStatusType').find(event.target.actionStatus).select('alternateName').value(); const action = await context.model('DiningRequestAction').find(event.target.id).select('requestNumber', 'code').getItem(); if (action.requestNumber !== action.code) { // if the current request has already a request number // remove attribute delete event.target.requestNumber; // and exit return; } else { // get dining request event event.target.diningRequestEvent = await event.model. where('id'). equal(event.target.id). select('diningRequestEvent'). value(); // get previous status const previousActionStatus = event.previous && event.previous.actionStatus && event.previous.actionStatus.alternateName || 'UnknownActionStatus'; // if status has been changed and the current status is active shouldInsert = previousActionStatus !== currentActionStatus && currentActionStatus === 'ActiveActionStatus'; } } if (shouldInsert) { if (validateDiningRequestEvent(diningRequestEvent) === false) { throw new _common.DataError('E_DATA', 'Dining request event has expired or is not yet available', null, 'DiningRequestEvent'); } if (diningRequestEvent.eventStatus && diningRequestEvent.eventStatus.alternateName !== 'EventOpened') { throw new _common.DataError('E_DATA', 'Dining request event is not available', null, 'DiningRequestEvent'); } // get next number const nextNumber = await service.nextNumber(context, diningRequestEvent); // format nextNumber with leading zeros const formattedNextNumber = await zeroPad(nextNumber, 7); // and set request number format event.target.requestNumber = `${diningRequestEvent.academicYear.id}/${diningRequestEvent.id}/${formattedNextNumber}`; } } // eslint-disable-next-line no-unused-vars async function afterSaveAsync(event) { // } /** * @param {DataEventArgs} event * @param {Function} callback */ function beforeSave(event, callback) { return beforeSaveAsync(event).then(() => { return callback(); }).catch(err => { return callback(err); }); } /** * @param {DataEventArgs} event * @param {Function} callback */ function afterSave(event, callback) { return afterSaveAsync(event).then(() => { return callback(); }).catch(err => { return callback(err); }); } function validateDiningRequestEvent(diningEvent) { const now = (0, _moment.default)(new Date()).startOf('day').toDate(); let valid = false; if (diningEvent.validFrom instanceof Date) { if (diningEvent.validThrough instanceof Date) { valid = diningEvent.validFrom <= now && diningEvent.validThrough >= now; } else { valid = diningEvent.validFrom <= now; } } else if (diningEvent.validThrough instanceof Date) { valid = diningEvent.validThrough >= now; } return valid; } async function zeroPad(num, places) { let zero = places - num.toString().length + 1; return Array(+(zero > 0 && zero)).join("0") + num; } //# sourceMappingURL=GenerateRequestNumberListener.js.map