@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,523 @@
1
+ [
2
+ {
3
+ "alternateName": "schorlashipCertificate",
4
+ "physical": false,
5
+ "additionalType": "AttachmentType",
6
+ "description": "Βεβαίωση χορήγησης υποτροφίας τρέχοντος ακαδημαϊκού έτους από ΥΠΑΙΘ",
7
+ "name": "Βεβαίωση υποτροφίας",
8
+ "locales": [
9
+ {
10
+ "inLanguage": "en",
11
+ "name": "schorlashipCertificate"
12
+ }
13
+ ]
14
+ },
15
+ {
16
+ "alternateName": "disabilityCertificate",
17
+ "physical": false,
18
+ "additionalType": "AttachmentType",
19
+ "description": "Βεβαίωση Υγειονομικής Επιτροπής για Αναπηρία",
20
+ "name": "Βεβαίωση Υγειονομικής Επιτροπής για Αναπηρία",
21
+ "locales": [
22
+ {
23
+ "inLanguage": "en",
24
+ "name": "disabilityCertificate"
25
+ }
26
+ ]
27
+ },
28
+ {
29
+ "alternateName": "familyDeclaration",
30
+ "physical": false,
31
+ "additionalType": "AttachmentType",
32
+ "description": "Πιστοποιητικό οικογενειακής κατάστασης",
33
+ "name": "Πιστοποιητικό οικογενειακής κατάστασης",
34
+ "locales": [
35
+ {
36
+ "inLanguage": "en",
37
+ "name": "familyDeclaration"
38
+ }
39
+ ]
40
+ },
41
+ {
42
+ "alternateName": "studentUnemploymentCertificate",
43
+ "physical": false,
44
+ "additionalType": "AttachmentType",
45
+ "description": "Βεβαίωση επιδότησης ανεργίας από υποκατάστημα του ΟΑΕΔ (προσωπική)",
46
+ "name": "Βεβαίωση επιδόματος ανεργίας φοιτητή",
47
+ "locales": [
48
+ {
49
+ "inLanguage": "en",
50
+ "name": "studentUnemploymentCertificate"
51
+ }
52
+ ]
53
+ },
54
+ {
55
+ "alternateName": "documentOfPermanentFamilyAddress",
56
+ "physical": false,
57
+ "additionalType": "AttachmentType",
58
+ "description": "Έγγραφο Δημόσιας Αρχής ή υπηρεσιών ή λογαριασμών οργανισμών κοινής ωφελείας, από το οποίο να προκύπτει ο τόπος μόνιμης κατοικίας της οικογένειας του φοιτητή",
59
+ "name": "Απόδειξη μόνιμης κατοικίας οικογένειας φοιτητή",
60
+ "locales": [
61
+ {
62
+ "inLanguage": "en",
63
+ "name": "documentOfPermanentFamilyAddress"
64
+ }
65
+ ]
66
+ },
67
+ {
68
+ "alternateName": "deathCertificate",
69
+ "physical": false,
70
+ "additionalType": "AttachmentType",
71
+ "description": "Ληξιαρχική πράξη θανάτου για απορφανισθέντες (μέχρι και 25 ετών)",
72
+ "name": "Ληξιαρχική πράξη θανάτου για απορφανισθέντες (μέχρι και 25 ετών)",
73
+ "locales": [
74
+ {
75
+ "inLanguage": "en",
76
+ "name": "deathCertificate"
77
+ }
78
+ ]
79
+ },
80
+ {
81
+ "alternateName": "studentTaxIncomeDocument",
82
+ "physical": false,
83
+ "additionalType": "AttachmentType",
84
+ "description": "Εκκαθαριστικό σημείωμα φοιτητή",
85
+ "name": "Εκκαθαριστικό σημείωμα φοιτητή",
86
+ "locales": [
87
+ {
88
+ "inLanguage": "en",
89
+ "name": "studentTaxIncomeDocument"
90
+ }
91
+ ]
92
+ },
93
+ {
94
+ "alternateName": "studentTaxE1Document",
95
+ "physical": false,
96
+ "additionalType": "AttachmentType",
97
+ "description": "Έντυπο Ε1 φοιτητή",
98
+ "name": "Έντυπο Ε1 φοιτητή",
99
+ "locales": [
100
+ {
101
+ "inLanguage": "en",
102
+ "name": "studentTaxE1Document"
103
+ }
104
+ ]
105
+ },
106
+ {
107
+ "alternateName": "studentIncomeCertificate",
108
+ "physical": false,
109
+ "additionalType": "AttachmentType",
110
+ "description": "Επικυρωμένη Υπεύθυνη Δήλωση οτι δεν είχε εισοδήματα το προηγούμενο έτος (όταν δεν υποβάλλει φορολογική δήλωση)",
111
+ "name": "Επικυρωμένη Υπεύθυνη Δήλωση οτι δεν είχε εισοδήματα το προηγούμενο έτος (όταν δεν υποβάλλει φορολογική δήλωση)",
112
+ "locales": [
113
+ {
114
+ "inLanguage": "en",
115
+ "name": "studentIncomeCertificate"
116
+ }
117
+ ]
118
+ },
119
+ {
120
+ "alternateName": "studentSpouseUnemploymentCertificate",
121
+ "physical": false,
122
+ "additionalType": "AttachmentType",
123
+ "description": "Βεβαίωση επιδότησης ανεργίας από υποκατάστημα του ΟΑΕΔ (συζύγου)",
124
+ "name": "Βεβαίωση επιδόματος ανεργίας συζύγου",
125
+ "locales": [
126
+ {
127
+ "inLanguage": "en",
128
+ "name": "studentSpouseUnemploymentCertificate"
129
+ }
130
+ ]
131
+ },
132
+ {
133
+ "alternateName": "studentSpouseTaxIncomeDocument",
134
+ "physical": false,
135
+ "additionalType": "AttachmentType",
136
+ "description": "Εκκαθαριστικό σημείωμα συζύγου",
137
+ "name": "Εκκαθαριστικό σημείωμα συζύγου",
138
+ "locales": [
139
+ {
140
+ "inLanguage": "en",
141
+ "name": "studentSpouseTaxIncomeDocument"
142
+ }
143
+ ]
144
+ },
145
+ {
146
+ "alternateName": "studentSpouseTaxE1Document",
147
+ "physical": false,
148
+ "additionalType": "AttachmentType",
149
+ "description": "Έντυπο Ε1 συζύγου",
150
+ "name": "Έντυπο Ε1 συζύγου",
151
+ "locales": [
152
+ {
153
+ "inLanguage": "en",
154
+ "name": "studentSpouseTaxE1Document"
155
+ }
156
+ ]
157
+ },
158
+ {
159
+ "alternateName": "studentParentsUnemploymentCertificate",
160
+ "physical": false,
161
+ "additionalType": "AttachmentType",
162
+ "description": "Βεβαίωση επιδότησης ανεργίας από υποκατάστημα του ΟΑΕΔ (γονέων)",
163
+ "name": "Βεβαίωση επιδόματος ανεργίας γονέων",
164
+ "locales": [
165
+ {
166
+ "inLanguage": "en",
167
+ "name": "studentParentsUnemploymentCertificate"
168
+ }
169
+ ]
170
+ },
171
+ {
172
+ "alternateName": "studentParentsTaxIncomeDocument",
173
+ "physical": false,
174
+ "additionalType": "AttachmentType",
175
+ "description": "Εκκαθαριστικό σημείωμα οικογένειας γονέων φοιτητή",
176
+ "name": "Εκκαθαριστικό σημείωμα οικογένειας γονέων φοιτητή",
177
+ "locales": [
178
+ {
179
+ "inLanguage": "en",
180
+ "name": "studentParentsTaxIncomeDocument"
181
+ }
182
+ ]
183
+ },
184
+ {
185
+ "alternateName": "studentParentsTaxE1Document",
186
+ "physical": false,
187
+ "additionalType": "AttachmentType",
188
+ "description": "Έντυπο Ε1 οικογένειας γονέων φοιτητή",
189
+ "name": "Έντυπο Ε1 οικογένειας γονέων φοιτητή",
190
+ "locales": [
191
+ {
192
+ "inLanguage": "en",
193
+ "name": "studentParentsTaxE1Document"
194
+ }
195
+ ]
196
+ },
197
+ {
198
+ "alternateName": "solemnDeclaration",
199
+ "physical": false,
200
+ "additionalType": "AttachmentType",
201
+ "description": "Επικυρωμένη Υπεύθυνη Δήλωση γονέα για διαμονή φοιτητή μαζί του και ανάληψη εξόδων του αποκλειστικά (για υποβολή εκκαθαριστικού μόνο του ενός γονέα)",
202
+ "name": "Επικυρωμένη Υπεύθυνη Δήλωση γονέα για διαμονή φοιτητή μαζί του και ανάληψη εξόδων του αποκλειστικά (για υποβολή εκκαθαριστικού μόνο του ενός γονέα)",
203
+ "locales": [
204
+ {
205
+ "inLanguage": "en",
206
+ "name": "solemnDeclaration"
207
+ }
208
+ ]
209
+ },
210
+ {
211
+ "alternateName": "familyIncomeCertificate",
212
+ "physical": false,
213
+ "additionalType": "AttachmentType",
214
+ "description": "Επικυρωμένη Υπεύθυνη Δήλωση του γονέα ότι δεν είχε εισοδήματα για το έτος (όταν δεν υποβάλει φορολογική δήλωση)",
215
+ "name": "Επικυρωμένη Υπεύθυνη Δήλωση του γονέα ότι δεν είχε εισοδήματα για το έτος (όταν δεν υποβάλει φορολογική δήλωση)",
216
+ "locales": [
217
+ {
218
+ "inLanguage": "en",
219
+ "name": "familyIncomeCertificate"
220
+ }
221
+ ]
222
+ },
223
+ {
224
+ "alternateName": "studentFamilyWithManyChildrenCertificate",
225
+ "physical": false,
226
+ "additionalType": "AttachmentType",
227
+ "description": "Βεβαίωση Ομοσπονδίας Πολυτέκνων Ελλάδας για έγγαμο πολύτεκνο φοιτητή",
228
+ "name": "Βεβαίωση Ομοσπονδίας Πολυτέκνων Ελλάδας για έγγαμο πολύτεκνο φοιτητή ",
229
+ "locales": [
230
+ {
231
+ "inLanguage": "en",
232
+ "name": "studentFamilyWithManyChildrenCertificate"
233
+ }
234
+ ]
235
+ },
236
+ {
237
+ "alternateName": "studentParentsFamilyWithManyChildrenCertificate",
238
+ "physical": false,
239
+ "additionalType": "AttachmentType",
240
+ "description": "Βεβαίωση Ομοσπονδίας Πολυτέκνων Ελλάδας για οικογένεια γονέων φοιτητή (μέχρι και 25 ετών)",
241
+ "name": "Βεβαίωση Ομοσπονδίας Πολυτέκνων Ελλάδας για οικογένεια γονέων φοιτητή",
242
+ "locales": [
243
+ {
244
+ "inLanguage": "en",
245
+ "name": "studentParentsFamilyWithManyChildrenCertificate"
246
+ }
247
+ ]
248
+ },
249
+ {
250
+ "alternateName": "copyOrRetirementDeed",
251
+ "physical": false,
252
+ "additionalType": "AttachmentType",
253
+ "description": "Αντίγραφο πράξης συνταξιοδότησης για τέκνα θύματος τρομοκρατίας (μέχρι και 25 ετών)",
254
+ "name": "Αντίγραφο πράξης συνταξιοδότησης για τέκνα θύματος τρομοκρατίας",
255
+ "locales": [
256
+ {
257
+ "inLanguage": "en",
258
+ "name": "copyOrRetirementDeed"
259
+ }
260
+ ]
261
+ },
262
+ {
263
+ "alternateName": "divorceJudgment",
264
+ "physical": false,
265
+ "additionalType": "AttachmentType",
266
+ "description": "Δικαστική απόφαση διαζυγίου (για υποβολή εκκαθαριστικού μόνο του ενός γονέα)",
267
+ "name": "Δικαστική απόφαση διαζυγίου (για υποβολή εκκαθαριστικού μόνο του ενός γονέα)",
268
+ "locales": [
269
+ {
270
+ "inLanguage": "en",
271
+ "name": "divorceJudgment"
272
+ }
273
+ ]
274
+ },
275
+ {
276
+ "alternateName": "foreignFamilyIncomeCertificate",
277
+ "physical": false,
278
+ "additionalType": "AttachmentType",
279
+ "description": "Μεταφρασμένη βεβαίωση αρμόδιας Δημόσιας Οικονομικής Υπηρεσίας της χώρας προέλευσης για οικογενειακό εισόδημα, με την αντίστοιχη ισοτιμία σε ευρώ (για Αλλοδαπούς)",
280
+ "name": "Μεταφρασμένη βεβαίωση αρμόδιας Δημόσιας Οικονομικής Υπηρεσίας της χώρας προέλευσης για οικογενειακό εισόδημα, με την αντίστοιχη ισοτιμία σε ευρώ (για Αλλοδαπούς)",
281
+ "locales": [
282
+ {
283
+ "inLanguage": "en",
284
+ "name": "foreignFamilyIncomeCertificate"
285
+ }
286
+ ]
287
+ },
288
+ {
289
+ "alternateName": "studentSpouseForeignIncomeCertificate",
290
+ "physical": false,
291
+ "additionalType": "AttachmentType",
292
+ "description": "Μεταφρασμένη βεβαίωση αρμόδιας Δημόσιας Οικονομικής Υπηρεσίας της χώρας προέλευσης για εισόδημα συζύγου, με την αντίστοιχη ισοτιμία σε ευρώ (για Αλλοδαπούς)",
293
+ "name": "Μεταφρασμένη βεβαίωση αρμόδιας Δημόσιας Οικονομικής Υπηρεσίας της χώρας προέλευσης για εισόδημα συζύγου, με την αντίστοιχη ισοτιμία σε ευρώ (για Αλλοδαπούς)",
294
+ "locales": [
295
+ {
296
+ "inLanguage": "en",
297
+ "name": "studentSpouseForeignIncomeCertificate"
298
+ }
299
+ ]
300
+ },
301
+ {
302
+ "alternateName": "studentChildrenForeignIncomeCertificate",
303
+ "physical": false,
304
+ "additionalType": "AttachmentType",
305
+ "description": "Μεταφρασμένη βεβαίωση αρμόδιας Δημόσιας Οικονομικής Υπηρεσίας της χώρας προέλευσης για εισόδημα τέκνων, με την αντίστοιχη ισοτιμία σε ευρώ (για Αλλοδαπούς)",
306
+ "name": "Μεταφρασμένη βεβαίωση αρμόδιας Δημόσιας Οικονομικής Υπηρεσίας της χώρας προέλευσης για εισόδημα τέκνων, με την αντίστοιχη ισοτιμία σε ευρώ (για Αλλοδαπούς)",
307
+ "locales": [
308
+ {
309
+ "inLanguage": "en",
310
+ "name": "studentChildrenForeignIncomeCertificate"
311
+ }
312
+ ]
313
+ },
314
+ {
315
+ "alternateName": "studentSiblingForeignIncomeCertificate",
316
+ "physical": false,
317
+ "additionalType": "AttachmentType",
318
+ "description": "Μεταφρασμένη βεβαίωση αρμόδιας Δημόσιας Οικονομικής Υπηρεσίας της χώρας προέλευσης για εισόδημα ανήλικων τέκνων, με την αντίστοιχη ισοτιμία σε ευρώ (για Αλλοδαπούς)",
319
+ "name": "Μεταφρασμένη βεβαίωση αρμόδιας Δημόσιας Οικονομικής Υπηρεσίας της χώρας προέλευσης για εισόδημα ανήλικων τέκνων, με την αντίστοιχη ισοτιμία σε ευρώ (για Αλλοδαπούς)",
320
+ "locales": [
321
+ {
322
+ "inLanguage": "en",
323
+ "name": "studentSiblingForeignIncomeCertificate"
324
+ }
325
+ ]
326
+ },
327
+ {
328
+ "alternateName": "educationCertificate",
329
+ "physical": false,
330
+ "additionalType": "AttachmentType",
331
+ "description": "Βεβαίωση φοίτησης αδελφού προπτυχιακού φοιτητή τρέχοντος ακαδημαϊκού έτους από Γραμματεία οικείου Ιδρύματος",
332
+ "name": "Βεβαίωση φοίτησης αδελφού φοιτητή",
333
+ "locales": [
334
+ {
335
+ "inLanguage": "en",
336
+ "name": "Certificate of Enrollment of a Sibling Student"
337
+ }
338
+ ]
339
+ },
340
+ {
341
+ "alternateName": "militaryActiveCertificate",
342
+ "physical": false,
343
+ "additionalType": "AttachmentType",
344
+ "description": "Πιστοποιητικό στρατιωτικής ιδιότητας αδελφού φοιτητή",
345
+ "name": "Πιστοποιητικό στρατιωτικής ιδιότητας αδελφού φοιτητή",
346
+ "locales": [
347
+ {
348
+ "inLanguage": "en",
349
+ "name": "Military Status Certificate of the Student’s Brother"
350
+ }
351
+ ]
352
+ },
353
+ {
354
+ "alternateName": "studentChildrenTaxIncomeDocument",
355
+ "physical": false,
356
+ "additionalType": "AttachmentType",
357
+ "description": "Εκκαθαριστικό σημείωμα τέκνων",
358
+ "name": "Εκκαθαριστικό σημείωμα τέκνων",
359
+ "locales": [
360
+ {
361
+ "inLanguage": "en",
362
+ "name": "Children’s Tax Clearance Statement"
363
+ }
364
+ ]
365
+ },
366
+ {
367
+ "alternateName": "studentChildrenTaxE1Document",
368
+ "physical": false,
369
+ "additionalType": "AttachmentType",
370
+ "description": "Έντυπο Ε1 τέκνων",
371
+ "name": "Έντυπο Ε1 τέκνων",
372
+ "locales": [
373
+ {
374
+ "inLanguage": "en",
375
+ "name": "E1 Tax Form of the Children"
376
+ }
377
+ ]
378
+ },
379
+ {
380
+ "alternateName": "studentSiblingTaxIncomeDocument",
381
+ "physical": false,
382
+ "additionalType": "AttachmentType",
383
+ "description": "Εκκαθαριστικό σημείωμα ανήλικων τέκνων",
384
+ "name": "Εκκαθαριστικό σημείωμα ανήλικων τέκνων",
385
+ "locales": [
386
+ {
387
+ "inLanguage": "en",
388
+ "name": "Tax Clearance Statement of Minor Children"
389
+ }
390
+ ]
391
+ },
392
+ {
393
+ "alternateName": "studentSiblingTaxE1Document",
394
+ "physical": false,
395
+ "additionalType": "AttachmentType",
396
+ "description": "Έντυπο Ε1 ανήλικων τέκνων",
397
+ "name": "Έντυπο Ε1 ανήλικων τέκνων",
398
+ "locales": [
399
+ {
400
+ "inLanguage": "en",
401
+ "name": "E1 Tax Return Form of Minor Children"
402
+ }
403
+ ]
404
+ },
405
+ {
406
+ "alternateName": "childOfUnmarriedMotherCertificate",
407
+ "physical": false,
408
+ "additionalType": "AttachmentType",
409
+ "description": "Επικυρωμένη Υπεύθυνη Δήλωση/Βεβαίωση ΜΗ Αναγώρισης Τέκνου Άγαμης Μητέρας",
410
+ "name": "Επικυρωμένη Υπεύθυνη Δήλωση/Βεβαίωση ΜΗ Αναγώρισης τέκνου άγαμης μητέρας",
411
+ "locales": [
412
+ {
413
+ "inLanguage": "en",
414
+ "name": "Certified Solemn Declaration / Certificate of Non-Recognition of Child by the Unmarried Mother’s Partner"
415
+ }
416
+ ]
417
+ },
418
+ {
419
+ "alternateName": "studentHasDisabledSiblingsCertificate",
420
+ "physical": false,
421
+ "additionalType": "AttachmentType",
422
+ "description": "Βεβαίωση Υγειονομικής Επιτροπής για Αναπηρία συγγενών (ΚΕΠΑ)",
423
+ "name": "Βεβαίωση Υγειονομικής Επιτροπής για Αναπηρία συγγενών (ΚΕΠΑ)",
424
+ "locales": [
425
+ {
426
+ "inLanguage": "en",
427
+ "name": "Disability Certification by the Medical Committee for a Relative (KEPA)"
428
+ }
429
+ ]
430
+ },
431
+ {
432
+ "alternateName": "studentParentsForeignUnemploymentCertificate",
433
+ "physical": false,
434
+ "additionalType": "AttachmentType",
435
+ "description": "Μεταφρασμένη Βεβαίωση Επιδοτούμενης Ανεργίας ΑΠΟ χώρα προέλευσης γονέων",
436
+ "name": "Μεταφρασμένη Βεβαίωση Επιδοτούμενης Ανεργίας ΑΠΟ χώρα προέλευσης γονέων",
437
+ "locales": [
438
+ {
439
+ "inLanguage": "en",
440
+ "name": "Translated Certificate of Subsidized Unemployment from the Parents Country of Origin"
441
+ }
442
+ ]
443
+ },
444
+ {
445
+ "alternateName": "studentForeignIncomeCertificate",
446
+ "physical": false,
447
+ "additionalType": "AttachmentType",
448
+ "description": "Μεταφρασμένη βεβαίωση αρμόδιας Δημόσιας Οικονομικής Υπηρεσίας της χώρας προέλευσης για εισόδημα φοιτητή/τριας, με την αντίστοιχη ισοτιμία σε ευρώ (για Αλλοδαπούς)",
449
+ "name": "Μεταφρασμένη βεβαίωση αρμόδιας Δημόσιας Οικονομικής Υπηρεσίας της χώρας προέλευσης για εισόδημα φοιτητή/τριας, με την αντίστοιχη ισοτιμία σε ευρώ (για Αλλοδαπούς)",
450
+ "locales": [
451
+ {
452
+ "inLanguage": "en",
453
+ "name": "Translated Certificate from the Competent Public Financial Authority of the Country of Origin Regarding the Student’s Income, Including the Equivalent Amount in Euros (for Foreign Nationals)"
454
+ }
455
+ ]
456
+ },
457
+ {
458
+ "alternateName": "specialCategorySelfParticipantDocument",
459
+ "physical": false,
460
+ "additionalType": "AttachmentType",
461
+ "description": "Έγγραφο αρμοδίου φορέα για πιστοποίηση ειδικής κατηγορίας ιδίου",
462
+ "name": "Έγγραφο αρμοδίου φορέα για πιστοποίηση ειδικής κατηγορίας ιδίου",
463
+ "locales": [
464
+ {
465
+ "inLanguage": "en",
466
+ "name": "Official Document from the Competent Authority Certifying the Applicant’s Special Category Status"
467
+ }
468
+ ]
469
+ },
470
+ {
471
+ "alternateName": "specialCategoryRelativeParticipantDocument",
472
+ "physical": false,
473
+ "additionalType": "AttachmentType",
474
+ "description": "Έγγραφο αρμοδίου φορέα για πιστοποίηση ειδικής κατηγορίας συγγενούς",
475
+ "name": "Έγγραφο αρμοδίου φορέα για πιστοποίηση ειδικής κατηγορίας συγγενούς",
476
+ "locales": [
477
+ {
478
+ "inLanguage": "en",
479
+ "name": "Official Document from the Competent Authority Certifying the Special Category Status of a Relative"
480
+ }
481
+ ]
482
+ },
483
+ {
484
+ "alternateName": "specialCategoryRelativeParticipantOtherDocument",
485
+ "physical": false,
486
+ "additionalType": "AttachmentType",
487
+ "description": "Ληξιαρχική πράξη θανάτου ή απόφαση ΚΕΠΑ για μόνιμη αναπηρία σε ποσοστό α΄νω του 50% του συγγενούς που απεβίωσε ή απέκτησε μόνιμη αναπηρία (ΦΕΚ τ.Β 2578/2023, αρ.1 παρ.β)",
488
+ "name": "Ληξιαρχική πράξη θανάτου ή απόφαση ΚΕΠΑ για μόνιμη αναπηρία σε ποσοστό α΄νω του 50% του συγγενούς που απεβίωσε ή απέκτησε μόνιμη αναπηρία (ΦΕΚ τ.Β 2578/2023, αρ.1 παρ.β)",
489
+ "locales": [
490
+ {
491
+ "inLanguage": "en",
492
+ "name": "Death Certificate or KEPA Decision Certifying Permanent Disability over 50% of the Relative Who Has Deceased or Acquired Permanent Disability (Government Gazette B’ 2578/2023, Article 1, Paragraph b)"
493
+ }
494
+ ]
495
+ },
496
+ {
497
+ "alternateName": "specialCategoryParticipantRelativityDeclaration",
498
+ "physical": false,
499
+ "additionalType": "AttachmentType",
500
+ "description": "Πιστοποιητικό οικογενειακής κατάστασης από το οποίο προκύπτει η συγγένεια ή οποιοδήποτε άλλο πιστοποιητικό που αποδεικνύει τη σχέση",
501
+ "name": "Πιστοποιητικό οικογενειακής κατάστασης από το οποίο προκύπτει η συγγένεια ή οποιοδήποτε άλλο πιστοποιητικό που αποδεικνύει τη σχέση",
502
+ "locales": [
503
+ {
504
+ "inLanguage": "en",
505
+ "name": "Family Status Certificate Showing the Relationship or Any Other Certificate Proving the Kinship"
506
+ }
507
+ ]
508
+ },
509
+ {
510
+ "alternateName": "notesDocument",
511
+ "physical": false,
512
+ "additionalType": "AttachmentType",
513
+ "description": "Έγγραφο σχετικό με την αίτηση που θεωρείται χρήσιμο για την αξιολόγηση της αίτησης βάσει σχόλιου",
514
+ "name": "Έγγραφο σχετικό με την αίτηση που θεωρείται χρήσιμο για την αξιολόγηση της αίτησης βάσει σχόλιου",
515
+ "locales": [
516
+ {
517
+ "inLanguage": "en",
518
+ "name": "Supporting document relevant to the application, deemed helpful for its assessment according to the submitted comment"
519
+ }
520
+ ]
521
+ }
522
+
523
+ ]
@@ -0,0 +1,87 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.afterSave = afterSave;exports.beforeSave = beforeSave;var _common = require("@themost/common");
2
+ var _data = require("@themost/data");
3
+
4
+ /**
5
+ * @param {DataEventArgs} event
6
+ */
7
+ async function beforeSaveAsync(event) {
8
+ //
9
+ const context = event.model.context;
10
+ const service = context.getApplication().getService(function AccommodationService() {});
11
+ let shouldInsert = false;
12
+ let currentActionStatus = 'UnknownActionStatus';
13
+ if (event && event.state === _data.DataObjectState.Insert) {
14
+ // get action status
15
+ if (Object.prototype.hasOwnProperty.call(event.target, 'actionStatus') === false) {
16
+ return;
17
+ }
18
+ currentActionStatus = await context.model('ActionStatusType').find(event.target.actionStatus).select('alternateName');
19
+ shouldInsert = currentActionStatus === 'ActiveActionStatus';
20
+ } else if (event.state === _data.DataObjectState.Update) {
21
+ if (event && event.previous.requestNumber != null) {
22
+ // if the current request has already a request number
23
+ // remove attribute
24
+ delete event.target.requestNumber;
25
+ // and exit
26
+ return;
27
+ } else {
28
+ // otherwise, get current status
29
+ if (Object.prototype.hasOwnProperty.call(event.target, 'actionStatus') === false) {
30
+ return;
31
+ }
32
+ currentActionStatus = await context.model('ActionStatusType').find(event.target.actionStatus).select('alternateName').value();
33
+ // get accommodation request event
34
+ event.target.AccommodationRequestEvent = await event.model.where('id').equal(event.target.id).select('accommodationRequestEvent').value();
35
+ // get previous status
36
+ const previousActionStatus = event.previous && event.previous.actionStatus && event.previous.actionStatus.alternateName || 'UnknownActionStatus';
37
+ // if status has been changed and the current status is active
38
+ shouldInsert = previousActionStatus !== currentActionStatus && currentActionStatus === 'ActiveActionStatus';
39
+ }
40
+ }
41
+ if (shouldInsert) {
42
+ // get request number format parameters
43
+ const AccommodationRequestEvent = await context.model('AccommodationRequestEvent').
44
+ find(event.target.AccommodationRequestEvent).
45
+ select('id', 'academicYear', 'academicPeriod').
46
+ flatten().silent().getItem();
47
+ if (AccommodationRequestEvent == null) {
48
+ throw new _common.DataError('E_EVENT', 'The specified accommodation request event cannot be found', null, 'AccommodationRequestEvent');
49
+ }
50
+ // get next number
51
+ const nextNumber = await service.nextNumber(context, AccommodationRequestEvent);
52
+ // and set request number format
53
+ event.target.requestNumber = `${AccommodationRequestEvent.academicYear}/${AccommodationRequestEvent.id}/${nextNumber}`;
54
+ } else {
55
+ // remove requestNumber attribute
56
+ delete event.target.requestNumber;
57
+ }
58
+ }
59
+ // eslint-disable-next-line no-unused-vars
60
+ async function afterSaveAsync(event) {
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=GenerateRequestNumberListener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenerateRequestNumberListener.js","names":["_common","require","_data","beforeSaveAsync","event","context","model","service","getApplication","getService","AccommodationService","shouldInsert","currentActionStatus","state","DataObjectState","Insert","Object","prototype","hasOwnProperty","call","target","find","actionStatus","select","Update","previous","requestNumber","value","AccommodationRequestEvent","where","equal","id","previousActionStatus","alternateName","flatten","silent","getItem","DataError","nextNumber","academicYear","afterSaveAsync","beforeSave","callback","then","catch","err","afterSave"],"sources":["../../src/listeners/GenerateRequestNumberListener.js"],"sourcesContent":["import { DataError } from '@themost/common';\nimport { DataObjectState } from '@themost/data';\n\n/**\n * @param {DataEventArgs} event \n */\nasync function beforeSaveAsync(event) {\n //\n const context = event.model.context;\n const service = context.getApplication().getService(function AccommodationService() {});\n let shouldInsert = false;\n let currentActionStatus = 'UnknownActionStatus';\n if (event && event.state === DataObjectState.Insert) {\n // get action status\n if (Object.prototype.hasOwnProperty.call(event.target, 'actionStatus') === false) {\n return;\n }\n currentActionStatus = await context.model('ActionStatusType').find(event.target.actionStatus).select('alternateName');\n shouldInsert = (currentActionStatus === 'ActiveActionStatus');\n } else if (event.state === DataObjectState.Update) {\n if (event && event.previous.requestNumber != null) {\n // if the current request has already a request number\n // remove attribute\n delete event.target.requestNumber;\n // and exit\n return;\n } else {\n // otherwise, get current status\n if (Object.prototype.hasOwnProperty.call(event.target, 'actionStatus') === false) {\n return;\n }\n currentActionStatus = await context.model('ActionStatusType').find(event.target.actionStatus).select('alternateName').value();\n // get accommodation request event\n event.target.AccommodationRequestEvent = await event.model.where('id').equal(event.target.id).select('accommodationRequestEvent').value();\n // get previous status\n const previousActionStatus = (event.previous && event.previous.actionStatus && event.previous.actionStatus.alternateName) || 'UnknownActionStatus';\n // if status has been changed and the current status is active\n shouldInsert = (previousActionStatus !== currentActionStatus) && (currentActionStatus === 'ActiveActionStatus');\n }\n }\n if (shouldInsert) {\n // get request number format parameters\n const AccommodationRequestEvent = await context.model('AccommodationRequestEvent')\n .find(event.target.AccommodationRequestEvent)\n .select('id', 'academicYear', 'academicPeriod')\n .flatten().silent().getItem();\n if (AccommodationRequestEvent == null) {\n throw new DataError('E_EVENT', 'The specified accommodation request event cannot be found', null, 'AccommodationRequestEvent');\n }\n // get next number\n const nextNumber = await service.nextNumber(context, AccommodationRequestEvent);\n // and set request number format\n event.target.requestNumber = `${AccommodationRequestEvent.academicYear}/${AccommodationRequestEvent.id}/${nextNumber}`;\n } else {\n // remove requestNumber attribute\n delete event.target.requestNumber;\n }\n} \n// eslint-disable-next-line no-unused-vars\nasync function afterSaveAsync(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":"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"}