@openinc/parse-server-opendash 2.4.93 → 2.4.95
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/dist/functions/openinc-openservice-save-ticket-data.d.ts +6 -6
- package/dist/functions/openinc-openservice-save-ticket-data.js +53 -9
- package/dist/functions/openinc-openservice-ticket-data.d.ts +9 -1
- package/dist/functions/openinc-openservice-ticket-data.js +5 -0
- package/dist/helper/BreeInstance.d.ts +16 -0
- package/dist/helper/BreeInstance.js +78 -0
- package/dist/helper/removeShorltyPreviousEntry.d.ts +2 -2
- package/dist/helper/removeShorltyPreviousEntry.js +6 -2
- package/dist/hooks/Maintenance_Downtime.js +32 -2
- package/dist/hooks/Maintenance_Duedate.js +46 -3
- package/dist/hooks/Maintenance_Frequency.js +32 -3
- package/dist/hooks/Maintenance_Kanban_State.js +10 -0
- package/dist/hooks/Maintenance_Message.d.ts +7 -0
- package/dist/hooks/Maintenance_Message.js +38 -0
- package/dist/hooks/Maintenance_Priority.js +34 -4
- package/dist/hooks/Maintenance_Restriction.js +35 -3
- package/dist/hooks/Maintenance_Schedule_Template.js +11 -86
- package/dist/hooks/Maintenance_Ticket_Issuecategory.js +36 -4
- package/dist/hooks/Maintenance_Ticket_Kanban_State.js +41 -12
- package/dist/hooks/Maintenance_Ticket_Source.js +35 -5
- package/dist/hooks/Maintenance_Ticket_Title.js +32 -3
- package/dist/hooks/Permission.js +0 -26
- package/dist/index.js +51 -0
- package/dist/jobs/index.d.ts +0 -0
- package/dist/jobs/index.js +2 -0
- package/dist/types/Maintenance_Kanban_State.d.ts +3 -0
- package/dist/types/Maintenance_Kanban_State.js +6 -0
- package/dist/types/Maintenance_Schedule_Template.d.ts +3 -0
- package/dist/types/Maintenance_Schedule_Template.js +6 -0
- package/package.json +2 -1
- package/schema/Maintenance_Kanban_State.json +5 -0
- package/schema/Maintenance_Schedule_Template.json +4 -0
|
@@ -2,24 +2,34 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.init = init;
|
|
4
4
|
const __1 = require("..");
|
|
5
|
+
const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
|
|
5
6
|
const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
|
|
6
7
|
const types_1 = require("../types");
|
|
8
|
+
const Maintenance_Message_1 = require("./Maintenance_Message");
|
|
9
|
+
const TRANSLATION_TITLE = "maintenance:ticket.message.restriction.changed.title";
|
|
10
|
+
const TRANSLATION_CONTENT = "maintenance:ticket.message.restriction.changed.content";
|
|
7
11
|
async function init() {
|
|
8
12
|
(0, __1.beforeSaveHook)(types_1.Maintenance_Restriction, async (request) => {
|
|
9
13
|
const { object, original, user } = request;
|
|
10
14
|
await (0, __1.defaultHandler)(request);
|
|
11
15
|
await (0, __1.defaultAclHandler)(request);
|
|
12
16
|
// Remove previous entry if it was created within 5 minutes
|
|
13
|
-
await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
17
|
+
const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
14
18
|
query.equalTo("ticket", object.get("ticket"));
|
|
15
19
|
query.descending("createdAt");
|
|
16
20
|
return query;
|
|
17
21
|
});
|
|
22
|
+
// if an entry was removed, remove the message as well
|
|
23
|
+
if (removedEntry)
|
|
24
|
+
(0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
|
|
25
|
+
// if an entry was removed, remove the message as well
|
|
26
|
+
if (removedEntry)
|
|
27
|
+
(0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
|
|
18
28
|
});
|
|
19
29
|
(0, __1.afterSaveHook)(types_1.Maintenance_Restriction, async (request) => {
|
|
20
30
|
const { object, original, user } = request;
|
|
21
31
|
// Remove entry if it has the same values as the previous entry so its simply reverted to the already existing entry
|
|
22
|
-
await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
32
|
+
const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
23
33
|
query.includeAll();
|
|
24
34
|
query.equalTo("ticket", object.get("ticket"));
|
|
25
35
|
query.notEqualTo("objectId", object.id);
|
|
@@ -27,6 +37,28 @@ async function init() {
|
|
|
27
37
|
}, (first, second) => {
|
|
28
38
|
return first.get("value") === second.get("value");
|
|
29
39
|
});
|
|
30
|
-
|
|
40
|
+
const previous = await new Parse.Query(types_1.Maintenance_Restriction)
|
|
41
|
+
.includeAll()
|
|
42
|
+
.equalTo("ticket", savedObject.get("ticket"))
|
|
43
|
+
.notEqualTo("objectId", savedObject.id)
|
|
44
|
+
.descending("createdAt")
|
|
45
|
+
.first({ useMasterKey: true });
|
|
46
|
+
// create new message log
|
|
47
|
+
await new types_1.Maintenance_Message({
|
|
48
|
+
referencedObjectId: savedObject.get("ticket")?.id,
|
|
49
|
+
classname: savedObject.get("ticket")?.className,
|
|
50
|
+
title: TRANSLATION_TITLE,
|
|
51
|
+
content: TRANSLATION_CONTENT,
|
|
52
|
+
user: user,
|
|
53
|
+
tenant: user?.get("tenant"),
|
|
54
|
+
data: {
|
|
55
|
+
type: "system",
|
|
56
|
+
translation: {
|
|
57
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
58
|
+
old: previous?.get("value") ?? "Nicht vorhanden",
|
|
59
|
+
new: savedObject?.get("value"),
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
}).save(null, { useMasterKey: true });
|
|
31
63
|
});
|
|
32
64
|
}
|
|
@@ -7,6 +7,7 @@ exports.init = init;
|
|
|
7
7
|
const bree_1 = __importDefault(require("bree"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
9
|
const __1 = require("..");
|
|
10
|
+
const BreeInstance_1 = __importDefault(require("../helper/BreeInstance"));
|
|
10
11
|
const catchError_1 = require("../helper/catchError");
|
|
11
12
|
const types_1 = require("../types");
|
|
12
13
|
bree_1.default.extend(require("@breejs/ts-worker"));
|
|
@@ -19,10 +20,7 @@ async function init() {
|
|
|
19
20
|
});
|
|
20
21
|
(0, __1.afterSaveHook)(types_1.Maintenance_Schedule_Template, async (request) => {
|
|
21
22
|
const { object, original, user } = request;
|
|
22
|
-
|
|
23
|
-
//TODO: Send mail or anything that is enabled
|
|
24
|
-
//TODO: Move bree to a separate file and use as singleton
|
|
25
|
-
startBree([object]);
|
|
23
|
+
addJobToBree([object]);
|
|
26
24
|
});
|
|
27
25
|
/**
|
|
28
26
|
* This function is called upon initialization and uses bree to schedule all jobs.
|
|
@@ -30,26 +28,27 @@ async function init() {
|
|
|
30
28
|
async function initScheduling() {
|
|
31
29
|
console.log("Init Scheduling Maintenance_Schedule_Template jobs");
|
|
32
30
|
//Get all Maintenance_Schedule_Template objects
|
|
33
|
-
const [queryError, query] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Schedule_Template).find(
|
|
31
|
+
const [queryError, query] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Schedule_Template).find({
|
|
32
|
+
useMasterKey: true,
|
|
33
|
+
}));
|
|
34
34
|
//Create an new bree object for all Maintenance_Schedule_Template objects that have cron.is_one_time = false
|
|
35
35
|
if (queryError) {
|
|
36
36
|
console.error("Error while querying Maintenance_Schedule_Template objects", queryError);
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
await addJobToBree(query);
|
|
40
40
|
}
|
|
41
|
-
async function
|
|
42
|
-
console.log("Starting Bree");
|
|
43
|
-
const jobs = [];
|
|
41
|
+
async function addJobToBree(query) {
|
|
44
42
|
for (const schedule of query) {
|
|
43
|
+
console.log(`Adding job for schedule ${schedule.id}`);
|
|
45
44
|
const cron = schedule.get("cron");
|
|
46
45
|
if (cron["is_one_time"] === false) {
|
|
47
46
|
if (cron["scheduletype"] === "human") {
|
|
48
|
-
|
|
47
|
+
BreeInstance_1.default.getInstance().add({
|
|
49
48
|
name: `Schedule ${schedule.id}`,
|
|
50
49
|
path: node_path_1.default.join(__dirname, "..", "jobs", "open_service_notifyOnSchedule.js"),
|
|
51
50
|
timeout: 0,
|
|
52
|
-
interval: createHumanReadableFormat(cron["run_cron"]),
|
|
51
|
+
interval: BreeInstance_1.default.createHumanReadableFormat(cron["run_cron"]),
|
|
53
52
|
hasSeconds: true,
|
|
54
53
|
worker: {
|
|
55
54
|
workerData: {
|
|
@@ -63,7 +62,7 @@ async function init() {
|
|
|
63
62
|
});
|
|
64
63
|
}
|
|
65
64
|
else if (cron["scheduletype"] === "quartz") {
|
|
66
|
-
|
|
65
|
+
BreeInstance_1.default.getInstance().add({
|
|
67
66
|
name: `Schedule ${schedule.id}`,
|
|
68
67
|
cron: cron["run_cron"],
|
|
69
68
|
path: node_path_1.default.join(__dirname, "..", "jobs", "open_service_notifyOnSchedule.js"),
|
|
@@ -83,79 +82,5 @@ async function init() {
|
|
|
83
82
|
}
|
|
84
83
|
}
|
|
85
84
|
}
|
|
86
|
-
//Create bree object
|
|
87
|
-
console.log("Creating bree object");
|
|
88
|
-
const bree = new bree_1.default({
|
|
89
|
-
errorHandler: (error, workerMetadata) => {
|
|
90
|
-
console.error(`An error occurred in worker ${workerMetadata.name} with the following error: ${error}`);
|
|
91
|
-
},
|
|
92
|
-
workerMessageHandler: (message) => {
|
|
93
|
-
console.log(`Worker ${message.name} sent the following message: ${message.message}`);
|
|
94
|
-
},
|
|
95
|
-
root: node_path_1.default.join(__dirname, "..", "jobs"),
|
|
96
|
-
jobs: [...jobs],
|
|
97
|
-
acceptedExtensions: ["js"],
|
|
98
|
-
defaultExtension: "js",
|
|
99
|
-
outputWorkerMetadata: false,
|
|
100
|
-
});
|
|
101
|
-
//Start bree object
|
|
102
|
-
// const graceful = new Graceful({ brees: [bree] });
|
|
103
|
-
// graceful.listen();
|
|
104
|
-
(async () => {
|
|
105
|
-
console.log("Starting bree");
|
|
106
|
-
await bree.start();
|
|
107
|
-
})();
|
|
108
|
-
}
|
|
109
|
-
// async function notifyOnSchedule() {
|
|
110
|
-
// console.log("Notify on schedule");
|
|
111
|
-
// console.log("Creating new ticket");
|
|
112
|
-
// //Create a new ticket
|
|
113
|
-
// const ticketObject = new Maintenance_Ticket();
|
|
114
|
-
// await ticketObject.save(null, { useMasterKey: true });
|
|
115
|
-
// console.log("Creating new notification object");
|
|
116
|
-
// //Create a new notification object in the database, class name: OD3_Notification
|
|
117
|
-
// const notificationObject = new Notification();
|
|
118
|
-
// notificationObject.set("title", "Maintenance Notification");
|
|
119
|
-
// notificationObject.set("description", "Maintenance is scheduled");
|
|
120
|
-
// notificationObject.set("data", { test: "test" });
|
|
121
|
-
// await notificationObject.save(null, { useMasterKey: true });
|
|
122
|
-
// console.log("Ticket and Notification object created");
|
|
123
|
-
// }
|
|
124
|
-
function createHumanReadableFormat(value) {
|
|
125
|
-
//value looks like this: "1 1 1 1 1 1 1"
|
|
126
|
-
//1. seconds
|
|
127
|
-
//2. minutes
|
|
128
|
-
//3. hours
|
|
129
|
-
//4. days
|
|
130
|
-
//5. weeks
|
|
131
|
-
//6. months
|
|
132
|
-
//7. years
|
|
133
|
-
const valueArray = value.split(" ");
|
|
134
|
-
//Should be in the format: "every 1 second" when second is 1
|
|
135
|
-
//If any value is 0, it should be ignored
|
|
136
|
-
//Values should be separated by a comma
|
|
137
|
-
const returnArray = [];
|
|
138
|
-
if (valueArray[0] !== "0") {
|
|
139
|
-
returnArray.push(`every ${valueArray[0]} seconds`);
|
|
140
|
-
}
|
|
141
|
-
if (valueArray[1] !== "0") {
|
|
142
|
-
returnArray.push(`every ${valueArray[1]} minutes`);
|
|
143
|
-
}
|
|
144
|
-
if (valueArray[2] !== "0") {
|
|
145
|
-
returnArray.push(`every ${valueArray[2]} hours`);
|
|
146
|
-
}
|
|
147
|
-
if (valueArray[3] !== "0") {
|
|
148
|
-
returnArray.push(`every ${valueArray[3]} days`);
|
|
149
|
-
}
|
|
150
|
-
if (valueArray[4] !== "0") {
|
|
151
|
-
returnArray.push(`every ${valueArray[4]} weeks`);
|
|
152
|
-
}
|
|
153
|
-
if (valueArray[5] !== "0") {
|
|
154
|
-
returnArray.push(`every ${valueArray[5]} months`);
|
|
155
|
-
}
|
|
156
|
-
if (valueArray[6] !== "0") {
|
|
157
|
-
returnArray.push(`every ${valueArray[6]} years`);
|
|
158
|
-
}
|
|
159
|
-
return returnArray.join(", ");
|
|
160
85
|
}
|
|
161
86
|
}
|
|
@@ -2,30 +2,62 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.init = init;
|
|
4
4
|
const __1 = require("..");
|
|
5
|
+
const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
|
|
5
6
|
const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
|
|
6
7
|
const types_1 = require("../types");
|
|
8
|
+
const Maintenance_Message_1 = require("./Maintenance_Message");
|
|
9
|
+
const TRANSLATION_TITLE = "maintenance:ticket.message.issuecategory.changed.title";
|
|
10
|
+
const TRANSLATION_CONTENT = "maintenance:ticket.message.issuecategory.changed.content";
|
|
7
11
|
async function init() {
|
|
8
12
|
(0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Issuecategory, async (request) => {
|
|
9
13
|
const { object, original, user } = request;
|
|
10
14
|
await (0, __1.defaultHandler)(request);
|
|
11
15
|
await (0, __1.defaultAclHandler)(request);
|
|
12
16
|
// Remove previous entry if it was created within 5 minutes
|
|
13
|
-
await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
17
|
+
const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
14
18
|
query.equalTo("ticket", object.get("ticket"));
|
|
15
19
|
query.descending("createdAt");
|
|
16
20
|
return query;
|
|
17
21
|
});
|
|
22
|
+
// if an entry was removed, remove the message as well
|
|
23
|
+
if (removedEntry)
|
|
24
|
+
(0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
|
|
18
25
|
});
|
|
19
26
|
(0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Issuecategory, async (request) => {
|
|
20
27
|
const { object, original, user } = request;
|
|
21
28
|
// Remove entry if it has the same values as the previous entry so its simply reverted to the already existing entry
|
|
22
|
-
await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
23
|
-
query.includeAll();
|
|
29
|
+
const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
24
30
|
query.equalTo("ticket", object.get("ticket"));
|
|
25
31
|
query.notEqualTo("objectId", object.id);
|
|
26
|
-
return query;
|
|
27
32
|
}, (first, second) => {
|
|
28
33
|
return (first.get("issuecategory")?.id === second.get("issuecategory")?.id);
|
|
29
34
|
});
|
|
35
|
+
const previousIssue = await new Parse.Query(types_1.Maintenance_Ticket_Issuecategory)
|
|
36
|
+
.includeAll()
|
|
37
|
+
.equalTo("ticket", savedObject.get("ticket"))
|
|
38
|
+
.notEqualTo("objectId", savedObject.id)
|
|
39
|
+
.descending("createdAt")
|
|
40
|
+
.first({ useMasterKey: true });
|
|
41
|
+
const issue = await savedObject
|
|
42
|
+
.get("issuecategory")
|
|
43
|
+
?.fetch({ useMasterKey: true });
|
|
44
|
+
// create new message log
|
|
45
|
+
await new types_1.Maintenance_Message({
|
|
46
|
+
referencedObjectId: savedObject.get("ticket")?.id,
|
|
47
|
+
classname: savedObject.get("ticket")?.className,
|
|
48
|
+
title: TRANSLATION_TITLE,
|
|
49
|
+
content: TRANSLATION_CONTENT,
|
|
50
|
+
user: user,
|
|
51
|
+
tenant: user?.get("tenant"),
|
|
52
|
+
data: {
|
|
53
|
+
type: "system",
|
|
54
|
+
translation: {
|
|
55
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
56
|
+
old: previousIssue?.get("issuecategory")?.get("name") ??
|
|
57
|
+
"Nicht vorhanden",
|
|
58
|
+
new: issue?.get("name"),
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
}).save(null, { useMasterKey: true });
|
|
30
62
|
});
|
|
31
63
|
}
|
|
@@ -2,8 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.init = init;
|
|
4
4
|
const __1 = require("..");
|
|
5
|
+
const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
|
|
5
6
|
const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
|
|
6
7
|
const types_1 = require("../types");
|
|
8
|
+
const Maintenance_Message_1 = require("./Maintenance_Message");
|
|
9
|
+
const TRANSLATION_TITLE = "maintenance:ticket.message.kanbanstate.changed.title";
|
|
10
|
+
const TRANSLATION_CONTENT = "maintenance:ticket.message.kanbanstate.changed.content";
|
|
7
11
|
async function init() {
|
|
8
12
|
(0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Kanban_State, async (request) => {
|
|
9
13
|
const { object, original, user } = request;
|
|
@@ -15,41 +19,66 @@ async function init() {
|
|
|
15
19
|
await (0, __1.requirePermission)(request, "maintenance:can-update-kanbanstate", "Permission denied.");
|
|
16
20
|
}
|
|
17
21
|
// Remove previous entry if it was created within 5 minutes
|
|
18
|
-
await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
22
|
+
const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
19
23
|
query.equalTo("ticket", object.get("ticket"));
|
|
24
|
+
query.notEqualTo("objectId", object.id);
|
|
20
25
|
query.descending("createdAt");
|
|
21
26
|
return query;
|
|
22
27
|
});
|
|
23
|
-
//
|
|
28
|
+
// if an entry was removed, remove the message as well
|
|
29
|
+
if (removedEntry)
|
|
30
|
+
(0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
|
|
24
31
|
});
|
|
25
32
|
(0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Kanban_State, async (request) => {
|
|
26
33
|
const { object, original, user } = request;
|
|
27
34
|
// Remove entry if it has the same values as the previous entry so its simply reverted to the already existing entry
|
|
28
|
-
const
|
|
29
|
-
query.includeAll();
|
|
35
|
+
const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
30
36
|
query.equalTo("ticket", object.get("ticket"));
|
|
31
37
|
query.notEqualTo("objectId", object.id);
|
|
32
|
-
return query;
|
|
33
38
|
}, (first, second) => {
|
|
34
39
|
return first.get("state")?.id === second.get("state")?.id;
|
|
35
40
|
});
|
|
41
|
+
const previousState = await new Parse.Query(types_1.Maintenance_Ticket_Kanban_State)
|
|
42
|
+
.includeAll()
|
|
43
|
+
.descending("createdAt")
|
|
44
|
+
.equalTo("ticket", savedObject.get("ticket"))
|
|
45
|
+
.notEqualTo("objectId", savedObject.id)
|
|
46
|
+
.first({ useMasterKey: true });
|
|
47
|
+
const state = await savedObject.get("state")?.fetch({ useMasterKey: true });
|
|
48
|
+
// create new message log
|
|
49
|
+
await new types_1.Maintenance_Message({
|
|
50
|
+
referencedObjectId: savedObject.get("ticket")?.id,
|
|
51
|
+
classname: savedObject.get("ticket")?.className,
|
|
52
|
+
title: TRANSLATION_TITLE,
|
|
53
|
+
content: TRANSLATION_CONTENT,
|
|
54
|
+
user: user,
|
|
55
|
+
tenant: user?.get("tenant"),
|
|
56
|
+
data: {
|
|
57
|
+
type: "system",
|
|
58
|
+
translation: {
|
|
59
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
60
|
+
old: previousState?.get("state").get("label") ?? "Nicht vorhanden",
|
|
61
|
+
new: state.get("label"),
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
}).save(null, { useMasterKey: true });
|
|
36
65
|
// Update the current state of the ticket
|
|
37
66
|
const currentTicketState = await new Parse.Query(types_1.Maintenance_Ticket_Kanban_State_Current)
|
|
38
|
-
.equalTo("ticket",
|
|
67
|
+
.equalTo("ticket", savedObject.get("ticket"))
|
|
39
68
|
.first({ useMasterKey: true });
|
|
40
69
|
// if the ticket is already in the current state table, update it
|
|
41
70
|
if (currentTicketState) {
|
|
42
|
-
currentTicketState.set("ticketState",
|
|
43
|
-
currentTicketState.set("state",
|
|
71
|
+
currentTicketState.set("ticketState", savedObject);
|
|
72
|
+
currentTicketState.set("state", savedObject.get("state"));
|
|
44
73
|
await currentTicketState.save(null, { useMasterKey: true });
|
|
45
74
|
}
|
|
46
75
|
// if the ticket is not in the current state table, create a new entry
|
|
47
76
|
else {
|
|
48
77
|
const newTicketState = new types_1.Maintenance_Ticket_Kanban_State_Current({
|
|
49
|
-
ticket:
|
|
50
|
-
ticketState:
|
|
51
|
-
state:
|
|
52
|
-
tenant:
|
|
78
|
+
ticket: savedObject.get("ticket"),
|
|
79
|
+
ticketState: savedObject,
|
|
80
|
+
state: savedObject.get("state"),
|
|
81
|
+
tenant: savedObject.get("tenant"),
|
|
53
82
|
});
|
|
54
83
|
await newTicketState.save(null, { useMasterKey: true });
|
|
55
84
|
}
|
|
@@ -2,32 +2,62 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.init = init;
|
|
4
4
|
const __1 = require("..");
|
|
5
|
+
const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
|
|
5
6
|
const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
|
|
6
7
|
const types_1 = require("../types");
|
|
8
|
+
const Maintenance_Message_1 = require("./Maintenance_Message");
|
|
9
|
+
const TRANSLATION_TITLE = "maintenance:ticket.message.source.changed.title";
|
|
10
|
+
const TRANSLATION_CONTENT = "maintenance:ticket.message.source.changed.content";
|
|
7
11
|
async function init() {
|
|
8
12
|
(0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Source, async (request) => {
|
|
9
13
|
const { object, original, user } = request;
|
|
10
14
|
await (0, __1.defaultHandler)(request);
|
|
11
15
|
await (0, __1.defaultAclHandler)(request);
|
|
12
16
|
// Remove previous entry if it was created within 5 minutes
|
|
13
|
-
await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
17
|
+
const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
14
18
|
query.equalTo("ticket", object.get("ticket"));
|
|
15
19
|
query.descending("createdAt");
|
|
16
20
|
return query;
|
|
17
21
|
});
|
|
18
|
-
//
|
|
22
|
+
// if an entry was removed, remove the message as well
|
|
23
|
+
if (removedEntry)
|
|
24
|
+
(0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
|
|
19
25
|
});
|
|
20
26
|
(0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Source, async (request) => {
|
|
21
27
|
const { object, original, user } = request;
|
|
22
28
|
// Remove entry if it has the same values as the previous entry so its simply reverted to the already existing entry
|
|
23
|
-
await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
24
|
-
query.includeAll();
|
|
29
|
+
const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
25
30
|
query.equalTo("ticket", object.get("ticket"));
|
|
26
31
|
query.notEqualTo("objectId", object.id);
|
|
27
32
|
return query;
|
|
28
33
|
}, (first, second) => {
|
|
29
34
|
return first.get("source")?.id === second.get("source")?.id;
|
|
30
35
|
});
|
|
31
|
-
|
|
36
|
+
const previousSource = await new Parse.Query(types_1.Maintenance_Ticket_Source)
|
|
37
|
+
.includeAll()
|
|
38
|
+
.equalTo("ticket", savedObject.get("ticket"))
|
|
39
|
+
.notEqualTo("objectId", savedObject.id)
|
|
40
|
+
.descending("createdAt")
|
|
41
|
+
.first({ useMasterKey: true });
|
|
42
|
+
const source = await savedObject
|
|
43
|
+
.get("source")
|
|
44
|
+
?.fetch({ useMasterKey: true });
|
|
45
|
+
// create new message log
|
|
46
|
+
await new types_1.Maintenance_Message({
|
|
47
|
+
referencedObjectId: savedObject.get("ticket")?.id,
|
|
48
|
+
classname: savedObject.get("ticket")?.className,
|
|
49
|
+
title: TRANSLATION_TITLE,
|
|
50
|
+
content: TRANSLATION_CONTENT,
|
|
51
|
+
user: user,
|
|
52
|
+
tenant: user?.get("tenant"),
|
|
53
|
+
data: {
|
|
54
|
+
type: "system",
|
|
55
|
+
translation: {
|
|
56
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
57
|
+
old: previousSource?.get("source").get("name") ?? "Nicht vorhanden",
|
|
58
|
+
new: source.get("name"),
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
}).save(null, { useMasterKey: true });
|
|
32
62
|
});
|
|
33
63
|
}
|
|
@@ -2,25 +2,32 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.init = init;
|
|
4
4
|
const __1 = require("..");
|
|
5
|
+
const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
|
|
5
6
|
const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
|
|
6
7
|
const types_1 = require("../types");
|
|
8
|
+
const Maintenance_Message_1 = require("./Maintenance_Message");
|
|
9
|
+
const TRANSLATION_TITLE = "maintenance:ticket.message.title.changed.title";
|
|
10
|
+
const TRANSLATION_CONTENT = "maintenance:ticket.message.title.changed.content";
|
|
7
11
|
async function init() {
|
|
8
12
|
(0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Title, async (request) => {
|
|
9
13
|
const { object, original, user } = request;
|
|
10
14
|
await (0, __1.defaultHandler)(request);
|
|
11
15
|
await (0, __1.defaultAclHandler)(request);
|
|
12
16
|
// Remove previous entry if it was created within 5 minutes
|
|
13
|
-
await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
17
|
+
const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
14
18
|
query.equalTo("ticket", object.get("ticket"));
|
|
15
19
|
query.descending("createdAt");
|
|
16
20
|
return query;
|
|
17
21
|
});
|
|
22
|
+
// if an entry was removed, remove the message as well
|
|
23
|
+
if (removedEntry)
|
|
24
|
+
(0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
|
|
18
25
|
// TODO
|
|
19
26
|
});
|
|
20
27
|
(0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Title, async (request) => {
|
|
21
28
|
const { object, original, user } = request;
|
|
22
29
|
// Remove entry if it has the same values as the previous entry so its simply reverted to the already existing entry
|
|
23
|
-
await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
30
|
+
const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
24
31
|
query.includeAll();
|
|
25
32
|
query.equalTo("ticket", object.get("ticket"));
|
|
26
33
|
query.notEqualTo("objectId", object.id);
|
|
@@ -28,6 +35,28 @@ async function init() {
|
|
|
28
35
|
}, (first, second) => {
|
|
29
36
|
return first.get("title") === second.get("title");
|
|
30
37
|
});
|
|
31
|
-
|
|
38
|
+
const previousTitle = await new Parse.Query(types_1.Maintenance_Ticket_Title)
|
|
39
|
+
.includeAll()
|
|
40
|
+
.descending("createdAt")
|
|
41
|
+
.equalTo("ticket", savedObject.get("ticket"))
|
|
42
|
+
.notEqualTo("objectId", savedObject.id)
|
|
43
|
+
.first({ useMasterKey: true });
|
|
44
|
+
// create new message log
|
|
45
|
+
await new types_1.Maintenance_Message({
|
|
46
|
+
referencedObjectId: savedObject.get("ticket")?.id,
|
|
47
|
+
classname: savedObject.get("ticket")?.className,
|
|
48
|
+
title: TRANSLATION_TITLE,
|
|
49
|
+
content: TRANSLATION_CONTENT,
|
|
50
|
+
user: user,
|
|
51
|
+
tenant: user?.get("tenant"),
|
|
52
|
+
data: {
|
|
53
|
+
type: "system",
|
|
54
|
+
translation: {
|
|
55
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
56
|
+
old: previousTitle?.get("title") ?? "Nicht vorhanden",
|
|
57
|
+
new: savedObject.get("title"),
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
}).save(null, { useMasterKey: true });
|
|
32
61
|
});
|
|
33
62
|
}
|
package/dist/hooks/Permission.js
CHANGED
|
@@ -2,10 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.init = init;
|
|
4
4
|
const __1 = require("..");
|
|
5
|
-
const registerPermissions_1 = require("../helper/registerPermissions");
|
|
6
5
|
const types_1 = require("../types");
|
|
7
6
|
async function init() {
|
|
8
|
-
await registerPermissions();
|
|
9
7
|
(0, __1.beforeSaveHook)(types_1.Permission, async (request) => {
|
|
10
8
|
const { object, original, user } = request;
|
|
11
9
|
await (0, __1.defaultHandler)(request);
|
|
@@ -18,27 +16,3 @@ async function init() {
|
|
|
18
16
|
// TODO
|
|
19
17
|
});
|
|
20
18
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Register all permissions in the database, if not already registered.
|
|
23
|
-
*/
|
|
24
|
-
async function registerPermissions() {
|
|
25
|
-
console.log("Register all permissions");
|
|
26
|
-
(0, registerPermissions_1.getAllPermissions)().forEach((permission) => {
|
|
27
|
-
new Parse.Query(types_1.Permission)
|
|
28
|
-
.equalTo("key", permission.key)
|
|
29
|
-
.first({ useMasterKey: true })
|
|
30
|
-
.then((result) => {
|
|
31
|
-
if (!result) {
|
|
32
|
-
console.log("Create permission", permission.key);
|
|
33
|
-
const newPermission = new types_1.Permission();
|
|
34
|
-
newPermission.set("key", permission.key);
|
|
35
|
-
newPermission.set("label", permission.label);
|
|
36
|
-
newPermission.set("description", permission.description);
|
|
37
|
-
newPermission.save({}, { useMasterKey: true });
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
console.log("Permission already exists", permission.key);
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
}
|
package/dist/index.js
CHANGED
|
@@ -28,9 +28,11 @@ const web_push_1 = __importDefault(require("web-push"));
|
|
|
28
28
|
const config_1 = require("./config");
|
|
29
29
|
const featuremap_json_1 = __importDefault(require("./featuremap.json"));
|
|
30
30
|
const _init_1 = require("./functions/_init");
|
|
31
|
+
const BreeInstance_1 = __importDefault(require("./helper/BreeInstance"));
|
|
31
32
|
const Core_Email_1 = require("./hooks/Core_Email");
|
|
32
33
|
const _init_2 = require("./hooks/_init");
|
|
33
34
|
const types_1 = require("./types");
|
|
35
|
+
const registerPermissions_1 = require("./helper/registerPermissions");
|
|
34
36
|
// export { Config } from "./helper/Config";
|
|
35
37
|
var Core_Email_2 = require("./hooks/Core_Email");
|
|
36
38
|
Object.defineProperty(exports, "sendSimpleEmail", { enumerable: true, get: function () { return Core_Email_2.sendSimpleEmail; } });
|
|
@@ -54,6 +56,7 @@ async function init() {
|
|
|
54
56
|
}
|
|
55
57
|
catch (error) { }
|
|
56
58
|
await config_1.config.init(true);
|
|
59
|
+
await initBree();
|
|
57
60
|
await initTranslations();
|
|
58
61
|
await (0, Core_Email_1.initEmailTransport)();
|
|
59
62
|
await initWebPush();
|
|
@@ -63,6 +66,19 @@ async function init() {
|
|
|
63
66
|
await initDefaultData();
|
|
64
67
|
await (0, _init_1.init)();
|
|
65
68
|
await initAutoload();
|
|
69
|
+
await initPermissions();
|
|
70
|
+
}
|
|
71
|
+
async function initBree() {
|
|
72
|
+
const bree = BreeInstance_1.default.getInstance();
|
|
73
|
+
//Start bree object
|
|
74
|
+
// const graceful = new Graceful({ brees: [bree] });
|
|
75
|
+
// graceful.listen();
|
|
76
|
+
(async () => {
|
|
77
|
+
console.log("[@openinc/parse-server-opendash] Starting bree");
|
|
78
|
+
await bree.start();
|
|
79
|
+
const jobs = BreeInstance_1.default.getAllJobs();
|
|
80
|
+
console.log("[@openinc/parse-server-opendash] Number of Bree jobs in initialization:", jobs.length);
|
|
81
|
+
})();
|
|
66
82
|
}
|
|
67
83
|
async function initTranslations() {
|
|
68
84
|
// try {
|
|
@@ -159,6 +175,41 @@ async function initDefaultData() {
|
|
|
159
175
|
console.error(error);
|
|
160
176
|
}
|
|
161
177
|
}
|
|
178
|
+
async function initPermissions() {
|
|
179
|
+
const tenant = await new Parse.Query(types_1.Tenant)
|
|
180
|
+
.descending("createdAt")
|
|
181
|
+
.first({ useMasterKey: true });
|
|
182
|
+
tenant && (await registerPermissions(tenant));
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Register all permissions in the database, if not already registered.
|
|
186
|
+
*/
|
|
187
|
+
async function registerPermissions(tenant) {
|
|
188
|
+
console.log("Register all permissions");
|
|
189
|
+
(0, registerPermissions_1.getAllPermissions)().forEach((permission) => {
|
|
190
|
+
new Parse.Query(types_1.Permission)
|
|
191
|
+
.equalTo("key", permission.key)
|
|
192
|
+
.first({ useMasterKey: true })
|
|
193
|
+
.then((result) => {
|
|
194
|
+
if (!result) {
|
|
195
|
+
console.log("Create permission", permission.key);
|
|
196
|
+
const newPermission = new types_1.Permission();
|
|
197
|
+
newPermission.set("key", permission.key);
|
|
198
|
+
newPermission.set("label", permission.label);
|
|
199
|
+
newPermission.set("description", permission.description);
|
|
200
|
+
newPermission.save({}, { useMasterKey: true });
|
|
201
|
+
}
|
|
202
|
+
else if (result.get("tenant") === undefined) {
|
|
203
|
+
console.log("Update permission tenant to default tenant", permission.key);
|
|
204
|
+
result.set("tenant", tenant);
|
|
205
|
+
result.save({}, { useMasterKey: true });
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
console.log("Permission already exists", permission.key);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
}
|
|
162
213
|
/**
|
|
163
214
|
* Checks if a user has a specific permission in OD3_Permission.
|
|
164
215
|
* @param sessionToken - The session token of the user.
|
|
File without changes
|
|
@@ -6,6 +6,7 @@ export interface Maintenance_Kanban_StateAttributes {
|
|
|
6
6
|
updatedAt: Date;
|
|
7
7
|
color: string;
|
|
8
8
|
description?: string;
|
|
9
|
+
enabled: boolean;
|
|
9
10
|
isFinished: boolean;
|
|
10
11
|
isInbox: boolean;
|
|
11
12
|
label: string;
|
|
@@ -19,6 +20,8 @@ export declare class Maintenance_Kanban_State extends Parse.Object<Maintenance_K
|
|
|
19
20
|
set color(value: string);
|
|
20
21
|
get description(): string | undefined;
|
|
21
22
|
set description(value: string | undefined);
|
|
23
|
+
get enabled(): boolean;
|
|
24
|
+
set enabled(value: boolean);
|
|
22
25
|
get isFinished(): boolean;
|
|
23
26
|
set isFinished(value: boolean);
|
|
24
27
|
get isInbox(): boolean;
|
|
@@ -17,6 +17,12 @@ class Maintenance_Kanban_State extends Parse.Object {
|
|
|
17
17
|
set description(value) {
|
|
18
18
|
super.set("description", value);
|
|
19
19
|
}
|
|
20
|
+
get enabled() {
|
|
21
|
+
return super.get("enabled");
|
|
22
|
+
}
|
|
23
|
+
set enabled(value) {
|
|
24
|
+
super.set("enabled", value);
|
|
25
|
+
}
|
|
20
26
|
get isFinished() {
|
|
21
27
|
return super.get("isFinished");
|
|
22
28
|
}
|