@universis/accommodation 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitlab-ci.yml +23 -0
- package/LICENSE +163 -0
- package/README.md +3 -0
- package/dist/AccommodationSchemaLoader.js +35 -0
- package/dist/AccommodationSchemaLoader.js.map +1 -0
- package/dist/AccommodationService.js +68 -0
- package/dist/AccommodationService.js.map +1 -0
- package/dist/DepartmentReplacer.js +54 -0
- package/dist/DepartmentReplacer.js.map +1 -0
- package/dist/StudentReplacer.js +75 -0
- package/dist/StudentReplacer.js.map +1 -0
- package/dist/config/models/Accommodation.json +96 -0
- package/dist/config/models/AccommodationCardEffectiveStatusType.json +107 -0
- package/dist/config/models/AccommodationCardEffectiveStatusTypeLocale.json +85 -0
- package/dist/config/models/AccommodationChildFinancialAttribute.json +46 -0
- package/dist/config/models/AccommodationGuardianFinancialAttribute.json +46 -0
- package/dist/config/models/AccommodationInscriptionModeTag.json +100 -0
- package/dist/config/models/AccommodationRequestAction.json +500 -0
- package/dist/config/models/AccommodationRequestActionMessage.json +46 -0
- package/dist/config/models/AccommodationRequestActionReview.json +31 -0
- package/dist/config/models/AccommodationRequestAttachmentConfiguration.json +72 -0
- package/dist/config/models/AccommodationRequestCategory.json +50 -0
- package/dist/config/models/AccommodationRequestEffectiveStatusType.json +212 -0
- package/dist/config/models/AccommodationRequestEffectiveStatusTypeLocale.json +85 -0
- package/dist/config/models/AccommodationRequestEvent.json +117 -0
- package/dist/config/models/AccommodationRequestFinancialAttribute.json +53 -0
- package/dist/config/models/AccommodationRoom.json +151 -0
- package/dist/config/models/AccommodationSiblingFinancialAttribute.json +57 -0
- package/dist/config/models/CancelAccommodationCardAction.json +32 -0
- package/dist/config/models/GuardianType.json +78 -0
- package/dist/config/models/Review.json +50 -0
- package/dist/config/models/RoomType.json +320 -0
- package/dist/config/models/RoomTypeLocale.json +86 -0
- package/dist/config/models/StudentAccommodationCard.json +158 -0
- package/dist/config/models/TestAction.json +50 -0
- package/dist/config/scope.access.js +148 -0
- package/dist/config/scope.access.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/listeners/AddDefaultAttachmentConfiguration.js +44 -0
- package/dist/listeners/AddDefaultAttachmentConfiguration.js.map +1 -0
- package/dist/listeners/DefaultAttachmentConfigurations.json +277 -0
- package/dist/listeners/DefaultAttachmentTypes.json +523 -0
- package/dist/listeners/GenerateRequestNumberListener.js +87 -0
- package/dist/listeners/GenerateRequestNumberListener.js.map +1 -0
- package/dist/listeners/OnActionCompleteListener.js +96 -0
- package/dist/listeners/OnActionCompleteListener.js.map +1 -0
- package/dist/listeners/OnCancelAccommodationCardListener.js +87 -0
- package/dist/listeners/OnCancelAccommodationCardListener.js.map +1 -0
- package/dist/listeners/OnReactivateAccommodationCardListener.js +87 -0
- package/dist/listeners/OnReactivateAccommodationCardListener.js.map +1 -0
- package/dist/listeners/SendEmailAfterActionStatusChangeListener.js +98 -0
- package/dist/listeners/SendEmailAfterActionStatusChangeListener.js.map +1 -0
- package/dist/listeners/SendEmailAfterCardStatusChangeListener.js +139 -0
- package/dist/listeners/SendEmailAfterCardStatusChangeListener.js.map +1 -0
- package/dist/listeners/StudentAccommodationCardSaveListener.js +90 -0
- package/dist/listeners/StudentAccommodationCardSaveListener.js.map +1 -0
- package/dist/listeners/UpdateStudentAccommodationCardListener.js +70 -0
- package/dist/listeners/UpdateStudentAccommodationCardListener.js.map +1 -0
- package/dist/listeners/ValidateActionListener.js +348 -0
- package/dist/listeners/ValidateActionListener.js.map +1 -0
- package/dist/listeners/data-localization.js +209 -0
- package/dist/listeners/data-localization.js.map +1 -0
- package/dist/listeners/lookup-cache-listener.js +90 -0
- package/dist/listeners/lookup-cache-listener.js.map +1 -0
- package/dist/models/Accommodation.js +53 -0
- package/dist/models/Accommodation.js.map +1 -0
- package/dist/models/AccommodationRequestAction.js +214 -0
- package/dist/models/AccommodationRequestAction.js.map +1 -0
- package/dist/models/AccommodationRequestEvent.js +277 -0
- package/dist/models/AccommodationRequestEvent.js.map +1 -0
- package/dist/models/EnableAttachmentModel.js +210 -0
- package/dist/models/EnableAttachmentModel.js.map +1 -0
- package/dist/models/StudentAccommodationCard.js +93 -0
- package/dist/models/StudentAccommodationCard.js.map +1 -0
- package/dist/models/TestAction.d.ts +5 -0
- package/dist/models/TestAction.js +5 -0
- package/dist/models/TestAction.js.map +1 -0
- package/dist/templates/mail-after-dining-request-status-change/html.ejs +27 -0
- package/package.json +57 -0
- package/src/AccommodationSchemaLoader.js +35 -0
- package/src/AccommodationService.js +67 -0
- package/src/DepartmentReplacer.js +53 -0
- package/src/StudentReplacer.js +74 -0
- package/src/config/models/Accommodation.json +96 -0
- package/src/config/models/AccommodationCardEffectiveStatusType.json +107 -0
- package/src/config/models/AccommodationCardEffectiveStatusTypeLocale.json +85 -0
- package/src/config/models/AccommodationChildFinancialAttribute.json +46 -0
- package/src/config/models/AccommodationGuardianFinancialAttribute.json +46 -0
- package/src/config/models/AccommodationInscriptionModeTag.json +100 -0
- package/src/config/models/AccommodationRequestAction.json +500 -0
- package/src/config/models/AccommodationRequestActionMessage.json +46 -0
- package/src/config/models/AccommodationRequestActionReview.json +31 -0
- package/src/config/models/AccommodationRequestAttachmentConfiguration.json +72 -0
- package/src/config/models/AccommodationRequestCategory.json +50 -0
- package/src/config/models/AccommodationRequestEffectiveStatusType.json +212 -0
- package/src/config/models/AccommodationRequestEffectiveStatusTypeLocale.json +85 -0
- package/src/config/models/AccommodationRequestEvent.json +117 -0
- package/src/config/models/AccommodationRequestFinancialAttribute.json +53 -0
- package/src/config/models/AccommodationRoom.json +151 -0
- package/src/config/models/AccommodationSiblingFinancialAttribute.json +57 -0
- package/src/config/models/CancelAccommodationCardAction.json +32 -0
- package/src/config/models/GuardianType.json +78 -0
- package/src/config/models/Review.json +50 -0
- package/src/config/models/RoomType.json +320 -0
- package/src/config/models/RoomTypeLocale.json +86 -0
- package/src/config/models/StudentAccommodationCard.json +158 -0
- package/src/config/models/TestAction.json +50 -0
- package/src/config/scope.access.js +148 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +2 -0
- package/src/listeners/AddDefaultAttachmentConfiguration.js +43 -0
- package/src/listeners/DefaultAttachmentConfigurations.json +277 -0
- package/src/listeners/DefaultAttachmentTypes.json +523 -0
- package/src/listeners/GenerateRequestNumberListener.js +86 -0
- package/src/listeners/OnActionCompleteListener.js +95 -0
- package/src/listeners/OnCancelAccommodationCardListener.js +86 -0
- package/src/listeners/OnReactivateAccommodationCardListener.js +86 -0
- package/src/listeners/SendEmailAfterActionStatusChangeListener.js +97 -0
- package/src/listeners/SendEmailAfterCardStatusChangeListener.js +138 -0
- package/src/listeners/StudentAccommodationCardSaveListener.js +89 -0
- package/src/listeners/UpdateStudentAccommodationCardListener.js +69 -0
- package/src/listeners/ValidateActionListener.js +347 -0
- package/src/listeners/data-localization.js +214 -0
- package/src/listeners/lookup-cache-listener.js +89 -0
- package/src/models/Accommodation.js +52 -0
- package/src/models/AccommodationRequestAction.js +195 -0
- package/src/models/AccommodationRequestEvent.js +276 -0
- package/src/models/EnableAttachmentModel.js +209 -0
- package/src/models/StudentAccommodationCard.js +92 -0
- package/src/models/TestAction.d.ts +5 -0
- package/src/models/TestAction.js +10 -0
- package/src/templates/mail-after-dining-request-status-change/html.ejs +27 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccommodationRequestAction.js","names":["_common","require","_data","_EnableAttachmentModel","_interopRequireDefault","_dec","_dec2","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec10","_dec11","_dec12","_dec13","_dec14","_dec15","_dec16","_dec17","_dec18","_class","obj","__esModule","default","_applyDecoratedDescriptor","target","property","decorators","descriptor","context","desc","Object","keys","forEach","key","enumerable","configurable","initializer","writable","slice","reverse","reduce","decorator","value","call","undefined","defineProperty","AccommodationRequestAction","EdmMapping","param","EdmType","EdmStream","action","func","EnableAttachmentModel","constructor","addAttachment","file","extraAttributes","attachment","assign","name","contentFileName","removeAttachment","id","rejectAttachment","revertAttachment","postMessages","item","getId","model","save","getReview","where","equal","prepare","setReview","AccommodationRequestActionReviews","currentReview","getItem","itemReviewed","remove","sendMessage","message","thisArg","Promise","resolve","reject","db","executeInTransaction","cb","AccommodationRequestActionMessage","recipient","select","silent","DataError","newMessage","convert","newAttachment","then","catch","err","cancel","getModel","user","and","HttpForbiddenError","prototype","getOwnPropertyDescriptor","module","exports"],"sources":["../../src/models/AccommodationRequestAction.js"],"sourcesContent":["import { DataError, HttpForbiddenError } from \"@themost/common\";\nimport { EdmMapping, EdmType } from \"@themost/data\";\nimport EnableAttachmentModel from './EnableAttachmentModel';\n\nclass AccommodationRequestAction extends EnableAttachmentModel {\n constructor() {\n super();\n }\n /**\n * Adds an attachment\n * @param {*} file\n * @param {*=} extraAttributes\n */\n @EdmMapping.param('extraAttributes', 'Object', true, true)\n @EdmMapping.param('file', EdmType.EdmStream, false)\n @EdmMapping.action('AddAttachment', 'Attachment')\n async addAttachment(file, extraAttributes) {\n const attachment = Object.assign({\n name: file.contentFileName\n }, file, extraAttributes);\n return await super.addAttachment(attachment);\n }\n /**\n * Removes an attachment\n * @param {*} attachment\n */\n @EdmMapping.param('attachment', 'Attachment', true, true)\n @EdmMapping.action('RemoveAttachment', 'Attachment')\n async removeAttachment(attachment) {\n return await super.removeAttachment(attachment.id);\n }\n\n /**\n * Rejects an attachment\n * @param {*} attachment\n */\n @EdmMapping.param('attachment', 'Attachment', true, true)\n @EdmMapping.action('RejectAttachment', 'Attachment')\n async rejectAttachment(attachment) {\n return await super.rejectAttachment(attachment.id);\n } \n \n /**\n * Reverts (re-accepts) an attachment\n * @param {*} attachment\n */\n @EdmMapping.param('attachment', 'Attachment', true, true)\n @EdmMapping.action('RevertAttachment', 'Attachment')\n async revertAttachment(attachment) {\n return await super.revertAttachment(attachment.id);\n }\n\n /**\n * Add action messages\n * @param {Array<any>} items\n */\n @EdmMapping.param('item', 'AccommodationRequestActionMessage', true, true)\n @EdmMapping.action('messages', 'AccommodationRequestActionMessage')\n async postMessages(item) {\n // set initiator\n item.action = this.getId();\n return this.context.model('AccommodationRequestActionMessage').save(item);\n }\n\n /**\n * Gets item review\n */\n @EdmMapping.func('review', 'AccommodationRequestActionReview')\n getReview() {\n return this.context.model('AccommodationRequestActionReview')\n .where('itemReviewed').equal(this.getId()).prepare();\n }\n\n /**\n * Set item review\n * @param {*} item\n */\n @EdmMapping.param('item', 'AccommodationRequestActionReview', true, true)\n @EdmMapping.action('review', 'AccommodationRequestActionReview')\n async setReview(item) {\n const AccommodationRequestActionReviews = this.context.model('AccommodationRequestActionReview');\n // infer object state\n const currentReview = await AccommodationRequestActionReviews.where('itemReviewed').equal(this.getId()).getItem();\n if (currentReview == null) {\n if (item == null) {\n return;\n }\n // a new item is going to be inserted\n delete item.id;\n // set reviewed item\n item.itemReviewed = this.getId();\n } else {\n if (item == null) {\n // delete review\n AccommodationRequestActionReviews.remove(currentReview);\n }\n // up\n item.id = currentReview.id;\n // set reviewed item\n item.itemReviewed = this.getId();\n }\n return AccommodationRequestActionReviews.save(item);\n }\n\n /**\n * Adds an attachment\n * @param {{contentFileName:string}|*} attachment\n * @param {*=} message\n */\n @EdmMapping.param('message', 'Object', true, true)\n @EdmMapping.param('attachment', EdmType.EdmStream, true)\n @EdmMapping.action('SendMessage', 'AccommodationRequestActionMessage')\n sendMessage(attachment, message) {\n const thisArg = this;\n return new Promise((resolve, reject) => {\n this.context.db.executeInTransaction((cb) => {\n (async () => {\n const AccommodationRequestActionMessage = thisArg.context.model('AccommodationRequestActionMessage');\n if (message.recipient) {\n // try to find the message recipient by bypassing privileges\n // note: Students do not-and should not-have read access to Account or User models.\n // this process will help to identify an account by its name, e.g. recipient: 'AccommodationUsers'\n const recipient = await thisArg.context.model('Account')\n .where('name').equal(message.recipient.name || message.recipient)\n .select('id')\n .silent()\n .value()\n ?? await thisArg.context.model('Account')\n .where('id').equal(message.recipient.id || message.recipient)\n .select('id')\n .silent()\n .value()\n if (recipient == null) {\n throw new DataError('The specified message recipient (User/Account) cannot be found.');\n }\n // and override the message recipient\n message.recipient = recipient;\n }\n const newMessage = AccommodationRequestActionMessage.convert(message);\n Object.assign(newMessage, {\n action: thisArg.getId()\n });\n // add message\n await AccommodationRequestActionMessage.silent().save(newMessage);\n // if message has an attachment\n if (attachment) {\n // prepare attachment data\n const newAttachment = Object.assign({\n name: attachment.contentFileName\n }, attachment);\n // and add attachment\n await newMessage.addAttachment(newAttachment)\n }\n })().then(() => {\n return cb();\n }).catch((err) => {\n return cb(err);\n });\n }, (err) => {\n if (err) {\n return reject(err);\n }\n return resolve(message);\n })\n });\n } \n \n //remove accommodation request action\n @EdmMapping.action('Cancel', 'AccommodationRequestAction')\n async cancel() {\n /**\n * @type {import('@themost/data').DataModel}\n */\n\n const model = this.getModel();\n\n const item = await model.where('owner/name')\n .equal(this.context.user.name)\n .and('actionStatus/alternateName')\n .equal('PotentialActionStatus')\n .and('id')\n .equal(this.getId())\n .getItem();\n\n if (item == null) {\n throw new HttpForbiddenError();\n }\n\n return model.silent().remove(item); // silent() is used to bypass privileges\n }\n}\n\n\n\nmodule.exports = AccommodationRequestAction;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _common = require("@themost/common");
|
|
3
|
+
var _data = require("@themost/data");var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2; /* eslint-disable no-unused-vars */function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {var desc = {};Object.keys(descriptor).forEach(function (key) {desc[key] = descriptor[key];});desc.enumerable = !!desc.enumerable;desc.configurable = !!desc.configurable;if ('value' in desc || desc.initializer) {desc.writable = true;}desc = decorators.slice().reverse().reduce(function (desc, decorator) {return decorator(target, property, desc) || desc;}, desc);if (context && desc.initializer !== void 0) {desc.value = desc.initializer ? desc.initializer.call(context) : void 0;desc.initializer = undefined;}if (desc.initializer === void 0) {Object.defineProperty(target, property, desc);desc = null;}return desc;}let
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
AccommodationRequestEvent = (_dec = _data.EdmMapping.entityType('AccommodationRequestEvent'), _dec2 =
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
_data.EdmMapping.param('data', 'Object', false, true), _dec3 =
|
|
21
|
+
_data.EdmMapping.action('remove', 'AccommodationRequestEvent'), _dec4 =
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
_data.EdmMapping.param("data", "Object", false, true), _dec5 =
|
|
59
|
+
_data.EdmMapping.action('extend', 'AccommodationRequestEvent'), _dec(_class = (_class2 = class AccommodationRequestEvent extends _data.DataObject {/**
|
|
60
|
+
* @constructor
|
|
61
|
+
*/constructor() {super();} /**
|
|
62
|
+
* POST AccommodationRequestEvents/:id/Remove
|
|
63
|
+
*/ //remove accommodation request event
|
|
64
|
+
async remove(data) {/**
|
|
65
|
+
* @type {import('@themost/data').DataModel}
|
|
66
|
+
*/const model = this.getModel();const item = await model.where('id').equal(this.getId()).getItem();const translateService = this.context.application.getStrategy(function TranslateService() {});if (item == null) {throw new _common.DataError('E_ACCOMMODATION_REQUEST_EVENT', translateService.translate('The specified AccommodationRequestEvent cannot be found or is inaccessible.'));}const hasActions = await this.context.model('AccommodationRequestAction').where('accommodationRequestEvent').equal(item.id).count();if (hasActions) {throw new _common.DataError('E_ACCOMMODATION_REQUESTS_EXISTS', translateService.translate('Cannot remove accommodation request event. Accommodation request event is related to requests.'), null, 'AccommodationRequestEvent');}return model.silent().remove(item);} /**
|
|
67
|
+
* POST AccommodationRequestEvents/:id/Extend
|
|
68
|
+
*/ /**
|
|
69
|
+
* @returns {AccommodationRequestEvent}
|
|
70
|
+
*/ //extend accommodation request event
|
|
71
|
+
async extend(data) {const model = this.getModel();const previous = await model.where('id').equal(this.getId()).getItem();const target = data.event;const translateService = this.context.application.getStrategy(function TranslateService() {});if (previous == null) {throw new _common.DataError('E_ACCOMMODATION_REQUEST_EVENT', translateService.translate('The specified AccommodationRequestEvent cannot be found or is inaccessible.'));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
if (previous.eventStatus && previous.eventStatus.alternateName !== 'EventOpened' && target.eventStatus && target.eventStatus.alternateName !== 'EventOpened') {
|
|
76
|
+
throw new _common.DataError('E_EVENT_STATUS', translateService.translate('The AccommodationRequestEvent can only be extended when it is open.'));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (target.validThrough && target.validFrom &&
|
|
80
|
+
target.validThrough < target.validFrom) {
|
|
81
|
+
throw new _common.DataError('E_DATES', translateService.translate('ValidThrough date cannot be earlier than validFrom date.'));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const today = new Date().toISOString();
|
|
85
|
+
if (previous.validThrough && previous.validThrough <= today) {
|
|
86
|
+
throw new _common.DataError('E_DATES', translateService.translate('The AccommodationRequestEvent can only be extended if it has not already expired.'));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (previous.eventStatus && previous.eventStatus.alternateName === 'EventOpened') {
|
|
90
|
+
|
|
91
|
+
const validThroughChange = previous.validThrough && previous.validThrough.toISOString() !== target.validThrough.toISOString();
|
|
92
|
+
const endDateChange = previous.endDate && previous.endDate.toISOString() !== target.endDate.toISOString();
|
|
93
|
+
|
|
94
|
+
if (validThroughChange || endDateChange) {
|
|
95
|
+
const actionItem = {
|
|
96
|
+
object: previous.id,
|
|
97
|
+
currentValidThrough: validThroughChange === true ? previous.validThrough : null,
|
|
98
|
+
validThrough: validThroughChange === true ? target.validThrough : null,
|
|
99
|
+
currentEndDate: endDateChange === true ? previous.endDate : null,
|
|
100
|
+
endDate: endDateChange === true ? target.endDate : null,
|
|
101
|
+
status: previous.eventStatus,
|
|
102
|
+
description: validThroughChange === true ? endDateChange === true ? translateService.translate('END_DATE_VALID_THROUGH_DATE') : translateService.translate('VALID_THROUGH_DATE') : translateService.translate('END_DATE')
|
|
103
|
+
};
|
|
104
|
+
const action = await this.context.model('UpdateAccommodationRequestEventAction').save(actionItem);
|
|
105
|
+
if (action) {
|
|
106
|
+
return await this.context.model('AccommodationRequestEvent').save(target).then(async (res) => {
|
|
107
|
+
if (res) {
|
|
108
|
+
const response = res;
|
|
109
|
+
let sseUser;
|
|
110
|
+
sseUser = this.context.user || (await this.context.model('User'));
|
|
111
|
+
// check if there are active cards to extend
|
|
112
|
+
const cards = await this.context.model('StudentAccommodationCards').
|
|
113
|
+
where('student/studentStatus/alternateName').equal('active').
|
|
114
|
+
or('student/studentStatus/alternateName').equal('declared').
|
|
115
|
+
prepare().
|
|
116
|
+
and('active').equal(true).
|
|
117
|
+
and('action/accommodationRequestEvent/id').equal(previous.id).
|
|
118
|
+
and('action/actionStatus/alternateName').equal('CompletedActionStatus').
|
|
119
|
+
count();
|
|
120
|
+
if (validThroughChange === true && cards) {
|
|
121
|
+
Promise.all([
|
|
122
|
+
action,
|
|
123
|
+
this.handleStudentAccommodationCards(res, action)]).
|
|
124
|
+
then(([actionResult]) => {
|
|
125
|
+
this.sendSse(sseUser, this.context, actionResult, null);
|
|
126
|
+
return;
|
|
127
|
+
}).catch((err) => {
|
|
128
|
+
this.sendSse(sseUser, this.context, action, err);
|
|
129
|
+
});
|
|
130
|
+
} else {
|
|
131
|
+
action.totalCards = action.totalCardsAffected = 0;
|
|
132
|
+
action.actionResult = translateService.translate('The process was completed successfully.');
|
|
133
|
+
action.actionStatus = { alternateName: 'CompletedActionStatus' };
|
|
134
|
+
await this.context.model('UpdateAccommodationRequestEventAction').save(action);
|
|
135
|
+
this.sendSse(sseUser, this.context, action, null);
|
|
136
|
+
}
|
|
137
|
+
return response;
|
|
138
|
+
} else {
|
|
139
|
+
//set action status fail
|
|
140
|
+
action.actionResult = translateService.translate('Error occured while trying to extend AccommodationRequestEvent.');
|
|
141
|
+
action.actionStatus = { alternateName: 'FailedActionStatus' };
|
|
142
|
+
await this.context.model('UpdateAccommodationRequestEventAction').save(action);
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
} else {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
sendSse(user, context, updateEventAction, error) {
|
|
154
|
+
// try to find ServerSentEventService
|
|
155
|
+
const sse = context.getApplication().getService(function ServerSentEventService() {});
|
|
156
|
+
// only if it exists - it is not required
|
|
157
|
+
if (sse != null) {
|
|
158
|
+
if (user != null && updateEventAction != null) {
|
|
159
|
+
// create an event
|
|
160
|
+
const event = {
|
|
161
|
+
entitySet: "UpdateAccommodationRequestEventActions",
|
|
162
|
+
entityType: "UpdateAccommodationRequestEventAction",
|
|
163
|
+
target: {
|
|
164
|
+
id: updateEventAction.id,
|
|
165
|
+
object: updateEventAction.object.id || updateEventAction.object,
|
|
166
|
+
actionResult: updateEventAction.actionResult
|
|
167
|
+
},
|
|
168
|
+
status: {
|
|
169
|
+
success: true
|
|
170
|
+
},
|
|
171
|
+
dateCreated: new Date()
|
|
172
|
+
};
|
|
173
|
+
if (error) {
|
|
174
|
+
Object.assign(event, {
|
|
175
|
+
status: {
|
|
176
|
+
success: false
|
|
177
|
+
},
|
|
178
|
+
error: {
|
|
179
|
+
message: error.code || error.message
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
// and send it to the user that is performing the approval (accommodation scope)
|
|
184
|
+
sse.emit(user.name, user.authenticationScope || "accommodation", event);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* @returns Promise<ValidationResult[]>
|
|
191
|
+
*/
|
|
192
|
+
async handleStudentAccommodationCards(event, action) {
|
|
193
|
+
|
|
194
|
+
const translateService = this.context.application.getStrategy(function TranslateService() {});
|
|
195
|
+
const model = this.getModel();
|
|
196
|
+
const eventNext = await model.where('id').
|
|
197
|
+
equal(event.id).
|
|
198
|
+
getItem();
|
|
199
|
+
|
|
200
|
+
if (!eventNext) {
|
|
201
|
+
action.actionResult = translateService.translate('The specified AccommodationRequestEvent cannot be found or is inaccessible.');
|
|
202
|
+
action.actionStatus = { alternateName: 'FailedActionStatus' };
|
|
203
|
+
await this.context.model('UpdateAccommodationRequestEventAction').save(action);
|
|
204
|
+
throw new _common.DataError('E_ACCOMMODATION_REQUEST_EVENT', translateService.translate('The specified AccommodationRequestEvent cannot be found or is inaccessible.'));
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Try to update valid through date of active student accommodation cards
|
|
209
|
+
* Do not throw errors, but catch the procedure errors
|
|
210
|
+
*/
|
|
211
|
+
let actionItem = action;
|
|
212
|
+
let cardResults = [];
|
|
213
|
+
const accommodationCardsToChange = await this.context.model('StudentAccommodationCards').
|
|
214
|
+
where('student/studentStatus/alternateName').equal('active').
|
|
215
|
+
or('student/studentStatus/alternateName').equal('declared').
|
|
216
|
+
prepare().
|
|
217
|
+
and('active').equal(true).
|
|
218
|
+
and('action/accommodationRequestEvent/id').equal(eventNext.id).
|
|
219
|
+
and('action/actionStatus/alternateName').equal('CompletedActionStatus').
|
|
220
|
+
expand({
|
|
221
|
+
name: 'student',
|
|
222
|
+
options: {
|
|
223
|
+
$expand: 'studentStatus'
|
|
224
|
+
}
|
|
225
|
+
}).
|
|
226
|
+
getItems();
|
|
227
|
+
|
|
228
|
+
// extend all active accommodationCards
|
|
229
|
+
// let index = 0; // debugging purposes
|
|
230
|
+
for (const item of accommodationCardsToChange) {
|
|
231
|
+
try {
|
|
232
|
+
// update only validThrough date
|
|
233
|
+
// property student is required
|
|
234
|
+
// check if studentStatus allows card to be updated (active and declared actionStatus)
|
|
235
|
+
if (item && item.student && item.student.studentStatus && item.student.studentStatus.alternateName && (
|
|
236
|
+
item.student.studentStatus.alternateName === 'active' || item.student.studentStatus.alternateName === 'declared')) {
|
|
237
|
+
const itemNext = {
|
|
238
|
+
id: item.id,
|
|
239
|
+
validThrough: eventNext.validThrough,
|
|
240
|
+
student: item.student
|
|
241
|
+
};
|
|
242
|
+
await this.context.model('StudentAccommodationCards').save(itemNext);
|
|
243
|
+
}
|
|
244
|
+
} catch (err) {
|
|
245
|
+
// if err catch on cardResults
|
|
246
|
+
const res = item && item.action && item.action.requestNumber;
|
|
247
|
+
cardResults.push(res);
|
|
248
|
+
}
|
|
249
|
+
// index ++; // debugging purposes
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// return result
|
|
253
|
+
try {
|
|
254
|
+
actionItem.totalCards = accommodationCardsToChange.length;
|
|
255
|
+
actionItem.totalCardsAffected = accommodationCardsToChange.length - cardResults.length;
|
|
256
|
+
if (cardResults && cardResults.length === 0) {
|
|
257
|
+
//set action status completed
|
|
258
|
+
actionItem.actionStatus = { alternateName: 'CompletedActionStatus' };
|
|
259
|
+
actionItem.actionResult = translateService.translate('The process was completed successfully.');
|
|
260
|
+
} else {
|
|
261
|
+
//set action status fail
|
|
262
|
+
actionItem.actionStatus = { alternateName: 'FailedActionStatus' };
|
|
263
|
+
actionItem.actionResult = translateService.translate('Error occured while trying to update student accommodation cards') + '<br>' + cardResults.join("<br>");
|
|
264
|
+
}
|
|
265
|
+
const res = await this.context.model('UpdateAccommodationRequestEventActions').save(actionItem);
|
|
266
|
+
|
|
267
|
+
} catch (err) {
|
|
268
|
+
let sseUser;
|
|
269
|
+
sseUser = this.context.user || (await this.context.model('User'));
|
|
270
|
+
this.sendSse(sseUser, this.context, action, null);
|
|
271
|
+
throw new _common.DataError('E_UPDATE_ACTION', 'Error occured while trying to update the UpdateAccommodationRequestEventAction.');
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}, (_applyDecoratedDescriptor(_class2.prototype, "remove", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "remove"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "extend", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "extend"), _class2.prototype)), _class2)) || _class);
|
|
275
|
+
|
|
276
|
+
module.exports = AccommodationRequestEvent;
|
|
277
|
+
//# sourceMappingURL=AccommodationRequestEvent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccommodationRequestEvent.js","names":["_common","require","_data","_dec","_dec2","_dec3","_dec4","_dec5","_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","hasActions","id","count","silent","extend","previous","event","eventStatus","alternateName","validThrough","validFrom","today","Date","toISOString","validThroughChange","endDateChange","endDate","actionItem","object","currentValidThrough","currentEndDate","status","description","save","then","res","response","sseUser","user","cards","or","prepare","and","Promise","all","handleStudentAccommodationCards","actionResult","sendSse","catch","err","totalCards","totalCardsAffected","actionStatus","updateEventAction","error","sse","getApplication","getService","ServerSentEventService","entitySet","success","dateCreated","assign","message","code","emit","name","authenticationScope","eventNext","cardResults","accommodationCardsToChange","expand","options","$expand","getItems","student","studentStatus","itemNext","requestNumber","push","length","join","prototype","getOwnPropertyDescriptor","module","exports"],"sources":["../../src/models/AccommodationRequestEvent.js"],"sourcesContent":["/* eslint-disable no-unused-vars */\nimport { DataError } from \"@themost/common\";\nimport { DataObject, EdmMapping } from \"@themost/data\";\n\n\n@EdmMapping.entityType('AccommodationRequestEvent')\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', 'AccommodationRequestEvent')\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_REQUEST_EVENT', translateService.translate('The specified AccommodationRequestEvent cannot be found or is inaccessible.'));\n }\n\n const hasActions = await this.context.model('AccommodationRequestAction')\n .where('accommodationRequestEvent').equal(item.id).count();\n\n if (hasActions) {\n throw new DataError('E_ACCOMMODATION_REQUESTS_EXISTS', translateService.translate('Cannot remove accommodation request event. Accommodation request event is related to requests.'), null, 'AccommodationRequestEvent');\n }\n\n return model.silent().remove(item);\n }\n\n\n /**\n * POST AccommodationRequestEvents/:id/Extend\n */\n\n /**\n * @returns {AccommodationRequestEvent}\n */\n\n //extend accommodation request event\n @EdmMapping.param(\"data\", \"Object\", false, true)\n @EdmMapping.action('extend', 'AccommodationRequestEvent')\n async extend(data) {\n\n const model = this.getModel();\n\n const previous = await model.where('id')\n .equal(this.getId())\n .getItem();\n\n const target = data.event;\n const translateService = this.context.application.getStrategy(function TranslateService() { });\n if (previous == null) {\n throw new DataError('E_ACCOMMODATION_REQUEST_EVENT', translateService.translate('The specified AccommodationRequestEvent cannot be found or is inaccessible.'));\n }\n\n\n if (previous.eventStatus && previous.eventStatus.alternateName !== 'EventOpened' && target.eventStatus && target.eventStatus.alternateName !== 'EventOpened') {\n throw new DataError('E_EVENT_STATUS', translateService.translate('The AccommodationRequestEvent can only be extended when it is open.'));\n }\n\n if ((target.validThrough && target.validFrom)\n && target.validThrough < target.validFrom) {\n throw new DataError('E_DATES', translateService.translate('ValidThrough date cannot be earlier than validFrom date.'));\n }\n\n const today = new Date().toISOString();\n if (previous.validThrough && previous.validThrough <= today) {\n throw new DataError('E_DATES', translateService.translate('The AccommodationRequestEvent can only be extended if it has not already expired.'));\n }\n\n if (previous.eventStatus && previous.eventStatus.alternateName === 'EventOpened') {\n \n const validThroughChange = previous.validThrough && previous.validThrough.toISOString() !== target.validThrough.toISOString();\n const endDateChange = previous.endDate && previous.endDate.toISOString() !== target.endDate.toISOString();\n \n if (validThroughChange || endDateChange) {\n const actionItem = {\n object: previous.id,\n currentValidThrough: validThroughChange === true ? previous.validThrough : null,\n validThrough: validThroughChange === true ? target.validThrough : null,\n currentEndDate: endDateChange === true ? previous.endDate : null,\n endDate: endDateChange === true ? target.endDate : null,\n status: previous.eventStatus,\n description: validThroughChange === true ? (endDateChange === true ? translateService.translate('END_DATE_VALID_THROUGH_DATE') : translateService.translate('VALID_THROUGH_DATE')) : translateService.translate('END_DATE')\n };\n const action = await this.context.model('UpdateAccommodationRequestEventAction').save(actionItem);\n if (action) {\n return await this.context.model('AccommodationRequestEvent').save(target).then(async res => {\n if (res) {\n const response = res;\n let sseUser;\n sseUser = this.context.user || await this.context.model('User');\n // check if there are active cards to extend\n const cards = await this.context.model('StudentAccommodationCards')\n .where('student/studentStatus/alternateName').equal('active')\n .or('student/studentStatus/alternateName').equal('declared')\n .prepare()\n .and('active').equal(true)\n .and('action/accommodationRequestEvent/id').equal(previous.id)\n .and('action/actionStatus/alternateName').equal('CompletedActionStatus')\n .count();\n if (validThroughChange === true && cards) {\n Promise.all([\n action,\n this.handleStudentAccommodationCards(res, action)\n ]).then(([actionResult]) => {\n this.sendSse(sseUser, this.context, actionResult, null);\n return;\n }).catch(err => {\n this.sendSse(sseUser, this.context, action, err);\n });\n } else {\n action.totalCards = action.totalCardsAffected = 0;\n action.actionResult = translateService.translate('The process was completed successfully.');\n action.actionStatus = { alternateName: 'CompletedActionStatus' };\n await this.context.model('UpdateAccommodationRequestEventAction').save(action);\n this.sendSse(sseUser, this.context, action, null);\n }\n return response;\n } else {\n //set action status fail\n action.actionResult = translateService.translate('Error occured while trying to extend AccommodationRequestEvent.')\n action.actionStatus = { alternateName: 'FailedActionStatus' };\n await this.context.model('UpdateAccommodationRequestEventAction').save(action);\n return false;\n }\n })\n }\n } else {\n return false;\n }\n }\n }\n\n sendSse(user, context, updateEventAction, error) {\n // try to find ServerSentEventService\n const sse = context.getApplication().getService(function ServerSentEventService() {});\n // only if it exists - it is not required\n if (sse != null) {\n if (user != null && updateEventAction != null) {\n // create an event\n const event = {\n entitySet: \"UpdateAccommodationRequestEventActions\",\n entityType: \"UpdateAccommodationRequestEventAction\",\n target: {\n id: updateEventAction.id,\n object: updateEventAction.object.id || updateEventAction.object,\n actionResult: updateEventAction.actionResult\n },\n status: {\n success: true,\n },\n dateCreated: new Date()\n }\n if (error) {\n Object.assign(event, {\n status: {\n success: false\n },\n error: {\n message: error.code || error.message\n }\n })\n }\n // and send it to the user that is performing the approval (accommodation scope)\n sse.emit(user.name, user.authenticationScope || \"accommodation\", event);\n }\n }\n }\n\n /**\n * @returns Promise<ValidationResult[]>\n */\n async handleStudentAccommodationCards(event, action) {\n\n const translateService = this.context.application.getStrategy(function TranslateService() { });\n const model = this.getModel();\n const eventNext = await model.where('id')\n .equal(event.id)\n .getItem();\n\n if (!eventNext) {\n action.actionResult = translateService.translate('The specified AccommodationRequestEvent cannot be found or is inaccessible.')\n action.actionStatus = { alternateName: 'FailedActionStatus' };\n await this.context.model('UpdateAccommodationRequestEventAction').save(action);\n throw new DataError('E_ACCOMMODATION_REQUEST_EVENT', translateService.translate('The specified AccommodationRequestEvent cannot be found or is inaccessible.'));\n }\n\n /**\n * Try to update valid through date of active student accommodation cards\n * Do not throw errors, but catch the procedure errors\n */\n let actionItem = action;\n let cardResults = [];\n const accommodationCardsToChange = await this.context.model('StudentAccommodationCards')\n .where('student/studentStatus/alternateName').equal('active')\n .or('student/studentStatus/alternateName').equal('declared')\n .prepare()\n .and('active').equal(true)\n .and('action/accommodationRequestEvent/id').equal(eventNext.id)\n .and('action/actionStatus/alternateName').equal('CompletedActionStatus')\n .expand({\n name: 'student',\n options: {\n $expand: 'studentStatus'\n }\n })\n .getItems();\n\n // extend all active accommodationCards\n // let index = 0; // debugging purposes\n for (const item of accommodationCardsToChange) {\n try {\n // update only validThrough date\n // property student is required\n // check if studentStatus allows card to be updated (active and declared actionStatus)\n if (item && item.student && item.student.studentStatus && item.student.studentStatus.alternateName\n && (item.student.studentStatus.alternateName === 'active' || item.student.studentStatus.alternateName === 'declared')){\n const itemNext = {\n id: item.id, \n validThrough: eventNext.validThrough, \n student: item.student\n };\n await this.context.model('StudentAccommodationCards').save(itemNext);\n }\n } catch (err) {\n // if err catch on cardResults\n const res = item && item.action && item.action.requestNumber\n cardResults.push(res)\n }\n // index ++; // debugging purposes\n }\n\n // return result\n try {\n actionItem.totalCards = accommodationCardsToChange.length;\n actionItem.totalCardsAffected = accommodationCardsToChange.length - cardResults.length;\n if (cardResults && cardResults.length === 0) {\n //set action status completed\n actionItem.actionStatus = { alternateName: 'CompletedActionStatus' };\n actionItem.actionResult = translateService.translate('The process was completed successfully.');\n } else {\n //set action status fail\n actionItem.actionStatus = { alternateName: 'FailedActionStatus' };\n actionItem.actionResult = translateService.translate('Error occured while trying to update student accommodation cards') + '<br>' + cardResults.join(\"<br>\");\n }\n const res = await this.context.model('UpdateAccommodationRequestEventActions').save(actionItem);\n\n } catch (err) {\n let sseUser;\n sseUser = this.context.user || await this.context.model('User');\n this.sendSse(sseUser, this.context, action, null);\n throw new DataError('E_UPDATE_ACTION', 'Error occured while trying to update the UpdateAccommodationRequestEventAction.');\n }\n }\n}\n\nmodule.exports = AccommodationRequestEvent;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";var _data = require("@themost/data");
|
|
2
|
+
var _common = require("@themost/common");
|
|
3
|
+
var _path = _interopRequireDefault(require("path"));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
|
|
4
|
+
|
|
5
|
+
class MimeTypeError extends _common.HttpBadRequestError {
|
|
6
|
+
constructor(message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.code = "EMIME";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
class EnableAttachmentModel extends _data.DataObject {
|
|
13
|
+
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @returns {Promise<*>}
|
|
20
|
+
*/
|
|
21
|
+
getRecipient() {
|
|
22
|
+
if (this.getModel().getAttribute('recipient')) {
|
|
23
|
+
return this.getModel().where('id').equal(this.id).select('recipient').silent().value();
|
|
24
|
+
}
|
|
25
|
+
return Promise.resolve();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
addAttachment(file) {
|
|
29
|
+
const context = this.context;
|
|
30
|
+
const self = this;
|
|
31
|
+
let finalResult;
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
this.context.db.executeInTransaction((callback) => {
|
|
34
|
+
if (typeof file.originalname === 'string') {
|
|
35
|
+
file.name = file.originalname.replace(/\.[A-Z0-9]+$/ig, function (x) {return x.toLowerCase();});
|
|
36
|
+
}
|
|
37
|
+
const mime = file.mimetype || file.contentType;
|
|
38
|
+
if (mime == null) {
|
|
39
|
+
return reject(new MimeTypeError('The specified file type is not supported by the system.'));
|
|
40
|
+
}
|
|
41
|
+
const addAttributes = {};
|
|
42
|
+
const attributeNames = context.model('Attachment').attributeNames;
|
|
43
|
+
attributeNames.forEach((attribute) => {
|
|
44
|
+
if (Object.prototype.hasOwnProperty.call(file, attribute)) {
|
|
45
|
+
addAttributes[attribute] = file[attribute];
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const newAttachment = Object.assign(addAttributes, { contentType: mime });
|
|
49
|
+
const svc = context.getApplication().getService(function PrivateContentService() {});
|
|
50
|
+
//add attachment to attachments
|
|
51
|
+
context.unattended((cb) => {
|
|
52
|
+
// set attachment ownership to recipient
|
|
53
|
+
EnableAttachmentModel.prototype.getRecipient.call(self).then((recipient) => {
|
|
54
|
+
if (recipient) {
|
|
55
|
+
newAttachment.owner = recipient;
|
|
56
|
+
}
|
|
57
|
+
let filePath;
|
|
58
|
+
if (file.destination && file.filename) {
|
|
59
|
+
filePath = _path.default.resolve(file.destination, file.filename);
|
|
60
|
+
} else {
|
|
61
|
+
filePath = file.path;
|
|
62
|
+
}
|
|
63
|
+
svc.copyFrom(context, filePath, newAttachment, function (err) {
|
|
64
|
+
if (err) {
|
|
65
|
+
_common.TraceUtils.error(err);
|
|
66
|
+
return cb(new _common.HttpServerError());
|
|
67
|
+
}
|
|
68
|
+
return cb();
|
|
69
|
+
});
|
|
70
|
+
}).catch((err) => {
|
|
71
|
+
return cb(err);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
}, (err) => {
|
|
75
|
+
if (err) {
|
|
76
|
+
return callback(err);
|
|
77
|
+
}
|
|
78
|
+
const attachments = self.property('attachments');
|
|
79
|
+
// set attachment ownership
|
|
80
|
+
attachments.insert(newAttachment, (err) => {
|
|
81
|
+
if (err) {
|
|
82
|
+
return callback(err);
|
|
83
|
+
}
|
|
84
|
+
svc.resolveUrl(context, newAttachment, function (err, url) {
|
|
85
|
+
if (err) {
|
|
86
|
+
callback(err);
|
|
87
|
+
} else
|
|
88
|
+
{
|
|
89
|
+
finalResult = Object.assign({
|
|
90
|
+
}, newAttachment, {
|
|
91
|
+
url: url,
|
|
92
|
+
name: newAttachment.filename
|
|
93
|
+
});
|
|
94
|
+
callback();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
}, (err) => {
|
|
101
|
+
if (err) {
|
|
102
|
+
return reject(err);
|
|
103
|
+
}
|
|
104
|
+
return resolve(finalResult);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
removeAttachment(id) {
|
|
111
|
+
const context = this.context;
|
|
112
|
+
const self = this;
|
|
113
|
+
let result;
|
|
114
|
+
return new Promise((resolve, reject) => {
|
|
115
|
+
context.db.executeInTransaction((callback) => {
|
|
116
|
+
//get attachment
|
|
117
|
+
return context.model('Attachment').where('id').equal(id).getItem().then((attachment) => {
|
|
118
|
+
if (attachment) {
|
|
119
|
+
//remove attachment connection
|
|
120
|
+
return self.property('attachments').remove(attachment, (err) => {
|
|
121
|
+
//remove attachment
|
|
122
|
+
if (err) {
|
|
123
|
+
return callback(err);
|
|
124
|
+
}
|
|
125
|
+
return context.model('Attachment').silent().remove(attachment).then(() => {
|
|
126
|
+
result = attachment;
|
|
127
|
+
return callback();
|
|
128
|
+
}).catch((err) => {
|
|
129
|
+
return callback(err);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return callback(new _common.DataNotFoundError());
|
|
134
|
+
}).catch((err) => {
|
|
135
|
+
return callback(err);
|
|
136
|
+
});
|
|
137
|
+
}, (err) => {
|
|
138
|
+
if (err) {
|
|
139
|
+
return reject(err);
|
|
140
|
+
}
|
|
141
|
+
return resolve(result);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
rejectAttachment(id) {
|
|
147
|
+
const context = this.context;
|
|
148
|
+
const self = this;
|
|
149
|
+
let result;
|
|
150
|
+
return new Promise((resolve, reject) => {
|
|
151
|
+
context.db.executeInTransaction((callback) => {
|
|
152
|
+
//get attachment
|
|
153
|
+
return context.model('Attachment').where('id').equal(id).getItem().then((attachment) => {
|
|
154
|
+
if (attachment) {
|
|
155
|
+
//reject attachment
|
|
156
|
+
attachment.published = false;
|
|
157
|
+
return context.model('Attachment').silent().save(attachment).then(() => {
|
|
158
|
+
result = attachment;
|
|
159
|
+
return callback();
|
|
160
|
+
}).catch((err) => {
|
|
161
|
+
return callback(err);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
return callback(new _common.DataNotFoundError());
|
|
165
|
+
}).catch((err) => {
|
|
166
|
+
return callback(err);
|
|
167
|
+
});
|
|
168
|
+
}, (err) => {
|
|
169
|
+
if (err) {
|
|
170
|
+
return reject(err);
|
|
171
|
+
}
|
|
172
|
+
return resolve(result);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
revertAttachment(id) {
|
|
178
|
+
const context = this.context;
|
|
179
|
+
const self = this;
|
|
180
|
+
let result;
|
|
181
|
+
return new Promise((resolve, reject) => {
|
|
182
|
+
context.db.executeInTransaction((callback) => {
|
|
183
|
+
//get attachment
|
|
184
|
+
return context.model('Attachment').where('id').equal(id).getItem().then((attachment) => {
|
|
185
|
+
if (attachment) {
|
|
186
|
+
//revert attachment
|
|
187
|
+
attachment.published = true;
|
|
188
|
+
return context.model('Attachment').silent().save(attachment).then(() => {
|
|
189
|
+
result = attachment;
|
|
190
|
+
return callback();
|
|
191
|
+
}).catch((err) => {
|
|
192
|
+
return callback(err);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
return callback(new _common.DataNotFoundError());
|
|
196
|
+
}).catch((err) => {
|
|
197
|
+
return callback(err);
|
|
198
|
+
});
|
|
199
|
+
}, (err) => {
|
|
200
|
+
if (err) {
|
|
201
|
+
return reject(err);
|
|
202
|
+
}
|
|
203
|
+
return resolve(result);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
module.exports = EnableAttachmentModel;
|
|
210
|
+
//# sourceMappingURL=EnableAttachmentModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnableAttachmentModel.js","names":["_data","require","_common","_path","_interopRequireDefault","obj","__esModule","default","MimeTypeError","HttpBadRequestError","constructor","message","code","EnableAttachmentModel","DataObject","getRecipient","getModel","getAttribute","where","equal","id","select","silent","value","Promise","resolve","addAttachment","file","context","self","finalResult","reject","db","executeInTransaction","callback","originalname","name","replace","x","toLowerCase","mime","mimetype","contentType","addAttributes","attributeNames","model","forEach","attribute","Object","prototype","hasOwnProperty","call","newAttachment","assign","svc","getApplication","getService","PrivateContentService","unattended","cb","then","recipient","owner","filePath","destination","filename","path","copyFrom","err","TraceUtils","error","HttpServerError","catch","attachments","property","insert","resolveUrl","url","removeAttachment","result","getItem","attachment","remove","DataNotFoundError","rejectAttachment","published","save","revertAttachment","module","exports"],"sources":["../../src/models/EnableAttachmentModel.js"],"sourcesContent":["import {DataObject} from '@themost/data';\nimport {TraceUtils, DataNotFoundError, HttpServerError, HttpBadRequestError} from \"@themost/common\";\nimport path from 'path';\n\nclass MimeTypeError extends HttpBadRequestError {\n constructor(message) {\n super(message);\n this.code = \"EMIME\";\n }\n}\n\nclass EnableAttachmentModel extends DataObject {\n\n constructor() {\n super();\n }\n\n /**\n * @returns {Promise<*>}\n */\n getRecipient() {\n if (this.getModel().getAttribute('recipient')) {\n return this.getModel().where('id').equal(this.id).select('recipient').silent().value();\n }\n return Promise.resolve();\n }\n\n addAttachment(file) {\n const context = this.context;\n const self = this;\n let finalResult;\n return new Promise((resolve, reject)=> {\n this.context.db.executeInTransaction((callback)=> {\n if (typeof file.originalname === 'string') {\n file.name = file.originalname.replace(/\\.[A-Z0-9]+$/ig, function(x) { return x.toLowerCase(); });\n }\n const mime = file.mimetype || file.contentType;\n if (mime == null) {\n return reject(new MimeTypeError('The specified file type is not supported by the system.'))\n }\n const addAttributes ={};\n const attributeNames = context.model('Attachment').attributeNames;\n attributeNames.forEach((attribute)=> {\n if (Object.prototype.hasOwnProperty.call(file, attribute)) {\n addAttributes[attribute] = file[attribute];\n }\n });\n const newAttachment = Object.assign(addAttributes, { contentType:mime });\n const svc = context.getApplication().getService(function PrivateContentService() { });\n //add attachment to attachments\n context.unattended((cb)=> {\n // set attachment ownership to recipient\n EnableAttachmentModel.prototype.getRecipient.call(self).then( recipient => {\n if (recipient) {\n newAttachment.owner = recipient;\n }\n let filePath;\n if (file.destination && file.filename) {\n filePath = path.resolve(file.destination, file.filename);\n } else {\n filePath = file.path;\n }\n svc.copyFrom(context, filePath, newAttachment, function(err) {\n if (err) {\n TraceUtils.error(err);\n return cb(new HttpServerError());\n }\n return cb();\n });\n }).catch( err=> {\n return cb(err);\n });\n\n }, (err)=> {\n if (err) {\n return callback(err);\n }\n const attachments = self.property('attachments');\n // set attachment ownership\n attachments.insert(newAttachment, (err)=> {\n if (err) {\n return callback(err);\n }\n svc.resolveUrl(context, newAttachment, function(err, url) {\n if (err) {\n callback(err);\n }\n else {\n finalResult =Object.assign({\n }, newAttachment, {\n url: url,\n name: newAttachment.filename\n });\n callback();\n }\n });\n });\n });\n\n }, (err)=> {\n if (err) {\n return reject(err);\n }\n return resolve(finalResult);\n });\n })\n\n }\n\n removeAttachment(id) {\n const context = this.context;\n const self = this;\n let result;\n return new Promise((resolve, reject)=> {\n context.db.executeInTransaction((callback)=> {\n //get attachment\n return context.model('Attachment').where('id').equal(id).getItem().then((attachment)=> {\n if (attachment) {\n //remove attachment connection\n return self.property('attachments').remove(attachment,(err)=> {\n //remove attachment\n if (err) {\n return callback(err);\n }\n return context.model('Attachment').silent().remove(attachment).then(()=> {\n result = attachment;\n return callback();\n }).catch((err)=> {\n return callback(err);\n });\n });\n }\n return callback(new DataNotFoundError());\n }).catch((err)=> {\n return callback(err);\n });\n }, (err)=> {\n if (err) {\n return reject(err);\n }\n return resolve(result);\n });\n });\n }\n\n rejectAttachment(id) {\n const context = this.context;\n const self = this;\n let result;\n return new Promise((resolve, reject)=> {\n context.db.executeInTransaction((callback)=> {\n //get attachment\n return context.model('Attachment').where('id').equal(id).getItem().then((attachment)=> {\n if (attachment) {\n //reject attachment\n attachment.published = false;\n return context.model('Attachment').silent().save(attachment).then(()=> {\n result = attachment;\n return callback();\n }).catch((err)=> {\n return callback(err);\n });\n }\n return callback(new DataNotFoundError());\n }).catch((err)=> {\n return callback(err);\n });\n }, (err)=> {\n if (err) {\n return reject(err);\n }\n return resolve(result);\n });\n });\n } \n\n revertAttachment(id) {\n const context = this.context;\n const self = this;\n let result;\n return new Promise((resolve, reject)=> {\n context.db.executeInTransaction((callback)=> {\n //get attachment\n return context.model('Attachment').where('id').equal(id).getItem().then((attachment)=> {\n if (attachment) {\n //revert attachment\n attachment.published = true;\n return context.model('Attachment').silent().save(attachment).then(()=> {\n result = attachment;\n return callback();\n }).catch((err)=> {\n return callback(err);\n });\n }\n return callback(new DataNotFoundError());\n }).catch((err)=> {\n return callback(err);\n });\n }, (err)=> {\n if (err) {\n return reject(err);\n }\n return resolve(result);\n });\n });\n } \n}\n\nmodule.exports = EnableAttachmentModel;"],"mappings":"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"}
|