@universis/candidates
Version:
Universis api server plugin for study program candidates, internship selection etc
59 lines (58 loc) • 2.16 kB
JavaScript
import { DataError } from '@themost/data';
/**
* @param {DataEventArgs} event
*/
async function beforeSaveAsync(event) {
const context = event.model.context;
let actionStatus;
if (Object.prototype.hasOwnProperty.call(event.target, 'actionStatus') === false) {
return;
}
// find current action status
actionStatus = await context.model('ActionStatusTypes')
.find(event.target.actionStatus)
.select('alternateName').value();
if (event.state === 2) {
// get previous status
let previousStatus = 'UnknownActionStatus';
if (event.previous) {
previousStatus = event.previous.actionStatus.alternateName;
} else {
throw new DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'StudyProgramRegisterAction');
}
if (previousStatus === 'PotentialActionStatus' && actionStatus === 'PotentialActionStatus') {
//save also candidatePerson info
if (event.target.candidate.person) {
const data = {
id: event.target.candidate.id,
person: event.target.candidate.person
}
await context.model('CandidateStudent').save(data);
}
}
if (previousStatus === 'PotentialActionStatus' && actionStatus === 'ActiveActionStatus') {
event.target.endTime = new Date();
}
if (previousStatus === 'ActiveActionStatus' && actionStatus === 'CompletedActionStatus') {
event.target.accepted = 1;
}
if (previousStatus === 'ActiveActionStatus' && actionStatus === 'CancelledActionStatus') {
event.target.rejected = 1;
}
} else if (event.state === 1) {
if (actionStatus === 'ActiveActionStatus') {
event.target.endTime = new Date();
}
}
}
/**
* @param {DataEventArgs} event
* @param {Function} callback
*/
export function beforeSave(event, callback) {
return beforeSaveAsync(event).then(() => {
return callback();
}).catch((err) => {
return callback(err);
});
}