@openinc/parse-server-opendash 2.4.94 → 2.4.96
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/app_types/CRON_Types.d.ts +10 -0
- package/dist/app_types/CRON_Types.js +2 -0
- package/dist/functions/openinc-openservice-save-ticket-data.d.ts +10 -6
- package/dist/functions/openinc-openservice-save-ticket-data.js +99 -16
- package/dist/functions/openinc-openservice-ticket-data.d.ts +16 -1
- package/dist/functions/openinc-openservice-ticket-data.js +7 -1
- package/dist/helper/BreeInstance.d.ts +16 -0
- package/dist/helper/BreeInstance.js +78 -0
- package/dist/helper/TranslationKeys.d.ts +82 -0
- package/dist/helper/TranslationKeys.js +86 -0
- package/dist/helper/removeShorltyPreviousEntry.d.ts +2 -2
- package/dist/helper/removeShorltyPreviousEntry.js +6 -2
- package/dist/hooks/Maintenance_Downtime.js +69 -2
- package/dist/hooks/Maintenance_Duedate.js +91 -3
- package/dist/hooks/Maintenance_Frequency.js +69 -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 +467 -1
- package/dist/hooks/Maintenance_Priority.js +71 -4
- package/dist/hooks/Maintenance_Restriction.js +72 -3
- package/dist/hooks/Maintenance_Schedule_Execution.js +36 -0
- package/dist/hooks/Maintenance_Schedule_Template.js +73 -105
- package/dist/hooks/Maintenance_Ticket_Issuecategory.js +74 -4
- package/dist/hooks/Maintenance_Ticket_Kanban_State.js +78 -12
- package/dist/hooks/Maintenance_Ticket_Source.js +84 -5
- package/dist/hooks/Maintenance_Ticket_Title.js +69 -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/ML_DataSelection.d.ts +16 -0
- package/dist/types/ML_DataSelection.js +23 -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/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +4 -2
- package/package.json +1 -1
- package/schema/ML_DataSelection.json +38 -0
- package/schema/Maintenance_Kanban_State.json +5 -0
- package/schema/Maintenance_Schedule_Template.json +4 -0
|
@@ -2,24 +2,38 @@
|
|
|
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");
|
|
6
|
+
const openinc_openservice_ticket_data_1 = require("../functions/openinc-openservice-ticket-data");
|
|
5
7
|
const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
|
|
8
|
+
const TranslationKeys_1 = require("../helper/TranslationKeys");
|
|
6
9
|
const types_1 = require("../types");
|
|
10
|
+
const Maintenance_Message_1 = require("./Maintenance_Message");
|
|
11
|
+
const TRANSLATION_TITLE = TranslationKeys_1.MessageTranslationKeys.TICKETLOG.RESTRICTION.TITLE;
|
|
12
|
+
const TRANSLATION_CONTENT = TranslationKeys_1.MessageTranslationKeys.TICKETLOG.RESTRICTION.CONTENT;
|
|
13
|
+
const TRANSLATION_TITLE_MACHINELOG = TranslationKeys_1.MessageTranslationKeys.MACHINELOG.RESTRICTION.TITLE;
|
|
14
|
+
const TRANSLATION_CONTENT_MACHINELOG = TranslationKeys_1.MessageTranslationKeys.MACHINELOG.RESTRICTION.CONTENT;
|
|
7
15
|
async function init() {
|
|
8
16
|
(0, __1.beforeSaveHook)(types_1.Maintenance_Restriction, async (request) => {
|
|
9
17
|
const { object, original, user } = request;
|
|
10
18
|
await (0, __1.defaultHandler)(request);
|
|
11
19
|
await (0, __1.defaultAclHandler)(request);
|
|
12
20
|
// Remove previous entry if it was created within 5 minutes
|
|
13
|
-
await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
21
|
+
const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
14
22
|
query.equalTo("ticket", object.get("ticket"));
|
|
15
23
|
query.descending("createdAt");
|
|
16
24
|
return query;
|
|
17
25
|
});
|
|
26
|
+
// if an entry was removed, remove the message as well
|
|
27
|
+
if (removedEntry)
|
|
28
|
+
(0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
|
|
29
|
+
// if an entry was removed, remove the message as well
|
|
30
|
+
if (removedEntry)
|
|
31
|
+
(0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
|
|
18
32
|
});
|
|
19
33
|
(0, __1.afterSaveHook)(types_1.Maintenance_Restriction, async (request) => {
|
|
20
34
|
const { object, original, user } = request;
|
|
21
35
|
// 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) => {
|
|
36
|
+
const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
23
37
|
query.includeAll();
|
|
24
38
|
query.equalTo("ticket", object.get("ticket"));
|
|
25
39
|
query.notEqualTo("objectId", object.id);
|
|
@@ -27,6 +41,61 @@ async function init() {
|
|
|
27
41
|
}, (first, second) => {
|
|
28
42
|
return first.get("value") === second.get("value");
|
|
29
43
|
});
|
|
30
|
-
//
|
|
44
|
+
// fetch necessary data
|
|
45
|
+
await savedObject.fetchWithInclude(["ticket"], {
|
|
46
|
+
useMasterKey: true,
|
|
47
|
+
});
|
|
48
|
+
const previous = await new Parse.Query(types_1.Maintenance_Restriction)
|
|
49
|
+
.includeAll()
|
|
50
|
+
.equalTo("ticket", savedObject.get("ticket"))
|
|
51
|
+
.notEqualTo("objectId", savedObject.id)
|
|
52
|
+
.descending("createdAt")
|
|
53
|
+
.first({ useMasterKey: true });
|
|
54
|
+
// create new message log
|
|
55
|
+
await new types_1.Maintenance_Message({
|
|
56
|
+
referencedObjectId: savedObject.get("ticket")?.id,
|
|
57
|
+
classname: savedObject.get("ticket")?.className,
|
|
58
|
+
title: TRANSLATION_TITLE,
|
|
59
|
+
content: TRANSLATION_CONTENT,
|
|
60
|
+
user: user,
|
|
61
|
+
tenant: user?.get("tenant"),
|
|
62
|
+
data: {
|
|
63
|
+
type: "system",
|
|
64
|
+
translation: {
|
|
65
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
66
|
+
old: previous?.get("value") ?? "Nicht vorhanden",
|
|
67
|
+
new: savedObject?.get("value"),
|
|
68
|
+
},
|
|
69
|
+
origin: {
|
|
70
|
+
id: savedObject.id,
|
|
71
|
+
classname: savedObject.className,
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
}).save(null, { useMasterKey: true });
|
|
75
|
+
// to machinelog
|
|
76
|
+
const source = (await (0, openinc_openservice_ticket_data_1.getTicketSource)(savedObject.get("ticket")))?.get("source");
|
|
77
|
+
if (source) {
|
|
78
|
+
await new types_1.Maintenance_Message({
|
|
79
|
+
referencedObjectId: source?.id,
|
|
80
|
+
classname: source?.className,
|
|
81
|
+
title: TRANSLATION_TITLE_MACHINELOG,
|
|
82
|
+
content: TRANSLATION_CONTENT_MACHINELOG,
|
|
83
|
+
user: user,
|
|
84
|
+
tenant: user?.get("tenant"),
|
|
85
|
+
data: {
|
|
86
|
+
type: "system",
|
|
87
|
+
translation: {
|
|
88
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
89
|
+
old: previous?.get("value") ?? "Nicht vorhanden",
|
|
90
|
+
new: savedObject?.get("value"),
|
|
91
|
+
ticketName: savedObject.get("ticket")?.get("title"),
|
|
92
|
+
},
|
|
93
|
+
origin: {
|
|
94
|
+
id: savedObject.get("ticket")?.id,
|
|
95
|
+
classname: savedObject.get("ticket")?.className,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
}).save(null, { useMasterKey: true });
|
|
99
|
+
}
|
|
31
100
|
});
|
|
32
101
|
}
|
|
@@ -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 catchError_1 = require("../helper/catchError");
|
|
7
|
+
const TranslationKeys_1 = require("../helper/TranslationKeys");
|
|
6
8
|
const types_1 = require("../types");
|
|
9
|
+
const TRANSLATION_TITLE = TranslationKeys_1.MessageTranslationKeys.MACHINELOG.SCHEDULEEXECUTION.TITLE;
|
|
10
|
+
const TRANSLATION_CONTENT = TranslationKeys_1.MessageTranslationKeys.MACHINELOG.SCHEDULEEXECUTION.CONTENT;
|
|
7
11
|
async function init() {
|
|
8
12
|
(0, __1.beforeSaveHook)(types_1.Maintenance_Schedule_Execution, async (request) => {
|
|
9
13
|
const { object, original, user } = request;
|
|
@@ -12,6 +16,13 @@ async function init() {
|
|
|
12
16
|
});
|
|
13
17
|
(0, __1.afterSaveHook)(types_1.Maintenance_Schedule_Execution, async (request) => {
|
|
14
18
|
const { object, original, user } = request;
|
|
19
|
+
// save schedule message to source
|
|
20
|
+
addMachinelogMessage(object, user);
|
|
21
|
+
//If this is an update, do nothing
|
|
22
|
+
if (original !== undefined) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
//If this is a new object, create all steps from the origin
|
|
15
26
|
const tenant = object.get("tenant")
|
|
16
27
|
? object.get("tenant")
|
|
17
28
|
: Parse.User.current()
|
|
@@ -61,3 +72,28 @@ async function init() {
|
|
|
61
72
|
}
|
|
62
73
|
});
|
|
63
74
|
}
|
|
75
|
+
async function addMachinelogMessage(object, user) {
|
|
76
|
+
const source = await object.get("source")?.fetch({ useMasterKey: true });
|
|
77
|
+
if (source)
|
|
78
|
+
new types_1.Maintenance_Message({
|
|
79
|
+
referencedObjectId: source.id,
|
|
80
|
+
classname: source.className,
|
|
81
|
+
title: TRANSLATION_TITLE,
|
|
82
|
+
content: TRANSLATION_CONTENT,
|
|
83
|
+
user: user,
|
|
84
|
+
tenant: user.get("tenant"),
|
|
85
|
+
displayAt: object.get("finishedAt") ?? object.get("createdAt"),
|
|
86
|
+
data: {
|
|
87
|
+
type: "system",
|
|
88
|
+
origin: {
|
|
89
|
+
id: object.id,
|
|
90
|
+
classname: object.className,
|
|
91
|
+
},
|
|
92
|
+
translation: {
|
|
93
|
+
title: object.get("title"),
|
|
94
|
+
description: object.get("description"),
|
|
95
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
}).save(null, { useMasterKey: true });
|
|
99
|
+
}
|
|
@@ -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
|
+
await addJobToBree([object]);
|
|
26
24
|
});
|
|
27
25
|
/**
|
|
28
26
|
* This function is called upon initialization and uses bree to schedule all jobs.
|
|
@@ -30,44 +28,67 @@ 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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
45
|
+
try {
|
|
46
|
+
let newjob = undefined;
|
|
47
|
+
if (cron.is_one_time === false) {
|
|
48
|
+
if (cron.scheduletype === "human") {
|
|
49
|
+
newjob = {
|
|
50
|
+
name: `Schedule ${schedule.id}`,
|
|
51
|
+
path: node_path_1.default.join(__dirname, "..", "jobs", "open_service_notifyOnSchedule.js"),
|
|
52
|
+
timeout: 0,
|
|
53
|
+
interval: BreeInstance_1.default.createHumanReadableFormat(cron.run_cron),
|
|
54
|
+
hasSeconds: true,
|
|
55
|
+
worker: {
|
|
56
|
+
workerData: {
|
|
57
|
+
scheduleId: schedule.id,
|
|
58
|
+
ParseAppId: Parse.applicationId,
|
|
59
|
+
ParseJSKey: Parse.javaScriptKey,
|
|
60
|
+
ParseMasterKey: Parse.masterKey,
|
|
61
|
+
ParseServerURL: Parse.serverURL,
|
|
62
|
+
},
|
|
61
63
|
},
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
else if (cron.scheduletype === "quartz") {
|
|
67
|
+
newjob = {
|
|
68
|
+
name: `Schedule ${schedule.id}`,
|
|
69
|
+
cron: cron.run_cron,
|
|
70
|
+
path: node_path_1.default.join(__dirname, "..", "jobs", "open_service_notifyOnSchedule.js"),
|
|
71
|
+
timeout: 0,
|
|
72
|
+
interval: 0,
|
|
73
|
+
hasSeconds: true,
|
|
74
|
+
worker: {
|
|
75
|
+
workerData: {
|
|
76
|
+
scheduleId: schedule.id,
|
|
77
|
+
ParseAppId: Parse.applicationId,
|
|
78
|
+
ParseJSKey: Parse.javaScriptKey,
|
|
79
|
+
ParseMasterKey: Parse.masterKey,
|
|
80
|
+
ParseServerURL: Parse.serverURL,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
64
85
|
}
|
|
65
|
-
else
|
|
66
|
-
|
|
86
|
+
else {
|
|
87
|
+
// If the job is a one time job, we will schedule it to run once
|
|
88
|
+
newjob = {
|
|
67
89
|
name: `Schedule ${schedule.id}`,
|
|
68
|
-
|
|
90
|
+
date: cron.run_startdate,
|
|
69
91
|
path: node_path_1.default.join(__dirname, "..", "jobs", "open_service_notifyOnSchedule.js"),
|
|
70
|
-
timeout: 0,
|
|
71
92
|
interval: 0,
|
|
72
93
|
hasSeconds: true,
|
|
73
94
|
worker: {
|
|
@@ -79,83 +100,30 @@ async function init() {
|
|
|
79
100
|
ParseServerURL: Parse.serverURL,
|
|
80
101
|
},
|
|
81
102
|
},
|
|
82
|
-
}
|
|
103
|
+
};
|
|
83
104
|
}
|
|
105
|
+
if (newjob === undefined) {
|
|
106
|
+
console.error("newjob is undefined");
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
//Get all jobs from bree and check whether the job already exists
|
|
110
|
+
const jobs = BreeInstance_1.default.getAllJobs();
|
|
111
|
+
let jobExists = false;
|
|
112
|
+
for (const job of jobs) {
|
|
113
|
+
if (job.name === newjob.name) {
|
|
114
|
+
jobExists = true;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (jobExists) {
|
|
119
|
+
console.log(`Job for schedule ${schedule.id} already exists`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
await BreeInstance_1.default.getInstance().add(newjob);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.warn(`Error while adding job for schedule ${schedule.id}`, error);
|
|
84
126
|
}
|
|
85
127
|
}
|
|
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
128
|
}
|
|
161
129
|
}
|
|
@@ -2,30 +2,100 @@
|
|
|
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");
|
|
6
|
+
const openinc_openservice_ticket_data_1 = require("../functions/openinc-openservice-ticket-data");
|
|
5
7
|
const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
|
|
8
|
+
const TranslationKeys_1 = require("../helper/TranslationKeys");
|
|
6
9
|
const types_1 = require("../types");
|
|
10
|
+
const Maintenance_Message_1 = require("./Maintenance_Message");
|
|
11
|
+
const TRANSLATION_TITLE = TranslationKeys_1.MessageTranslationKeys.TICKETLOG.ISSUECATEGORY.TITLE;
|
|
12
|
+
const TRANSLATION_CONTENT = TranslationKeys_1.MessageTranslationKeys.TICKETLOG.ISSUECATEGORY.CONTENT;
|
|
13
|
+
const TRANSLATION_TITLE_MACHINELOG = TranslationKeys_1.MessageTranslationKeys.MACHINELOG.ISSUECATEGORY.TITLE;
|
|
14
|
+
const TRANSLATION_CONTENT_MACHINELOG = TranslationKeys_1.MessageTranslationKeys.MACHINELOG.ISSUECATEGORY.CONTENT;
|
|
7
15
|
async function init() {
|
|
8
16
|
(0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Issuecategory, async (request) => {
|
|
9
17
|
const { object, original, user } = request;
|
|
10
18
|
await (0, __1.defaultHandler)(request);
|
|
11
19
|
await (0, __1.defaultAclHandler)(request);
|
|
12
20
|
// Remove previous entry if it was created within 5 minutes
|
|
13
|
-
await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
21
|
+
const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
14
22
|
query.equalTo("ticket", object.get("ticket"));
|
|
15
23
|
query.descending("createdAt");
|
|
16
24
|
return query;
|
|
17
25
|
});
|
|
26
|
+
// if an entry was removed, remove the message as well
|
|
27
|
+
if (removedEntry)
|
|
28
|
+
(0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
|
|
18
29
|
});
|
|
19
30
|
(0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Issuecategory, async (request) => {
|
|
20
31
|
const { object, original, user } = request;
|
|
21
32
|
// 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();
|
|
33
|
+
const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
24
34
|
query.equalTo("ticket", object.get("ticket"));
|
|
25
35
|
query.notEqualTo("objectId", object.id);
|
|
26
|
-
return query;
|
|
27
36
|
}, (first, second) => {
|
|
28
37
|
return (first.get("issuecategory")?.id === second.get("issuecategory")?.id);
|
|
29
38
|
});
|
|
39
|
+
// fetch necessary data
|
|
40
|
+
await savedObject.fetchWithInclude(["ticket", "issuecategory"], {
|
|
41
|
+
useMasterKey: true,
|
|
42
|
+
});
|
|
43
|
+
const previousIssue = await new Parse.Query(types_1.Maintenance_Ticket_Issuecategory)
|
|
44
|
+
.includeAll()
|
|
45
|
+
.equalTo("ticket", savedObject.get("ticket"))
|
|
46
|
+
.notEqualTo("objectId", savedObject.id)
|
|
47
|
+
.descending("createdAt")
|
|
48
|
+
.first({ useMasterKey: true });
|
|
49
|
+
const issue = await savedObject
|
|
50
|
+
.get("issuecategory")
|
|
51
|
+
?.fetch({ useMasterKey: true });
|
|
52
|
+
// create new message log
|
|
53
|
+
await new types_1.Maintenance_Message({
|
|
54
|
+
referencedObjectId: savedObject.get("ticket")?.id,
|
|
55
|
+
classname: savedObject.get("ticket")?.className,
|
|
56
|
+
title: TRANSLATION_TITLE,
|
|
57
|
+
content: TRANSLATION_CONTENT,
|
|
58
|
+
user: user,
|
|
59
|
+
tenant: user?.get("tenant"),
|
|
60
|
+
data: {
|
|
61
|
+
type: "system",
|
|
62
|
+
translation: {
|
|
63
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
64
|
+
old: previousIssue?.get("issuecategory")?.get("name") ??
|
|
65
|
+
"Nicht vorhanden",
|
|
66
|
+
new: issue?.get("name"),
|
|
67
|
+
},
|
|
68
|
+
origin: {
|
|
69
|
+
id: savedObject.id,
|
|
70
|
+
classname: savedObject.className,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
}).save(null, { useMasterKey: true });
|
|
74
|
+
// to machinelog
|
|
75
|
+
const source = (await (0, openinc_openservice_ticket_data_1.getTicketSource)(savedObject.get("ticket")))?.get("source");
|
|
76
|
+
if (source) {
|
|
77
|
+
await new types_1.Maintenance_Message({
|
|
78
|
+
referencedObjectId: source?.id,
|
|
79
|
+
classname: source?.className,
|
|
80
|
+
title: TRANSLATION_TITLE_MACHINELOG,
|
|
81
|
+
content: TRANSLATION_CONTENT_MACHINELOG,
|
|
82
|
+
user: user,
|
|
83
|
+
tenant: user?.get("tenant"),
|
|
84
|
+
data: {
|
|
85
|
+
type: "system",
|
|
86
|
+
translation: {
|
|
87
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
88
|
+
old: previousIssue?.get("issuecategory")?.get("name") ??
|
|
89
|
+
"Nicht vorhanden",
|
|
90
|
+
new: issue?.get("name"),
|
|
91
|
+
ticketName: savedObject.get("ticket")?.get("title"),
|
|
92
|
+
},
|
|
93
|
+
origin: {
|
|
94
|
+
id: savedObject.get("ticket")?.id,
|
|
95
|
+
classname: savedObject.get("ticket")?.className,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
}).save(null, { useMasterKey: true });
|
|
99
|
+
}
|
|
30
100
|
});
|
|
31
101
|
}
|
|
@@ -2,8 +2,16 @@
|
|
|
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");
|
|
6
|
+
const openinc_openservice_ticket_data_1 = require("../functions/openinc-openservice-ticket-data");
|
|
5
7
|
const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
|
|
8
|
+
const TranslationKeys_1 = require("../helper/TranslationKeys");
|
|
6
9
|
const types_1 = require("../types");
|
|
10
|
+
const Maintenance_Message_1 = require("./Maintenance_Message");
|
|
11
|
+
const TRANSLATION_TITLE = TranslationKeys_1.MessageTranslationKeys.TICKETLOG.KANBANSTATE.TITLE;
|
|
12
|
+
const TRANSLATION_CONTENT = TranslationKeys_1.MessageTranslationKeys.TICKETLOG.KANBANSTATE.CONTENT;
|
|
13
|
+
const TRANSLATION_TITLE_MACHINELOG = TranslationKeys_1.MessageTranslationKeys.MACHINELOG.KANBANSTATE.TITLE;
|
|
14
|
+
const TRANSLATION_CONTENT_MACHINELOG = TranslationKeys_1.MessageTranslationKeys.MACHINELOG.KANBANSTATE.CONTENT;
|
|
7
15
|
async function init() {
|
|
8
16
|
(0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Kanban_State, async (request) => {
|
|
9
17
|
const { object, original, user } = request;
|
|
@@ -15,43 +23,101 @@ async function init() {
|
|
|
15
23
|
await (0, __1.requirePermission)(request, "maintenance:can-update-kanbanstate", "Permission denied.");
|
|
16
24
|
}
|
|
17
25
|
// Remove previous entry if it was created within 5 minutes
|
|
18
|
-
await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
26
|
+
const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
19
27
|
query.equalTo("ticket", object.get("ticket"));
|
|
28
|
+
query.notEqualTo("objectId", object.id);
|
|
20
29
|
query.descending("createdAt");
|
|
21
30
|
return query;
|
|
22
31
|
});
|
|
23
|
-
//
|
|
32
|
+
// if an entry was removed, remove the message as well
|
|
33
|
+
if (removedEntry)
|
|
34
|
+
(0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
|
|
24
35
|
});
|
|
25
36
|
(0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Kanban_State, async (request) => {
|
|
26
37
|
const { object, original, user } = request;
|
|
27
38
|
// 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();
|
|
39
|
+
const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
|
|
30
40
|
query.equalTo("ticket", object.get("ticket"));
|
|
31
41
|
query.notEqualTo("objectId", object.id);
|
|
32
|
-
return query;
|
|
33
42
|
}, (first, second) => {
|
|
34
43
|
return first.get("state")?.id === second.get("state")?.id;
|
|
35
44
|
});
|
|
45
|
+
// fetch necessary data
|
|
46
|
+
await savedObject.fetchWithInclude(["ticket", "state"], {
|
|
47
|
+
useMasterKey: true,
|
|
48
|
+
});
|
|
49
|
+
const previousState = await new Parse.Query(types_1.Maintenance_Ticket_Kanban_State)
|
|
50
|
+
.includeAll()
|
|
51
|
+
.descending("createdAt")
|
|
52
|
+
.equalTo("ticket", savedObject.get("ticket"))
|
|
53
|
+
.notEqualTo("objectId", savedObject.id)
|
|
54
|
+
.first({ useMasterKey: true });
|
|
55
|
+
const state = await savedObject.get("state")?.fetch({ useMasterKey: true });
|
|
56
|
+
// create new message log
|
|
57
|
+
await new types_1.Maintenance_Message({
|
|
58
|
+
referencedObjectId: savedObject.get("ticket")?.id,
|
|
59
|
+
classname: savedObject.get("ticket")?.className,
|
|
60
|
+
title: TRANSLATION_TITLE,
|
|
61
|
+
content: TRANSLATION_CONTENT,
|
|
62
|
+
user: user,
|
|
63
|
+
tenant: user?.get("tenant"),
|
|
64
|
+
data: {
|
|
65
|
+
type: "system",
|
|
66
|
+
translation: {
|
|
67
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
68
|
+
old: previousState?.get("state").get("label") ?? "Nicht vorhanden",
|
|
69
|
+
new: state.get("label"),
|
|
70
|
+
},
|
|
71
|
+
origin: {
|
|
72
|
+
id: savedObject.id,
|
|
73
|
+
classname: savedObject.className,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
}).save(null, { useMasterKey: true });
|
|
36
77
|
// Update the current state of the ticket
|
|
37
78
|
const currentTicketState = await new Parse.Query(types_1.Maintenance_Ticket_Kanban_State_Current)
|
|
38
|
-
.equalTo("ticket",
|
|
79
|
+
.equalTo("ticket", savedObject.get("ticket"))
|
|
39
80
|
.first({ useMasterKey: true });
|
|
40
81
|
// if the ticket is already in the current state table, update it
|
|
41
82
|
if (currentTicketState) {
|
|
42
|
-
currentTicketState.set("ticketState",
|
|
43
|
-
currentTicketState.set("state",
|
|
83
|
+
currentTicketState.set("ticketState", savedObject);
|
|
84
|
+
currentTicketState.set("state", savedObject.get("state"));
|
|
44
85
|
await currentTicketState.save(null, { useMasterKey: true });
|
|
45
86
|
}
|
|
46
87
|
// if the ticket is not in the current state table, create a new entry
|
|
47
88
|
else {
|
|
48
89
|
const newTicketState = new types_1.Maintenance_Ticket_Kanban_State_Current({
|
|
49
|
-
ticket:
|
|
50
|
-
ticketState:
|
|
51
|
-
state:
|
|
52
|
-
tenant:
|
|
90
|
+
ticket: savedObject.get("ticket"),
|
|
91
|
+
ticketState: savedObject,
|
|
92
|
+
state: savedObject.get("state"),
|
|
93
|
+
tenant: savedObject.get("tenant"),
|
|
53
94
|
});
|
|
54
95
|
await newTicketState.save(null, { useMasterKey: true });
|
|
55
96
|
}
|
|
97
|
+
// to machinelog
|
|
98
|
+
const source = (await (0, openinc_openservice_ticket_data_1.getTicketSource)(savedObject.get("ticket")))?.get("source");
|
|
99
|
+
if (source) {
|
|
100
|
+
await new types_1.Maintenance_Message({
|
|
101
|
+
referencedObjectId: source?.id,
|
|
102
|
+
classname: source?.className,
|
|
103
|
+
title: TRANSLATION_TITLE_MACHINELOG,
|
|
104
|
+
content: TRANSLATION_CONTENT_MACHINELOG,
|
|
105
|
+
user: user,
|
|
106
|
+
tenant: user?.get("tenant"),
|
|
107
|
+
data: {
|
|
108
|
+
type: "system",
|
|
109
|
+
translation: {
|
|
110
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
111
|
+
old: previousState?.get("state").get("label") ?? "Nicht vorhanden",
|
|
112
|
+
new: state.get("label"),
|
|
113
|
+
ticketName: savedObject.get("ticket")?.get("title"),
|
|
114
|
+
},
|
|
115
|
+
origin: {
|
|
116
|
+
id: savedObject.get("ticket")?.id,
|
|
117
|
+
classname: savedObject.get("ticket")?.className,
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
}).save(null, { useMasterKey: true });
|
|
121
|
+
}
|
|
56
122
|
});
|
|
57
123
|
}
|