@universis/accommodation 1.1.0 → 1.1.1

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 (26) hide show
  1. package/dist/config/models/AccommodationInscriptionModeTag.json +2 -2
  2. package/dist/config/models/{Accommodation.json → AccommodationPlace.json} +20 -13
  3. package/dist/config/models/{AccommodationLocale.json → AccommodationPlaceLocale.json} +3 -3
  4. package/dist/config/models/AccommodationRequestEffectiveStatusType.json +3 -3
  5. package/dist/config/models/AccommodationRoom.json +2 -2
  6. package/dist/config/scope.access.js +0 -10
  7. package/dist/config/scope.access.js.map +1 -1
  8. package/dist/listeners/OnActionCompleteListener.js +2 -2
  9. package/dist/listeners/OnActionCompleteListener.js.map +1 -1
  10. package/dist/listeners/SendEmailAfterCardStatusChangeListener.js +8 -8
  11. package/dist/listeners/SendEmailAfterCardStatusChangeListener.js.map +1 -1
  12. package/dist/models/{Accommodation.js → AccommodationPlace.js} +1 -1
  13. package/dist/models/AccommodationPlace.js.map +1 -0
  14. package/package.json +1 -1
  15. package/src/config/models/AccommodationInscriptionModeTag.json +2 -2
  16. package/src/config/models/{Accommodation.json → AccommodationPlace.json} +20 -13
  17. package/src/config/models/{AccommodationLocale.json → AccommodationPlaceLocale.json} +3 -3
  18. package/src/config/models/AccommodationRequestEffectiveStatusType.json +3 -3
  19. package/src/config/models/AccommodationRoom.json +2 -2
  20. package/src/config/scope.access.js +0 -10
  21. package/src/listeners/OnActionCompleteListener.js +2 -2
  22. package/src/listeners/SendEmailAfterCardStatusChangeListener.js +8 -8
  23. package/dist/models/Accommodation.js.map +0 -1
  24. /package/dist/templates/{mail-after-dining-request-status-change → mail-after-accommodation-request-status-change}/html.ejs +0 -0
  25. /package/src/models/{Accommodation.js → AccommodationPlace.js} +0 -0
  26. /package/src/templates/{mail-after-dining-request-status-change → mail-after-accommodation-request-status-change}/html.ejs +0 -0
@@ -47,7 +47,7 @@
47
47
  {
48
48
  "mask": 15,
49
49
  "type": "global",
50
- "account": "DiningAdministrators"
50
+ "account": "AccommodationAdministrators"
51
51
  },
52
52
  {
53
53
  "mask": 15,
@@ -76,7 +76,7 @@
76
76
  {
77
77
  "mask": 15,
78
78
  "type": "global",
79
- "account": "DiningAdministrators"
79
+ "account": "AccommodationAdministrators"
80
80
  }
81
81
  ],
82
82
  "constraints": [
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "$schema": "https://themost-framework.github.io/themost/models/2018/2/schema.json",
3
- "@id": "http://schema.org/Accommodation",
4
- "name": "Accommodation",
3
+ "@id": "http://schema.org/AccommodationPlace",
4
+ "name": "AccommodationPlace",
5
5
  "description": "An accommodation is a place that can accommodate human beings, e.g. a hotel room, a camping pitch, or a meeting room.",
6
- "title": "Accommodation",
6
+ "title": "AccommodationPlace",
7
7
  "abstract": false,
8
8
  "sealed": false,
9
9
  "implements": "Place",
10
- "classPath": "./models/Accommodation",
11
- "version": "1.6",
10
+ "classPath": "./models/AccommodationPlace",
11
+ "version": "1.0",
12
12
  "fields": [
13
13
  {
14
14
  "@id": "http://schema.org/identifier",
@@ -56,8 +56,15 @@
56
56
  "name": "address",
57
57
  "title": "address",
58
58
  "description": "Physical address of the item.",
59
- "type": "Json",
60
- "additionalType": "PostalAddress"
59
+ "type": "PostalAddress",
60
+ "mapping": {
61
+ "parentModel": "AccommodationPlace",
62
+ "childModel": "PostalAddress",
63
+ "parentField": "identifier",
64
+ "childField": "identifier",
65
+ "cascade": "delete",
66
+ "associationType": "association"
67
+ }
61
68
  },
62
69
  {
63
70
  "@id": "http://schema.org/geo",
@@ -69,19 +76,19 @@
69
76
  },
70
77
  {
71
78
  "name": "locales",
72
- "type": "AccommodationLocale",
79
+ "type": "AccommodationPlaceLocale",
73
80
  "mapping": {
74
81
  "associationType": "association",
75
82
  "cascade": "delete",
76
- "parentModel": "Accommodation",
83
+ "parentModel": "AccommodationPlace",
77
84
  "parentField": "id",
78
- "childModel": "AccommodationLocale",
85
+ "childModel": "AccommodationPlaceLocale",
79
86
  "childField": "object"
80
87
  }
81
88
  },
82
89
  {
83
90
  "name": "locale",
84
- "type": "AccommodationLocale",
91
+ "type": "AccommodationPlaceLocale",
85
92
  "readonly": true,
86
93
  "editable": false,
87
94
  "many": true,
@@ -90,9 +97,9 @@
90
97
  "mapping": {
91
98
  "associationType": "association",
92
99
  "cascade": "delete",
93
- "parentModel": "Accommodation",
100
+ "parentModel": "AccommodationPlace",
94
101
  "parentField": "id",
95
- "childModel": "AccommodationLocale",
102
+ "childModel": "AccommodationPlaceLocale",
96
103
  "childField": "object",
97
104
  "options": {
98
105
  "$filter": "inLanguage eq lang()",
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "$schema": "https://themost-framework.github.io/themost/models/2018/2/schema.json",
3
3
  "@id": "https://universis.io/entities/AccommodationLocale",
4
- "name": "AccommodationLocale",
4
+ "name": "AccommodationPlaceLocale",
5
5
  "description": "Contains a collection of extra field required for accommodation.",
6
- "title": "AccommodationLocale",
6
+ "title": "AccommodationPlaceLocale",
7
7
  "abstract": false,
8
- "contains": "Accommodation",
8
+ "contains": "AccommodationPlace",
9
9
  "hidden": true,
10
10
  "sealed": false,
11
11
  "version": "1.0",
@@ -196,15 +196,15 @@
196
196
  ]
197
197
  },
198
198
  {
199
- "alternateName": "RejectionUniversityHousingEffectiveStatus",
199
+ "alternateName": "RejectionUniversityAccommodationEffectiveStatus",
200
200
  "activatesAccommodationCard": false,
201
201
  "name": "Απόρριψη λόγω Στέγασης σε Εστία",
202
202
  "description": "Απόρριψη λόγω Στέγασης σε Εστία",
203
203
  "locales": [
204
204
  {
205
205
  "inLanguage": "en",
206
- "name": "Rejection due to University Housing",
207
- "description": "Rejection due to University Housing"
206
+ "name": "Rejection due to University Accommodation",
207
+ "description": "Rejection due to University Accommodation"
208
208
  }
209
209
  ]
210
210
  }
@@ -6,7 +6,7 @@
6
6
  "title": "AccommodationRoom",
7
7
  "abstract": false,
8
8
  "sealed": false,
9
- "implements": "Accommodation",
9
+ "implements": "AccommodationPlace",
10
10
  "version": "2.0.1",
11
11
  "fields": [
12
12
  {
@@ -112,7 +112,7 @@
112
112
  {
113
113
  "name": "containedInPlace",
114
114
  "description": "Το κτήριο στο οποίο βρίσκεται το δωμάτιο",
115
- "type": "Accommodation"
115
+ "type": "AccommodationPlace"
116
116
  },
117
117
  {
118
118
  "name": "accessibleForDisabled",
@@ -8,16 +8,6 @@
8
8
  "read",
9
9
  "write"]
10
10
 
11
- },
12
- {
13
- "scope": [
14
- "registrar"],
15
-
16
- "resource": "/api/Accommodations/?$",
17
- "access": [
18
- "read",
19
- "write"]
20
-
21
11
  },
22
12
  {
23
13
  "scope": [
@@ -1 +1 @@
1
- {"version":3,"file":"scope.access.js","names":["exports","default","_default"],"sources":["../../src/config/scope.access.js"],"sourcesContent":["export default [\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/TestActions/?$\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/Accommodations/?$\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationPlaces/?$\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/TestActions/?$\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/Accommodations/?$\",\n \"access\": [\n \"read\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/AccommodationRequestActions\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/AccommodationRequestEvents\",\n \"access\": [\n \"read\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/AccommodationRequestCategories\",\n \"access\": [\n \"read\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/StudentAccommodationCards\",\n \"access\": [\n \"read\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationRequestActions\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationRequestEvents\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationRequestEffectiveStatusTypes\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationCardEffectiveStatusTypes\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationRequestCategories\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/StudentAccommodationCards/?$\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n }\n]\n"],"mappings":"mHAAe;AACX;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,qBAAqB;EACjC,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,wBAAwB;EACpC,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,6BAA6B;EACzC,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,qBAAqB;EACjC,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,wBAAwB;EACpC,QAAQ,EAAE;EACN,MAAM;;AAEd,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,kCAAkC;EAC9C,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,iCAAiC;EAC7C,QAAQ,EAAE;EACN,MAAM;;AAEd,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,qCAAqC;EACjD,QAAQ,EAAE;EACN,MAAM;;AAEd,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,gCAAgC;EAC5C,QAAQ,EAAE;EACN,MAAM;;AAEd,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,kCAAkC;EAC9C,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,iCAAiC;EAC7C,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,+CAA+C;EAC3D,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,4CAA4C;EACxD,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,qCAAqC;EACjD,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,mCAAmC;EAC/C,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC,CACJ,CAAAA,OAAA,CAAAC,OAAA,GAAAC,QAAA"}
1
+ {"version":3,"file":"scope.access.js","names":["exports","default","_default"],"sources":["../../src/config/scope.access.js"],"sourcesContent":["export default [\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/TestActions/?$\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationPlaces/?$\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/TestActions/?$\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/Accommodations/?$\",\n \"access\": [\n \"read\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/AccommodationRequestActions\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/AccommodationRequestEvents\",\n \"access\": [\n \"read\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/AccommodationRequestCategories\",\n \"access\": [\n \"read\"\n ]\n },\n {\n \"scope\": [\n \"students\"\n ],\n \"resource\": \"/api/StudentAccommodationCards\",\n \"access\": [\n \"read\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationRequestActions\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationRequestEvents\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationRequestEffectiveStatusTypes\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationCardEffectiveStatusTypes\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/AccommodationRequestCategories\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n },\n {\n \"scope\": [\n \"registrar\"\n ],\n \"resource\": \"/api/StudentAccommodationCards/?$\",\n \"access\": [\n \"read\",\n \"write\"\n ]\n }\n]\n"],"mappings":"mHAAe;AACX;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,qBAAqB;EACjC,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,6BAA6B;EACzC,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,qBAAqB;EACjC,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,wBAAwB;EACpC,QAAQ,EAAE;EACN,MAAM;;AAEd,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,kCAAkC;EAC9C,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,iCAAiC;EAC7C,QAAQ,EAAE;EACN,MAAM;;AAEd,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,qCAAqC;EACjD,QAAQ,EAAE;EACN,MAAM;;AAEd,CAAC;AACD;EACI,OAAO,EAAE;EACL,UAAU,CACb;;EACD,UAAU,EAAE,gCAAgC;EAC5C,QAAQ,EAAE;EACN,MAAM;;AAEd,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,kCAAkC;EAC9C,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,iCAAiC;EAC7C,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,+CAA+C;EAC3D,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,4CAA4C;EACxD,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,qCAAqC;EACjD,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC;AACD;EACI,OAAO,EAAE;EACL,WAAW,CACd;;EACD,UAAU,EAAE,mCAAmC;EAC/C,QAAQ,EAAE;EACN,MAAM;EACN,OAAO;;AAEf,CAAC,CACJ,CAAAA,OAAA,CAAAC,OAAA,GAAAC,QAAA"}
@@ -47,9 +47,9 @@ async function afterSaveAsync(event) {
47
47
  academicPeriod = student && student.department && student.department.currentPeriod ? student.department.currentPeriod : null;
48
48
  }
49
49
  let cardActionStatus = {};
50
- if (event.target.accommodation && (Object.keys(event.target.accommodation).length === 0 || event.target.accommodation === '')) {
50
+ if (!event.target.accommodation) {
51
51
  // get accommodation valid through date
52
- cardActionStatus = { alternateName: 'PotentialActionStatus' };
52
+ cardActionStatus = { alternateName: 'ActiveActionStatus' };
53
53
 
54
54
  } else {
55
55
  cardActionStatus = { alternateName: 'CompletedActionStatus' };
@@ -1 +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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"}
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","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 ){\n // get accommodation valid through date\n cardActionStatus = { alternateName: 'ActiveActionStatus' }\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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"}
@@ -13,16 +13,16 @@ async function afterSaveAsync(event) {
13
13
  const mailer = (0, _mailer.getMailer)(context);
14
14
 
15
15
  const currentCardStatus = await context.
16
- model('StudentDiningCard').
16
+ model('StudentAccommodationCard').
17
17
  where('id').
18
18
  equal(event.target.id).
19
- select('active').
19
+ select('cardStatus').
20
20
  value();
21
21
  let previousCardStatus = 'UnknownStatus';
22
22
  if (event.previous) {
23
- previousCardStatus = event.previous.active;
23
+ previousCardStatus = event.previous.cardStatus;
24
24
  } else {
25
- throw new _data.DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'StudentDiningCard');
25
+ throw new _data.DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'StudentAccommodationCard');
26
26
  }
27
27
  if (currentCardStatus === previousCardStatus) {
28
28
  return;
@@ -32,7 +32,7 @@ async function afterSaveAsync(event) {
32
32
  const mailTemplate = await context.
33
33
  model('MailConfigurations').
34
34
  where('target').
35
- equal('DiningCardActiveStatusChange').
35
+ equal('AccommodationCardActiveStatusChange').
36
36
  silent().
37
37
  getItem();
38
38
  if (mailTemplate == null) {
@@ -44,7 +44,7 @@ async function afterSaveAsync(event) {
44
44
  let item;
45
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
46
  item = await context.
47
- model('DiningRequestAction').
47
+ model('AccommodationRequestAction').
48
48
  where('id').
49
49
  equal(event.target.action.id).
50
50
  expand({
@@ -58,7 +58,7 @@ async function afterSaveAsync(event) {
58
58
 
59
59
  } else if (typeof event.target.action === 'number' && Number.isInteger(event.target.action) && event.target.action > 0) {
60
60
  item = await context.
61
- model('DiningRequestAction').
61
+ model('AccommodationRequestAction').
62
62
  where('id').
63
63
  equal(event.target.action).
64
64
  expand({
@@ -83,7 +83,7 @@ async function afterSaveAsync(event) {
83
83
  const config = await context.
84
84
  model('StudentRequestConfiguration').
85
85
  where('additionalType').
86
- equal('DiningRequestAction').
86
+ equal('AccommodationRequestAction').
87
87
  and('inLanguage').
88
88
  equal(event.target.inLanguage || context.locale).
89
89
  silent().
@@ -1 +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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"}
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","cardStatus","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('StudentAccommodationCard')\n .where('id')\n .equal(event.target.id)\n .select('cardStatus')\n .value();\n let previousCardStatus = 'UnknownStatus';\n if (event.previous) {\n previousCardStatus = event.previous.cardStatus;\n } else {\n throw new DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'StudentAccommodationCard');\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('AccommodationCardActiveStatusChange')\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('AccommodationRequestAction')\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('AccommodationRequestAction')\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('AccommodationRequestAction')\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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"}
@@ -50,4 +50,4 @@ _data.EdmMapping.action('remove', 'Accommodation'), _dec(_class = (_class2 = cla
50
50
  }, (_applyDecoratedDescriptor(_class2.prototype, "remove", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "remove"), _class2.prototype)), _class2)) || _class);
51
51
 
52
52
  module.exports = AccommodationRequestEvent;
53
- //# sourceMappingURL=Accommodation.js.map
53
+ //# sourceMappingURL=AccommodationPlace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccommodationPlace.js","names":["_common","require","_data","_dec","_dec2","_dec3","_class","_class2","_applyDecoratedDescriptor","target","property","decorators","descriptor","context","desc","Object","keys","forEach","key","enumerable","configurable","initializer","writable","slice","reverse","reduce","decorator","value","call","undefined","defineProperty","AccommodationRequestEvent","EdmMapping","entityType","param","action","DataObject","constructor","remove","data","model","getModel","item","where","equal","getId","getItem","translateService","application","getStrategy","TranslateService","DataError","translate","hasRooms","id","count","silent","prototype","getOwnPropertyDescriptor","module","exports"],"sources":["../../src/models/AccommodationPlace.js"],"sourcesContent":["/* eslint-disable no-unused-vars */\nimport { DataError } from \"@themost/common\";\nimport { DataObject, EdmMapping } from \"@themost/data\";\n\n\n@EdmMapping.entityType('Accommodation')\nclass AccommodationRequestEvent extends DataObject {\n /**\n * @constructor\n */\n constructor() {\n super();\n }\n\n /**\n * POST AccommodationRequestEvents/:id/Remove\n */\n\n //remove accommodation request event\n @EdmMapping.param('data', 'Object', false, true)\n @EdmMapping.action('remove', 'Accommodation')\n async remove(data) {\n /**\n * @type {import('@themost/data').DataModel}\n */\n\n const model = this.getModel();\n\n const item = await model.where('id')\n .equal(this.getId())\n .getItem();\n const translateService = this.context.application.getStrategy(function TranslateService() { });\n\n if (item == null) {\n throw new DataError('E_ACCOMMODATION', translateService.translate('The specified Accommodation cannot be found or is inaccessible.'));\n }\n\n const hasRooms = await this.context.model('AccommodationRooms')\n .where('containedInPlace').equal(item.id).count();\n\n if (hasRooms) {\n throw new DataError('E_ACCOMMODATION_ROOM', translateService.translate('Cannot remove accommodation. Accommodation is related to rooms.'), null, 'Accommodation');\n }\n\n return model.silent().remove(item);\n }\n\n\n \n}\n\nmodule.exports = AccommodationRequestEvent;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@universis/accommodation",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Universis api library template",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -47,7 +47,7 @@
47
47
  {
48
48
  "mask": 15,
49
49
  "type": "global",
50
- "account": "DiningAdministrators"
50
+ "account": "AccommodationAdministrators"
51
51
  },
52
52
  {
53
53
  "mask": 15,
@@ -76,7 +76,7 @@
76
76
  {
77
77
  "mask": 15,
78
78
  "type": "global",
79
- "account": "DiningAdministrators"
79
+ "account": "AccommodationAdministrators"
80
80
  }
81
81
  ],
82
82
  "constraints": [
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "$schema": "https://themost-framework.github.io/themost/models/2018/2/schema.json",
3
- "@id": "http://schema.org/Accommodation",
4
- "name": "Accommodation",
3
+ "@id": "http://schema.org/AccommodationPlace",
4
+ "name": "AccommodationPlace",
5
5
  "description": "An accommodation is a place that can accommodate human beings, e.g. a hotel room, a camping pitch, or a meeting room.",
6
- "title": "Accommodation",
6
+ "title": "AccommodationPlace",
7
7
  "abstract": false,
8
8
  "sealed": false,
9
9
  "implements": "Place",
10
- "classPath": "./models/Accommodation",
11
- "version": "1.6",
10
+ "classPath": "./models/AccommodationPlace",
11
+ "version": "1.0",
12
12
  "fields": [
13
13
  {
14
14
  "@id": "http://schema.org/identifier",
@@ -56,8 +56,15 @@
56
56
  "name": "address",
57
57
  "title": "address",
58
58
  "description": "Physical address of the item.",
59
- "type": "Json",
60
- "additionalType": "PostalAddress"
59
+ "type": "PostalAddress",
60
+ "mapping": {
61
+ "parentModel": "AccommodationPlace",
62
+ "childModel": "PostalAddress",
63
+ "parentField": "identifier",
64
+ "childField": "identifier",
65
+ "cascade": "delete",
66
+ "associationType": "association"
67
+ }
61
68
  },
62
69
  {
63
70
  "@id": "http://schema.org/geo",
@@ -69,19 +76,19 @@
69
76
  },
70
77
  {
71
78
  "name": "locales",
72
- "type": "AccommodationLocale",
79
+ "type": "AccommodationPlaceLocale",
73
80
  "mapping": {
74
81
  "associationType": "association",
75
82
  "cascade": "delete",
76
- "parentModel": "Accommodation",
83
+ "parentModel": "AccommodationPlace",
77
84
  "parentField": "id",
78
- "childModel": "AccommodationLocale",
85
+ "childModel": "AccommodationPlaceLocale",
79
86
  "childField": "object"
80
87
  }
81
88
  },
82
89
  {
83
90
  "name": "locale",
84
- "type": "AccommodationLocale",
91
+ "type": "AccommodationPlaceLocale",
85
92
  "readonly": true,
86
93
  "editable": false,
87
94
  "many": true,
@@ -90,9 +97,9 @@
90
97
  "mapping": {
91
98
  "associationType": "association",
92
99
  "cascade": "delete",
93
- "parentModel": "Accommodation",
100
+ "parentModel": "AccommodationPlace",
94
101
  "parentField": "id",
95
- "childModel": "AccommodationLocale",
102
+ "childModel": "AccommodationPlaceLocale",
96
103
  "childField": "object",
97
104
  "options": {
98
105
  "$filter": "inLanguage eq lang()",
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "$schema": "https://themost-framework.github.io/themost/models/2018/2/schema.json",
3
3
  "@id": "https://universis.io/entities/AccommodationLocale",
4
- "name": "AccommodationLocale",
4
+ "name": "AccommodationPlaceLocale",
5
5
  "description": "Contains a collection of extra field required for accommodation.",
6
- "title": "AccommodationLocale",
6
+ "title": "AccommodationPlaceLocale",
7
7
  "abstract": false,
8
- "contains": "Accommodation",
8
+ "contains": "AccommodationPlace",
9
9
  "hidden": true,
10
10
  "sealed": false,
11
11
  "version": "1.0",
@@ -196,15 +196,15 @@
196
196
  ]
197
197
  },
198
198
  {
199
- "alternateName": "RejectionUniversityHousingEffectiveStatus",
199
+ "alternateName": "RejectionUniversityAccommodationEffectiveStatus",
200
200
  "activatesAccommodationCard": false,
201
201
  "name": "Απόρριψη λόγω Στέγασης σε Εστία",
202
202
  "description": "Απόρριψη λόγω Στέγασης σε Εστία",
203
203
  "locales": [
204
204
  {
205
205
  "inLanguage": "en",
206
- "name": "Rejection due to University Housing",
207
- "description": "Rejection due to University Housing"
206
+ "name": "Rejection due to University Accommodation",
207
+ "description": "Rejection due to University Accommodation"
208
208
  }
209
209
  ]
210
210
  }
@@ -6,7 +6,7 @@
6
6
  "title": "AccommodationRoom",
7
7
  "abstract": false,
8
8
  "sealed": false,
9
- "implements": "Accommodation",
9
+ "implements": "AccommodationPlace",
10
10
  "version": "2.0.1",
11
11
  "fields": [
12
12
  {
@@ -112,7 +112,7 @@
112
112
  {
113
113
  "name": "containedInPlace",
114
114
  "description": "Το κτήριο στο οποίο βρίσκεται το δωμάτιο",
115
- "type": "Accommodation"
115
+ "type": "AccommodationPlace"
116
116
  },
117
117
  {
118
118
  "name": "accessibleForDisabled",
@@ -9,16 +9,6 @@ export default [
9
9
  "write"
10
10
  ]
11
11
  },
12
- {
13
- "scope": [
14
- "registrar"
15
- ],
16
- "resource": "/api/Accommodations/?$",
17
- "access": [
18
- "read",
19
- "write"
20
- ]
21
- },
22
12
  {
23
13
  "scope": [
24
14
  "registrar"
@@ -47,9 +47,9 @@ async function afterSaveAsync(event) {
47
47
  academicPeriod = student && student.department && student.department.currentPeriod ? student.department.currentPeriod : null;
48
48
  }
49
49
  let cardActionStatus = {};
50
- if (event.target.accommodation && (Object.keys(event.target.accommodation).length === 0 || event.target.accommodation === '')) {
50
+ if (!event.target.accommodation ){
51
51
  // get accommodation valid through date
52
- cardActionStatus = { alternateName: 'PotentialActionStatus' }
52
+ cardActionStatus = { alternateName: 'ActiveActionStatus' }
53
53
 
54
54
  } else {
55
55
  cardActionStatus = { alternateName: 'CompletedActionStatus' }
@@ -13,16 +13,16 @@ async function afterSaveAsync(event) {
13
13
  const mailer = getMailer(context);
14
14
 
15
15
  const currentCardStatus = await context
16
- .model('StudentDiningCard')
16
+ .model('StudentAccommodationCard')
17
17
  .where('id')
18
18
  .equal(event.target.id)
19
- .select('active')
19
+ .select('cardStatus')
20
20
  .value();
21
21
  let previousCardStatus = 'UnknownStatus';
22
22
  if (event.previous) {
23
- previousCardStatus = event.previous.active;
23
+ previousCardStatus = event.previous.cardStatus;
24
24
  } else {
25
- throw new DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'StudentDiningCard');
25
+ throw new DataError('E_STATE', 'The previous state of an object cannot be determined', null, 'StudentAccommodationCard');
26
26
  }
27
27
  if (currentCardStatus === previousCardStatus) {
28
28
  return;
@@ -32,7 +32,7 @@ async function afterSaveAsync(event) {
32
32
  const mailTemplate = await context
33
33
  .model('MailConfigurations')
34
34
  .where('target')
35
- .equal('DiningCardActiveStatusChange')
35
+ .equal('AccommodationCardActiveStatusChange')
36
36
  .silent()
37
37
  .getItem();
38
38
  if (mailTemplate == null) {
@@ -44,7 +44,7 @@ async function afterSaveAsync(event) {
44
44
  let item;
45
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
46
  item = await context
47
- .model('DiningRequestAction')
47
+ .model('AccommodationRequestAction')
48
48
  .where('id')
49
49
  .equal(event.target.action.id)
50
50
  .expand({
@@ -58,7 +58,7 @@ async function afterSaveAsync(event) {
58
58
 
59
59
  } else if (typeof event.target.action === 'number' && Number.isInteger(event.target.action) && event.target.action > 0) {
60
60
  item = await context
61
- .model('DiningRequestAction')
61
+ .model('AccommodationRequestAction')
62
62
  .where('id')
63
63
  .equal(event.target.action)
64
64
  .expand({
@@ -83,7 +83,7 @@ async function afterSaveAsync(event) {
83
83
  const config = await context
84
84
  .model('StudentRequestConfiguration')
85
85
  .where('additionalType')
86
- .equal('DiningRequestAction')
86
+ .equal('AccommodationRequestAction')
87
87
  .and('inLanguage')
88
88
  .equal(event.target.inLanguage || context.locale)
89
89
  .silent()
@@ -1 +0,0 @@
1
- {"version":3,"file":"Accommodation.js","names":["_common","require","_data","_dec","_dec2","_dec3","_class","_class2","_applyDecoratedDescriptor","target","property","decorators","descriptor","context","desc","Object","keys","forEach","key","enumerable","configurable","initializer","writable","slice","reverse","reduce","decorator","value","call","undefined","defineProperty","AccommodationRequestEvent","EdmMapping","entityType","param","action","DataObject","constructor","remove","data","model","getModel","item","where","equal","getId","getItem","translateService","application","getStrategy","TranslateService","DataError","translate","hasRooms","id","count","silent","prototype","getOwnPropertyDescriptor","module","exports"],"sources":["../../src/models/Accommodation.js"],"sourcesContent":["/* eslint-disable no-unused-vars */\nimport { DataError } from \"@themost/common\";\nimport { DataObject, EdmMapping } from \"@themost/data\";\n\n\n@EdmMapping.entityType('Accommodation')\nclass AccommodationRequestEvent extends DataObject {\n /**\n * @constructor\n */\n constructor() {\n super();\n }\n\n /**\n * POST AccommodationRequestEvents/:id/Remove\n */\n\n //remove accommodation request event\n @EdmMapping.param('data', 'Object', false, true)\n @EdmMapping.action('remove', 'Accommodation')\n async remove(data) {\n /**\n * @type {import('@themost/data').DataModel}\n */\n\n const model = this.getModel();\n\n const item = await model.where('id')\n .equal(this.getId())\n .getItem();\n const translateService = this.context.application.getStrategy(function TranslateService() { });\n\n if (item == null) {\n throw new DataError('E_ACCOMMODATION', translateService.translate('The specified Accommodation cannot be found or is inaccessible.'));\n }\n\n const hasRooms = await this.context.model('AccommodationRooms')\n .where('containedInPlace').equal(item.id).count();\n\n if (hasRooms) {\n throw new DataError('E_ACCOMMODATION_ROOM', translateService.translate('Cannot remove accommodation. Accommodation is related to rooms.'), null, 'Accommodation');\n }\n\n return model.silent().remove(item);\n }\n\n\n \n}\n\nmodule.exports = AccommodationRequestEvent;\n"],"mappings":"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"}