@openinc/parse-server-opendash 2.4.99 → 2.4.101
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/OpenWareTicketObject.d.ts +11 -0
- package/dist/app_types/OpenWareTicketObject.js +2 -0
- package/dist/app_types/index.d.ts +2 -0
- package/dist/featuremap.json +3 -0
- package/dist/functions/openinc-openservice-save-ticket-data.d.ts +3 -1
- package/dist/functions/openinc-openservice-save-ticket-data.js +207 -21
- package/dist/functions/openinc-openservice-ticket-data.d.ts +7 -3
- package/dist/functions/openinc-openservice-ticket-data.js +22 -2
- package/dist/helper/TicketData.d.ts +2 -1
- package/dist/helper/TranslationKeys.d.ts +16 -0
- package/dist/helper/TranslationKeys.js +16 -0
- package/dist/hooks/Config_open_service.js +1 -1
- package/dist/hooks/Maintenance_Message.js +41 -1
- package/dist/hooks/Maintenance_Project.d.ts +1 -0
- package/dist/hooks/Maintenance_Project.js +17 -0
- package/dist/hooks/Maintenance_Ticket_Material.d.ts +9 -0
- package/dist/hooks/Maintenance_Ticket_Material.js +98 -0
- package/dist/hooks/Maintenance_Ticket_Project.d.ts +1 -0
- package/dist/hooks/Maintenance_Ticket_Project.js +78 -0
- package/dist/ow.d.ts +2 -1
- package/dist/types/Maintenance_Project.d.ts +47 -0
- package/dist/types/Maintenance_Project.js +74 -0
- package/dist/types/Maintenance_Schedule_Step.d.ts +17 -3
- package/dist/types/Maintenance_Ticket.d.ts +4 -0
- package/dist/types/Maintenance_Ticket.js +6 -0
- package/dist/types/Maintenance_Ticket_Material.d.ts +25 -0
- package/dist/types/Maintenance_Ticket_Material.js +35 -0
- package/dist/types/Maintenance_Ticket_Project.d.ts +26 -0
- package/dist/types/Maintenance_Ticket_Project.js +35 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.js +7 -1
- package/package.json +10 -10
- package/schema/Maintenance_Project.json +85 -0
- package/schema/Maintenance_Ticket.json +5 -0
- package/schema/Maintenance_Ticket_Material.json +50 -0
- package/schema/Maintenance_Ticket_Project.json +50 -0
- package/dist/functions/openinc-register-permission.d.ts +0 -10
- package/dist/functions/openinc-register-permission.js +0 -51
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Maintenance_Downtime, Maintenance_Frequency, Maintenance_Priority, Maintenance_Restriction, Maintenance_Ticket, Maintenance_Ticket_Issuecategory, Maintenance_Ticket_Kanban_State, Maintenance_Ticket_Source } from "../types";
|
|
2
|
+
export type OpenWareTicketObject = {
|
|
3
|
+
ticket: Maintenance_Ticket;
|
|
4
|
+
priority: Maintenance_Priority | undefined;
|
|
5
|
+
downtime: Maintenance_Downtime | undefined;
|
|
6
|
+
frequency: Maintenance_Frequency | undefined;
|
|
7
|
+
restriction: Maintenance_Restriction | undefined;
|
|
8
|
+
issuecategory: Maintenance_Ticket_Issuecategory | undefined;
|
|
9
|
+
state: Maintenance_Ticket_Kanban_State | undefined;
|
|
10
|
+
source: Maintenance_Ticket_Source;
|
|
11
|
+
};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { ConfigKeys } from "./ConfigKeys";
|
|
2
|
+
export { ScheduleCronObjectType, ScheduleType } from "./CRON_Types";
|
|
2
3
|
export { Notifications } from "./Notifications";
|
|
4
|
+
export { OpenWareTicketObject } from "./OpenWareTicketObject";
|
|
3
5
|
export { Permissions } from "./Permissions";
|
package/dist/featuremap.json
CHANGED
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"OD3_Maintenance_Message_Body": "MAINTENANCE",
|
|
54
54
|
"OD3_Maintenance_Order": "MAINTENANCE",
|
|
55
55
|
"OD3_Maintenance_Priority": "MAINTENANCE",
|
|
56
|
+
"OD3_Maintenance_Project": "MAINTENANCE",
|
|
56
57
|
"OD3_Maintenance_Restriction": "MAINTENANCE",
|
|
57
58
|
"OD3_Maintenance_Schedule_Execution": "MAINTENANCE",
|
|
58
59
|
"OD3_Maintenance_Schedule_Execution_Step": "MAINTENANCE",
|
|
@@ -65,6 +66,8 @@
|
|
|
65
66
|
"OD3_Maintenance_Ticket_Issuecategory": "MAINTENANCE",
|
|
66
67
|
"OD3_Maintenance_Ticket_Kanban_State": "MAINTENANCE",
|
|
67
68
|
"OD3_Maintenance_Ticket_Kanban_State_Current": "MAINTENANCE",
|
|
69
|
+
"OD3_Maintenance_Ticket_Material": "MAINTENANCE",
|
|
70
|
+
"OD3_Maintenance_Ticket_Project": "MAINTENANCE",
|
|
68
71
|
"OD3_Maintenance_Ticket_Source": "MAINTENANCE",
|
|
69
72
|
"OD3_Maintenance_Ticket_Title": "MAINTENANCE",
|
|
70
73
|
"OD3_MES_Article": "MONITORING",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { _User, Maintenance_Ticket } from "../types";
|
|
2
|
+
import { Material } from "../hooks/Maintenance_Ticket_Material";
|
|
2
3
|
export type MessageData = {
|
|
3
4
|
type?: "userinput" | "system";
|
|
4
5
|
translation?: {
|
|
@@ -30,13 +31,14 @@ type Values = {
|
|
|
30
31
|
frequency?: number;
|
|
31
32
|
restriction?: number;
|
|
32
33
|
date?: string;
|
|
33
|
-
item?: string[];
|
|
34
34
|
assignedTo?: Array<{
|
|
35
35
|
type: "user" | "role";
|
|
36
36
|
id: string;
|
|
37
37
|
}>;
|
|
38
38
|
state?: string;
|
|
39
39
|
dailySchedule?: string;
|
|
40
|
+
material?: Material[];
|
|
41
|
+
project?: string;
|
|
40
42
|
};
|
|
41
43
|
export declare function getUsername(user: _User | undefined): string;
|
|
42
44
|
export declare function init(name: string): Promise<void>;
|
|
@@ -4,6 +4,8 @@ exports.getUsername = getUsername;
|
|
|
4
4
|
exports.init = init;
|
|
5
5
|
exports.saveTicketData = saveTicketData;
|
|
6
6
|
const parse_1 = require("parse");
|
|
7
|
+
const catchError_1 = require("../helper/catchError");
|
|
8
|
+
const ow_1 = require("../ow");
|
|
7
9
|
const types_1 = require("../types");
|
|
8
10
|
function getUsername(user) {
|
|
9
11
|
if (!user)
|
|
@@ -51,6 +53,16 @@ async function saveTicketData(data, user) {
|
|
|
51
53
|
? { sessionToken: user.getSessionToken() }
|
|
52
54
|
: { useMasterKey: true };
|
|
53
55
|
const ticket = await getTicketObject(data, user, fetchOptions);
|
|
56
|
+
const owticketobj = {
|
|
57
|
+
ticket: ticket,
|
|
58
|
+
priority: undefined,
|
|
59
|
+
downtime: undefined,
|
|
60
|
+
restriction: undefined,
|
|
61
|
+
frequency: undefined,
|
|
62
|
+
issuecategory: undefined,
|
|
63
|
+
state: undefined,
|
|
64
|
+
source: new types_1.Maintenance_Ticket_Source(),
|
|
65
|
+
};
|
|
54
66
|
// needs to be the first save to save a message before data change messages are created on ticket creation
|
|
55
67
|
if (data.message)
|
|
56
68
|
await saveMessage(ticket, data.message, fetchOptions, data);
|
|
@@ -62,30 +74,180 @@ async function saveTicketData(data, user) {
|
|
|
62
74
|
await saveDailySchedule(ticket, data.dailySchedule, fetchOptions);
|
|
63
75
|
if (data.duedate)
|
|
64
76
|
await saveDuedate(ticket, data.duedate, fetchOptions);
|
|
65
|
-
if (data.priority !== undefined)
|
|
66
|
-
await savePriority(ticket, data.priority, fetchOptions);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (data.
|
|
70
|
-
await
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if (data.
|
|
74
|
-
await
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
if (data.priority !== undefined) {
|
|
78
|
+
const savedpriority = await savePriority(ticket, data.priority, fetchOptions);
|
|
79
|
+
owticketobj.priority = savedpriority;
|
|
80
|
+
}
|
|
81
|
+
if (data.downtime !== undefined) {
|
|
82
|
+
const saveddowntime = await saveDowntime(ticket, data.downtime, fetchOptions);
|
|
83
|
+
owticketobj.downtime = saveddowntime;
|
|
84
|
+
}
|
|
85
|
+
if (data.frequency !== undefined) {
|
|
86
|
+
const savedfrequency = await saveFrequency(ticket, data.frequency, fetchOptions);
|
|
87
|
+
owticketobj.frequency = savedfrequency;
|
|
88
|
+
}
|
|
89
|
+
if (data.restriction !== undefined) {
|
|
90
|
+
const savedrestriction = await saveRestriction(ticket, data.restriction, fetchOptions);
|
|
91
|
+
owticketobj.restriction = savedrestriction;
|
|
92
|
+
}
|
|
93
|
+
if (data.issuecategory) {
|
|
94
|
+
const savedissuecategory = await saveIssueCategory(ticket, data.issuecategory, fetchOptions);
|
|
95
|
+
const [fetchedSavedIssuecategoryError, fetchedSavedIssuecategory] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Ticket_Issuecategory)
|
|
96
|
+
.include("issuecategory")
|
|
97
|
+
.get(savedissuecategory.id));
|
|
98
|
+
if (fetchedSavedIssuecategoryError) {
|
|
99
|
+
console.log("Error fetching saved issue category", fetchedSavedIssuecategoryError);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
owticketobj.issuecategory = fetchedSavedIssuecategory;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (data.state) {
|
|
106
|
+
const savedstate = await saveState(ticket, data.state, fetchOptions);
|
|
107
|
+
const [fetchedSavedStateError, fetchedSavedState] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Ticket_Kanban_State)
|
|
108
|
+
.include("state")
|
|
109
|
+
.get(savedstate.id));
|
|
110
|
+
if (fetchedSavedStateError) {
|
|
111
|
+
console.log("Error fetching saved state", fetchedSavedStateError);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
owticketobj.state = fetchedSavedState;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
77
117
|
if (data.media)
|
|
78
118
|
await saveMedia(ticket, data.media, fetchOptions);
|
|
119
|
+
if (data.material)
|
|
120
|
+
await saveMaterial(ticket, data.material, fetchOptions);
|
|
121
|
+
if (data.project)
|
|
122
|
+
await saveTicketProject(ticket, data.project, fetchOptions);
|
|
79
123
|
// save defaults
|
|
80
124
|
if (!data.issuecategory && !data.existingTicketId)
|
|
81
125
|
await saveDefaultIssueCategory(ticket, fetchOptions);
|
|
82
126
|
if (!data.state && !data.existingTicketId)
|
|
83
127
|
await saveDefaultState(ticket, fetchOptions);
|
|
84
128
|
// save source last so the machinelog does not have the initialization messages of the ticket data
|
|
85
|
-
if (data.source)
|
|
129
|
+
if (data.source) {
|
|
86
130
|
await saveSource(ticket, data.source, fetchOptions);
|
|
131
|
+
}
|
|
132
|
+
//Get source from ticket and save to openware
|
|
133
|
+
const [fetchedTicketSourceError, ticketsource] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Ticket_Source)
|
|
134
|
+
.equalTo("ticket", new types_1.Maintenance_Ticket({ objectId: ticket.id }))
|
|
135
|
+
.descending("createdAt")
|
|
136
|
+
.include("source")
|
|
137
|
+
.first({ useMasterKey: true }));
|
|
138
|
+
if (fetchedTicketSourceError) {
|
|
139
|
+
console.log("Error fetching saved source", fetchedTicketSourceError);
|
|
140
|
+
}
|
|
141
|
+
else if (ticketsource && ticketsource.get("source")) {
|
|
142
|
+
owticketobj.source = ticketsource;
|
|
143
|
+
// publish to openware
|
|
144
|
+
await publishToOpenWare(owticketobj, ticket, ticketsource.get("source").id);
|
|
145
|
+
}
|
|
87
146
|
return ticket;
|
|
88
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Publishes the ticket to open.WARE with all changed data
|
|
150
|
+
* @param owticketobj OpenWareTicketObject
|
|
151
|
+
* @param source OD3_Source
|
|
152
|
+
*/
|
|
153
|
+
async function publishToOpenWare(owticketobj, ticket, source) {
|
|
154
|
+
const time = new Date().getTime();
|
|
155
|
+
const values = {
|
|
156
|
+
date: time,
|
|
157
|
+
value: Object.values(owticketobj)
|
|
158
|
+
.map((value) => {
|
|
159
|
+
if (value instanceof types_1.Maintenance_Downtime) {
|
|
160
|
+
return value.get("value");
|
|
161
|
+
}
|
|
162
|
+
else if (value instanceof types_1.Maintenance_Frequency) {
|
|
163
|
+
return value.get("value");
|
|
164
|
+
}
|
|
165
|
+
else if (value instanceof types_1.Maintenance_Priority) {
|
|
166
|
+
return value.get("value");
|
|
167
|
+
}
|
|
168
|
+
else if (value instanceof types_1.Maintenance_Restriction) {
|
|
169
|
+
return value.get("value");
|
|
170
|
+
}
|
|
171
|
+
else if (value instanceof types_1.Maintenance_Ticket_Issuecategory) {
|
|
172
|
+
return value.get("issuecategory").id;
|
|
173
|
+
}
|
|
174
|
+
else if (value instanceof types_1.Maintenance_Ticket_Kanban_State) {
|
|
175
|
+
return value.get("state").id;
|
|
176
|
+
}
|
|
177
|
+
else if (value instanceof types_1.Maintenance_Ticket) {
|
|
178
|
+
return value.id;
|
|
179
|
+
}
|
|
180
|
+
else if (value instanceof types_1.Maintenance_Ticket_Source) {
|
|
181
|
+
return value.get("source").id;
|
|
182
|
+
}
|
|
183
|
+
return undefined;
|
|
184
|
+
})
|
|
185
|
+
.filter((v) => v !== undefined),
|
|
186
|
+
};
|
|
187
|
+
const valueTypes = Object.entries(owticketobj).map(([key, value]) => {
|
|
188
|
+
const tmpvaluetype = {
|
|
189
|
+
name: "",
|
|
190
|
+
unit: "",
|
|
191
|
+
type: "String",
|
|
192
|
+
};
|
|
193
|
+
if (value instanceof types_1.Maintenance_Downtime) {
|
|
194
|
+
tmpvaluetype.name = types_1.Maintenance_Downtime.className;
|
|
195
|
+
tmpvaluetype.unit = "%";
|
|
196
|
+
tmpvaluetype.type = "Number";
|
|
197
|
+
}
|
|
198
|
+
else if (value instanceof types_1.Maintenance_Frequency) {
|
|
199
|
+
tmpvaluetype.name = types_1.Maintenance_Frequency.className;
|
|
200
|
+
tmpvaluetype.unit = "%";
|
|
201
|
+
tmpvaluetype.type = "Number";
|
|
202
|
+
}
|
|
203
|
+
else if (value instanceof types_1.Maintenance_Priority) {
|
|
204
|
+
tmpvaluetype.name = types_1.Maintenance_Priority.className;
|
|
205
|
+
tmpvaluetype.unit = "%";
|
|
206
|
+
tmpvaluetype.type = "Number";
|
|
207
|
+
}
|
|
208
|
+
else if (value instanceof types_1.Maintenance_Restriction) {
|
|
209
|
+
tmpvaluetype.name = types_1.Maintenance_Restriction.className;
|
|
210
|
+
tmpvaluetype.unit = "%";
|
|
211
|
+
tmpvaluetype.type = "Number";
|
|
212
|
+
}
|
|
213
|
+
else if (value instanceof types_1.Maintenance_Ticket_Issuecategory) {
|
|
214
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket_Issuecategory.className;
|
|
215
|
+
tmpvaluetype.unit = "";
|
|
216
|
+
tmpvaluetype.type = "String";
|
|
217
|
+
}
|
|
218
|
+
else if (value instanceof types_1.Maintenance_Ticket_Kanban_State) {
|
|
219
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket_Kanban_State.className;
|
|
220
|
+
tmpvaluetype.unit = "";
|
|
221
|
+
tmpvaluetype.type = "String";
|
|
222
|
+
}
|
|
223
|
+
else if (value instanceof types_1.Maintenance_Ticket) {
|
|
224
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket.className;
|
|
225
|
+
tmpvaluetype.unit = "";
|
|
226
|
+
tmpvaluetype.type = "String";
|
|
227
|
+
}
|
|
228
|
+
else if (value instanceof types_1.Maintenance_Ticket_Source) {
|
|
229
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket_Source.className;
|
|
230
|
+
tmpvaluetype.unit = "";
|
|
231
|
+
tmpvaluetype.type = "String";
|
|
232
|
+
}
|
|
233
|
+
return tmpvaluetype;
|
|
234
|
+
});
|
|
235
|
+
const dataitem = {
|
|
236
|
+
id: "openservice_ticket",
|
|
237
|
+
name: `Ticket`,
|
|
238
|
+
source: source,
|
|
239
|
+
values: [values],
|
|
240
|
+
valueTypes: valueTypes.filter((v) => v.name !== ""),
|
|
241
|
+
meta: {},
|
|
242
|
+
};
|
|
243
|
+
console.log("Publishing ticket to openware: ", dataitem, "with values", JSON.stringify(dataitem.values));
|
|
244
|
+
try {
|
|
245
|
+
await (0, ow_1.publishDataItem)(dataitem, ticket.get("user")?.get("email"), true);
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.error("Error publishing ticket to openware", error);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
89
251
|
async function getTicketObject(value, user, fetchOptions) {
|
|
90
252
|
if (value.existingTicketId) {
|
|
91
253
|
const ticket = await new Parse.Query(types_1.Maintenance_Ticket).get(value.existingTicketId, fetchOptions);
|
|
@@ -123,8 +285,6 @@ async function assignUsersAndRoles(ticket, assignedTo, fetchOptions, assigningUs
|
|
|
123
285
|
.find(fetchOptions);
|
|
124
286
|
ticket.relation("assignedusers").remove(assignedUsers);
|
|
125
287
|
ticket.relation("assignedroles").remove(assignedroles);
|
|
126
|
-
await ticket.save(null, fetchOptions);
|
|
127
|
-
await ticket.save(null, fetchOptions);
|
|
128
288
|
const assignments = [];
|
|
129
289
|
const batchTime = new Date();
|
|
130
290
|
const ids = assignedTo.map((a) => a.id);
|
|
@@ -136,6 +296,7 @@ async function assignUsersAndRoles(ticket, assignedTo, fetchOptions, assigningUs
|
|
|
136
296
|
.find(fetchOptions);
|
|
137
297
|
ticket.relation("assignedusers").add(newUsers);
|
|
138
298
|
ticket.relation("assignedroles").add(newRoles);
|
|
299
|
+
await ticket.save(null, fetchOptions);
|
|
139
300
|
if (newRoles.length === 0 && newUsers.length === 0) {
|
|
140
301
|
assignments.push(new types_1.Maintenance_Ticket_Assignment({
|
|
141
302
|
ticket,
|
|
@@ -276,7 +437,7 @@ async function saveDowntime(ticket, value, fetchOptions) {
|
|
|
276
437
|
tenant: ticket.get("tenant"),
|
|
277
438
|
user: ticket.get("user"),
|
|
278
439
|
});
|
|
279
|
-
await downtime.save(null, fetchOptions);
|
|
440
|
+
return await downtime.save(null, fetchOptions);
|
|
280
441
|
}
|
|
281
442
|
async function saveFrequency(ticket, value, fetchOptions) {
|
|
282
443
|
const frequency = new types_1.Maintenance_Frequency({
|
|
@@ -285,7 +446,7 @@ async function saveFrequency(ticket, value, fetchOptions) {
|
|
|
285
446
|
tenant: ticket.get("tenant"),
|
|
286
447
|
user: ticket.get("user"),
|
|
287
448
|
});
|
|
288
|
-
await frequency.save(null, fetchOptions);
|
|
449
|
+
return await frequency.save(null, fetchOptions);
|
|
289
450
|
}
|
|
290
451
|
async function saveRestriction(ticket, value, fetchOptions) {
|
|
291
452
|
const restriction = new types_1.Maintenance_Restriction({
|
|
@@ -294,7 +455,7 @@ async function saveRestriction(ticket, value, fetchOptions) {
|
|
|
294
455
|
tenant: ticket.get("tenant"),
|
|
295
456
|
user: ticket.get("user"),
|
|
296
457
|
});
|
|
297
|
-
await restriction.save(null, fetchOptions);
|
|
458
|
+
return await restriction.save(null, fetchOptions);
|
|
298
459
|
}
|
|
299
460
|
async function saveIssueCategory(ticket, value, fetchOptions) {
|
|
300
461
|
const issueCategory = new types_1.Maintenance_Ticket_Issuecategory({
|
|
@@ -303,7 +464,7 @@ async function saveIssueCategory(ticket, value, fetchOptions) {
|
|
|
303
464
|
tenant: ticket.get("tenant"),
|
|
304
465
|
user: ticket.get("user"),
|
|
305
466
|
});
|
|
306
|
-
await issueCategory.save(null, fetchOptions);
|
|
467
|
+
return await issueCategory.save(null, fetchOptions);
|
|
307
468
|
}
|
|
308
469
|
async function savePriority(ticket, value, fetchOptions) {
|
|
309
470
|
const priority = new types_1.Maintenance_Priority({
|
|
@@ -312,7 +473,7 @@ async function savePriority(ticket, value, fetchOptions) {
|
|
|
312
473
|
tenant: ticket.get("tenant"),
|
|
313
474
|
user: ticket.get("user"),
|
|
314
475
|
});
|
|
315
|
-
await priority.save(null, fetchOptions);
|
|
476
|
+
return await priority.save(null, fetchOptions);
|
|
316
477
|
}
|
|
317
478
|
async function saveMedia(ticket, media, fetchOptions) {
|
|
318
479
|
const message = new types_1.Maintenance_Message({
|
|
@@ -334,7 +495,7 @@ async function saveSource(ticket, source, fetchOptions) {
|
|
|
334
495
|
tenant: ticket.get("tenant"),
|
|
335
496
|
user: ticket.get("user"),
|
|
336
497
|
});
|
|
337
|
-
await tSource.save(null, fetchOptions);
|
|
498
|
+
return await tSource.save(null, fetchOptions);
|
|
338
499
|
}
|
|
339
500
|
async function saveMessage(ticket, message, fetchOptions, values) {
|
|
340
501
|
// create new message log
|
|
@@ -381,6 +542,31 @@ async function saveMessage(ticket, message, fetchOptions, values) {
|
|
|
381
542
|
// }).save(null, fetchOptions);
|
|
382
543
|
// }
|
|
383
544
|
}
|
|
545
|
+
async function saveMaterial(ticket, material, fetchOptions) {
|
|
546
|
+
const materialObject = new types_1.Maintenance_Ticket_Material({
|
|
547
|
+
ticket,
|
|
548
|
+
itemList: material,
|
|
549
|
+
tenant: ticket.get("tenant"),
|
|
550
|
+
user: ticket.get("user"),
|
|
551
|
+
});
|
|
552
|
+
await materialObject.save(null, fetchOptions);
|
|
553
|
+
}
|
|
554
|
+
async function saveTicketProject(ticket, project, fetchOptions) {
|
|
555
|
+
const projectObj = await new Parse.Query(types_1.Maintenance_Project).get(project);
|
|
556
|
+
if (!projectObj)
|
|
557
|
+
throw new Error("Project not found");
|
|
558
|
+
const ticketProjectObject = new types_1.Maintenance_Ticket_Project({
|
|
559
|
+
ticket,
|
|
560
|
+
project: projectObj,
|
|
561
|
+
tenant: ticket.get("tenant"),
|
|
562
|
+
user: ticket.get("user"),
|
|
563
|
+
});
|
|
564
|
+
await ticketProjectObject.save(null, fetchOptions);
|
|
565
|
+
ticket.set("project", new types_1.Maintenance_Project({ objectId: project }));
|
|
566
|
+
await ticket.save(null, fetchOptions);
|
|
567
|
+
projectObj.relation("tickets").add(ticket);
|
|
568
|
+
await projectObj.save(null, fetchOptions);
|
|
569
|
+
}
|
|
384
570
|
async function saveDefaultIssueCategory(ticket, fetchOptions) {
|
|
385
571
|
const catchAll = await new Parse.Query(types_1.Maintenance_Issuecategory)
|
|
386
572
|
.equalTo("catchall", true)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Maintenance_Ticket, Maintenance_Ticket_Source } from "../types";
|
|
1
|
+
import { Maintenance_Ticket, Maintenance_Ticket_Material, Maintenance_Ticket_Source } from "../types";
|
|
2
2
|
type FilterParams = {
|
|
3
|
-
attribute: "objectId" | "state" | "issuecategory" | "user" | "role" | "userRole" | "createdUser" | "source";
|
|
3
|
+
attribute: "objectId" | "state" | "issuecategory" | "user" | "role" | "userRole" | "createdUser" | "source" | "project";
|
|
4
4
|
/**
|
|
5
5
|
* the objectId of the attribute to filter by
|
|
6
6
|
*/
|
|
@@ -21,10 +21,14 @@ export type FetchParams = {
|
|
|
21
21
|
config: Array<FetchObject>;
|
|
22
22
|
};
|
|
23
23
|
export declare function init(name: string): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Fetches the material for a ticket
|
|
26
|
+
* @param ticket
|
|
27
|
+
*/
|
|
28
|
+
export declare function getTicketMaterial(ticket: Maintenance_Ticket): Promise<Maintenance_Ticket_Material | undefined>;
|
|
24
29
|
/**
|
|
25
30
|
* Fetches the source for a ticket
|
|
26
31
|
* @param ticket
|
|
27
|
-
* @param ticketIds
|
|
28
32
|
*/
|
|
29
33
|
export declare function getTicketSource(ticket: Maintenance_Ticket): Promise<Maintenance_Ticket_Source | undefined>;
|
|
30
34
|
/**
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.init = init;
|
|
4
|
+
exports.getTicketMaterial = getTicketMaterial;
|
|
4
5
|
exports.getTicketSource = getTicketSource;
|
|
5
6
|
exports.arrayToDistinct = arrayToDistinct;
|
|
6
7
|
const catchError_1 = require("../helper/catchError");
|
|
@@ -18,7 +19,9 @@ async function handleRequest(request) {
|
|
|
18
19
|
try {
|
|
19
20
|
const queries = [];
|
|
20
21
|
for await (const config of request.params.config) {
|
|
21
|
-
let ticketQuery = new Parse.Query(types_1.Maintenance_Ticket)
|
|
22
|
+
let ticketQuery = new Parse.Query(types_1.Maintenance_Ticket)
|
|
23
|
+
.equalTo("enabled", true)
|
|
24
|
+
.includeAll();
|
|
22
25
|
// apply filters defined in the filterQueryMap depending on the request
|
|
23
26
|
if (config.filterBy?.filter.length) {
|
|
24
27
|
const filterQueries = [];
|
|
@@ -104,6 +107,7 @@ async function getTicketData(tickets) {
|
|
|
104
107
|
const state = getState(ticket);
|
|
105
108
|
const dailySchedule = getDailySchedule(ticket);
|
|
106
109
|
const messages = getMessages(ticket);
|
|
110
|
+
const material = getTicketMaterial(ticket);
|
|
107
111
|
const dataPromises = await Promise.all([
|
|
108
112
|
downtimes,
|
|
109
113
|
duedate,
|
|
@@ -115,6 +119,7 @@ async function getTicketData(tickets) {
|
|
|
115
119
|
state,
|
|
116
120
|
dailySchedule,
|
|
117
121
|
messages,
|
|
122
|
+
material,
|
|
118
123
|
]);
|
|
119
124
|
return {
|
|
120
125
|
ticket: ticket,
|
|
@@ -129,6 +134,7 @@ async function getTicketData(tickets) {
|
|
|
129
134
|
dailySchedule: dataPromises[8],
|
|
130
135
|
messages: dataPromises[9]?.messages,
|
|
131
136
|
assignedTo: [...assignedusers, ...assignedroles],
|
|
137
|
+
material: dataPromises[10],
|
|
132
138
|
};
|
|
133
139
|
});
|
|
134
140
|
return await Promise.all(ticketDataPromises);
|
|
@@ -234,10 +240,20 @@ async function getIssueCategory(ticket) {
|
|
|
234
240
|
.equalTo("ticket", ticket)
|
|
235
241
|
.first({ useMasterKey: true });
|
|
236
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Fetches the material for a ticket
|
|
245
|
+
* @param ticket
|
|
246
|
+
*/
|
|
247
|
+
async function getTicketMaterial(ticket) {
|
|
248
|
+
return await new Parse.Query(types_1.Maintenance_Ticket_Material)
|
|
249
|
+
.includeAll()
|
|
250
|
+
.descending("updatedAt")
|
|
251
|
+
.equalTo("ticket", ticket)
|
|
252
|
+
.first({ useMasterKey: true });
|
|
253
|
+
}
|
|
237
254
|
/**
|
|
238
255
|
* Fetches the source for a ticket
|
|
239
256
|
* @param ticket
|
|
240
|
-
* @param ticketIds
|
|
241
257
|
*/
|
|
242
258
|
async function getTicketSource(ticket) {
|
|
243
259
|
return await new Parse.Query(types_1.Maintenance_Ticket_Source)
|
|
@@ -320,6 +336,10 @@ const filterQueryMap = {
|
|
|
320
336
|
query.include("user");
|
|
321
337
|
query.equalTo("user", new Parse.User({ objectId: value }));
|
|
322
338
|
},
|
|
339
|
+
project: async (query, value) => {
|
|
340
|
+
query.include("project");
|
|
341
|
+
query.equalTo("project", new types_1.Maintenance_Project({ objectId: value }));
|
|
342
|
+
},
|
|
323
343
|
};
|
|
324
344
|
/**
|
|
325
345
|
* Creates a distinct array based on the getId function and can afterwards filter the array
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Maintenance_Ticket, Maintenance_DailySchedule, Maintenance_Downtime, Maintenance_Duedate, Maintenance_Frequency, Maintenance_Issuecategory, Maintenance_Kanban_State, Maintenance_Message, Maintenance_Priority, Maintenance_Restriction, Source } from "../types";
|
|
1
|
+
import { Maintenance_Ticket, Maintenance_DailySchedule, Maintenance_Downtime, Maintenance_Duedate, Maintenance_Frequency, Maintenance_Issuecategory, Maintenance_Kanban_State, Maintenance_Message, Maintenance_Priority, Maintenance_Restriction, Source, Maintenance_Ticket_Material } from "../types";
|
|
2
2
|
export type TicketData = {
|
|
3
3
|
ticket: Maintenance_Ticket;
|
|
4
4
|
dailySchedule?: Maintenance_DailySchedule;
|
|
@@ -12,4 +12,5 @@ export type TicketData = {
|
|
|
12
12
|
restriction?: Maintenance_Restriction;
|
|
13
13
|
source?: Source;
|
|
14
14
|
assignedTo?: Array<Parse.User | Parse.Role>;
|
|
15
|
+
material?: Maintenance_Ticket_Material;
|
|
15
16
|
};
|
|
@@ -36,6 +36,14 @@ export declare class MessageTranslationKeys {
|
|
|
36
36
|
TITLE: string;
|
|
37
37
|
CONTENT: string;
|
|
38
38
|
};
|
|
39
|
+
MATERIAL: {
|
|
40
|
+
TITLE: string;
|
|
41
|
+
CONTENT: string;
|
|
42
|
+
};
|
|
43
|
+
PROJECT: {
|
|
44
|
+
TITLE: string;
|
|
45
|
+
CONTENT: string;
|
|
46
|
+
};
|
|
39
47
|
};
|
|
40
48
|
static MACHINELOG: {
|
|
41
49
|
TITLE: {
|
|
@@ -78,5 +86,13 @@ export declare class MessageTranslationKeys {
|
|
|
78
86
|
TITLE: string;
|
|
79
87
|
CONTENT: string;
|
|
80
88
|
};
|
|
89
|
+
MATERIAL: {
|
|
90
|
+
TITLE: string;
|
|
91
|
+
CONTENT: string;
|
|
92
|
+
};
|
|
93
|
+
PROJECT: {
|
|
94
|
+
TITLE: string;
|
|
95
|
+
CONTENT: string;
|
|
96
|
+
};
|
|
81
97
|
};
|
|
82
98
|
}
|
|
@@ -41,6 +41,14 @@ MessageTranslationKeys.TICKETLOG = {
|
|
|
41
41
|
TITLE: "maintenance:ticket.message.downtime.changed.title",
|
|
42
42
|
CONTENT: "maintenance:ticket.message.downtime.changed.content",
|
|
43
43
|
},
|
|
44
|
+
MATERIAL: {
|
|
45
|
+
TITLE: "maintenance:ticket.message.material.changed.title",
|
|
46
|
+
CONTENT: "maintenance:ticket.message.material.changed.content",
|
|
47
|
+
},
|
|
48
|
+
PROJECT: {
|
|
49
|
+
TITLE: "maintenance:ticket.message.project.changed.title",
|
|
50
|
+
CONTENT: "maintenance:ticket.message.project.changed.content",
|
|
51
|
+
},
|
|
44
52
|
};
|
|
45
53
|
MessageTranslationKeys.MACHINELOG = {
|
|
46
54
|
TITLE: {
|
|
@@ -83,4 +91,12 @@ MessageTranslationKeys.MACHINELOG = {
|
|
|
83
91
|
TITLE: "maintenance:schedule.message.execution.title",
|
|
84
92
|
CONTENT: "maintenance:schedule.message.execution.content",
|
|
85
93
|
},
|
|
94
|
+
MATERIAL: {
|
|
95
|
+
TITLE: "maintenance:machinelog.message.material.changed.title",
|
|
96
|
+
CONTENT: "maintenance:machinelog.message.material.changed.content",
|
|
97
|
+
},
|
|
98
|
+
PROJECT: {
|
|
99
|
+
TITLE: "maintenance:machinelog.message.project.changed.title",
|
|
100
|
+
CONTENT: "maintenance:machinelog.message.project.changed.content",
|
|
101
|
+
},
|
|
86
102
|
};
|
|
@@ -6,6 +6,7 @@ const __1 = require("..");
|
|
|
6
6
|
const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
|
|
7
7
|
const TranslationKeys_1 = require("../helper/TranslationKeys");
|
|
8
8
|
const types_1 = require("../types");
|
|
9
|
+
const Maintenance_Ticket_Material_1 = require("./Maintenance_Ticket_Material");
|
|
9
10
|
async function init() {
|
|
10
11
|
//Check each object if displayAt is set, if not, set it to createdAt
|
|
11
12
|
await new Parse.Query(types_1.Maintenance_Message).each(async (message) => {
|
|
@@ -37,7 +38,7 @@ async function init() {
|
|
|
37
38
|
await (0, __1.defaultAclHandler)(request);
|
|
38
39
|
//Check if object has "displayAt"; if not, fill it with Date from createdAt
|
|
39
40
|
if (!object.displayAt) {
|
|
40
|
-
object.set("displayAt", object.createdAt);
|
|
41
|
+
object.set("displayAt", object.createdAt ?? new Date());
|
|
41
42
|
}
|
|
42
43
|
});
|
|
43
44
|
(0, __1.afterSaveHook)(types_1.Maintenance_Message, async (request) => {
|
|
@@ -110,6 +111,8 @@ async function convertTicketDataToMessages() {
|
|
|
110
111
|
await ticketFrequencyToMessage(timeMap);
|
|
111
112
|
await ticketDuedateToMessage(timeMap);
|
|
112
113
|
await ticketTitleToMessage(timeMap);
|
|
114
|
+
await ticketMaterialToMessage(timeMap);
|
|
115
|
+
await ticketProjectToMessage(timeMap);
|
|
113
116
|
}
|
|
114
117
|
async function convertToMessage(config) {
|
|
115
118
|
const entries = await new Parse.Query(config.className)
|
|
@@ -324,6 +327,25 @@ async function ticketStateToMessage(timeMap) {
|
|
|
324
327
|
isValueValid: (entry) => !!entry.get("state"),
|
|
325
328
|
});
|
|
326
329
|
}
|
|
330
|
+
async function ticketMaterialToMessage(timeMap) {
|
|
331
|
+
console.log("=================================");
|
|
332
|
+
console.log("Creating ticket material messages");
|
|
333
|
+
console.log("=================================");
|
|
334
|
+
await convertToMessage({
|
|
335
|
+
className: types_1.Maintenance_Ticket_Material.className,
|
|
336
|
+
timeMap: timeMap,
|
|
337
|
+
ticketTranslation: TranslationKeys_1.MessageTranslationKeys.TICKETLOG.MATERIAL,
|
|
338
|
+
machinelogTranslation: TranslationKeys_1.MessageTranslationKeys.MACHINELOG.MATERIAL,
|
|
339
|
+
getTranslationData: (entry, prev) => {
|
|
340
|
+
return {
|
|
341
|
+
old: (0, Maintenance_Ticket_Material_1.ticketMaterialItemListToString)(prev?.get("itemList")) ??
|
|
342
|
+
"Nicht vorhanden",
|
|
343
|
+
new: (0, Maintenance_Ticket_Material_1.ticketMaterialItemListToString)(entry?.get("itemList")) ?? "Nicht vorhanden",
|
|
344
|
+
};
|
|
345
|
+
},
|
|
346
|
+
isValueValid: (entry) => !!entry.get("ticket"),
|
|
347
|
+
});
|
|
348
|
+
}
|
|
327
349
|
async function ticketIssuecategoryToMessage(timeMap) {
|
|
328
350
|
console.log("=================================");
|
|
329
351
|
console.log("Creating ticket issue messages");
|
|
@@ -452,6 +474,24 @@ async function ticketTitleToMessage(timeMap) {
|
|
|
452
474
|
isValueValid: (entry) => !!entry.get("title"),
|
|
453
475
|
});
|
|
454
476
|
}
|
|
477
|
+
async function ticketProjectToMessage(timeMap) {
|
|
478
|
+
console.log("=================================");
|
|
479
|
+
console.log("Creating ticket project messages");
|
|
480
|
+
console.log("=================================");
|
|
481
|
+
await convertToMessage({
|
|
482
|
+
className: types_1.Maintenance_Ticket_Project.className,
|
|
483
|
+
timeMap: timeMap,
|
|
484
|
+
ticketTranslation: TranslationKeys_1.MessageTranslationKeys.TICKETLOG.PROJECT,
|
|
485
|
+
machinelogTranslation: TranslationKeys_1.MessageTranslationKeys.MACHINELOG.PROJECT,
|
|
486
|
+
getTranslationData: (entry, prev) => {
|
|
487
|
+
return {
|
|
488
|
+
old: prev?.get("project")?.get("name") ?? "Nicht vorhanden",
|
|
489
|
+
new: entry.get("project")?.get("name") ?? "Nicht vorhanden",
|
|
490
|
+
};
|
|
491
|
+
},
|
|
492
|
+
isValueValid: (entry) => !!entry.get("ticket"),
|
|
493
|
+
});
|
|
494
|
+
}
|
|
455
495
|
async function convertScheduleExecutionToMessage() {
|
|
456
496
|
console.log("=================================");
|
|
457
497
|
console.log("Creating schedule execution messages");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function init(): Promise<void>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.init = init;
|
|
4
|
+
const __1 = require("..");
|
|
5
|
+
const types_1 = require("../types");
|
|
6
|
+
async function init() {
|
|
7
|
+
(0, __1.beforeSaveHook)(types_1.Maintenance_Project, async (request) => {
|
|
8
|
+
const { object, original, user } = request;
|
|
9
|
+
await (0, __1.defaultHandler)(request);
|
|
10
|
+
await (0, __1.defaultAclHandler)(request);
|
|
11
|
+
// TODO
|
|
12
|
+
});
|
|
13
|
+
(0, __1.afterSaveHook)(types_1.Maintenance_Project, async (request) => {
|
|
14
|
+
const { object, original, user } = request;
|
|
15
|
+
// TODO
|
|
16
|
+
});
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type Material = {
|
|
2
|
+
id: string | number;
|
|
3
|
+
name: string;
|
|
4
|
+
quantity: number;
|
|
5
|
+
unit: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function init(): Promise<void>;
|
|
8
|
+
export declare function ticketMaterialToString(material: Material): string;
|
|
9
|
+
export declare function ticketMaterialItemListToString(materials: Material[]): string | undefined;
|