@openinc/parse-server-opendash 2.4.96 → 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.
Files changed (31) hide show
  1. package/dist/app_types/OpenWareTicketObject.d.ts +11 -0
  2. package/dist/app_types/OpenWareTicketObject.js +2 -0
  3. package/dist/app_types/index.d.ts +2 -0
  4. package/dist/config.js +9 -0
  5. package/dist/featuremap.json +2 -0
  6. package/dist/functions/openinc-openservice-save-ticket-data.d.ts +2 -1
  7. package/dist/functions/openinc-openservice-save-ticket-data.js +188 -19
  8. package/dist/functions/openinc-openservice-ticket-data.d.ts +6 -2
  9. package/dist/functions/openinc-openservice-ticket-data.js +15 -1
  10. package/dist/helper/TicketData.d.ts +2 -1
  11. package/dist/helper/TranslationKeys.d.ts +8 -0
  12. package/dist/helper/TranslationKeys.js +8 -0
  13. package/dist/hooks/Config_open_service.js +1 -1
  14. package/dist/hooks/Maintenance_Message.js +22 -1
  15. package/dist/hooks/Maintenance_Ticket_Material.d.ts +9 -0
  16. package/dist/hooks/Maintenance_Ticket_Material.js +98 -0
  17. package/dist/hooks/Monitoring_Jobs.js +1 -1
  18. package/dist/index.js +3 -1
  19. package/dist/ow.d.ts +2 -1
  20. package/dist/types/Maintenance_Schedule_Step.d.ts +17 -3
  21. package/dist/types/Maintenance_Ticket_Material.d.ts +25 -0
  22. package/dist/types/Maintenance_Ticket_Material.js +35 -0
  23. package/dist/types/Monitoring_Jobs.d.ts +8 -3
  24. package/dist/types/Monitoring_Jobs.js +6 -0
  25. package/dist/types/index.d.ts +2 -0
  26. package/dist/types/index.js +3 -1
  27. package/package.json +10 -10
  28. package/schema/Maintenance_Ticket_Material.json +50 -0
  29. package/schema/Monitoring_Jobs.json +8 -1
  30. package/dist/functions/openinc-register-permission.d.ts +0 -10
  31. 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
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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/config.js CHANGED
@@ -233,6 +233,15 @@ const options = {
233
233
  default: "false",
234
234
  description: "Enable Parse Classes and Cloud Code for the MIAAS plugin.",
235
235
  },
236
+ FEATURE_DOCUMENTATION: {
237
+ env: "OPENINC_PARSE_FEATURE_DOCUMENTATION",
238
+ type: "boolean",
239
+ required: false,
240
+ secret: false,
241
+ public: true,
242
+ default: "false",
243
+ description: "Enable Parse Classes and Cloud Code for the Documentation plugin.",
244
+ },
236
245
  FORCE_SCHEMA: {
237
246
  env: "OPENINC_PARSE_FORCE_SCHEMA",
238
247
  type: "boolean",
@@ -65,12 +65,14 @@
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",
71
72
  "OD3_MES_Order": "MONITORING",
72
73
  "OD3_MES_OrderPlan": "MONITORING",
73
74
  "OD3_MIAAS_MDSEndpoint": "MIAAS",
75
+ "OD3_ML_DataSelection": "unknown",
74
76
  "OD3_Monitoring_DataHierachies": "MONITORING",
75
77
  "OD3_Monitoring_Jobs": "MONITORING",
76
78
  "OD3_Monitoring_ParseTableSensor": "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
- if (data.downtime !== undefined)
68
- await saveDowntime(ticket, data.downtime, fetchOptions);
69
- if (data.frequency !== undefined)
70
- await saveFrequency(ticket, data.frequency, fetchOptions);
71
- if (data.restriction !== undefined)
72
- await saveRestriction(ticket, data.restriction, fetchOptions);
73
- if (data.issuecategory)
74
- await saveIssueCategory(ticket, data.issuecategory, fetchOptions);
75
- if (data.state)
76
- await saveState(ticket, data.state, fetchOptions);
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
  };
@@ -64,7 +64,7 @@ async function init() {
64
64
  if (!fields.find((el) => el.metafield?.label === metafield.label)) {
65
65
  console.log("Add field:", metafield.label);
66
66
  fields.push({
67
- value: "",
67
+ value: { value: "", classname: undefined },
68
68
  metafield,
69
69
  });
70
70
  }
@@ -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
+ }
@@ -7,7 +7,7 @@ async function init() {
7
7
  (0, __1.beforeSaveHook)(types_1.Monitoring_Jobs, async (request) => {
8
8
  const { object, original, user } = request;
9
9
  await (0, __1.defaultHandler)(request);
10
- await (0, __1.defaultAclHandler)(request);
10
+ await (0, __1.defaultAclHandler)(request, { allowCustomACL: true });
11
11
  // TODO
12
12
  });
13
13
  (0, __1.afterSaveHook)(types_1.Monitoring_Jobs, async (request) => {
package/dist/index.js CHANGED
@@ -29,10 +29,10 @@ const config_1 = require("./config");
29
29
  const featuremap_json_1 = __importDefault(require("./featuremap.json"));
30
30
  const _init_1 = require("./functions/_init");
31
31
  const BreeInstance_1 = __importDefault(require("./helper/BreeInstance"));
32
+ const registerPermissions_1 = require("./helper/registerPermissions");
32
33
  const Core_Email_1 = require("./hooks/Core_Email");
33
34
  const _init_2 = require("./hooks/_init");
34
35
  const types_1 = require("./types");
35
- const registerPermissions_1 = require("./helper/registerPermissions");
36
36
  // export { Config } from "./helper/Config";
37
37
  var Core_Email_2 = require("./hooks/Core_Email");
38
38
  Object.defineProperty(exports, "sendSimpleEmail", { enumerable: true, get: function () { return Core_Email_2.sendSimpleEmail; } });
@@ -607,6 +607,8 @@ function isFeatureEnabled(feature) {
607
607
  return config_1.config.getBoolean("FEATURE_KNOWLEDGE");
608
608
  case "MAINTENANCE":
609
609
  return config_1.config.getBoolean("FEATURE_MAINTENANCE");
610
+ case "DOCUMENTATION":
611
+ return config_1.config.getBoolean("FEATURE_DOCUMENTATION");
610
612
  case "MIAAS":
611
613
  return config_1.config.getBoolean("FEATURE_MIAAS");
612
614
  default:
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: "Number" | "String" | "Boolean" | "Geo" | "Object";
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?: any[];
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(): any[] | undefined;
22
- set fields(value: any[] | undefined);
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);
@@ -1,3 +1,5 @@
1
+ import type { Tenant } from "./Tenant";
2
+ import type { _User } from "./_User";
1
3
  export interface Monitoring_JobsAttributes {
2
4
  id: string;
3
5
  objectId: string;
@@ -9,8 +11,9 @@ export interface Monitoring_JobsAttributes {
9
11
  name?: string;
10
12
  next_execution_ow_job?: number;
11
13
  options?: any;
14
+ tenant?: Tenant;
12
15
  type?: string;
13
- user?: string;
16
+ user?: _User;
14
17
  }
15
18
  export declare class Monitoring_Jobs extends Parse.Object<Monitoring_JobsAttributes> {
16
19
  static className: string;
@@ -27,8 +30,10 @@ export declare class Monitoring_Jobs extends Parse.Object<Monitoring_JobsAttribu
27
30
  set next_execution_ow_job(value: number | undefined);
28
31
  get options(): any | undefined;
29
32
  set options(value: any | undefined);
33
+ get tenant(): Tenant | undefined;
34
+ set tenant(value: Tenant | undefined);
30
35
  get type(): string | undefined;
31
36
  set type(value: string | undefined);
32
- get user(): string | undefined;
33
- set user(value: string | undefined);
37
+ get user(): _User | undefined;
38
+ set user(value: _User | undefined);
34
39
  }
@@ -41,6 +41,12 @@ class Monitoring_Jobs extends Parse.Object {
41
41
  set options(value) {
42
42
  super.set("options", value);
43
43
  }
44
+ get tenant() {
45
+ return super.get("tenant");
46
+ }
47
+ set tenant(value) {
48
+ super.set("tenant", value);
49
+ }
44
50
  get type() {
45
51
  return super.get("type");
46
52
  }
@@ -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";
@@ -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.96",
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.8",
32
+ "@openinc/parse-server-schema": "^1.7.12",
33
33
  "bree": "^9.2.4",
34
34
  "cabin": "^14.0.0",
35
- "cron": "^3.3.2",
36
- "fast-equals": "^5.0.1",
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.9.16",
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.7",
47
- "@types/node": "^18.19.67",
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.6",
55
- "typedoc-plugin-markdown": "^4.4.1",
56
- "typescript": "^5.7.2"
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
+ }
@@ -18,11 +18,18 @@
18
18
  "options": {
19
19
  "type": "Object"
20
20
  },
21
+ "tenant": {
22
+ "type": "Pointer",
23
+ "targetClass": "{{PREFIX}}Tenant",
24
+ "required": false
25
+ },
21
26
  "type": {
22
27
  "type": "String"
23
28
  },
24
29
  "user": {
25
- "type": "String"
30
+ "type": "Pointer",
31
+ "targetClass": "_User",
32
+ "required": false
26
33
  }
27
34
  },
28
35
  "classLevelPermissions": {
@@ -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
- }