@universis/accommodation 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitlab-ci.yml +23 -0
- package/LICENSE +163 -0
- package/README.md +3 -0
- package/dist/AccommodationSchemaLoader.js +35 -0
- package/dist/AccommodationSchemaLoader.js.map +1 -0
- package/dist/AccommodationService.js +68 -0
- package/dist/AccommodationService.js.map +1 -0
- package/dist/DepartmentReplacer.js +54 -0
- package/dist/DepartmentReplacer.js.map +1 -0
- package/dist/StudentReplacer.js +75 -0
- package/dist/StudentReplacer.js.map +1 -0
- package/dist/config/models/Accommodation.json +96 -0
- package/dist/config/models/AccommodationCardEffectiveStatusType.json +107 -0
- package/dist/config/models/AccommodationCardEffectiveStatusTypeLocale.json +85 -0
- package/dist/config/models/AccommodationChildFinancialAttribute.json +46 -0
- package/dist/config/models/AccommodationGuardianFinancialAttribute.json +46 -0
- package/dist/config/models/AccommodationInscriptionModeTag.json +100 -0
- package/dist/config/models/AccommodationRequestAction.json +500 -0
- package/dist/config/models/AccommodationRequestActionMessage.json +46 -0
- package/dist/config/models/AccommodationRequestActionReview.json +31 -0
- package/dist/config/models/AccommodationRequestAttachmentConfiguration.json +72 -0
- package/dist/config/models/AccommodationRequestCategory.json +50 -0
- package/dist/config/models/AccommodationRequestEffectiveStatusType.json +212 -0
- package/dist/config/models/AccommodationRequestEffectiveStatusTypeLocale.json +85 -0
- package/dist/config/models/AccommodationRequestEvent.json +117 -0
- package/dist/config/models/AccommodationRequestFinancialAttribute.json +53 -0
- package/dist/config/models/AccommodationRoom.json +151 -0
- package/dist/config/models/AccommodationSiblingFinancialAttribute.json +57 -0
- package/dist/config/models/CancelAccommodationCardAction.json +32 -0
- package/dist/config/models/GuardianType.json +78 -0
- package/dist/config/models/Review.json +50 -0
- package/dist/config/models/RoomType.json +320 -0
- package/dist/config/models/RoomTypeLocale.json +86 -0
- package/dist/config/models/StudentAccommodationCard.json +158 -0
- package/dist/config/models/TestAction.json +50 -0
- package/dist/config/scope.access.js +148 -0
- package/dist/config/scope.access.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/listeners/AddDefaultAttachmentConfiguration.js +44 -0
- package/dist/listeners/AddDefaultAttachmentConfiguration.js.map +1 -0
- package/dist/listeners/DefaultAttachmentConfigurations.json +277 -0
- package/dist/listeners/DefaultAttachmentTypes.json +523 -0
- package/dist/listeners/GenerateRequestNumberListener.js +87 -0
- package/dist/listeners/GenerateRequestNumberListener.js.map +1 -0
- package/dist/listeners/OnActionCompleteListener.js +96 -0
- package/dist/listeners/OnActionCompleteListener.js.map +1 -0
- package/dist/listeners/OnCancelAccommodationCardListener.js +87 -0
- package/dist/listeners/OnCancelAccommodationCardListener.js.map +1 -0
- package/dist/listeners/OnReactivateAccommodationCardListener.js +87 -0
- package/dist/listeners/OnReactivateAccommodationCardListener.js.map +1 -0
- package/dist/listeners/SendEmailAfterActionStatusChangeListener.js +98 -0
- package/dist/listeners/SendEmailAfterActionStatusChangeListener.js.map +1 -0
- package/dist/listeners/SendEmailAfterCardStatusChangeListener.js +139 -0
- package/dist/listeners/SendEmailAfterCardStatusChangeListener.js.map +1 -0
- package/dist/listeners/StudentAccommodationCardSaveListener.js +90 -0
- package/dist/listeners/StudentAccommodationCardSaveListener.js.map +1 -0
- package/dist/listeners/UpdateStudentAccommodationCardListener.js +70 -0
- package/dist/listeners/UpdateStudentAccommodationCardListener.js.map +1 -0
- package/dist/listeners/ValidateActionListener.js +348 -0
- package/dist/listeners/ValidateActionListener.js.map +1 -0
- package/dist/listeners/data-localization.js +209 -0
- package/dist/listeners/data-localization.js.map +1 -0
- package/dist/listeners/lookup-cache-listener.js +90 -0
- package/dist/listeners/lookup-cache-listener.js.map +1 -0
- package/dist/models/Accommodation.js +53 -0
- package/dist/models/Accommodation.js.map +1 -0
- package/dist/models/AccommodationRequestAction.js +214 -0
- package/dist/models/AccommodationRequestAction.js.map +1 -0
- package/dist/models/AccommodationRequestEvent.js +277 -0
- package/dist/models/AccommodationRequestEvent.js.map +1 -0
- package/dist/models/EnableAttachmentModel.js +210 -0
- package/dist/models/EnableAttachmentModel.js.map +1 -0
- package/dist/models/StudentAccommodationCard.js +93 -0
- package/dist/models/StudentAccommodationCard.js.map +1 -0
- package/dist/models/TestAction.d.ts +5 -0
- package/dist/models/TestAction.js +5 -0
- package/dist/models/TestAction.js.map +1 -0
- package/dist/templates/mail-after-dining-request-status-change/html.ejs +27 -0
- package/package.json +57 -0
- package/src/AccommodationSchemaLoader.js +35 -0
- package/src/AccommodationService.js +67 -0
- package/src/DepartmentReplacer.js +53 -0
- package/src/StudentReplacer.js +74 -0
- package/src/config/models/Accommodation.json +96 -0
- package/src/config/models/AccommodationCardEffectiveStatusType.json +107 -0
- package/src/config/models/AccommodationCardEffectiveStatusTypeLocale.json +85 -0
- package/src/config/models/AccommodationChildFinancialAttribute.json +46 -0
- package/src/config/models/AccommodationGuardianFinancialAttribute.json +46 -0
- package/src/config/models/AccommodationInscriptionModeTag.json +100 -0
- package/src/config/models/AccommodationRequestAction.json +500 -0
- package/src/config/models/AccommodationRequestActionMessage.json +46 -0
- package/src/config/models/AccommodationRequestActionReview.json +31 -0
- package/src/config/models/AccommodationRequestAttachmentConfiguration.json +72 -0
- package/src/config/models/AccommodationRequestCategory.json +50 -0
- package/src/config/models/AccommodationRequestEffectiveStatusType.json +212 -0
- package/src/config/models/AccommodationRequestEffectiveStatusTypeLocale.json +85 -0
- package/src/config/models/AccommodationRequestEvent.json +117 -0
- package/src/config/models/AccommodationRequestFinancialAttribute.json +53 -0
- package/src/config/models/AccommodationRoom.json +151 -0
- package/src/config/models/AccommodationSiblingFinancialAttribute.json +57 -0
- package/src/config/models/CancelAccommodationCardAction.json +32 -0
- package/src/config/models/GuardianType.json +78 -0
- package/src/config/models/Review.json +50 -0
- package/src/config/models/RoomType.json +320 -0
- package/src/config/models/RoomTypeLocale.json +86 -0
- package/src/config/models/StudentAccommodationCard.json +158 -0
- package/src/config/models/TestAction.json +50 -0
- package/src/config/scope.access.js +148 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +2 -0
- package/src/listeners/AddDefaultAttachmentConfiguration.js +43 -0
- package/src/listeners/DefaultAttachmentConfigurations.json +277 -0
- package/src/listeners/DefaultAttachmentTypes.json +523 -0
- package/src/listeners/GenerateRequestNumberListener.js +86 -0
- package/src/listeners/OnActionCompleteListener.js +95 -0
- package/src/listeners/OnCancelAccommodationCardListener.js +86 -0
- package/src/listeners/OnReactivateAccommodationCardListener.js +86 -0
- package/src/listeners/SendEmailAfterActionStatusChangeListener.js +97 -0
- package/src/listeners/SendEmailAfterCardStatusChangeListener.js +138 -0
- package/src/listeners/StudentAccommodationCardSaveListener.js +89 -0
- package/src/listeners/UpdateStudentAccommodationCardListener.js +69 -0
- package/src/listeners/ValidateActionListener.js +347 -0
- package/src/listeners/data-localization.js +214 -0
- package/src/listeners/lookup-cache-listener.js +89 -0
- package/src/models/Accommodation.js +52 -0
- package/src/models/AccommodationRequestAction.js +195 -0
- package/src/models/AccommodationRequestEvent.js +276 -0
- package/src/models/EnableAttachmentModel.js +209 -0
- package/src/models/StudentAccommodationCard.js +92 -0
- package/src/models/TestAction.d.ts +5 -0
- package/src/models/TestAction.js +10 -0
- package/src/templates/mail-after-dining-request-status-change/html.ejs +27 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.afterSave = afterSave;exports.beforeSave = beforeSave;
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _common = require("@themost/common"); /**
|
|
6
|
+
* @param {DataEventArgs} event
|
|
7
|
+
* @param {Function} callback
|
|
8
|
+
*/function beforeSave(event, callback) {(async () => {
|
|
9
|
+
|
|
10
|
+
// validate student state (on insert or update)
|
|
11
|
+
if (event.state === 1 || event.state === 2) {
|
|
12
|
+
let context = event.model.context;
|
|
13
|
+
/**
|
|
14
|
+
* @type {Student|DataObject|*}
|
|
15
|
+
*/
|
|
16
|
+
const student = context.model('Student').convert(event.target.student);
|
|
17
|
+
// const isActive = await student.silent().isActive();
|
|
18
|
+
const isActive = await student.is(':active');
|
|
19
|
+
if (!isActive) {
|
|
20
|
+
throw new _common.DataError('ERR_STATUS',
|
|
21
|
+
'Invalid student status. Student Accommodation Card may be published upon an active student only.' + student,
|
|
22
|
+
null,
|
|
23
|
+
'Student', 'studentStatus');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const studentObject = await context.model('Student').where('id').equal(student.id).silent().flatten().getItem();
|
|
27
|
+
|
|
28
|
+
const academicYear = context.model('AcademicYear').convert(event.target.academicYear).getId();
|
|
29
|
+
if (Number.isInteger(academicYear) === false) {
|
|
30
|
+
throw new _common.DataError('E_VALUE', 'Invalid academic year. Expected number.', null, 'AcademicYear', 'id');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const academicYearObject = await context.model('AcademicYear').where('id').equal(academicYear).getItem();
|
|
34
|
+
if (academicYearObject === undefined) {
|
|
35
|
+
throw new _common.DataError('E_VALUE', 'Invalid academic year.', null, 'AcademicYear', 'id');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (event.target.academicPeriod != null) {
|
|
39
|
+
|
|
40
|
+
const academicPeriod = context.model('AcademicPeriod').convert(event.target.academicPeriod).getId();
|
|
41
|
+
if (Number.isInteger(academicPeriod) === false) {
|
|
42
|
+
throw new _common.DataError('E_VALUE', 'Invalid academic period. Expected number.', null, 'AcademicPeriod', 'id');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const academicPeriodObject = await context.model('AcademicPeriod').where('id').equal(academicPeriod).getItem();
|
|
46
|
+
if (academicPeriodObject === undefined) {
|
|
47
|
+
throw new _common.DataError('E_VALUE', 'Invalid academic period.', null, 'AcademicPeriod', 'id');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
})().then(() => {
|
|
53
|
+
return callback();
|
|
54
|
+
}).catch((err) => {
|
|
55
|
+
return callback(err);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @param {DataEventArgs} event
|
|
62
|
+
* @param {Function} callback
|
|
63
|
+
*/
|
|
64
|
+
function afterSave(event, callback) {
|
|
65
|
+
(async () => {
|
|
66
|
+
//
|
|
67
|
+
let context = event.model.context;
|
|
68
|
+
if (event.state === 1) {
|
|
69
|
+
if (event.target.accommodationRoom && Object.keys(event.target.accommodationRoom).length != 0) {
|
|
70
|
+
// get accommodation valid through date
|
|
71
|
+
|
|
72
|
+
const room = await context.model('AccommodationRoom').where('id').equal(event.target.accommodationRoom.id).getItem();
|
|
73
|
+
if (room === undefined) {
|
|
74
|
+
throw new _common.DataError('E_VALUE', 'Invalid accommodation room.', null, 'AccommodationRoom', 'id');
|
|
75
|
+
}
|
|
76
|
+
let newRoom = room;
|
|
77
|
+
newRoom.currentOccupancy = room.currentOccupancy + 1;
|
|
78
|
+
//todo if i can increase occupancy
|
|
79
|
+
await context.model('AccommodationRoom').silent().save(newRoom);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
})().then(() => {
|
|
85
|
+
return callback();
|
|
86
|
+
}).catch((err) => {
|
|
87
|
+
return callback(err);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=StudentAccommodationCardSaveListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudentAccommodationCardSaveListener.js","names":["_common","require","beforeSave","event","callback","state","context","model","student","convert","target","isActive","is","DataError","studentObject","where","equal","id","silent","flatten","getItem","academicYear","getId","Number","isInteger","academicYearObject","undefined","academicPeriod","academicPeriodObject","then","catch","err","afterSave","accommodationRoom","Object","keys","length","room","newRoom","currentOccupancy","save"],"sources":["../../src/listeners/StudentAccommodationCardSaveListener.js"],"sourcesContent":["/**\n * @param {DataEventArgs} event\n * @param {Function} callback\n */\nimport {DataError} from \"@themost/common\";\n\nexport function beforeSave(event, callback) {\n (async () => {\n\n // validate student state (on insert or update)\n if (event.state === 1 || event.state === 2) {\n let context = event.model.context;\n /**\n * @type {Student|DataObject|*}\n */\n const student = context.model('Student').convert(event.target.student);\n // const isActive = await student.silent().isActive();\n const isActive = await student.is(':active');\n if (!isActive) {\n throw new DataError('ERR_STATUS',\n 'Invalid student status. Student Accommodation Card may be published upon an active student only.'+student\n , null,\n 'Student', 'studentStatus');\n }\n \n const studentObject = await context.model('Student').where('id').equal(student.id).silent().flatten().getItem();\n \n const academicYear = context.model('AcademicYear').convert(event.target.academicYear).getId();\n if (Number.isInteger(academicYear) === false) {\n throw new DataError('E_VALUE', 'Invalid academic year. Expected number.', null, 'AcademicYear', 'id');\n }\n\n const academicYearObject = await context.model('AcademicYear').where('id').equal(academicYear).getItem();\n if (academicYearObject === undefined){\n throw new DataError('E_VALUE', 'Invalid academic year.', null, 'AcademicYear', 'id');\n }\n\n if (event.target.academicPeriod != null){\n\n const academicPeriod = context.model('AcademicPeriod').convert(event.target.academicPeriod).getId();\n if (Number.isInteger(academicPeriod) === false) {\n throw new DataError('E_VALUE', 'Invalid academic period. Expected number.', null, 'AcademicPeriod', 'id');\n }\n \n const academicPeriodObject = await context.model('AcademicPeriod').where('id').equal(academicPeriod).getItem();\n if (academicPeriodObject === undefined){\n throw new DataError('E_VALUE', 'Invalid academic period.', null, 'AcademicPeriod', 'id');\n }\n \n }\n }\n })().then( () => {\n return callback();\n }).catch( err => {\n return callback(err);\n });\n}\n\n\n/**\n * @param {DataEventArgs} event\n * @param {Function} callback\n */\nexport function afterSave(event, callback) {\n (async () => {\n //\n let context = event.model.context;\n if (event.state === 1) {\n if (event.target.accommodationRoom && Object.keys(event.target.accommodationRoom).length != 0) {\n // get accommodation valid through date\n\n const room = await context.model('AccommodationRoom').where('id').equal(event.target.accommodationRoom.id).getItem();\n if (room === undefined) {\n throw new DataError('E_VALUE', 'Invalid accommodation room.', null, 'AccommodationRoom', 'id');\n }\n let newRoom = room;\n newRoom.currentOccupancy = room.currentOccupancy+1;\n //todo if i can increase occupancy\n await context.model('AccommodationRoom').silent().save(newRoom);\n }\n }\n\n\n })().then(() => {\n return callback();\n }).catch(err => {\n return callback(err);\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.afterSave = afterSave;exports.beforeSave = beforeSave;var _common = require("@themost/common");
|
|
2
|
+
|
|
3
|
+
async function afterSaveAsync(event) {
|
|
4
|
+
//
|
|
5
|
+
if (event.state !== 2) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const context = event.model.context;
|
|
10
|
+
|
|
11
|
+
const previous = event.previous;
|
|
12
|
+
if (previous == null) {
|
|
13
|
+
throw new _common.DataError('E_PREVIOUS', 'The previous state of the object cannot be determined');
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
const previousStudentStatus = event.previous.studentStatus;
|
|
18
|
+
if (previousStudentStatus.alternateName === 'active' && event.target.studentStatus && event.target.studentStatus.alternateName != 'active') {
|
|
19
|
+
|
|
20
|
+
// find StudentAccommodationCard
|
|
21
|
+
const StudentAccommodationCard = await context.model('StudentAccommodationCards').where('student/id').equal(event.target.id).select('id', 'active', 'action', 'student', 'academicPeriod', 'academicYear').
|
|
22
|
+
flatten().silent().getItem();
|
|
23
|
+
|
|
24
|
+
if (StudentAccommodationCard == null) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (StudentAccommodationCard.active === false) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (StudentAccommodationCard.active === true) {
|
|
33
|
+
|
|
34
|
+
StudentAccommodationCard.active = false;
|
|
35
|
+
//save StudentAccommodationCard
|
|
36
|
+
await context.model('StudentAccommodationCard').save(StudentAccommodationCard);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// eslint-disable-next-line no-unused-vars
|
|
43
|
+
async function beforeSaveAsync(event) {
|
|
44
|
+
|
|
45
|
+
//
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @param {DataEventArgs} event
|
|
49
|
+
* @param {Function} callback
|
|
50
|
+
*/
|
|
51
|
+
function beforeSave(event, callback) {
|
|
52
|
+
return beforeSaveAsync(event).then(() => {
|
|
53
|
+
return callback();
|
|
54
|
+
}).catch((err) => {
|
|
55
|
+
return callback(err);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @param {DataEventArgs} event
|
|
61
|
+
* @param {Function} callback
|
|
62
|
+
*/
|
|
63
|
+
function afterSave(event, callback) {
|
|
64
|
+
return afterSaveAsync(event).then(() => {
|
|
65
|
+
return callback();
|
|
66
|
+
}).catch((err) => {
|
|
67
|
+
return callback(err);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=UpdateStudentAccommodationCardListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpdateStudentAccommodationCardListener.js","names":["_common","require","afterSaveAsync","event","state","context","model","previous","DataError","previousStudentStatus","studentStatus","alternateName","target","StudentAccommodationCard","where","equal","id","select","flatten","silent","getItem","active","save","beforeSaveAsync","beforeSave","callback","then","catch","err","afterSave"],"sources":["../../src/listeners/UpdateStudentAccommodationCardListener.js"],"sourcesContent":["import { DataError } from '@themost/common';\n\nasync function afterSaveAsync(event) {\n //\n if (event.state !== 2) {\n return;\n }\n\n const context = event.model.context;\n\n const previous = event.previous;\n if (previous == null) {\n throw new DataError('E_PREVIOUS', 'The previous state of the object cannot be determined');\n }\n\n\n const previousStudentStatus = event.previous.studentStatus;\n if (previousStudentStatus.alternateName === 'active' && event.target.studentStatus && event.target.studentStatus.alternateName != 'active') {\n \n // find StudentAccommodationCard \n const StudentAccommodationCard = await context.model('StudentAccommodationCards').where('student/id').equal(event.target.id).select('id', 'active', 'action', 'student', 'academicPeriod', 'academicYear')\n .flatten().silent().getItem();\n\n if (StudentAccommodationCard == null) {\n return;\n }\n\n if (StudentAccommodationCard.active === false) {\n return;\n }\n\n if (StudentAccommodationCard.active === true) {\n\n StudentAccommodationCard.active = false\n //save StudentAccommodationCard\n await context.model('StudentAccommodationCard').save(StudentAccommodationCard);\n }\n }\n\n}\n\n// eslint-disable-next-line no-unused-vars\nasync function beforeSaveAsync(event) {\n//\n}\n\n/**\n * @param {DataEventArgs} event\n * @param {Function} callback\n */\nexport function beforeSave(event, callback) {\n return beforeSaveAsync(event).then(() => {\n return callback();\n }).catch((err) => {\n return callback(err);\n });\n}\n\n/**\n * @param {DataEventArgs} event\n * @param {Function} callback\n */\nexport function afterSave(event, callback) {\n return afterSaveAsync(event).then(() => {\n return callback();\n }).catch((err) => {\n return callback(err);\n });\n}"],"mappings":"yIAAA,IAAAA,OAAA,GAAAC,OAAA;;AAEA,eAAeC,cAAcA,CAACC,KAAK,EAAE;EACjC;EACA,IAAIA,KAAK,CAACC,KAAK,KAAK,CAAC,EAAE;IACnB;EACJ;;EAEA,MAAMC,OAAO,GAAGF,KAAK,CAACG,KAAK,CAACD,OAAO;;EAEnC,MAAME,QAAQ,GAAGJ,KAAK,CAACI,QAAQ;EAC/B,IAAIA,QAAQ,IAAI,IAAI,EAAE;IAClB,MAAM,IAAIC,iBAAS,CAAC,YAAY,EAAE,uDAAuD,CAAC;EAC9F;;;EAGA,MAAMC,qBAAqB,GAAGN,KAAK,CAACI,QAAQ,CAACG,aAAa;EAC1D,IAAID,qBAAqB,CAACE,aAAa,KAAK,QAAQ,IAAIR,KAAK,CAACS,MAAM,CAACF,aAAa,IAAIP,KAAK,CAACS,MAAM,CAACF,aAAa,CAACC,aAAa,IAAI,QAAQ,EAAE;;IAEvI;IACD,MAAME,wBAAwB,GAAG,MAAMR,OAAO,CAACC,KAAK,CAAC,2BAA2B,CAAC,CAACQ,KAAK,CAAC,YAAY,CAAC,CAACC,KAAK,CAACZ,KAAK,CAACS,MAAM,CAACI,EAAE,CAAC,CAACC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,CAAC;IACzMC,OAAO,EAAE,CAACC,MAAM,EAAE,CAACC,OAAO,EAAE;;IAE7B,IAAIP,wBAAwB,IAAI,IAAI,EAAE;MAClC;IACJ;;IAEA,IAAIA,wBAAwB,CAACQ,MAAM,KAAK,KAAK,EAAE;MAC3C;IACJ;;IAEA,IAAIR,wBAAwB,CAACQ,MAAM,KAAK,IAAI,EAAE;;MAE1CR,wBAAwB,CAACQ,MAAM,GAAG,KAAK;MACvC;MACA,MAAMhB,OAAO,CAACC,KAAK,CAAC,0BAA0B,CAAC,CAACgB,IAAI,CAACT,wBAAwB,CAAC;IAClF;EACJ;;AAEJ;;AAEA;AACA,eAAeU,eAAeA,CAACpB,KAAK,EAAE;;EACtC;AAAA;AAGA;AACA;AACA;AACA;AACO,SAASqB,UAAUA,CAACrB,KAAK,EAAEsB,QAAQ,EAAE;EACxC,OAAOF,eAAe,CAACpB,KAAK,CAAC,CAACuB,IAAI,CAAC,MAAM;IACrC,OAAOD,QAAQ,EAAE;EACrB,CAAC,CAAC,CAACE,KAAK,CAAC,CAACC,GAAG,KAAK;IACd,OAAOH,QAAQ,CAACG,GAAG,CAAC;EACxB,CAAC,CAAC;AACN;;AAEA;AACA;AACA;AACA;AACO,SAASC,SAASA,CAAC1B,KAAK,EAAEsB,QAAQ,EAAE;EACvC,OAAOvB,cAAc,CAACC,KAAK,CAAC,CAACuB,IAAI,CAAC,MAAM;IACpC,OAAOD,QAAQ,EAAE;EACrB,CAAC,CAAC,CAACE,KAAK,CAAC,CAACC,GAAG,KAAK;IACd,OAAOH,QAAQ,CAACG,GAAG,CAAC;EACxB,CAAC,CAAC;AACN"}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.afterRemove = afterRemove;exports.afterSave = afterSave;exports.beforeRemove = beforeRemove;exports.beforeSave = beforeSave;var _common = require("@themost/common");
|
|
2
|
+
var _errors = require("@themost/common/errors");
|
|
3
|
+
var _data = require("@themost/data");
|
|
4
|
+
// eslint-disable-next-line no-unused-vars
|
|
5
|
+
async function beforeSaveAsync(event) {
|
|
6
|
+
|
|
7
|
+
let runAllRules = false;
|
|
8
|
+
const user = event.model.context.user;
|
|
9
|
+
const target = event.model.convert(event.target);
|
|
10
|
+
const context = event.model.context;
|
|
11
|
+
|
|
12
|
+
let studentId = target.student;
|
|
13
|
+
let action;
|
|
14
|
+
let eventHasConsent;
|
|
15
|
+
|
|
16
|
+
if (!Object.prototype.hasOwnProperty.call(target, 'student')) {
|
|
17
|
+
const actionID = event.target || event.target.id;
|
|
18
|
+
action = await context.model('AccommodationRequestAction').
|
|
19
|
+
where('id').
|
|
20
|
+
equal(actionID).
|
|
21
|
+
select('student', 'accommodationRequestEvent/hasConsent as hasConsent', 'studentConsent').
|
|
22
|
+
getItem();
|
|
23
|
+
studentId = action.student;
|
|
24
|
+
}
|
|
25
|
+
if (!studentId) {
|
|
26
|
+
throw new _common.DataError('E_STUDENT', 'The student cannot be empty at this context.');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const student = event.model.context.model('Student').convert(studentId);
|
|
30
|
+
|
|
31
|
+
const isMe = await student.is(':me');
|
|
32
|
+
if (isMe) {
|
|
33
|
+
const isActive = await student.is(':active');
|
|
34
|
+
if (!isActive) {
|
|
35
|
+
throw new _errors.HttpForbiddenError();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const accommodationRequestEvent = target.accommodationRequestEvent || target.accommodationRequestEvent.id;
|
|
39
|
+
eventHasConsent = await context.model('AccommodationRequestEvent').
|
|
40
|
+
where('id').
|
|
41
|
+
equal(accommodationRequestEvent).
|
|
42
|
+
select('hasConsent').
|
|
43
|
+
silent().
|
|
44
|
+
value();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (event.state === 2) {
|
|
48
|
+
if (isMe === true) {
|
|
49
|
+
//check studentConsent
|
|
50
|
+
if (event.target && eventHasConsent === true && Object.prototype.hasOwnProperty.call(target, 'studentConsent') === false) {
|
|
51
|
+
const translateService = context.application.getStrategy(function TranslateService() {});
|
|
52
|
+
throw new _common.DataError('E_STUDENT_CONSENT', translateService.translate('The application cannot be saved without consent about personal data.'), null, 'AccommodationRequestAction', 'studentConsent');
|
|
53
|
+
} else if (event.target && eventHasConsent === true && Object.prototype.hasOwnProperty.call(target, 'studentConsent') === true && target.studentConsent === false) {
|
|
54
|
+
const translateService = context.application.getStrategy(function TranslateService() {});
|
|
55
|
+
throw new _common.DataError('E_STUDENT_CONSENT', translateService.translate('The application cannot be saved without consent about personal data.'), null, 'AccommodationRequestAction', 'studentConsent');
|
|
56
|
+
}
|
|
57
|
+
//check category
|
|
58
|
+
if (target && Object.prototype.hasOwnProperty.call(target, 'category') && target.category == null) {
|
|
59
|
+
throw new _errors.HttpForbiddenError(
|
|
60
|
+
context.__(
|
|
61
|
+
'The accommodation request creation failed because no request category has been set.'));
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
//UPDATE
|
|
69
|
+
//Load current status
|
|
70
|
+
const actionStatus = await event.model.where('id').equal(event.target.id).select('actionStatus/alternateName').value();
|
|
71
|
+
|
|
72
|
+
//Action is not submitted yet. Run again all rules
|
|
73
|
+
if (actionStatus === 'PotentialActionStatus') {
|
|
74
|
+
runAllRules = true;
|
|
75
|
+
} else
|
|
76
|
+
if (actionStatus === 'ActiveActionStatus' || actionStatus === 'CompletedActionStatus') {
|
|
77
|
+
//accommodation request already submitted. Do not allow to update any property
|
|
78
|
+
removeAllInformationExceptStatus(event.target);
|
|
79
|
+
} else
|
|
80
|
+
if (actionStatus === 'CancelledActionStatus' && event.target.actionStatus && event.target.actionStatus.alternateName !== actionStatus && event.target.actionStatus.alternateName != 'ActiveActionStatus') {
|
|
81
|
+
//accommodation request already cancelled.
|
|
82
|
+
throw new _common.DataError('E_VALUE', 'Cannot update cancelled action.', null, 'AccommodationRequestAction', 'actionStatus');
|
|
83
|
+
}
|
|
84
|
+
// allow agent to change request's status when target request status = 'ActiveActionStatus' example: to reconsider a cancelled request
|
|
85
|
+
else if (actionStatus === 'CancelledActionStatus' && event.target.actionStatus && event.target.actionStatus.alternateName !== actionStatus && event.target.actionStatus.alternateName === 'ActiveActionStatus') {
|
|
86
|
+
let model = event.target;
|
|
87
|
+
// set loggedIn user as request's agent
|
|
88
|
+
if (event.previous.agent != user.id) {
|
|
89
|
+
model.agent = user.id;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
} else
|
|
93
|
+
|
|
94
|
+
if (event.state === 1) {
|
|
95
|
+
// check studentConsent
|
|
96
|
+
if (isMe === true && eventHasConsent === true) {
|
|
97
|
+
if (Object.prototype.hasOwnProperty.call(target, 'studentConsent') === false) {
|
|
98
|
+
const translateService = context.application.getStrategy(function TranslateService() {});
|
|
99
|
+
throw new _common.DataError('E_STUDENT_CONSENT', translateService.translate('The application cannot be saved without consent about personal data.'), null, 'AccommodationRequestAction', 'studentConsent');
|
|
100
|
+
} else if (eventHasConsent === true && target.studentConsent === false) {
|
|
101
|
+
const translateService = context.application.getStrategy(function TranslateService() {});
|
|
102
|
+
throw new _common.DataError('E_STUDENT_CONSENT', translateService.translate('The application cannot be saved without consent about personal data.'), null, 'AccommodationRequestAction', 'studentConsent');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (target && (Object.prototype.hasOwnProperty.call(target, 'category') === false || target.category == null)) {
|
|
107
|
+
throw new _errors.HttpForbiddenError(
|
|
108
|
+
context.__(
|
|
109
|
+
'The accommodation request creation failed because no request category has been set.'));
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
runAllRules = true;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
if (runAllRules) {
|
|
120
|
+
// set nullable fields to null when they don't need to have a value
|
|
121
|
+
let model = event.target;
|
|
122
|
+
|
|
123
|
+
if (Object.prototype.hasOwnProperty.call(model, 'militaryActive')) {
|
|
124
|
+
if (model.militaryActive == true) {
|
|
125
|
+
applyRulesForPrerequisites(model);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (Object.prototype.hasOwnProperty.call(model, 'militarySchool')) {
|
|
131
|
+
if (model.militarySchool == true) {
|
|
132
|
+
applyRulesForPrerequisites(model);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (Object.prototype.hasOwnProperty.call(model, 'studentHouseResident')) {
|
|
138
|
+
if (model.studentHouseResident == true) {
|
|
139
|
+
applyRulesForPrerequisites(model);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (Object.prototype.hasOwnProperty.call(model, 'sameDegreeHolder')) {
|
|
145
|
+
if (model.sameDegreeHolder == true) {
|
|
146
|
+
applyRulesForPrerequisites(model);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (Object.prototype.hasOwnProperty.call(model, 'foreignScholarStudent')) {
|
|
152
|
+
if (model.foreignScholarStudent == true) {
|
|
153
|
+
applyRulesForPrerequisites(model);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
if (Object.prototype.hasOwnProperty.call(model, 'foreignStudentOrChildOfGreekExpatriate')) {
|
|
160
|
+
if (model.foreignStudentOrChildOfGreekExpatriate == true) {
|
|
161
|
+
applyRulesForCyprusStudentOrForeignStudentOrChildOfGreekExpatriate(model);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (Object.prototype.hasOwnProperty.call(model, 'studentReceivesUnemploymentBenefit')) {
|
|
167
|
+
if (model.studentReceivesUnemploymentBenefit == true) {
|
|
168
|
+
model.institutionOrClubLocationSameAsStudentPermanentResidence = null;
|
|
169
|
+
model.studentSubmitsTaxReportInGreece = null;
|
|
170
|
+
nullifyFamilyInformation(model);
|
|
171
|
+
nullifyGuardianFinancialInformation(model);
|
|
172
|
+
nullifySpouseFinancialInformation(model);
|
|
173
|
+
nullifyStudentFinancialInformation(model);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (Object.prototype.hasOwnProperty.call(model, 'maritalStatus')) {
|
|
179
|
+
if (model.maritalStatus && model.maritalStatus.alternateName == 'single') {
|
|
180
|
+
model.noOfChildren = null;
|
|
181
|
+
nullifySpouseFinancialInformation(model);
|
|
182
|
+
if (model.guardianType.alternateName == 'nobody') {
|
|
183
|
+
model.institutionOrClubLocationSameAsGuardianPermanentResidence = null;
|
|
184
|
+
model.guardianNoOfChildren = null;
|
|
185
|
+
model.numberOfStudyingSiblings = null;
|
|
186
|
+
nullifyGuardianFinancialInformation(model);
|
|
187
|
+
}
|
|
188
|
+
} else
|
|
189
|
+
{
|
|
190
|
+
model.guardianType = null;
|
|
191
|
+
model.institutionOrClubLocationSameAsGuardianPermanentResidence = null;
|
|
192
|
+
model.guardianNoOfChildren = null;
|
|
193
|
+
model.numberOfStudyingSiblings = null;
|
|
194
|
+
nullifyGuardianFinancialInformation(model);
|
|
195
|
+
if (model.maritalStatus && model.maritalStatus.alternateName != 'married') {
|
|
196
|
+
nullifySpouseFinancialInformation(model);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function applyRulesForPrerequisites(model) {
|
|
206
|
+
//nullify all other properties except foreignScholarStudent, inscriptionModeTag, lessThan25yrs and allInformationSubmittedIsTrueConfirmation
|
|
207
|
+
nullifyPersonalInformation(model);
|
|
208
|
+
nullifyFamilyInformation(model);
|
|
209
|
+
nullifyGuardianFinancialInformation(model);
|
|
210
|
+
nullifySpouseFinancialInformation(model);
|
|
211
|
+
nullifyStudentFinancialInformation(model);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function applyRulesForCyprusStudentOrForeignStudentOrChildOfGreekExpatriate(model) {
|
|
215
|
+
model.studentAfm = null;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function nullifyPersonalInformation(model) {
|
|
219
|
+
model.foreignStudentOrChildOfGreekExpatriate = null;
|
|
220
|
+
model.studentDisabledPerson = null;
|
|
221
|
+
model.studentOrphan = null;
|
|
222
|
+
model.studentReceivesUnemploymentBenefit = null;
|
|
223
|
+
model.studentSubmitsTaxReportInGreece = null;
|
|
224
|
+
model.institutionOrClubLocationSameAsStudentPermanentResidence = null;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function nullifyFamilyInformation(model) {
|
|
228
|
+
model.noOfChildren = null;
|
|
229
|
+
model.maritalStatus = null;
|
|
230
|
+
model.numberOfStudyingSiblings = null;
|
|
231
|
+
model.guardianNoOfChildren = null;
|
|
232
|
+
model.guardianType = null;
|
|
233
|
+
model.institutionOrClubLocationSameAsGuadianPermanentResidence = null;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
function nullifyGuardianFinancialInformation(model) {
|
|
237
|
+
model.studentGuardianTotalIncome = null;
|
|
238
|
+
model.studentGuardianAfm = null;
|
|
239
|
+
model.studentGuardianReceivesUnemploymentBenefit = null;
|
|
240
|
+
model.studentGuardianSubmitsTaxReportInGreece = null;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
function nullifySpouseFinancialInformation(model) {
|
|
244
|
+
model.studentSpouseTotalIncome = null;
|
|
245
|
+
model.studentSpouseAfm = null;
|
|
246
|
+
model.studentSpouseReceivesUnemploymentBenefit = null;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function nullifyStudentFinancialInformation(model) {
|
|
250
|
+
model.studentTotalIncome = null;
|
|
251
|
+
model.studentAfm = null;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function removeAllInformationExceptStatus(model) {
|
|
255
|
+
delete model.militaryActive;
|
|
256
|
+
delete model.militarySchool;
|
|
257
|
+
delete model.studentHouseResident;
|
|
258
|
+
delete model.sameDegreeHolder;
|
|
259
|
+
delete model.foreignScholarStudent;
|
|
260
|
+
delete model.lessThan25yrs;
|
|
261
|
+
delete model.institutionOrClubLocationSameAsStudentPermanentResidence;
|
|
262
|
+
delete model.studentDisabledPerson;
|
|
263
|
+
delete model.studentOrphan;
|
|
264
|
+
delete model.numberOfStudyingSiblings;
|
|
265
|
+
delete model.maritalStatus;
|
|
266
|
+
delete model.noOfChildren;
|
|
267
|
+
delete model.guardianType;
|
|
268
|
+
delete model.institutionOrClubLocationSameAsGuadianPermanentResidence;
|
|
269
|
+
delete model.guardianNoOfChildren;
|
|
270
|
+
delete model.studentReceivesUnemploymentBenefit;
|
|
271
|
+
delete model.studentSubmitsTaxReportInGreece;
|
|
272
|
+
delete model.studentGuardianSubmitsTaxReportInGreece;
|
|
273
|
+
delete model.studentAfm;
|
|
274
|
+
delete model.studentTotalIncome;
|
|
275
|
+
delete model.studentSpouseReceivesUnemploymentBenefit;
|
|
276
|
+
delete model.studentSpouseAfm;
|
|
277
|
+
delete model.studentSpouseTotalIncome;
|
|
278
|
+
delete model.studentGuardianReceivesUnemploymentBenefit;
|
|
279
|
+
delete model.foreignStudentOrChildOfGreekExpatriate;
|
|
280
|
+
delete model.studentGuardianAfm;
|
|
281
|
+
delete model.studentGuardianTotalIncome;
|
|
282
|
+
delete model.allInformationSubmittedIsTrueConfirmation;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
async function afterSaveAsync(event) {
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
// on insert
|
|
289
|
+
}
|
|
290
|
+
async function beforeRemoveAsync(event) {
|
|
291
|
+
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
async function afterRemoveAsync(event) {
|
|
295
|
+
const context = event.model.context;
|
|
296
|
+
// try to find if a preference exists for that event
|
|
297
|
+
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* @param {DataEventArgs} event
|
|
302
|
+
* @param {Function} callback
|
|
303
|
+
*/
|
|
304
|
+
function beforeSave(event, callback) {
|
|
305
|
+
return beforeSaveAsync(event).then(() => {
|
|
306
|
+
return callback();
|
|
307
|
+
}).catch((err) => {
|
|
308
|
+
return callback(err);
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* @param {DataEventArgs} event
|
|
314
|
+
* @param {Function} callback
|
|
315
|
+
*/
|
|
316
|
+
function afterSave(event, callback) {
|
|
317
|
+
return afterSaveAsync(event).then(() => {
|
|
318
|
+
return callback();
|
|
319
|
+
}).catch((err) => {
|
|
320
|
+
return callback(err);
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* @param {DataEventArgs} event
|
|
326
|
+
* @param {Function} callback
|
|
327
|
+
*/
|
|
328
|
+
function afterRemove(event, callback) {
|
|
329
|
+
return afterRemoveAsync(event).then(() => {
|
|
330
|
+
return callback();
|
|
331
|
+
}).catch((err) => {
|
|
332
|
+
return callback(err);
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* @param {DataEventArgs} event
|
|
339
|
+
* @param {Function} callback
|
|
340
|
+
*/
|
|
341
|
+
function beforeRemove(event, callback) {
|
|
342
|
+
return beforeRemoveAsync(event).then(() => {
|
|
343
|
+
return callback();
|
|
344
|
+
}).catch((err) => {
|
|
345
|
+
return callback(err);
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=ValidateActionListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidateActionListener.js","names":["_common","require","_errors","_data","beforeSaveAsync","event","runAllRules","user","model","context","target","convert","studentId","student","action","eventHasConsent","Object","prototype","hasOwnProperty","call","actionID","id","where","equal","select","getItem","DataError","isMe","is","isActive","HttpForbiddenError","accommodationRequestEvent","silent","value","state","translateService","application","getStrategy","TranslateService","translate","studentConsent","category","__","actionStatus","removeAllInformationExceptStatus","alternateName","previous","agent","militaryActive","applyRulesForPrerequisites","militarySchool","studentHouseResident","sameDegreeHolder","foreignScholarStudent","foreignStudentOrChildOfGreekExpatriate","applyRulesForCyprusStudentOrForeignStudentOrChildOfGreekExpatriate","studentReceivesUnemploymentBenefit","institutionOrClubLocationSameAsStudentPermanentResidence","studentSubmitsTaxReportInGreece","nullifyFamilyInformation","nullifyGuardianFinancialInformation","nullifySpouseFinancialInformation","nullifyStudentFinancialInformation","maritalStatus","noOfChildren","guardianType","institutionOrClubLocationSameAsGuardianPermanentResidence","guardianNoOfChildren","numberOfStudyingSiblings","nullifyPersonalInformation","studentAfm","studentDisabledPerson","studentOrphan","institutionOrClubLocationSameAsGuadianPermanentResidence","studentGuardianTotalIncome","studentGuardianAfm","studentGuardianReceivesUnemploymentBenefit","studentGuardianSubmitsTaxReportInGreece","studentSpouseTotalIncome","studentSpouseAfm","studentSpouseReceivesUnemploymentBenefit","studentTotalIncome","lessThan25yrs","allInformationSubmittedIsTrueConfirmation","afterSaveAsync","beforeRemoveAsync","afterRemoveAsync","beforeSave","callback","then","catch","err","afterSave","afterRemove","beforeRemove"],"sources":["../../src/listeners/ValidateActionListener.js"],"sourcesContent":["import {DataError} from \"@themost/common\";\nimport { HttpForbiddenError } from '@themost/common/errors';\nimport { DataObjectState, DataModel } from \"@themost/data\";\n// eslint-disable-next-line no-unused-vars\nasync function beforeSaveAsync(event) {\n\n let runAllRules = false;\n const user = event.model.context.user;\n const target = event.model.convert(event.target);\n const context = event.model.context;\n\n let studentId = target.student;\n let action;\n let eventHasConsent;\n\n if (!Object.prototype.hasOwnProperty.call(target,'student')) {\n const actionID = event.target || event.target.id;\n action = await context.model('AccommodationRequestAction')\n .where('id')\n .equal(actionID)\n .select('student','accommodationRequestEvent/hasConsent as hasConsent','studentConsent')\n .getItem();\n studentId = action.student;\n }\n if (!studentId) {\n throw new DataError('E_STUDENT', 'The student cannot be empty at this context.');\n }\n\n const student = event.model.context.model('Student').convert(studentId);\n \n const isMe = await student.is(':me');\n if (isMe) {\n const isActive = await student.is(':active');\n if (!isActive) {\n throw new HttpForbiddenError();\n }\n\n const accommodationRequestEvent = target.accommodationRequestEvent || target.accommodationRequestEvent.id;\n eventHasConsent = await context.model('AccommodationRequestEvent')\n .where('id')\n .equal(accommodationRequestEvent)\n .select('hasConsent')\n .silent()\n .value();\n }\n\n if (event.state === 2) {\n if (isMe === true) {\n //check studentConsent\n if (event.target && eventHasConsent === true && Object.prototype.hasOwnProperty.call(target, 'studentConsent') === false) {\n const translateService = context.application.getStrategy(function TranslateService() { });\n throw new DataError('E_STUDENT_CONSENT', translateService.translate('The application cannot be saved without consent about personal data.'), null, 'AccommodationRequestAction', 'studentConsent');\n } else if (event.target && eventHasConsent === true && Object.prototype.hasOwnProperty.call(target, 'studentConsent') === true && target.studentConsent === false) {\n const translateService = context.application.getStrategy(function TranslateService() { });\n throw new DataError('E_STUDENT_CONSENT', translateService.translate('The application cannot be saved without consent about personal data.'), null, 'AccommodationRequestAction', 'studentConsent');\n }\n //check category\n if (target && (Object.prototype.hasOwnProperty.call(target, 'category') && (target.category == null))) {\n throw new HttpForbiddenError(\n context.__(\n 'The accommodation request creation failed because no request category has been set.'\n )\n );\n }\n\n }\n\n //UPDATE\n //Load current status\n const actionStatus = await event.model.where('id').equal(event.target.id).select('actionStatus/alternateName').value();\n \n //Action is not submitted yet. Run again all rules\n if (actionStatus === 'PotentialActionStatus') {\n runAllRules = true;\n }\n else if (actionStatus === 'ActiveActionStatus' || actionStatus === 'CompletedActionStatus'){\n //accommodation request already submitted. Do not allow to update any property \n removeAllInformationExceptStatus(event.target);\n }\n else if (actionStatus === 'CancelledActionStatus' && event.target.actionStatus && event.target.actionStatus.alternateName !== actionStatus && event.target.actionStatus.alternateName != 'ActiveActionStatus') {\n //accommodation request already cancelled. \n throw new DataError('E_VALUE', 'Cannot update cancelled action.', null, 'AccommodationRequestAction', 'actionStatus');\n }\n // allow agent to change request's status when target request status = 'ActiveActionStatus' example: to reconsider a cancelled request\n else if (actionStatus === 'CancelledActionStatus' && event.target.actionStatus && event.target.actionStatus.alternateName !== actionStatus && event.target.actionStatus.alternateName === 'ActiveActionStatus') {\n let model = event.target;\n // set loggedIn user as request's agent\n if (event.previous.agent != user.id) {\n model.agent = user.id;\n }\n }\n }\n\n else if (event.state === 1) {\n // check studentConsent\n if (isMe === true && eventHasConsent === true) {\n if (Object.prototype.hasOwnProperty.call(target, 'studentConsent') === false) {\n const translateService = context.application.getStrategy(function TranslateService() { });\n throw new DataError('E_STUDENT_CONSENT', translateService.translate('The application cannot be saved without consent about personal data.'), null, 'AccommodationRequestAction', 'studentConsent');\n } else if (eventHasConsent === true && target.studentConsent === false) {\n const translateService = context.application.getStrategy(function TranslateService() { });\n throw new DataError('E_STUDENT_CONSENT', translateService.translate('The application cannot be saved without consent about personal data.'), null, 'AccommodationRequestAction', 'studentConsent');\n }\n }\n\n if (target && (Object.prototype.hasOwnProperty.call(target, 'category') === false || (target.category == null))) {\n throw new HttpForbiddenError(\n context.__(\n 'The accommodation request creation failed because no request category has been set.'\n )\n );\n }\n\n runAllRules = true;\n }\n \n \n\n if (runAllRules){\n // set nullable fields to null when they don't need to have a value\n let model = event.target;\n \n if (Object.prototype.hasOwnProperty.call(model, 'militaryActive')) {\n if (model.militaryActive == true) {\n applyRulesForPrerequisites(model);\n return;\n } \n }\n\n if (Object.prototype.hasOwnProperty.call(model, 'militarySchool')) {\n if (model.militarySchool == true) {\n applyRulesForPrerequisites(model);\n return;\n } \n }\n \n if (Object.prototype.hasOwnProperty.call(model, 'studentHouseResident')) {\n if (model.studentHouseResident == true) {\n applyRulesForPrerequisites(model);\n return;\n } \n }\n \n if (Object.prototype.hasOwnProperty.call(model, 'sameDegreeHolder')) {\n if (model.sameDegreeHolder == true) {\n applyRulesForPrerequisites(model);\n return;\n } \n }\n\n if (Object.prototype.hasOwnProperty.call(model, 'foreignScholarStudent')) {\n if (model.foreignScholarStudent == true) {\n applyRulesForPrerequisites(model);\n return;\n } \n }\n\n\n if (Object.prototype.hasOwnProperty.call(model, 'foreignStudentOrChildOfGreekExpatriate')) {\n if (model.foreignStudentOrChildOfGreekExpatriate == true) { \n applyRulesForCyprusStudentOrForeignStudentOrChildOfGreekExpatriate(model);\n return;\n } \n }\n\n if (Object.prototype.hasOwnProperty.call(model, 'studentReceivesUnemploymentBenefit')) {\n if (model.studentReceivesUnemploymentBenefit == true){\n model.institutionOrClubLocationSameAsStudentPermanentResidence = null;\n model.studentSubmitsTaxReportInGreece = null;\n nullifyFamilyInformation(model);\n nullifyGuardianFinancialInformation(model);\n nullifySpouseFinancialInformation(model);\n nullifyStudentFinancialInformation(model);\n return;\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(model, 'maritalStatus')) {\n if (model.maritalStatus && model.maritalStatus.alternateName == 'single') {\n model.noOfChildren = null;\n nullifySpouseFinancialInformation(model);\n if (model.guardianType.alternateName == 'nobody') {\n model.institutionOrClubLocationSameAsGuardianPermanentResidence = null;\n model.guardianNoOfChildren = null;\n model.numberOfStudyingSiblings = null;\n nullifyGuardianFinancialInformation(model);\n }\n }\n else {\n model.guardianType = null;\n model.institutionOrClubLocationSameAsGuardianPermanentResidence = null;\n model.guardianNoOfChildren = null;\n model.numberOfStudyingSiblings = null;\n nullifyGuardianFinancialInformation(model);\n if (model.maritalStatus && model.maritalStatus.alternateName != 'married') {\n nullifySpouseFinancialInformation(model);\n }\n }\n }\n }\n \n\n} \n\nfunction applyRulesForPrerequisites(model) {\n //nullify all other properties except foreignScholarStudent, inscriptionModeTag, lessThan25yrs and allInformationSubmittedIsTrueConfirmation\n nullifyPersonalInformation(model);\n nullifyFamilyInformation(model);\n nullifyGuardianFinancialInformation(model); \n nullifySpouseFinancialInformation(model);\n nullifyStudentFinancialInformation(model); \n}\n\nfunction applyRulesForCyprusStudentOrForeignStudentOrChildOfGreekExpatriate(model) {\n model.studentAfm = null;\n}\n\nfunction nullifyPersonalInformation(model){\n model.foreignStudentOrChildOfGreekExpatriate = null;\n model.studentDisabledPerson = null;\n model.studentOrphan = null;\n model.studentReceivesUnemploymentBenefit = null;\n model.studentSubmitsTaxReportInGreece = null;\n model.institutionOrClubLocationSameAsStudentPermanentResidence = null;\n}\n\nfunction nullifyFamilyInformation(model){\n model.noOfChildren = null;\n model.maritalStatus = null;\n model.numberOfStudyingSiblings = null;\n model.guardianNoOfChildren = null;\n model.guardianType = null;\n model.institutionOrClubLocationSameAsGuadianPermanentResidence = null;\n}\n\nfunction nullifyGuardianFinancialInformation(model){\n model.studentGuardianTotalIncome = null;\n model.studentGuardianAfm = null;\n model.studentGuardianReceivesUnemploymentBenefit = null;\n model.studentGuardianSubmitsTaxReportInGreece = null;\n}\n\nfunction nullifySpouseFinancialInformation(model){\n model.studentSpouseTotalIncome = null;\n model.studentSpouseAfm = null;\n model.studentSpouseReceivesUnemploymentBenefit = null;\n}\n\nfunction nullifyStudentFinancialInformation(model){\n model.studentTotalIncome = null;\n model.studentAfm = null;\n}\n\nfunction removeAllInformationExceptStatus(model){\n delete model.militaryActive;\n delete model.militarySchool;\n delete model.studentHouseResident;\n delete model.sameDegreeHolder;\n delete model.foreignScholarStudent;\n delete model.lessThan25yrs;\n delete model.institutionOrClubLocationSameAsStudentPermanentResidence;\n delete model.studentDisabledPerson;\n delete model.studentOrphan;\n delete model.numberOfStudyingSiblings ;\n delete model.maritalStatus;\n delete model.noOfChildren;\n delete model.guardianType;\n delete model.institutionOrClubLocationSameAsGuadianPermanentResidence;\n delete model.guardianNoOfChildren;\n delete model.studentReceivesUnemploymentBenefit;\n delete model.studentSubmitsTaxReportInGreece;\n delete model.studentGuardianSubmitsTaxReportInGreece;\n delete model.studentAfm;\n delete model.studentTotalIncome;\n delete model.studentSpouseReceivesUnemploymentBenefit;\n delete model.studentSpouseAfm;\n delete model.studentSpouseTotalIncome;\n delete model.studentGuardianReceivesUnemploymentBenefit ;\n delete model.foreignStudentOrChildOfGreekExpatriate;\n delete model.studentGuardianAfm;\n delete model.studentGuardianTotalIncome;\n delete model.allInformationSubmittedIsTrueConfirmation;\n}\n\nasync function afterSaveAsync(event) {\n // on insert\n\n}\n\nasync function beforeRemoveAsync(event) {\n \n}\n\nasync function afterRemoveAsync(event) {\n const context = event.model.context;\n // try to find if a preference exists for that event\n\n}\n\n/**\n * @param {DataEventArgs} event\n * @param {Function} callback\n */\nexport function beforeSave(event, callback) {\n return beforeSaveAsync(event).then(() => {\n return callback();\n }).catch((err) => {\n return callback(err);\n });\n}\n\n/**\n * @param {DataEventArgs} event\n * @param {Function} callback\n */\nexport function afterSave(event, callback) {\n return afterSaveAsync(event).then(() => {\n return callback();\n }).catch((err) => {\n return callback(err);\n });\n}\n\n/**\n * @param {DataEventArgs} event\n * @param {Function} callback\n */\nexport function afterRemove(event, callback) {\n return afterRemoveAsync(event).then(() => {\n return callback();\n }).catch((err) => {\n return callback(err);\n });\n}\n\n\n/**\n * @param {DataEventArgs} event\n * @param {Function} callback\n */\nexport function beforeRemove(event, callback) {\n return beforeRemoveAsync(event).then(() => {\n return callback();\n }).catch((err) => {\n return callback(err);\n });\n}\n"],"mappings":"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"}
|