@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.
Files changed (134) hide show
  1. package/.gitlab-ci.yml +23 -0
  2. package/LICENSE +163 -0
  3. package/README.md +3 -0
  4. package/dist/AccommodationSchemaLoader.js +35 -0
  5. package/dist/AccommodationSchemaLoader.js.map +1 -0
  6. package/dist/AccommodationService.js +68 -0
  7. package/dist/AccommodationService.js.map +1 -0
  8. package/dist/DepartmentReplacer.js +54 -0
  9. package/dist/DepartmentReplacer.js.map +1 -0
  10. package/dist/StudentReplacer.js +75 -0
  11. package/dist/StudentReplacer.js.map +1 -0
  12. package/dist/config/models/Accommodation.json +96 -0
  13. package/dist/config/models/AccommodationCardEffectiveStatusType.json +107 -0
  14. package/dist/config/models/AccommodationCardEffectiveStatusTypeLocale.json +85 -0
  15. package/dist/config/models/AccommodationChildFinancialAttribute.json +46 -0
  16. package/dist/config/models/AccommodationGuardianFinancialAttribute.json +46 -0
  17. package/dist/config/models/AccommodationInscriptionModeTag.json +100 -0
  18. package/dist/config/models/AccommodationRequestAction.json +500 -0
  19. package/dist/config/models/AccommodationRequestActionMessage.json +46 -0
  20. package/dist/config/models/AccommodationRequestActionReview.json +31 -0
  21. package/dist/config/models/AccommodationRequestAttachmentConfiguration.json +72 -0
  22. package/dist/config/models/AccommodationRequestCategory.json +50 -0
  23. package/dist/config/models/AccommodationRequestEffectiveStatusType.json +212 -0
  24. package/dist/config/models/AccommodationRequestEffectiveStatusTypeLocale.json +85 -0
  25. package/dist/config/models/AccommodationRequestEvent.json +117 -0
  26. package/dist/config/models/AccommodationRequestFinancialAttribute.json +53 -0
  27. package/dist/config/models/AccommodationRoom.json +151 -0
  28. package/dist/config/models/AccommodationSiblingFinancialAttribute.json +57 -0
  29. package/dist/config/models/CancelAccommodationCardAction.json +32 -0
  30. package/dist/config/models/GuardianType.json +78 -0
  31. package/dist/config/models/Review.json +50 -0
  32. package/dist/config/models/RoomType.json +320 -0
  33. package/dist/config/models/RoomTypeLocale.json +86 -0
  34. package/dist/config/models/StudentAccommodationCard.json +158 -0
  35. package/dist/config/models/TestAction.json +50 -0
  36. package/dist/config/scope.access.js +148 -0
  37. package/dist/config/scope.access.js.map +1 -0
  38. package/dist/index.d.ts +2 -0
  39. package/dist/index.js +3 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/listeners/AddDefaultAttachmentConfiguration.js +44 -0
  42. package/dist/listeners/AddDefaultAttachmentConfiguration.js.map +1 -0
  43. package/dist/listeners/DefaultAttachmentConfigurations.json +277 -0
  44. package/dist/listeners/DefaultAttachmentTypes.json +523 -0
  45. package/dist/listeners/GenerateRequestNumberListener.js +87 -0
  46. package/dist/listeners/GenerateRequestNumberListener.js.map +1 -0
  47. package/dist/listeners/OnActionCompleteListener.js +96 -0
  48. package/dist/listeners/OnActionCompleteListener.js.map +1 -0
  49. package/dist/listeners/OnCancelAccommodationCardListener.js +87 -0
  50. package/dist/listeners/OnCancelAccommodationCardListener.js.map +1 -0
  51. package/dist/listeners/OnReactivateAccommodationCardListener.js +87 -0
  52. package/dist/listeners/OnReactivateAccommodationCardListener.js.map +1 -0
  53. package/dist/listeners/SendEmailAfterActionStatusChangeListener.js +98 -0
  54. package/dist/listeners/SendEmailAfterActionStatusChangeListener.js.map +1 -0
  55. package/dist/listeners/SendEmailAfterCardStatusChangeListener.js +139 -0
  56. package/dist/listeners/SendEmailAfterCardStatusChangeListener.js.map +1 -0
  57. package/dist/listeners/StudentAccommodationCardSaveListener.js +90 -0
  58. package/dist/listeners/StudentAccommodationCardSaveListener.js.map +1 -0
  59. package/dist/listeners/UpdateStudentAccommodationCardListener.js +70 -0
  60. package/dist/listeners/UpdateStudentAccommodationCardListener.js.map +1 -0
  61. package/dist/listeners/ValidateActionListener.js +348 -0
  62. package/dist/listeners/ValidateActionListener.js.map +1 -0
  63. package/dist/listeners/data-localization.js +209 -0
  64. package/dist/listeners/data-localization.js.map +1 -0
  65. package/dist/listeners/lookup-cache-listener.js +90 -0
  66. package/dist/listeners/lookup-cache-listener.js.map +1 -0
  67. package/dist/models/Accommodation.js +53 -0
  68. package/dist/models/Accommodation.js.map +1 -0
  69. package/dist/models/AccommodationRequestAction.js +214 -0
  70. package/dist/models/AccommodationRequestAction.js.map +1 -0
  71. package/dist/models/AccommodationRequestEvent.js +277 -0
  72. package/dist/models/AccommodationRequestEvent.js.map +1 -0
  73. package/dist/models/EnableAttachmentModel.js +210 -0
  74. package/dist/models/EnableAttachmentModel.js.map +1 -0
  75. package/dist/models/StudentAccommodationCard.js +93 -0
  76. package/dist/models/StudentAccommodationCard.js.map +1 -0
  77. package/dist/models/TestAction.d.ts +5 -0
  78. package/dist/models/TestAction.js +5 -0
  79. package/dist/models/TestAction.js.map +1 -0
  80. package/dist/templates/mail-after-dining-request-status-change/html.ejs +27 -0
  81. package/package.json +57 -0
  82. package/src/AccommodationSchemaLoader.js +35 -0
  83. package/src/AccommodationService.js +67 -0
  84. package/src/DepartmentReplacer.js +53 -0
  85. package/src/StudentReplacer.js +74 -0
  86. package/src/config/models/Accommodation.json +96 -0
  87. package/src/config/models/AccommodationCardEffectiveStatusType.json +107 -0
  88. package/src/config/models/AccommodationCardEffectiveStatusTypeLocale.json +85 -0
  89. package/src/config/models/AccommodationChildFinancialAttribute.json +46 -0
  90. package/src/config/models/AccommodationGuardianFinancialAttribute.json +46 -0
  91. package/src/config/models/AccommodationInscriptionModeTag.json +100 -0
  92. package/src/config/models/AccommodationRequestAction.json +500 -0
  93. package/src/config/models/AccommodationRequestActionMessage.json +46 -0
  94. package/src/config/models/AccommodationRequestActionReview.json +31 -0
  95. package/src/config/models/AccommodationRequestAttachmentConfiguration.json +72 -0
  96. package/src/config/models/AccommodationRequestCategory.json +50 -0
  97. package/src/config/models/AccommodationRequestEffectiveStatusType.json +212 -0
  98. package/src/config/models/AccommodationRequestEffectiveStatusTypeLocale.json +85 -0
  99. package/src/config/models/AccommodationRequestEvent.json +117 -0
  100. package/src/config/models/AccommodationRequestFinancialAttribute.json +53 -0
  101. package/src/config/models/AccommodationRoom.json +151 -0
  102. package/src/config/models/AccommodationSiblingFinancialAttribute.json +57 -0
  103. package/src/config/models/CancelAccommodationCardAction.json +32 -0
  104. package/src/config/models/GuardianType.json +78 -0
  105. package/src/config/models/Review.json +50 -0
  106. package/src/config/models/RoomType.json +320 -0
  107. package/src/config/models/RoomTypeLocale.json +86 -0
  108. package/src/config/models/StudentAccommodationCard.json +158 -0
  109. package/src/config/models/TestAction.json +50 -0
  110. package/src/config/scope.access.js +148 -0
  111. package/src/index.d.ts +2 -0
  112. package/src/index.js +2 -0
  113. package/src/listeners/AddDefaultAttachmentConfiguration.js +43 -0
  114. package/src/listeners/DefaultAttachmentConfigurations.json +277 -0
  115. package/src/listeners/DefaultAttachmentTypes.json +523 -0
  116. package/src/listeners/GenerateRequestNumberListener.js +86 -0
  117. package/src/listeners/OnActionCompleteListener.js +95 -0
  118. package/src/listeners/OnCancelAccommodationCardListener.js +86 -0
  119. package/src/listeners/OnReactivateAccommodationCardListener.js +86 -0
  120. package/src/listeners/SendEmailAfterActionStatusChangeListener.js +97 -0
  121. package/src/listeners/SendEmailAfterCardStatusChangeListener.js +138 -0
  122. package/src/listeners/StudentAccommodationCardSaveListener.js +89 -0
  123. package/src/listeners/UpdateStudentAccommodationCardListener.js +69 -0
  124. package/src/listeners/ValidateActionListener.js +347 -0
  125. package/src/listeners/data-localization.js +214 -0
  126. package/src/listeners/lookup-cache-listener.js +89 -0
  127. package/src/models/Accommodation.js +52 -0
  128. package/src/models/AccommodationRequestAction.js +195 -0
  129. package/src/models/AccommodationRequestEvent.js +276 -0
  130. package/src/models/EnableAttachmentModel.js +209 -0
  131. package/src/models/StudentAccommodationCard.js +92 -0
  132. package/src/models/TestAction.d.ts +5 -0
  133. package/src/models/TestAction.js +10 -0
  134. 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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"}