@openinc/parse-server-opendash 2.4.99 → 2.4.100
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 +1 -0
- package/dist/functions/openinc-openservice-save-ticket-data.d.ts +2 -1
- package/dist/functions/openinc-openservice-save-ticket-data.js +188 -19
- package/dist/functions/openinc-openservice-ticket-data.d.ts +6 -2
- package/dist/functions/openinc-openservice-ticket-data.js +15 -1
- package/dist/helper/TicketData.d.ts +2 -1
- package/dist/helper/TranslationKeys.d.ts +8 -0
- package/dist/helper/TranslationKeys.js +8 -0
- package/dist/hooks/Config_open_service.js +1 -1
- package/dist/hooks/Maintenance_Message.js +22 -1
- package/dist/hooks/Maintenance_Ticket_Material.d.ts +9 -0
- package/dist/hooks/Maintenance_Ticket_Material.js +98 -0
- package/dist/ow.d.ts +2 -1
- package/dist/types/Maintenance_Schedule_Step.d.ts +17 -3
- package/dist/types/Maintenance_Ticket_Material.d.ts +25 -0
- package/dist/types/Maintenance_Ticket_Material.js +35 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +3 -1
- package/package.json +10 -10
- package/schema/Maintenance_Ticket_Material.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
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"OD3_Maintenance_Ticket_Issuecategory": "MAINTENANCE",
|
|
66
66
|
"OD3_Maintenance_Ticket_Kanban_State": "MAINTENANCE",
|
|
67
67
|
"OD3_Maintenance_Ticket_Kanban_State_Current": "MAINTENANCE",
|
|
68
|
+
"OD3_Maintenance_Ticket_Material": "MAINTENANCE",
|
|
68
69
|
"OD3_Maintenance_Ticket_Source": "MAINTENANCE",
|
|
69
70
|
"OD3_Maintenance_Ticket_Title": "MAINTENANCE",
|
|
70
71
|
"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,13 @@ 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[];
|
|
40
41
|
};
|
|
41
42
|
export declare function getUsername(user: _User | undefined): string;
|
|
42
43
|
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,178 @@ 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);
|
|
79
121
|
// save defaults
|
|
80
122
|
if (!data.issuecategory && !data.existingTicketId)
|
|
81
123
|
await saveDefaultIssueCategory(ticket, fetchOptions);
|
|
82
124
|
if (!data.state && !data.existingTicketId)
|
|
83
125
|
await saveDefaultState(ticket, fetchOptions);
|
|
84
126
|
// save source last so the machinelog does not have the initialization messages of the ticket data
|
|
85
|
-
if (data.source)
|
|
127
|
+
if (data.source) {
|
|
86
128
|
await saveSource(ticket, data.source, fetchOptions);
|
|
129
|
+
}
|
|
130
|
+
//Get source from ticket and save to openware
|
|
131
|
+
const [fetchedTicketSourceError, ticketsource] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Ticket_Source)
|
|
132
|
+
.equalTo("ticket", new types_1.Maintenance_Ticket({ objectId: ticket.id }))
|
|
133
|
+
.descending("createdAt")
|
|
134
|
+
.include("source")
|
|
135
|
+
.first({ useMasterKey: true }));
|
|
136
|
+
if (fetchedTicketSourceError) {
|
|
137
|
+
console.log("Error fetching saved source", fetchedTicketSourceError);
|
|
138
|
+
}
|
|
139
|
+
else if (ticketsource && ticketsource.get("source")) {
|
|
140
|
+
owticketobj.source = ticketsource;
|
|
141
|
+
// publish to openware
|
|
142
|
+
await publishToOpenWare(owticketobj, ticket, ticketsource.get("source").id);
|
|
143
|
+
}
|
|
87
144
|
return ticket;
|
|
88
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Publishes the ticket to open.WARE with all changed data
|
|
148
|
+
* @param owticketobj OpenWareTicketObject
|
|
149
|
+
* @param source OD3_Source
|
|
150
|
+
*/
|
|
151
|
+
async function publishToOpenWare(owticketobj, ticket, source) {
|
|
152
|
+
const time = new Date().getTime();
|
|
153
|
+
const values = {
|
|
154
|
+
date: time,
|
|
155
|
+
value: Object.values(owticketobj)
|
|
156
|
+
.map((value) => {
|
|
157
|
+
if (value instanceof types_1.Maintenance_Downtime) {
|
|
158
|
+
return value.get("value");
|
|
159
|
+
}
|
|
160
|
+
else if (value instanceof types_1.Maintenance_Frequency) {
|
|
161
|
+
return value.get("value");
|
|
162
|
+
}
|
|
163
|
+
else if (value instanceof types_1.Maintenance_Priority) {
|
|
164
|
+
return value.get("value");
|
|
165
|
+
}
|
|
166
|
+
else if (value instanceof types_1.Maintenance_Restriction) {
|
|
167
|
+
return value.get("value");
|
|
168
|
+
}
|
|
169
|
+
else if (value instanceof types_1.Maintenance_Ticket_Issuecategory) {
|
|
170
|
+
return value.get("issuecategory").id;
|
|
171
|
+
}
|
|
172
|
+
else if (value instanceof types_1.Maintenance_Ticket_Kanban_State) {
|
|
173
|
+
return value.get("state").id;
|
|
174
|
+
}
|
|
175
|
+
else if (value instanceof types_1.Maintenance_Ticket) {
|
|
176
|
+
return value.id;
|
|
177
|
+
}
|
|
178
|
+
else if (value instanceof types_1.Maintenance_Ticket_Source) {
|
|
179
|
+
return value.get("source").id;
|
|
180
|
+
}
|
|
181
|
+
return undefined;
|
|
182
|
+
})
|
|
183
|
+
.filter((v) => v !== undefined),
|
|
184
|
+
};
|
|
185
|
+
const valueTypes = Object.entries(owticketobj).map(([key, value]) => {
|
|
186
|
+
const tmpvaluetype = {
|
|
187
|
+
name: "",
|
|
188
|
+
unit: "",
|
|
189
|
+
type: "String",
|
|
190
|
+
};
|
|
191
|
+
if (value instanceof types_1.Maintenance_Downtime) {
|
|
192
|
+
tmpvaluetype.name = types_1.Maintenance_Downtime.className;
|
|
193
|
+
tmpvaluetype.unit = "%";
|
|
194
|
+
tmpvaluetype.type = "Number";
|
|
195
|
+
}
|
|
196
|
+
else if (value instanceof types_1.Maintenance_Frequency) {
|
|
197
|
+
tmpvaluetype.name = types_1.Maintenance_Frequency.className;
|
|
198
|
+
tmpvaluetype.unit = "%";
|
|
199
|
+
tmpvaluetype.type = "Number";
|
|
200
|
+
}
|
|
201
|
+
else if (value instanceof types_1.Maintenance_Priority) {
|
|
202
|
+
tmpvaluetype.name = types_1.Maintenance_Priority.className;
|
|
203
|
+
tmpvaluetype.unit = "%";
|
|
204
|
+
tmpvaluetype.type = "Number";
|
|
205
|
+
}
|
|
206
|
+
else if (value instanceof types_1.Maintenance_Restriction) {
|
|
207
|
+
tmpvaluetype.name = types_1.Maintenance_Restriction.className;
|
|
208
|
+
tmpvaluetype.unit = "%";
|
|
209
|
+
tmpvaluetype.type = "Number";
|
|
210
|
+
}
|
|
211
|
+
else if (value instanceof types_1.Maintenance_Ticket_Issuecategory) {
|
|
212
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket_Issuecategory.className;
|
|
213
|
+
tmpvaluetype.unit = "";
|
|
214
|
+
tmpvaluetype.type = "String";
|
|
215
|
+
}
|
|
216
|
+
else if (value instanceof types_1.Maintenance_Ticket_Kanban_State) {
|
|
217
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket_Kanban_State.className;
|
|
218
|
+
tmpvaluetype.unit = "";
|
|
219
|
+
tmpvaluetype.type = "String";
|
|
220
|
+
}
|
|
221
|
+
else if (value instanceof types_1.Maintenance_Ticket) {
|
|
222
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket.className;
|
|
223
|
+
tmpvaluetype.unit = "";
|
|
224
|
+
tmpvaluetype.type = "String";
|
|
225
|
+
}
|
|
226
|
+
else if (value instanceof types_1.Maintenance_Ticket_Source) {
|
|
227
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket_Source.className;
|
|
228
|
+
tmpvaluetype.unit = "";
|
|
229
|
+
tmpvaluetype.type = "String";
|
|
230
|
+
}
|
|
231
|
+
return tmpvaluetype;
|
|
232
|
+
});
|
|
233
|
+
const dataitem = {
|
|
234
|
+
id: "openservice_ticket",
|
|
235
|
+
name: `Ticket`,
|
|
236
|
+
source: source,
|
|
237
|
+
values: [values],
|
|
238
|
+
valueTypes: valueTypes.filter((v) => v.name !== ""),
|
|
239
|
+
meta: {},
|
|
240
|
+
};
|
|
241
|
+
console.log("Publishing ticket to openware: ", dataitem, "with values", JSON.stringify(dataitem.values));
|
|
242
|
+
try {
|
|
243
|
+
await (0, ow_1.publishDataItem)(dataitem, ticket.get("user")?.get("email"), true);
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
console.error("Error publishing ticket to openware", error);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
89
249
|
async function getTicketObject(value, user, fetchOptions) {
|
|
90
250
|
if (value.existingTicketId) {
|
|
91
251
|
const ticket = await new Parse.Query(types_1.Maintenance_Ticket).get(value.existingTicketId, fetchOptions);
|
|
@@ -276,7 +436,7 @@ async function saveDowntime(ticket, value, fetchOptions) {
|
|
|
276
436
|
tenant: ticket.get("tenant"),
|
|
277
437
|
user: ticket.get("user"),
|
|
278
438
|
});
|
|
279
|
-
await downtime.save(null, fetchOptions);
|
|
439
|
+
return await downtime.save(null, fetchOptions);
|
|
280
440
|
}
|
|
281
441
|
async function saveFrequency(ticket, value, fetchOptions) {
|
|
282
442
|
const frequency = new types_1.Maintenance_Frequency({
|
|
@@ -285,7 +445,7 @@ async function saveFrequency(ticket, value, fetchOptions) {
|
|
|
285
445
|
tenant: ticket.get("tenant"),
|
|
286
446
|
user: ticket.get("user"),
|
|
287
447
|
});
|
|
288
|
-
await frequency.save(null, fetchOptions);
|
|
448
|
+
return await frequency.save(null, fetchOptions);
|
|
289
449
|
}
|
|
290
450
|
async function saveRestriction(ticket, value, fetchOptions) {
|
|
291
451
|
const restriction = new types_1.Maintenance_Restriction({
|
|
@@ -294,7 +454,7 @@ async function saveRestriction(ticket, value, fetchOptions) {
|
|
|
294
454
|
tenant: ticket.get("tenant"),
|
|
295
455
|
user: ticket.get("user"),
|
|
296
456
|
});
|
|
297
|
-
await restriction.save(null, fetchOptions);
|
|
457
|
+
return await restriction.save(null, fetchOptions);
|
|
298
458
|
}
|
|
299
459
|
async function saveIssueCategory(ticket, value, fetchOptions) {
|
|
300
460
|
const issueCategory = new types_1.Maintenance_Ticket_Issuecategory({
|
|
@@ -303,7 +463,7 @@ async function saveIssueCategory(ticket, value, fetchOptions) {
|
|
|
303
463
|
tenant: ticket.get("tenant"),
|
|
304
464
|
user: ticket.get("user"),
|
|
305
465
|
});
|
|
306
|
-
await issueCategory.save(null, fetchOptions);
|
|
466
|
+
return await issueCategory.save(null, fetchOptions);
|
|
307
467
|
}
|
|
308
468
|
async function savePriority(ticket, value, fetchOptions) {
|
|
309
469
|
const priority = new types_1.Maintenance_Priority({
|
|
@@ -312,7 +472,7 @@ async function savePriority(ticket, value, fetchOptions) {
|
|
|
312
472
|
tenant: ticket.get("tenant"),
|
|
313
473
|
user: ticket.get("user"),
|
|
314
474
|
});
|
|
315
|
-
await priority.save(null, fetchOptions);
|
|
475
|
+
return await priority.save(null, fetchOptions);
|
|
316
476
|
}
|
|
317
477
|
async function saveMedia(ticket, media, fetchOptions) {
|
|
318
478
|
const message = new types_1.Maintenance_Message({
|
|
@@ -334,7 +494,7 @@ async function saveSource(ticket, source, fetchOptions) {
|
|
|
334
494
|
tenant: ticket.get("tenant"),
|
|
335
495
|
user: ticket.get("user"),
|
|
336
496
|
});
|
|
337
|
-
await tSource.save(null, fetchOptions);
|
|
497
|
+
return await tSource.save(null, fetchOptions);
|
|
338
498
|
}
|
|
339
499
|
async function saveMessage(ticket, message, fetchOptions, values) {
|
|
340
500
|
// create new message log
|
|
@@ -381,6 +541,15 @@ async function saveMessage(ticket, message, fetchOptions, values) {
|
|
|
381
541
|
// }).save(null, fetchOptions);
|
|
382
542
|
// }
|
|
383
543
|
}
|
|
544
|
+
async function saveMaterial(ticket, material, fetchOptions) {
|
|
545
|
+
const materialObject = new types_1.Maintenance_Ticket_Material({
|
|
546
|
+
ticket,
|
|
547
|
+
itemList: material,
|
|
548
|
+
tenant: ticket.get("tenant"),
|
|
549
|
+
user: ticket.get("user"),
|
|
550
|
+
});
|
|
551
|
+
await materialObject.save(null, fetchOptions);
|
|
552
|
+
}
|
|
384
553
|
async function saveDefaultIssueCategory(ticket, fetchOptions) {
|
|
385
554
|
const catchAll = await new Parse.Query(types_1.Maintenance_Issuecategory)
|
|
386
555
|
.equalTo("catchall", true)
|
|
@@ -1,4 +1,4 @@
|
|
|
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
3
|
attribute: "objectId" | "state" | "issuecategory" | "user" | "role" | "userRole" | "createdUser" | "source";
|
|
4
4
|
/**
|
|
@@ -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");
|
|
@@ -104,6 +105,7 @@ async function getTicketData(tickets) {
|
|
|
104
105
|
const state = getState(ticket);
|
|
105
106
|
const dailySchedule = getDailySchedule(ticket);
|
|
106
107
|
const messages = getMessages(ticket);
|
|
108
|
+
const material = getTicketMaterial(ticket);
|
|
107
109
|
const dataPromises = await Promise.all([
|
|
108
110
|
downtimes,
|
|
109
111
|
duedate,
|
|
@@ -115,6 +117,7 @@ async function getTicketData(tickets) {
|
|
|
115
117
|
state,
|
|
116
118
|
dailySchedule,
|
|
117
119
|
messages,
|
|
120
|
+
material,
|
|
118
121
|
]);
|
|
119
122
|
return {
|
|
120
123
|
ticket: ticket,
|
|
@@ -129,6 +132,7 @@ async function getTicketData(tickets) {
|
|
|
129
132
|
dailySchedule: dataPromises[8],
|
|
130
133
|
messages: dataPromises[9]?.messages,
|
|
131
134
|
assignedTo: [...assignedusers, ...assignedroles],
|
|
135
|
+
material: dataPromises[10],
|
|
132
136
|
};
|
|
133
137
|
});
|
|
134
138
|
return await Promise.all(ticketDataPromises);
|
|
@@ -234,10 +238,20 @@ async function getIssueCategory(ticket) {
|
|
|
234
238
|
.equalTo("ticket", ticket)
|
|
235
239
|
.first({ useMasterKey: true });
|
|
236
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Fetches the material for a ticket
|
|
243
|
+
* @param ticket
|
|
244
|
+
*/
|
|
245
|
+
async function getTicketMaterial(ticket) {
|
|
246
|
+
return await new Parse.Query(types_1.Maintenance_Ticket_Material)
|
|
247
|
+
.includeAll()
|
|
248
|
+
.descending("updatedAt")
|
|
249
|
+
.equalTo("ticket", ticket)
|
|
250
|
+
.first({ useMasterKey: true });
|
|
251
|
+
}
|
|
237
252
|
/**
|
|
238
253
|
* Fetches the source for a ticket
|
|
239
254
|
* @param ticket
|
|
240
|
-
* @param ticketIds
|
|
241
255
|
*/
|
|
242
256
|
async function getTicketSource(ticket) {
|
|
243
257
|
return await new Parse.Query(types_1.Maintenance_Ticket_Source)
|
|
@@ -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,10 @@ export declare class MessageTranslationKeys {
|
|
|
36
36
|
TITLE: string;
|
|
37
37
|
CONTENT: string;
|
|
38
38
|
};
|
|
39
|
+
MATERIAL: {
|
|
40
|
+
TITLE: string;
|
|
41
|
+
CONTENT: string;
|
|
42
|
+
};
|
|
39
43
|
};
|
|
40
44
|
static MACHINELOG: {
|
|
41
45
|
TITLE: {
|
|
@@ -78,5 +82,9 @@ export declare class MessageTranslationKeys {
|
|
|
78
82
|
TITLE: string;
|
|
79
83
|
CONTENT: string;
|
|
80
84
|
};
|
|
85
|
+
MATERIAL: {
|
|
86
|
+
TITLE: string;
|
|
87
|
+
CONTENT: string;
|
|
88
|
+
};
|
|
81
89
|
};
|
|
82
90
|
}
|
|
@@ -41,6 +41,10 @@ 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
|
+
},
|
|
44
48
|
};
|
|
45
49
|
MessageTranslationKeys.MACHINELOG = {
|
|
46
50
|
TITLE: {
|
|
@@ -83,4 +87,8 @@ MessageTranslationKeys.MACHINELOG = {
|
|
|
83
87
|
TITLE: "maintenance:schedule.message.execution.title",
|
|
84
88
|
CONTENT: "maintenance:schedule.message.execution.content",
|
|
85
89
|
},
|
|
90
|
+
MATERIAL: {
|
|
91
|
+
TITLE: "maintenance:machinelog.message.material.changed.title",
|
|
92
|
+
CONTENT: "maintenance:machinelog.message.material.changed.content",
|
|
93
|
+
},
|
|
86
94
|
};
|
|
@@ -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,7 @@ async function convertTicketDataToMessages() {
|
|
|
110
111
|
await ticketFrequencyToMessage(timeMap);
|
|
111
112
|
await ticketDuedateToMessage(timeMap);
|
|
112
113
|
await ticketTitleToMessage(timeMap);
|
|
114
|
+
await ticketMaterialToMessage(timeMap);
|
|
113
115
|
}
|
|
114
116
|
async function convertToMessage(config) {
|
|
115
117
|
const entries = await new Parse.Query(config.className)
|
|
@@ -324,6 +326,25 @@ async function ticketStateToMessage(timeMap) {
|
|
|
324
326
|
isValueValid: (entry) => !!entry.get("state"),
|
|
325
327
|
});
|
|
326
328
|
}
|
|
329
|
+
async function ticketMaterialToMessage(timeMap) {
|
|
330
|
+
console.log("=================================");
|
|
331
|
+
console.log("Creating ticket material messages");
|
|
332
|
+
console.log("=================================");
|
|
333
|
+
await convertToMessage({
|
|
334
|
+
className: types_1.Maintenance_Ticket_Material.className,
|
|
335
|
+
timeMap: timeMap,
|
|
336
|
+
ticketTranslation: TranslationKeys_1.MessageTranslationKeys.TICKETLOG.MATERIAL,
|
|
337
|
+
machinelogTranslation: TranslationKeys_1.MessageTranslationKeys.MACHINELOG.MATERIAL,
|
|
338
|
+
getTranslationData: (entry, prev) => {
|
|
339
|
+
return {
|
|
340
|
+
old: (0, Maintenance_Ticket_Material_1.ticketMaterialItemListToString)(prev?.get("itemList")) ??
|
|
341
|
+
"Nicht vorhanden",
|
|
342
|
+
new: (0, Maintenance_Ticket_Material_1.ticketMaterialItemListToString)(entry?.get("itemList")) ?? "Nicht vorhanden",
|
|
343
|
+
};
|
|
344
|
+
},
|
|
345
|
+
isValueValid: (entry) => !!entry.get("ticket"),
|
|
346
|
+
});
|
|
347
|
+
}
|
|
327
348
|
async function ticketIssuecategoryToMessage(timeMap) {
|
|
328
349
|
console.log("=================================");
|
|
329
350
|
console.log("Creating ticket issue messages");
|
|
@@ -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;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.init = init;
|
|
4
|
+
exports.ticketMaterialToString = ticketMaterialToString;
|
|
5
|
+
exports.ticketMaterialItemListToString = ticketMaterialItemListToString;
|
|
6
|
+
const __1 = require("..");
|
|
7
|
+
const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
|
|
8
|
+
const openinc_openservice_ticket_data_1 = require("../functions/openinc-openservice-ticket-data");
|
|
9
|
+
const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
|
|
10
|
+
const TranslationKeys_1 = require("../helper/TranslationKeys");
|
|
11
|
+
const types_1 = require("../types");
|
|
12
|
+
const Maintenance_Message_1 = require("./Maintenance_Message");
|
|
13
|
+
const TRANSLATION_TITLE = TranslationKeys_1.MessageTranslationKeys.TICKETLOG.MATERIAL.TITLE;
|
|
14
|
+
const TRANSLATION_CONTENT = TranslationKeys_1.MessageTranslationKeys.TICKETLOG.MATERIAL.CONTENT;
|
|
15
|
+
const TRANSLATION_TITLE_MACHINELOG = TranslationKeys_1.MessageTranslationKeys.MACHINELOG.MATERIAL.TITLE;
|
|
16
|
+
const TRANSLATION_CONTENT_MACHINELOG = TranslationKeys_1.MessageTranslationKeys.MACHINELOG.MATERIAL.CONTENT;
|
|
17
|
+
async function init() {
|
|
18
|
+
(0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Material, async (request) => {
|
|
19
|
+
const { object, original, user } = request;
|
|
20
|
+
await (0, __1.defaultHandler)(request);
|
|
21
|
+
await (0, __1.defaultAclHandler)(request);
|
|
22
|
+
// Remove previous entry if it was created within 5 minutes
|
|
23
|
+
const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
|
|
24
|
+
query.equalTo("ticket", object.get("ticket"));
|
|
25
|
+
query.descending("createdAt");
|
|
26
|
+
return query;
|
|
27
|
+
});
|
|
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);
|
|
31
|
+
});
|
|
32
|
+
(0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Material, async (request) => {
|
|
33
|
+
const { object, original, user } = request;
|
|
34
|
+
const previous = await new Parse.Query(types_1.Maintenance_Ticket_Material)
|
|
35
|
+
.includeAll()
|
|
36
|
+
.equalTo("ticket", object.get("ticket"))
|
|
37
|
+
.notEqualTo("objectId", object.id)
|
|
38
|
+
.descending("createdAt")
|
|
39
|
+
.first({ useMasterKey: true });
|
|
40
|
+
await object.fetchWithInclude("ticket", { useMasterKey: true });
|
|
41
|
+
// create new message log
|
|
42
|
+
await new types_1.Maintenance_Message({
|
|
43
|
+
referencedObjectId: object.get("ticket")?.id,
|
|
44
|
+
classname: object.get("ticket")?.className,
|
|
45
|
+
title: TRANSLATION_TITLE,
|
|
46
|
+
content: TRANSLATION_CONTENT,
|
|
47
|
+
user: user,
|
|
48
|
+
tenant: user?.get("tenant"),
|
|
49
|
+
data: {
|
|
50
|
+
type: "system",
|
|
51
|
+
translation: {
|
|
52
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
53
|
+
old: ticketMaterialItemListToString(previous?.get("itemList")) ?? "Nicht vorhanden",
|
|
54
|
+
new: ticketMaterialItemListToString(object?.get("itemList")) ?? "Nicht vorhanden",
|
|
55
|
+
},
|
|
56
|
+
origin: {
|
|
57
|
+
id: object.id,
|
|
58
|
+
classname: object.className,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
}).save(null, { useMasterKey: true });
|
|
62
|
+
// to machinelog
|
|
63
|
+
const source = (await (0, openinc_openservice_ticket_data_1.getTicketSource)(object.get("ticket")))?.get("source");
|
|
64
|
+
if (source) {
|
|
65
|
+
await new types_1.Maintenance_Message({
|
|
66
|
+
referencedObjectId: source?.id,
|
|
67
|
+
classname: source?.className,
|
|
68
|
+
title: TRANSLATION_TITLE_MACHINELOG,
|
|
69
|
+
content: TRANSLATION_CONTENT_MACHINELOG,
|
|
70
|
+
user: user,
|
|
71
|
+
tenant: user?.get("tenant"),
|
|
72
|
+
data: {
|
|
73
|
+
type: "system",
|
|
74
|
+
translation: {
|
|
75
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
|
|
76
|
+
old: ticketMaterialItemListToString(previous?.get("itemList")) ?? "Nicht vorhanden",
|
|
77
|
+
new: ticketMaterialItemListToString(object?.get("itemList")) ?? "Nicht vorhanden",
|
|
78
|
+
ticketName: object.get("ticket")?.get("title"),
|
|
79
|
+
},
|
|
80
|
+
origin: {
|
|
81
|
+
id: object.get("ticket")?.id,
|
|
82
|
+
classname: object.get("ticket")?.className,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
}).save(null, { useMasterKey: true });
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function ticketMaterialToString(material) {
|
|
90
|
+
if (!material)
|
|
91
|
+
return "";
|
|
92
|
+
return `${material.name} (${material.quantity}${material.unit})`;
|
|
93
|
+
}
|
|
94
|
+
function ticketMaterialItemListToString(materials) {
|
|
95
|
+
if (!materials)
|
|
96
|
+
return undefined;
|
|
97
|
+
return materials.map(ticketMaterialToString).join(", ");
|
|
98
|
+
}
|
package/dist/ow.d.ts
CHANGED
|
@@ -7,10 +7,11 @@ export interface DataItemInterface {
|
|
|
7
7
|
valueTypes: DataItemValueTypeInterface[];
|
|
8
8
|
values: DataItemValueInterface[];
|
|
9
9
|
}
|
|
10
|
+
export type DataItemValueTypeTypeField = "Number" | "String" | "Boolean" | "Geo" | "Object";
|
|
10
11
|
export interface DataItemValueTypeInterface {
|
|
11
12
|
unit: string;
|
|
12
13
|
name: string;
|
|
13
|
-
type:
|
|
14
|
+
type: DataItemValueTypeTypeField;
|
|
14
15
|
}
|
|
15
16
|
export interface DataItemValueInterface {
|
|
16
17
|
date: number;
|
|
@@ -7,7 +7,7 @@ export interface Maintenance_Schedule_StepAttributes {
|
|
|
7
7
|
createdAt: Date;
|
|
8
8
|
updatedAt: Date;
|
|
9
9
|
description?: string;
|
|
10
|
-
fields?:
|
|
10
|
+
fields?: StepFieldType[];
|
|
11
11
|
media: Parse.Relation<Maintenance_Schedule_Step, Maintenance_Media>;
|
|
12
12
|
roles: Parse.Relation<Maintenance_Schedule_Step, _Role>;
|
|
13
13
|
tenant?: Tenant;
|
|
@@ -18,8 +18,8 @@ export declare class Maintenance_Schedule_Step extends Parse.Object<Maintenance_
|
|
|
18
18
|
constructor(data?: Partial<Maintenance_Schedule_StepAttributes>);
|
|
19
19
|
get description(): string | undefined;
|
|
20
20
|
set description(value: string | undefined);
|
|
21
|
-
get fields():
|
|
22
|
-
set fields(value:
|
|
21
|
+
get fields(): StepFieldType[] | undefined;
|
|
22
|
+
set fields(value: StepFieldType[] | undefined);
|
|
23
23
|
get media(): Parse.Relation<Maintenance_Schedule_Step, Maintenance_Media>;
|
|
24
24
|
get roles(): Parse.Relation<Maintenance_Schedule_Step, _Role>;
|
|
25
25
|
get tenant(): Tenant | undefined;
|
|
@@ -27,3 +27,17 @@ export declare class Maintenance_Schedule_Step extends Parse.Object<Maintenance_
|
|
|
27
27
|
get title(): string | undefined;
|
|
28
28
|
set title(value: string | undefined);
|
|
29
29
|
}
|
|
30
|
+
export type StepFieldType = {
|
|
31
|
+
value: StepValueType | StepValueType[];
|
|
32
|
+
metafield: MetaField;
|
|
33
|
+
};
|
|
34
|
+
export type StepValueType = {
|
|
35
|
+
value: string;
|
|
36
|
+
classname: string | undefined;
|
|
37
|
+
};
|
|
38
|
+
export type MetaField = {
|
|
39
|
+
label: string;
|
|
40
|
+
allowedValues: string[];
|
|
41
|
+
required: boolean;
|
|
42
|
+
onlyOneAllowedValue: boolean;
|
|
43
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Maintenance_Ticket } from "./Maintenance_Ticket";
|
|
2
|
+
import type { Tenant } from "./Tenant";
|
|
3
|
+
import type { _User } from "./_User";
|
|
4
|
+
export interface Maintenance_Ticket_MaterialAttributes {
|
|
5
|
+
id: string;
|
|
6
|
+
objectId: string;
|
|
7
|
+
createdAt: Date;
|
|
8
|
+
updatedAt: Date;
|
|
9
|
+
itemList: any[];
|
|
10
|
+
tenant?: Tenant;
|
|
11
|
+
ticket: Maintenance_Ticket;
|
|
12
|
+
user?: _User;
|
|
13
|
+
}
|
|
14
|
+
export declare class Maintenance_Ticket_Material extends Parse.Object<Maintenance_Ticket_MaterialAttributes> {
|
|
15
|
+
static className: string;
|
|
16
|
+
constructor(data?: Partial<Maintenance_Ticket_MaterialAttributes>);
|
|
17
|
+
get itemList(): any[];
|
|
18
|
+
set itemList(value: any[]);
|
|
19
|
+
get tenant(): Tenant | undefined;
|
|
20
|
+
set tenant(value: Tenant | undefined);
|
|
21
|
+
get ticket(): Maintenance_Ticket;
|
|
22
|
+
set ticket(value: Maintenance_Ticket);
|
|
23
|
+
get user(): _User | undefined;
|
|
24
|
+
set user(value: _User | undefined);
|
|
25
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Maintenance_Ticket_Material = void 0;
|
|
4
|
+
class Maintenance_Ticket_Material extends Parse.Object {
|
|
5
|
+
constructor(data) {
|
|
6
|
+
super("OD3_Maintenance_Ticket_Material", data);
|
|
7
|
+
}
|
|
8
|
+
get itemList() {
|
|
9
|
+
return super.get("itemList");
|
|
10
|
+
}
|
|
11
|
+
set itemList(value) {
|
|
12
|
+
super.set("itemList", value);
|
|
13
|
+
}
|
|
14
|
+
get tenant() {
|
|
15
|
+
return super.get("tenant");
|
|
16
|
+
}
|
|
17
|
+
set tenant(value) {
|
|
18
|
+
super.set("tenant", value);
|
|
19
|
+
}
|
|
20
|
+
get ticket() {
|
|
21
|
+
return super.get("ticket");
|
|
22
|
+
}
|
|
23
|
+
set ticket(value) {
|
|
24
|
+
super.set("ticket", value);
|
|
25
|
+
}
|
|
26
|
+
get user() {
|
|
27
|
+
return super.get("user");
|
|
28
|
+
}
|
|
29
|
+
set user(value) {
|
|
30
|
+
super.set("user", value);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.Maintenance_Ticket_Material = Maintenance_Ticket_Material;
|
|
34
|
+
Maintenance_Ticket_Material.className = "OD3_Maintenance_Ticket_Material";
|
|
35
|
+
Parse.Object.registerSubclass("OD3_Maintenance_Ticket_Material", Maintenance_Ticket_Material);
|
package/dist/types/index.d.ts
CHANGED
|
@@ -140,6 +140,8 @@ export { Maintenance_Ticket_Kanban_State } from "./Maintenance_Ticket_Kanban_Sta
|
|
|
140
140
|
export type { Maintenance_Ticket_Kanban_StateAttributes } from "./Maintenance_Ticket_Kanban_State";
|
|
141
141
|
export { Maintenance_Ticket_Kanban_State_Current } from "./Maintenance_Ticket_Kanban_State_Current";
|
|
142
142
|
export type { Maintenance_Ticket_Kanban_State_CurrentAttributes } from "./Maintenance_Ticket_Kanban_State_Current";
|
|
143
|
+
export { Maintenance_Ticket_Material } from "./Maintenance_Ticket_Material";
|
|
144
|
+
export type { Maintenance_Ticket_MaterialAttributes } from "./Maintenance_Ticket_Material";
|
|
143
145
|
export { Maintenance_Ticket_Source } from "./Maintenance_Ticket_Source";
|
|
144
146
|
export type { Maintenance_Ticket_SourceAttributes } from "./Maintenance_Ticket_Source";
|
|
145
147
|
export { Maintenance_Ticket_Title } from "./Maintenance_Ticket_Title";
|
package/dist/types/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Maintenance_Duedate = exports.Maintenance_Downtime = exports.Maintenance_DailySchedule = exports.MailTemplate = exports.ML_DataSelection = exports.MIAAS_MDSEndpoint = exports.MES_OrderPlan = exports.MES_Order = exports.MES_Article = exports.Log = exports.Language = exports.Knowledge_Video = exports.Knowledge_DocumentPage = exports.Knowledge_Document = exports.Knowledge_ChatMessage = exports.Knowledge_Chat = exports.Knowledge_Category = exports.Knowledge_Article = exports.GTFS_Wheelchair_Boarding = exports.GTFS_Wheelchair_Accessible = exports.GTFS_Trip = exports.GTFS_Stop_Times = exports.GTFS_Stop = exports.GTFS_Route_Type = exports.GTFS_Route = exports.GTFS_Location_Type = exports.GTFS_Level = exports.GTFS_Direction = exports.GTFS_Calendar = exports.GTFS_Bikes_Allowed = exports.GTFS_Agency = exports.Documentation_Document = exports.Documentation_Category = exports.Dashboard = exports.Core_Token = exports.Core_Email = exports.Contact = exports.Config = exports.Company = exports.BDE_Unit = exports.BDE_Result = exports.BDE_Page = exports.BDE_ListEntry = exports.BDE_List = exports.BDE_Form = exports.Attachment = exports.Assets = exports.AlarmWebhook = exports.AlarmAction = exports.Alarm = void 0;
|
|
4
|
-
exports.WidgetPreset = exports.Widget = exports.WebPush = exports.VirtualKPI = exports.User_Setting = exports.UserData = exports.TenantTrustedDomain = exports.TenantMeta = exports.Tenant = exports.SourceMeta = exports.Source = exports.Share = exports.Report = exports.Push = exports.Permission = exports.Notification_Setting = exports.Notification = exports.NavigationItem = exports.NavigationGroup = exports.Monitoring_Slideshow = exports.Monitoring_ReportImage = exports.Monitoring_ParseTableSensor = exports.Monitoring_Jobs = exports.Monitoring_DataHierachies = exports.Maintenance_Ticket_Title = exports.Maintenance_Ticket_Source = exports.Maintenance_Ticket_Kanban_State_Current = exports.Maintenance_Ticket_Kanban_State = exports.Maintenance_Ticket_Issuecategory = exports.Maintenance_Ticket_Assignment = exports.Maintenance_Ticket = exports.Maintenance_Source_File = exports.Maintenance_SourceMeta = exports.Maintenance_Schedule_Template = exports.Maintenance_Schedule_Step = exports.Maintenance_Schedule_Execution_Step = exports.Maintenance_Schedule_Execution = exports.Maintenance_Restriction = exports.Maintenance_Priority = exports.Maintenance_Order = exports.Maintenance_Message_Body = exports.Maintenance_Message = exports.Maintenance_Media = exports.Maintenance_Kanban_State = exports.Maintenance_Item = exports.Maintenance_Issuecategory = exports.Maintenance_Frequency = void 0;
|
|
4
|
+
exports.WidgetPreset = exports.Widget = exports.WebPush = exports.VirtualKPI = exports.User_Setting = exports.UserData = exports.TenantTrustedDomain = exports.TenantMeta = exports.Tenant = exports.SourceMeta = exports.Source = exports.Share = exports.Report = exports.Push = exports.Permission = exports.Notification_Setting = exports.Notification = exports.NavigationItem = exports.NavigationGroup = exports.Monitoring_Slideshow = exports.Monitoring_ReportImage = exports.Monitoring_ParseTableSensor = exports.Monitoring_Jobs = exports.Monitoring_DataHierachies = exports.Maintenance_Ticket_Title = exports.Maintenance_Ticket_Source = exports.Maintenance_Ticket_Material = exports.Maintenance_Ticket_Kanban_State_Current = exports.Maintenance_Ticket_Kanban_State = exports.Maintenance_Ticket_Issuecategory = exports.Maintenance_Ticket_Assignment = exports.Maintenance_Ticket = exports.Maintenance_Source_File = exports.Maintenance_SourceMeta = exports.Maintenance_Schedule_Template = exports.Maintenance_Schedule_Step = exports.Maintenance_Schedule_Execution_Step = exports.Maintenance_Schedule_Execution = exports.Maintenance_Restriction = exports.Maintenance_Priority = exports.Maintenance_Order = exports.Maintenance_Message_Body = exports.Maintenance_Message = exports.Maintenance_Media = exports.Maintenance_Kanban_State = exports.Maintenance_Item = exports.Maintenance_Issuecategory = exports.Maintenance_Frequency = void 0;
|
|
5
5
|
var Alarm_1 = require("./Alarm");
|
|
6
6
|
Object.defineProperty(exports, "Alarm", { enumerable: true, get: function () { return Alarm_1.Alarm; } });
|
|
7
7
|
var AlarmAction_1 = require("./AlarmAction");
|
|
@@ -144,6 +144,8 @@ var Maintenance_Ticket_Kanban_State_1 = require("./Maintenance_Ticket_Kanban_Sta
|
|
|
144
144
|
Object.defineProperty(exports, "Maintenance_Ticket_Kanban_State", { enumerable: true, get: function () { return Maintenance_Ticket_Kanban_State_1.Maintenance_Ticket_Kanban_State; } });
|
|
145
145
|
var Maintenance_Ticket_Kanban_State_Current_1 = require("./Maintenance_Ticket_Kanban_State_Current");
|
|
146
146
|
Object.defineProperty(exports, "Maintenance_Ticket_Kanban_State_Current", { enumerable: true, get: function () { return Maintenance_Ticket_Kanban_State_Current_1.Maintenance_Ticket_Kanban_State_Current; } });
|
|
147
|
+
var Maintenance_Ticket_Material_1 = require("./Maintenance_Ticket_Material");
|
|
148
|
+
Object.defineProperty(exports, "Maintenance_Ticket_Material", { enumerable: true, get: function () { return Maintenance_Ticket_Material_1.Maintenance_Ticket_Material; } });
|
|
147
149
|
var Maintenance_Ticket_Source_1 = require("./Maintenance_Ticket_Source");
|
|
148
150
|
Object.defineProperty(exports, "Maintenance_Ticket_Source", { enumerable: true, get: function () { return Maintenance_Ticket_Source_1.Maintenance_Ticket_Source; } });
|
|
149
151
|
var Maintenance_Ticket_Title_1 = require("./Maintenance_Ticket_Title");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openinc/parse-server-opendash",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.100",
|
|
4
4
|
"description": "Parse Server Cloud Code for open.DASH",
|
|
5
5
|
"packageManager": "pnpm@10.2.1",
|
|
6
6
|
"keywords": [
|
|
@@ -29,30 +29,30 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@breejs/ts-worker": "^2.0.0",
|
|
31
31
|
"@ladjs/graceful": "^4.2.0",
|
|
32
|
-
"@openinc/parse-server-schema": "^1.7.
|
|
32
|
+
"@openinc/parse-server-schema": "^1.7.12",
|
|
33
33
|
"bree": "^9.2.4",
|
|
34
34
|
"cabin": "^14.0.0",
|
|
35
|
-
"cron": "^3.
|
|
36
|
-
"fast-equals": "^5.
|
|
35
|
+
"cron": "^3.5.0",
|
|
36
|
+
"fast-equals": "^5.2.2",
|
|
37
37
|
"jsonwebtoken": "^9.0.2",
|
|
38
38
|
"node-fetch": "^2.7.0",
|
|
39
|
-
"nodemailer": "^6.
|
|
39
|
+
"nodemailer": "^6.10.0",
|
|
40
40
|
"nunjucks": "^3.2.4",
|
|
41
41
|
"parse-server": "^6.5.11",
|
|
42
42
|
"pdf-img-convert": "2.0.0",
|
|
43
43
|
"web-push": "^3.6.7"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@types/jsonwebtoken": "^9.0.
|
|
47
|
-
"@types/node": "^18.19.
|
|
46
|
+
"@types/jsonwebtoken": "^9.0.9",
|
|
47
|
+
"@types/node": "^18.19.76",
|
|
48
48
|
"@types/node-fetch": "^2.6.12",
|
|
49
49
|
"@types/nodemailer": "^6.4.17",
|
|
50
50
|
"@types/nunjucks": "^3.2.6",
|
|
51
51
|
"@types/parse": "^3.0.9",
|
|
52
52
|
"@types/safe-timers": "^1.1.2",
|
|
53
53
|
"@types/web-push": "^3.6.4",
|
|
54
|
-
"typedoc": "^0.27.
|
|
55
|
-
"typedoc-plugin-markdown": "^4.4.
|
|
56
|
-
"typescript": "^5.7.
|
|
54
|
+
"typedoc": "^0.27.8",
|
|
55
|
+
"typedoc-plugin-markdown": "^4.4.2",
|
|
56
|
+
"typescript": "^5.7.3"
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fields": {
|
|
3
|
+
"itemList": {
|
|
4
|
+
"type": "Array",
|
|
5
|
+
"required": false,
|
|
6
|
+
"defaultValue": []
|
|
7
|
+
},
|
|
8
|
+
"tenant": {
|
|
9
|
+
"type": "Pointer",
|
|
10
|
+
"targetClass": "{{PREFIX}}Tenant",
|
|
11
|
+
"required": false
|
|
12
|
+
},
|
|
13
|
+
"ticket": {
|
|
14
|
+
"type": "Pointer",
|
|
15
|
+
"targetClass": "{{PREFIX}}Maintenance_Ticket",
|
|
16
|
+
"required": true
|
|
17
|
+
},
|
|
18
|
+
"user": {
|
|
19
|
+
"type": "Pointer",
|
|
20
|
+
"targetClass": "_User",
|
|
21
|
+
"required": false
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"classLevelPermissions": {
|
|
25
|
+
"find": {
|
|
26
|
+
"*": true
|
|
27
|
+
},
|
|
28
|
+
"count": {
|
|
29
|
+
"*": true
|
|
30
|
+
},
|
|
31
|
+
"get": {
|
|
32
|
+
"*": true
|
|
33
|
+
},
|
|
34
|
+
"create": {
|
|
35
|
+
"*": true
|
|
36
|
+
},
|
|
37
|
+
"update": {
|
|
38
|
+
"*": true
|
|
39
|
+
},
|
|
40
|
+
"delete": {
|
|
41
|
+
"*": true
|
|
42
|
+
},
|
|
43
|
+
"addField": {
|
|
44
|
+
"*": true
|
|
45
|
+
},
|
|
46
|
+
"protectedFields": {
|
|
47
|
+
"*": []
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export interface PermissionInterface {
|
|
2
|
-
label: string;
|
|
3
|
-
description: string;
|
|
4
|
-
key: string;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* This function registers a new permission in the database on a tenant level.
|
|
8
|
-
* @param name The function name derived from the file name
|
|
9
|
-
*/
|
|
10
|
-
export declare function init(name: string): Promise<void>;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.init = init;
|
|
4
|
-
const types_1 = require("../types");
|
|
5
|
-
/**
|
|
6
|
-
* This function registers a new permission in the database on a tenant level.
|
|
7
|
-
* @param name The function name derived from the file name
|
|
8
|
-
*/
|
|
9
|
-
async function init(name) {
|
|
10
|
-
Parse.Cloud.define(name, async function (request) {
|
|
11
|
-
if (request.user === undefined) {
|
|
12
|
-
return { success: false, error: "User is not provided." };
|
|
13
|
-
}
|
|
14
|
-
//Get the current user
|
|
15
|
-
const user = request.user;
|
|
16
|
-
if (!user) {
|
|
17
|
-
return { success: false, error: "User is required." };
|
|
18
|
-
}
|
|
19
|
-
//Get the tenant of the current user
|
|
20
|
-
const tenant = user.get("tenant");
|
|
21
|
-
const permission = request.params
|
|
22
|
-
.permission;
|
|
23
|
-
//Check if the Permission with key already exists
|
|
24
|
-
const existingpermission = await new Parse.Query(types_1.Permission)
|
|
25
|
-
.equalTo("key", permission.key)
|
|
26
|
-
.equalTo("tenant", tenant)
|
|
27
|
-
.find({ useMasterKey: true });
|
|
28
|
-
//If the permission does not exist, create it
|
|
29
|
-
if (existingpermission.length === 0) {
|
|
30
|
-
console.log(`Permission with key ${permission.key} does not exist. Will be created.`);
|
|
31
|
-
const newPermission = new types_1.Permission();
|
|
32
|
-
newPermission.set("label", permission.label);
|
|
33
|
-
newPermission.set("description", permission.description);
|
|
34
|
-
newPermission.set("key", permission.key);
|
|
35
|
-
newPermission.set("tenant", tenant);
|
|
36
|
-
await newPermission.save({}, { useMasterKey: true });
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
console.log(`Permission with key ${permission.key} already exists. Continue.`);
|
|
40
|
-
}
|
|
41
|
-
return { success: true };
|
|
42
|
-
}, {
|
|
43
|
-
requireUser: true,
|
|
44
|
-
fields: {
|
|
45
|
-
permission: {
|
|
46
|
-
required: true,
|
|
47
|
-
type: Object,
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
}
|