@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,96 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.afterSave = afterSave;exports.beforeSave = beforeSave; // eslint-disable-next-line no-unused-vars
|
|
2
|
+
async function beforeSaveAsync(event) {
|
|
3
|
+
const context = event.model.context;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
async function afterSaveAsync(event) {
|
|
7
|
+
// get context
|
|
8
|
+
// eslint-disable-next-line no-unused-vars
|
|
9
|
+
const context = event.model.context;
|
|
10
|
+
// get current status
|
|
11
|
+
const request = await event.model.where('id').equal(event.target.id).
|
|
12
|
+
expand({
|
|
13
|
+
name: 'accommodationRequestEvent',
|
|
14
|
+
options: {
|
|
15
|
+
$expand: 'academicYear,academicPeriod'
|
|
16
|
+
}
|
|
17
|
+
}).getItem();
|
|
18
|
+
const actionStatus = request && request.actionStatus && request.actionStatus.alternateName ? request.actionStatus.alternateName : null;
|
|
19
|
+
if ((actionStatus || actionStatus.alternateName) === 'CompletedActionStatus') {
|
|
20
|
+
// set student accommodation card
|
|
21
|
+
const now = new Date();
|
|
22
|
+
|
|
23
|
+
// const now = new Date();
|
|
24
|
+
let academicYear = request && request.accommodationRequestEvent && request.accommodationRequestEvent.academicYear ? request.accommodationRequestEvent.academicYear : null;
|
|
25
|
+
let academicPeriod = request && request.accommodationRequestEvent && request.accommodationRequestEvent.academicPeriod ? request.accommodationRequestEvent.academicPeriod : null;
|
|
26
|
+
let validThrough = request && request.accommodationRequestEvent && request.accommodationRequestEvent.validThrough ? request.accommodationRequestEvent.validThrough : null;
|
|
27
|
+
// get original student
|
|
28
|
+
const student = await context.model('Student').where('id').equal(request.student.id || request.student).
|
|
29
|
+
expand({
|
|
30
|
+
name: 'department',
|
|
31
|
+
options: {
|
|
32
|
+
$expand: 'currentYear,currentPeriod'
|
|
33
|
+
}
|
|
34
|
+
}).getItem();
|
|
35
|
+
if (student == null) {
|
|
36
|
+
throw new Error(`Student with id ${request.student.id || request.student} not found.`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (academicYear == null) {
|
|
40
|
+
// get student current academic year
|
|
41
|
+
|
|
42
|
+
academicYear = student && student.department && student.department.currentYear ? student.department.currentYear : null;
|
|
43
|
+
// await event.model.where('id').equal(event.target.id).select('student/department/currentYear').value();
|
|
44
|
+
}
|
|
45
|
+
if (academicPeriod == null) {
|
|
46
|
+
// get student current academic period
|
|
47
|
+
academicPeriod = student && student.department && student.department.currentPeriod ? student.department.currentPeriod : null;
|
|
48
|
+
}
|
|
49
|
+
let cardActionStatus = {};
|
|
50
|
+
if (event.target.accommodation && (Object.keys(event.target.accommodation).length === 0 || event.target.accommodation === '')) {
|
|
51
|
+
// get accommodation valid through date
|
|
52
|
+
cardActionStatus = { alternateName: 'PotentialActionStatus' };
|
|
53
|
+
|
|
54
|
+
} else {
|
|
55
|
+
cardActionStatus = { alternateName: 'CompletedActionStatus' };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const StudentAccommodationCard = {
|
|
59
|
+
action: event.target.id,
|
|
60
|
+
student: student,
|
|
61
|
+
academicYear: academicYear,
|
|
62
|
+
academicPeriod: academicPeriod,
|
|
63
|
+
validFrom: now,
|
|
64
|
+
validThrough: validThrough,
|
|
65
|
+
cardStatus: cardActionStatus,
|
|
66
|
+
accommodationRoom: event.target.room || null
|
|
67
|
+
};
|
|
68
|
+
// save student accommodation card
|
|
69
|
+
await context.model('StudentAccommodationCard').silent().save(StudentAccommodationCard);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @param {DataEventArgs} event
|
|
75
|
+
* @param {Function} callback
|
|
76
|
+
*/
|
|
77
|
+
function beforeSave(event, callback) {
|
|
78
|
+
return beforeSaveAsync(event).then(() => {
|
|
79
|
+
return callback();
|
|
80
|
+
}).catch((err) => {
|
|
81
|
+
return callback(err);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @param {DataEventArgs} event
|
|
87
|
+
* @param {Function} callback
|
|
88
|
+
*/
|
|
89
|
+
function afterSave(event, callback) {
|
|
90
|
+
return afterSaveAsync(event).then(() => {
|
|
91
|
+
return callback();
|
|
92
|
+
}).catch((err) => {
|
|
93
|
+
return callback(err);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=OnActionCompleteListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnActionCompleteListener.js","names":["beforeSaveAsync","event","context","model","afterSaveAsync","request","where","equal","target","id","expand","name","options","$expand","getItem","actionStatus","alternateName","now","Date","academicYear","accommodationRequestEvent","academicPeriod","validThrough","student","Error","department","currentYear","currentPeriod","cardActionStatus","accommodation","Object","keys","length","StudentAccommodationCard","action","validFrom","cardStatus","accommodationRoom","room","silent","save","beforeSave","callback","then","catch","err","afterSave"],"sources":["../../src/listeners/OnActionCompleteListener.js"],"sourcesContent":["// eslint-disable-next-line no-unused-vars\nasync function beforeSaveAsync(event) {\n const context = event.model.context;\n}\n\nasync function afterSaveAsync(event) {\n // get context\n // eslint-disable-next-line no-unused-vars\n const context = event.model.context;\n // get current status\n const request = await event.model.where('id').equal(event.target.id)\n .expand({\n name: 'accommodationRequestEvent',\n options: {\n $expand: 'academicYear,academicPeriod',\n }\n }).getItem();\n const actionStatus = request && request.actionStatus && request.actionStatus.alternateName ? request.actionStatus.alternateName : null;\n if ((actionStatus || actionStatus.alternateName) === 'CompletedActionStatus') {\n // set student accommodation card\n const now = new Date();\n\n // const now = new Date(); \n let academicYear = request && request.accommodationRequestEvent && request.accommodationRequestEvent.academicYear ? request.accommodationRequestEvent.academicYear : null;\n let academicPeriod = request && request.accommodationRequestEvent && request.accommodationRequestEvent.academicPeriod ? request.accommodationRequestEvent.academicPeriod : null;\n let validThrough = request && request.accommodationRequestEvent && request.accommodationRequestEvent.validThrough ? request.accommodationRequestEvent.validThrough : null;\n // get original student\n const student = await context.model('Student').where('id').equal(request.student.id || request.student)\n .expand({\n name: 'department',\n options: {\n $expand: 'currentYear,currentPeriod',\n }\n }).getItem();\n if (student == null) {\n throw new Error(`Student with id ${request.student.id || request.student} not found.`);\n }\n\n if (academicYear == null) {\n // get student current academic year\n\n academicYear = student && student.department && student.department.currentYear ? student.department.currentYear : null;\n // await event.model.where('id').equal(event.target.id).select('student/department/currentYear').value();\n }\n if (academicPeriod == null) {\n // get student current academic period\n academicPeriod = student && student.department && student.department.currentPeriod ? student.department.currentPeriod : null;\n }\n let cardActionStatus = {};\n if (event.target.accommodation && (Object.keys(event.target.accommodation).length === 0 || event.target.accommodation === '')) {\n // get accommodation valid through date\n cardActionStatus = { alternateName: 'PotentialActionStatus' }\n\n } else {\n cardActionStatus = { alternateName: 'CompletedActionStatus' }\n }\n\n const StudentAccommodationCard = {\n action: event.target.id,\n student: student,\n academicYear: academicYear,\n academicPeriod: academicPeriod,\n validFrom: now,\n validThrough: validThrough,\n cardStatus: cardActionStatus,\n accommodationRoom: event.target.room || null\n };\n // save student accommodation card \n await context.model('StudentAccommodationCard').silent().save(StudentAccommodationCard);\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":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.afterSave = afterSave;exports.beforeSave = beforeSave;var _data = require("@themost/data");
|
|
2
|
+
var _common = require("@themost/common");
|
|
3
|
+
var _util = require("util");
|
|
4
|
+
|
|
5
|
+
async function beforeSaveAsync(event) {
|
|
6
|
+
//
|
|
7
|
+
if (event.state !== 2) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const context = event.model.context;
|
|
12
|
+
|
|
13
|
+
const previous = event.previous;
|
|
14
|
+
if (previous == null) {
|
|
15
|
+
throw new _common.DataError('E_PREVIOUS', 'The previous state of the object cannot be determined');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const target = event.target;
|
|
19
|
+
|
|
20
|
+
if (target.active === false && previous.active === true) {
|
|
21
|
+
// get validator listener
|
|
22
|
+
const validator = new _data.DataPermissionEventListener();
|
|
23
|
+
// noinspection JSUnresolvedFunction
|
|
24
|
+
const validateAsync = (0, _util.promisify)(validator.validate).
|
|
25
|
+
bind(validator);
|
|
26
|
+
// validate StudentAccommodationCard/Cancel execute permission
|
|
27
|
+
const validateEvent = {
|
|
28
|
+
model: context.model('StudentAccommodationCard'),
|
|
29
|
+
privilege: 'StudentAccommodationCard/Cancel',
|
|
30
|
+
mask: _data.PermissionMask.Execute,
|
|
31
|
+
target: event.target && event.target.id,
|
|
32
|
+
throwError: true
|
|
33
|
+
};
|
|
34
|
+
await validateAsync(validateEvent);
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function afterSaveAsync(event) {
|
|
40
|
+
if (event.state !== 2) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const context = event.model.context;
|
|
45
|
+
|
|
46
|
+
const previous = event.previous;
|
|
47
|
+
if (previous == null) {
|
|
48
|
+
throw new _common.DataError('E_PREVIOUS', 'The previous state of the object cannot be determined');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const target = event.target;
|
|
52
|
+
|
|
53
|
+
if (target.active === false && previous.active === true) {
|
|
54
|
+
//save
|
|
55
|
+
await context.model('CancelAccommodationCardAction').save({
|
|
56
|
+
accommodationCard: target.id,
|
|
57
|
+
actionStatus: {
|
|
58
|
+
alternateName: 'CompletedActionStatus'
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @param {DataEventArgs} event
|
|
66
|
+
* @param {Function} callback
|
|
67
|
+
*/
|
|
68
|
+
function beforeSave(event, callback) {
|
|
69
|
+
return beforeSaveAsync(event).then(() => {
|
|
70
|
+
return callback();
|
|
71
|
+
}).catch((err) => {
|
|
72
|
+
return callback(err);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @param {DataEventArgs} event
|
|
78
|
+
* @param {Function} callback
|
|
79
|
+
*/
|
|
80
|
+
function afterSave(event, callback) {
|
|
81
|
+
return afterSaveAsync(event).then(() => {
|
|
82
|
+
return callback();
|
|
83
|
+
}).catch((err) => {
|
|
84
|
+
return callback(err);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=OnCancelAccommodationCardListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnCancelAccommodationCardListener.js","names":["_data","require","_common","_util","beforeSaveAsync","event","state","context","model","previous","DataError","target","active","validator","DataPermissionEventListener","validateAsync","promisify","validate","bind","validateEvent","privilege","mask","PermissionMask","Execute","id","throwError","afterSaveAsync","save","accommodationCard","actionStatus","alternateName","beforeSave","callback","then","catch","err","afterSave"],"sources":["../../src/listeners/OnCancelAccommodationCardListener.js"],"sourcesContent":["import { DataPermissionEventListener, PermissionMask } from \"@themost/data\";\nimport { DataError } from '@themost/common';\nimport { promisify } from \"util\";\n\nasync function beforeSaveAsync(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 const target = event.target;\n\n if (target.active === false && previous.active === true) {\n // get validator listener\n const validator = new DataPermissionEventListener();\n // noinspection JSUnresolvedFunction\n const validateAsync = promisify(validator.validate)\n .bind(validator);\n // validate StudentAccommodationCard/Cancel execute permission\n const validateEvent = {\n model: context.model('StudentAccommodationCard'),\n privilege: 'StudentAccommodationCard/Cancel',\n mask: PermissionMask.Execute,\n target: event.target && event.target.id,\n throwError: true\n }\n await validateAsync(validateEvent);\n\n }\n}\n\nasync function afterSaveAsync(event) {\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 const target = event.target;\n\n if (target.active === false && previous.active === true) {\n //save \n await context.model('CancelAccommodationCardAction').save({\n accommodationCard: target.id,\n actionStatus: {\n alternateName: 'CompletedActionStatus'\n }\n })\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,KAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;;AAEA,eAAeG,eAAeA,CAACC,KAAK,EAAE;EAClC;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;;EAEA,MAAMC,MAAM,GAAGN,KAAK,CAACM,MAAM;;EAE3B,IAAIA,MAAM,CAACC,MAAM,KAAK,KAAK,IAAIH,QAAQ,CAACG,MAAM,KAAK,IAAI,EAAE;IACrD;IACA,MAAMC,SAAS,GAAG,IAAIC,iCAA2B,EAAE;IACnD;IACA,MAAMC,aAAa,GAAG,IAAAC,eAAS,EAACH,SAAS,CAACI,QAAQ,CAAC;IAC9CC,IAAI,CAACL,SAAS,CAAC;IACpB;IACA,MAAMM,aAAa,GAAG;MAClBX,KAAK,EAAED,OAAO,CAACC,KAAK,CAAC,0BAA0B,CAAC;MAChDY,SAAS,EAAE,iCAAiC;MAC5CC,IAAI,EAAEC,oBAAc,CAACC,OAAO;MAC5BZ,MAAM,EAAEN,KAAK,CAACM,MAAM,IAAIN,KAAK,CAACM,MAAM,CAACa,EAAE;MACvCC,UAAU,EAAE;IAChB,CAAC;IACD,MAAMV,aAAa,CAACI,aAAa,CAAC;;EAEtC;AACJ;;AAEA,eAAeO,cAAcA,CAACrB,KAAK,EAAE;EACjC,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;;EAEA,MAAMC,MAAM,GAAGN,KAAK,CAACM,MAAM;;EAE3B,IAAIA,MAAM,CAACC,MAAM,KAAK,KAAK,IAAIH,QAAQ,CAACG,MAAM,KAAK,IAAI,EAAE;IACrD;IACA,MAAML,OAAO,CAACC,KAAK,CAAC,+BAA+B,CAAC,CAACmB,IAAI,CAAC;MACtDC,iBAAiB,EAAEjB,MAAM,CAACa,EAAE;MAC5BK,YAAY,EAAE;QACVC,aAAa,EAAE;MACnB;IACJ,CAAC,CAAC;EACN;AACJ;;AAEA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAAC1B,KAAK,EAAE2B,QAAQ,EAAE;EACxC,OAAO5B,eAAe,CAACC,KAAK,CAAC,CAAC4B,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,CAAC/B,KAAK,EAAE2B,QAAQ,EAAE;EACvC,OAAON,cAAc,CAACrB,KAAK,CAAC,CAAC4B,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,87 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.afterSave = afterSave;exports.beforeSave = beforeSave;var _data = require("@themost/data");
|
|
2
|
+
var _common = require("@themost/common");
|
|
3
|
+
var _util = require("util");
|
|
4
|
+
|
|
5
|
+
async function beforeSaveAsync(event) {
|
|
6
|
+
//
|
|
7
|
+
if (event.state !== 2) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const context = event.model.context;
|
|
12
|
+
|
|
13
|
+
const previous = event.previous;
|
|
14
|
+
if (previous == null) {
|
|
15
|
+
throw new _common.DataError('E_PREVIOUS', 'The previous state of the object cannot be determined');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const target = event.target;
|
|
19
|
+
|
|
20
|
+
if (target.active === false && previous.active === true) {
|
|
21
|
+
// get validator listener
|
|
22
|
+
const validator = new _data.DataPermissionEventListener();
|
|
23
|
+
// noinspection JSUnresolvedFunction
|
|
24
|
+
const validateAsync = (0, _util.promisify)(validator.validate).
|
|
25
|
+
bind(validator);
|
|
26
|
+
// validate StudentAccommodationCard/Cancel execute permission
|
|
27
|
+
const validateEvent = {
|
|
28
|
+
model: context.model('StudentAccommodationCard'),
|
|
29
|
+
privilege: 'StudentAccommodationCard/Cancel',
|
|
30
|
+
mask: _data.PermissionMask.Execute,
|
|
31
|
+
target: event.target && event.target.id,
|
|
32
|
+
throwError: true
|
|
33
|
+
};
|
|
34
|
+
await validateAsync(validateEvent);
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function afterSaveAsync(event) {
|
|
40
|
+
if (event.state !== 2) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const context = event.model.context;
|
|
45
|
+
|
|
46
|
+
const previous = event.previous;
|
|
47
|
+
if (previous == null) {
|
|
48
|
+
throw new _common.DataError('E_PREVIOUS', 'The previous state of the object cannot be determined');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const target = event.target;
|
|
52
|
+
|
|
53
|
+
if (target.active === false && previous.active === true) {
|
|
54
|
+
//save
|
|
55
|
+
await context.model('CancelAccommodationCardAction').save({
|
|
56
|
+
accommodationCard: target.id,
|
|
57
|
+
actionStatus: {
|
|
58
|
+
alternateName: 'CompletedActionStatus'
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @param {DataEventArgs} event
|
|
66
|
+
* @param {Function} callback
|
|
67
|
+
*/
|
|
68
|
+
function beforeSave(event, callback) {
|
|
69
|
+
return beforeSaveAsync(event).then(() => {
|
|
70
|
+
return callback();
|
|
71
|
+
}).catch((err) => {
|
|
72
|
+
return callback(err);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @param {DataEventArgs} event
|
|
78
|
+
* @param {Function} callback
|
|
79
|
+
*/
|
|
80
|
+
function afterSave(event, callback) {
|
|
81
|
+
return afterSaveAsync(event).then(() => {
|
|
82
|
+
return callback();
|
|
83
|
+
}).catch((err) => {
|
|
84
|
+
return callback(err);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=OnReactivateAccommodationCardListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnReactivateAccommodationCardListener.js","names":["_data","require","_common","_util","beforeSaveAsync","event","state","context","model","previous","DataError","target","active","validator","DataPermissionEventListener","validateAsync","promisify","validate","bind","validateEvent","privilege","mask","PermissionMask","Execute","id","throwError","afterSaveAsync","save","accommodationCard","actionStatus","alternateName","beforeSave","callback","then","catch","err","afterSave"],"sources":["../../src/listeners/OnReactivateAccommodationCardListener.js"],"sourcesContent":["import { DataPermissionEventListener, PermissionMask } from \"@themost/data\";\nimport { DataError } from '@themost/common';\nimport { promisify } from \"util\";\n\nasync function beforeSaveAsync(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 const target = event.target;\n\n if (target.active === false && previous.active === true) {\n // get validator listener\n const validator = new DataPermissionEventListener();\n // noinspection JSUnresolvedFunction\n const validateAsync = promisify(validator.validate)\n .bind(validator);\n // validate StudentAccommodationCard/Cancel execute permission\n const validateEvent = {\n model: context.model('StudentAccommodationCard'),\n privilege: 'StudentAccommodationCard/Cancel',\n mask: PermissionMask.Execute,\n target: event.target && event.target.id,\n throwError: true\n }\n await validateAsync(validateEvent);\n\n }\n}\n\nasync function afterSaveAsync(event) {\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 const target = event.target;\n\n if (target.active === false && previous.active === true) {\n //save \n await context.model('CancelAccommodationCardAction').save({\n accommodationCard: target.id,\n actionStatus: {\n alternateName: 'CompletedActionStatus'\n }\n })\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,KAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;;AAEA,eAAeG,eAAeA,CAACC,KAAK,EAAE;EAClC;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;;EAEA,MAAMC,MAAM,GAAGN,KAAK,CAACM,MAAM;;EAE3B,IAAIA,MAAM,CAACC,MAAM,KAAK,KAAK,IAAIH,QAAQ,CAACG,MAAM,KAAK,IAAI,EAAE;IACrD;IACA,MAAMC,SAAS,GAAG,IAAIC,iCAA2B,EAAE;IACnD;IACA,MAAMC,aAAa,GAAG,IAAAC,eAAS,EAACH,SAAS,CAACI,QAAQ,CAAC;IAC9CC,IAAI,CAACL,SAAS,CAAC;IACpB;IACA,MAAMM,aAAa,GAAG;MAClBX,KAAK,EAAED,OAAO,CAACC,KAAK,CAAC,0BAA0B,CAAC;MAChDY,SAAS,EAAE,iCAAiC;MAC5CC,IAAI,EAAEC,oBAAc,CAACC,OAAO;MAC5BZ,MAAM,EAAEN,KAAK,CAACM,MAAM,IAAIN,KAAK,CAACM,MAAM,CAACa,EAAE;MACvCC,UAAU,EAAE;IAChB,CAAC;IACD,MAAMV,aAAa,CAACI,aAAa,CAAC;;EAEtC;AACJ;;AAEA,eAAeO,cAAcA,CAACrB,KAAK,EAAE;EACjC,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;;EAEA,MAAMC,MAAM,GAAGN,KAAK,CAACM,MAAM;;EAE3B,IAAIA,MAAM,CAACC,MAAM,KAAK,KAAK,IAAIH,QAAQ,CAACG,MAAM,KAAK,IAAI,EAAE;IACrD;IACA,MAAML,OAAO,CAACC,KAAK,CAAC,+BAA+B,CAAC,CAACmB,IAAI,CAAC;MACtDC,iBAAiB,EAAEjB,MAAM,CAACa,EAAE;MAC5BK,YAAY,EAAE;QACVC,aAAa,EAAE;MACnB;IACJ,CAAC,CAAC;EACN;AACJ;;AAEA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAAC1B,KAAK,EAAE2B,QAAQ,EAAE;EACxC,OAAO5B,eAAe,CAACC,KAAK,CAAC,CAAC4B,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,CAAC/B,KAAK,EAAE2B,QAAQ,EAAE;EACvC,OAAON,cAAc,CAACrB,KAAK,CAAC,CAAC4B,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,98 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.afterSave = afterSave;var _mailer = require("@themost/mailer");
|
|
2
|
+
var _data = require("@themost/data");
|
|
3
|
+
var _common = require("@themost/common");
|
|
4
|
+
/**
|
|
5
|
+
* @param {DataEventArgs} event
|
|
6
|
+
*/
|
|
7
|
+
async function afterSaveAsync(event) {
|
|
8
|
+
if (event.state === 2) {
|
|
9
|
+
const context = event.model.context;
|
|
10
|
+
/**
|
|
11
|
+
* @type {import('@themost/mailer').MailerHelper}
|
|
12
|
+
*/
|
|
13
|
+
const mailer = (0, _mailer.getMailer)(context);
|
|
14
|
+
|
|
15
|
+
const actionStatus = await context.model('AccommodationRequestAction').
|
|
16
|
+
where('id').equal(event.target.id).select('actionStatus/alternateName').value();
|
|
17
|
+
let previousStatus = 'UnknownActionStatus';
|
|
18
|
+
if (event.previous) {
|
|
19
|
+
previousStatus = event.previous.actionStatus.alternateName;
|
|
20
|
+
} else {
|
|
21
|
+
throw new _data.DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'AccommodationRequestAction');
|
|
22
|
+
}
|
|
23
|
+
if (actionStatus === previousStatus) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// get mail template
|
|
27
|
+
const mailTemplate = await context.model('MailConfiguration').where('target').equal('AccommodationRequestActionStatusChange').silent().getItem();
|
|
28
|
+
if (mailTemplate == null) {
|
|
29
|
+
//
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// get parent action data
|
|
33
|
+
const item = await context.model('AccommodationRequestAction').
|
|
34
|
+
where('id').equal(event.target.id).
|
|
35
|
+
expand({
|
|
36
|
+
name: 'student',
|
|
37
|
+
options: {
|
|
38
|
+
$expand: 'person'
|
|
39
|
+
}
|
|
40
|
+
}, 'owner').
|
|
41
|
+
silent().getItem();
|
|
42
|
+
|
|
43
|
+
const application = await context.model('WebApplication').
|
|
44
|
+
where('alternateName').equal('students').
|
|
45
|
+
and('applicationSuite').equal('universis').
|
|
46
|
+
silent().getItem();
|
|
47
|
+
const config = await context.model('StudentRequestConfiguration').
|
|
48
|
+
where('additionalType').equal(event.model.name).
|
|
49
|
+
and('inLanguage').equal(event.target.inLanguage || context.locale).
|
|
50
|
+
silent().getItem();
|
|
51
|
+
|
|
52
|
+
if (item && application && config) {
|
|
53
|
+
|
|
54
|
+
const email = item.student.person.email;
|
|
55
|
+
|
|
56
|
+
if (email == null || typeof email !== 'string') {
|
|
57
|
+
_common.TraceUtils.warn(`Cannot send email for ${item.student.person.familyName} ${item.student.person.givenName}. Student [${item.student.id}] email does not exist.`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
await new Promise((resolve) => {
|
|
61
|
+
mailer.template(mailTemplate.template).
|
|
62
|
+
subject(mailTemplate.subject).
|
|
63
|
+
bcc(mailTemplate.bcc || '').
|
|
64
|
+
to(email).
|
|
65
|
+
send({
|
|
66
|
+
model: item,
|
|
67
|
+
application: application,
|
|
68
|
+
configuration: config
|
|
69
|
+
}, (err) => {
|
|
70
|
+
if (err) {
|
|
71
|
+
try {
|
|
72
|
+
_common.TraceUtils.error('An error occurred while trying to send an email notification after status change.');
|
|
73
|
+
_common.TraceUtils.error(`Student=${item.student.id}, template=${mailTemplate.template}`);
|
|
74
|
+
_common.TraceUtils.error(err);
|
|
75
|
+
} catch (err1) {
|
|
76
|
+
|
|
77
|
+
// do nothing
|
|
78
|
+
}return resolve();
|
|
79
|
+
}
|
|
80
|
+
return resolve();
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* @param {DataEventArgs} event
|
|
89
|
+
* @param {Function} callback
|
|
90
|
+
*/
|
|
91
|
+
function afterSave(event, callback) {
|
|
92
|
+
return afterSaveAsync(event).then(() => {
|
|
93
|
+
return callback();
|
|
94
|
+
}).catch((err) => {
|
|
95
|
+
return callback(err);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=SendEmailAfterActionStatusChangeListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SendEmailAfterActionStatusChangeListener.js","names":["_mailer","require","_data","_common","afterSaveAsync","event","state","context","model","mailer","getMailer","actionStatus","where","equal","target","id","select","value","previousStatus","previous","alternateName","DataError","mailTemplate","silent","getItem","item","expand","name","options","$expand","application","and","config","inLanguage","locale","email","student","person","TraceUtils","warn","familyName","givenName","Promise","resolve","template","subject","bcc","to","send","configuration","err","error","err1","afterSave","callback","then","catch"],"sources":["../../src/listeners/SendEmailAfterActionStatusChangeListener.js"],"sourcesContent":["import { getMailer } from '@themost/mailer';\nimport { DataError } from '@themost/data';\nimport { TraceUtils } from \"@themost/common\";\n/**\n * @param {DataEventArgs} event\n */\nasync function afterSaveAsync(event) {\n if (event.state === 2) {\n const context = event.model.context;\n /**\n * @type {import('@themost/mailer').MailerHelper}\n */\n const mailer = getMailer(context);\n\n const actionStatus = await context.model('AccommodationRequestAction')\n .where('id').equal(event.target.id).select('actionStatus/alternateName').value();\n let previousStatus = 'UnknownActionStatus';\n if (event.previous) {\n previousStatus = event.previous.actionStatus.alternateName;\n } else {\n throw new DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'AccommodationRequestAction');\n }\n if (actionStatus === previousStatus) {\n return;\n }\n // get mail template\n const mailTemplate = await context.model('MailConfiguration').where('target').equal('AccommodationRequestActionStatusChange').silent().getItem();\n if (mailTemplate == null) {\n //\n return;\n }\n // get parent action data\n const item = await context.model('AccommodationRequestAction')\n .where('id').equal(event.target.id)\n .expand({\n name: 'student',\n options: {\n $expand: 'person'\n }\n }, 'owner')\n .silent().getItem();\n\n const application = await context.model('WebApplication')\n .where('alternateName').equal('students')\n .and('applicationSuite').equal('universis')\n .silent().getItem();\n const config = await context.model('StudentRequestConfiguration')\n .where('additionalType').equal(event.model.name)\n .and('inLanguage').equal(event.target.inLanguage || context.locale)\n .silent().getItem();\n\n if (item && application && config) {\n \n const email = item.student.person.email;\n \n if (email == null || typeof email !== 'string') {\n TraceUtils.warn(`Cannot send email for ${item.student.person.familyName} ${item.student.person.givenName}. Student [${item.student.id}] email does not exist.`);\n return;\n }\n await new Promise((resolve) => {\n mailer.template(mailTemplate.template)\n .subject(mailTemplate.subject)\n .bcc(mailTemplate.bcc || '')\n .to(email)\n .send({\n model: item,\n application: application,\n configuration: config\n }, (err) => {\n if (err) {\n try {\n TraceUtils.error('An error occurred while trying to send an email notification after status change.');\n TraceUtils.error(`Student=${item.student.id}, template=${mailTemplate.template}`);\n TraceUtils.error(err);\n } catch (err1) {\n // do nothing\n }\n return resolve();\n }\n return resolve();\n })\n });\n\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":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.afterSave = afterSave;var _mailer = require("@themost/mailer");
|
|
2
|
+
var _data = require("@themost/data");
|
|
3
|
+
var _common = require("@themost/common");
|
|
4
|
+
/**
|
|
5
|
+
* @param {DataEventArgs} event
|
|
6
|
+
*/
|
|
7
|
+
async function afterSaveAsync(event) {
|
|
8
|
+
if (event.state === 2) {
|
|
9
|
+
const context = event.model.context;
|
|
10
|
+
/**
|
|
11
|
+
* @type {import('@themost/mailer').MailerHelper}
|
|
12
|
+
*/
|
|
13
|
+
const mailer = (0, _mailer.getMailer)(context);
|
|
14
|
+
|
|
15
|
+
const currentCardStatus = await context.
|
|
16
|
+
model('StudentDiningCard').
|
|
17
|
+
where('id').
|
|
18
|
+
equal(event.target.id).
|
|
19
|
+
select('active').
|
|
20
|
+
value();
|
|
21
|
+
let previousCardStatus = 'UnknownStatus';
|
|
22
|
+
if (event.previous) {
|
|
23
|
+
previousCardStatus = event.previous.active;
|
|
24
|
+
} else {
|
|
25
|
+
throw new _data.DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'StudentDiningCard');
|
|
26
|
+
}
|
|
27
|
+
if (currentCardStatus === previousCardStatus) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// get mail template
|
|
32
|
+
const mailTemplate = await context.
|
|
33
|
+
model('MailConfigurations').
|
|
34
|
+
where('target').
|
|
35
|
+
equal('DiningCardActiveStatusChange').
|
|
36
|
+
silent().
|
|
37
|
+
getItem();
|
|
38
|
+
if (mailTemplate == null) {
|
|
39
|
+
//
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//get parent action data
|
|
44
|
+
let item;
|
|
45
|
+
if (typeof event.target.action === 'object' && typeof event.target.action.id === 'number' && Number.isInteger(event.target.action.id) && event.target.action.id > 0) {
|
|
46
|
+
item = await context.
|
|
47
|
+
model('DiningRequestAction').
|
|
48
|
+
where('id').
|
|
49
|
+
equal(event.target.action.id).
|
|
50
|
+
expand({
|
|
51
|
+
name: 'student',
|
|
52
|
+
options: {
|
|
53
|
+
$expand: 'person'
|
|
54
|
+
}
|
|
55
|
+
}).
|
|
56
|
+
silent().
|
|
57
|
+
getItem();
|
|
58
|
+
|
|
59
|
+
} else if (typeof event.target.action === 'number' && Number.isInteger(event.target.action) && event.target.action > 0) {
|
|
60
|
+
item = await context.
|
|
61
|
+
model('DiningRequestAction').
|
|
62
|
+
where('id').
|
|
63
|
+
equal(event.target.action).
|
|
64
|
+
expand({
|
|
65
|
+
name: 'student',
|
|
66
|
+
options: {
|
|
67
|
+
$expand: 'person'
|
|
68
|
+
}
|
|
69
|
+
}).
|
|
70
|
+
silent().
|
|
71
|
+
getItem();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const application = await context.
|
|
75
|
+
model('WebApplication').
|
|
76
|
+
where('alternateName').
|
|
77
|
+
equal('students').
|
|
78
|
+
and('applicationSuite').
|
|
79
|
+
equal('universis').
|
|
80
|
+
silent().
|
|
81
|
+
getItem();
|
|
82
|
+
|
|
83
|
+
const config = await context.
|
|
84
|
+
model('StudentRequestConfiguration').
|
|
85
|
+
where('additionalType').
|
|
86
|
+
equal('DiningRequestAction').
|
|
87
|
+
and('inLanguage').
|
|
88
|
+
equal(event.target.inLanguage || context.locale).
|
|
89
|
+
silent().
|
|
90
|
+
getItem();
|
|
91
|
+
|
|
92
|
+
if (item && application && config) {
|
|
93
|
+
|
|
94
|
+
const email = item.student.person.email;
|
|
95
|
+
|
|
96
|
+
if (email == null || typeof email !== 'string') {
|
|
97
|
+
_common.TraceUtils.warn(`Cannot send email for ${item.student.person.familyName} ${item.student.person.givenName}. Student [${item.student.id}] email does not exist.`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
await new Promise((resolve) => {
|
|
101
|
+
mailer.template(mailTemplate.template).
|
|
102
|
+
subject(mailTemplate.subject).
|
|
103
|
+
bcc(mailTemplate.bcc || '').
|
|
104
|
+
to(email).
|
|
105
|
+
send({
|
|
106
|
+
model: item,
|
|
107
|
+
application: application,
|
|
108
|
+
configuration: config
|
|
109
|
+
}, (err) => {
|
|
110
|
+
if (err) {
|
|
111
|
+
try {
|
|
112
|
+
_common.TraceUtils.error('An error occurred while trying to send an email notification after status change.');
|
|
113
|
+
_common.TraceUtils.error(`Student=${item.student.id}, template=${mailTemplate.template}`);
|
|
114
|
+
_common.TraceUtils.error(err);
|
|
115
|
+
} catch (err1) {
|
|
116
|
+
|
|
117
|
+
// do nothing
|
|
118
|
+
}return resolve();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return resolve();
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* @param {DataEventArgs} event
|
|
130
|
+
* @param {Function} callback
|
|
131
|
+
*/
|
|
132
|
+
function afterSave(event, callback) {
|
|
133
|
+
return afterSaveAsync(event).then(() => {
|
|
134
|
+
return callback();
|
|
135
|
+
}).catch((err) => {
|
|
136
|
+
return callback(err);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=SendEmailAfterCardStatusChangeListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SendEmailAfterCardStatusChangeListener.js","names":["_mailer","require","_data","_common","afterSaveAsync","event","state","context","model","mailer","getMailer","currentCardStatus","where","equal","target","id","select","value","previousCardStatus","previous","active","DataError","mailTemplate","silent","getItem","item","action","Number","isInteger","expand","name","options","$expand","application","and","config","inLanguage","locale","email","student","person","TraceUtils","warn","familyName","givenName","Promise","resolve","template","subject","bcc","to","send","configuration","err","error","err1","afterSave","callback","then","catch"],"sources":["../../src/listeners/SendEmailAfterCardStatusChangeListener.js"],"sourcesContent":["import { getMailer } from '@themost/mailer';\nimport { DataError } from '@themost/data';\nimport { TraceUtils } from \"@themost/common\";\n/**\n * @param {DataEventArgs} event\n */\nasync function afterSaveAsync(event) {\n if (event.state === 2) {\n const context = event.model.context;\n /**\n * @type {import('@themost/mailer').MailerHelper}\n */\n const mailer = getMailer(context);\n\n const currentCardStatus = await context\n .model('StudentDiningCard')\n .where('id')\n .equal(event.target.id)\n .select('active')\n .value();\n let previousCardStatus = 'UnknownStatus';\n if (event.previous) {\n previousCardStatus = event.previous.active;\n } else {\n throw new DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'StudentDiningCard');\n }\n if (currentCardStatus === previousCardStatus) {\n return;\n }\n\n // get mail template\n const mailTemplate = await context\n .model('MailConfigurations')\n .where('target')\n .equal('DiningCardActiveStatusChange')\n .silent()\n .getItem();\n if (mailTemplate == null) {\n //\n return;\n }\n\n //get parent action data\n let item;\n if (typeof event.target.action === 'object' && typeof event.target.action.id === 'number' && Number.isInteger(event.target.action.id) && event.target.action.id > 0) {\n item = await context\n .model('DiningRequestAction')\n .where('id')\n .equal(event.target.action.id)\n .expand({\n name: 'student',\n options: {\n $expand: 'person'\n }\n })\n .silent()\n .getItem();\n\n } else if (typeof event.target.action === 'number' && Number.isInteger(event.target.action) && event.target.action > 0) {\n item = await context\n .model('DiningRequestAction')\n .where('id')\n .equal(event.target.action)\n .expand({\n name: 'student',\n options: {\n $expand: 'person'\n }\n })\n .silent()\n .getItem();\n }\n\n const application = await context\n .model('WebApplication')\n .where('alternateName')\n .equal('students')\n .and('applicationSuite')\n .equal('universis')\n .silent()\n .getItem();\n\n const config = await context\n .model('StudentRequestConfiguration')\n .where('additionalType')\n .equal('DiningRequestAction')\n .and('inLanguage')\n .equal(event.target.inLanguage || context.locale)\n .silent()\n .getItem();\n\n if (item && application && config) {\n\n const email = item.student.person.email;\n\n if (email == null || typeof email !== 'string') {\n TraceUtils.warn(`Cannot send email for ${item.student.person.familyName} ${item.student.person.givenName}. Student [${item.student.id}] email does not exist.`);\n return;\n }\n await new Promise((resolve) => {\n mailer.template(mailTemplate.template)\n .subject(mailTemplate.subject)\n .bcc(mailTemplate.bcc || '')\n .to(email)\n .send({\n model: item,\n application: application,\n configuration: config\n }, (err) => {\n if (err) {\n try {\n TraceUtils.error('An error occurred while trying to send an email notification after status change.');\n TraceUtils.error(`Student=${item.student.id}, template=${mailTemplate.template}`);\n TraceUtils.error(err);\n } catch (err1) {\n // do nothing\n }\n return resolve();\n }\n\n return resolve();\n })\n });\n\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":"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"}
|