@openinc/parse-server-opendash 2.4.101 → 2.4.102
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 +6 -6
- package/dist/functions/openinc-openservice-save-ticket-data.d.ts +1 -1
- package/dist/functions/openinc-openservice-save-ticket-data.js +128 -52
- package/dist/functions/openinc-openservice-ticket-data.js +3 -0
- package/dist/helper/TicketData.d.ts +2 -1
- package/dist/index.js +9 -8
- package/package.json +1 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
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
2
|
export type OpenWareTicketObject = {
|
|
3
3
|
ticket: Maintenance_Ticket;
|
|
4
|
-
priority: Maintenance_Priority |
|
|
5
|
-
downtime: Maintenance_Downtime |
|
|
6
|
-
frequency: Maintenance_Frequency |
|
|
7
|
-
restriction: Maintenance_Restriction |
|
|
8
|
-
issuecategory: Maintenance_Ticket_Issuecategory |
|
|
9
|
-
state: Maintenance_Ticket_Kanban_State |
|
|
4
|
+
priority: Maintenance_Priority | Number;
|
|
5
|
+
downtime: Maintenance_Downtime | Number;
|
|
6
|
+
frequency: Maintenance_Frequency | Number;
|
|
7
|
+
restriction: Maintenance_Restriction | Number;
|
|
8
|
+
issuecategory: Maintenance_Ticket_Issuecategory | String;
|
|
9
|
+
state: Maintenance_Ticket_Kanban_State | String;
|
|
10
10
|
source: Maintenance_Ticket_Source;
|
|
11
11
|
};
|
|
@@ -55,12 +55,12 @@ async function saveTicketData(data, user) {
|
|
|
55
55
|
const ticket = await getTicketObject(data, user, fetchOptions);
|
|
56
56
|
const owticketobj = {
|
|
57
57
|
ticket: ticket,
|
|
58
|
-
priority:
|
|
59
|
-
downtime:
|
|
60
|
-
restriction:
|
|
61
|
-
frequency:
|
|
62
|
-
issuecategory:
|
|
63
|
-
state:
|
|
58
|
+
priority: 0,
|
|
59
|
+
downtime: 0,
|
|
60
|
+
restriction: 0,
|
|
61
|
+
frequency: 0,
|
|
62
|
+
issuecategory: "",
|
|
63
|
+
state: "",
|
|
64
64
|
source: new types_1.Maintenance_Ticket_Source(),
|
|
65
65
|
};
|
|
66
66
|
// needs to be the first save to save a message before data change messages are created on ticket creation
|
|
@@ -78,23 +78,75 @@ async function saveTicketData(data, user) {
|
|
|
78
78
|
const savedpriority = await savePriority(ticket, data.priority, fetchOptions);
|
|
79
79
|
owticketobj.priority = savedpriority;
|
|
80
80
|
}
|
|
81
|
+
else {
|
|
82
|
+
//Fetch last value so it won't publish a 0 value to openware and overwrite the last value with default 0
|
|
83
|
+
const [lastPriorityError, lastPriority] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Priority)
|
|
84
|
+
.equalTo("ticket", ticket)
|
|
85
|
+
.descending("createdAt")
|
|
86
|
+
.first(fetchOptions));
|
|
87
|
+
if (lastPriorityError) {
|
|
88
|
+
console.log("Error fetching last priority", lastPriorityError);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
owticketobj.priority = lastPriority?.get("value") ?? 0;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
81
94
|
if (data.downtime !== undefined) {
|
|
82
95
|
const saveddowntime = await saveDowntime(ticket, data.downtime, fetchOptions);
|
|
83
96
|
owticketobj.downtime = saveddowntime;
|
|
84
97
|
}
|
|
98
|
+
else {
|
|
99
|
+
//Fetch last value so it won't publish a 0 value to openware and overwrite the last value with default 0
|
|
100
|
+
const [lastDowntimeError, lastDowntime] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Downtime)
|
|
101
|
+
.equalTo("ticket", ticket)
|
|
102
|
+
.descending("createdAt")
|
|
103
|
+
.first(fetchOptions));
|
|
104
|
+
if (lastDowntimeError) {
|
|
105
|
+
console.log("Error fetching last downtime", lastDowntimeError);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
owticketobj.downtime = lastDowntime?.get("value") ?? 0;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
85
111
|
if (data.frequency !== undefined) {
|
|
86
112
|
const savedfrequency = await saveFrequency(ticket, data.frequency, fetchOptions);
|
|
87
113
|
owticketobj.frequency = savedfrequency;
|
|
88
114
|
}
|
|
115
|
+
else {
|
|
116
|
+
//Fetch last value so it won't publish a 0 value to openware and overwrite the last value with default 0
|
|
117
|
+
const [lastFrequencyError, lastFrequency] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Frequency)
|
|
118
|
+
.equalTo("ticket", ticket)
|
|
119
|
+
.descending("createdAt")
|
|
120
|
+
.first(fetchOptions));
|
|
121
|
+
if (lastFrequencyError) {
|
|
122
|
+
console.log("Error fetching last frequency", lastFrequencyError);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
owticketobj.frequency = lastFrequency?.get("value") ?? 0;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
89
128
|
if (data.restriction !== undefined) {
|
|
90
129
|
const savedrestriction = await saveRestriction(ticket, data.restriction, fetchOptions);
|
|
91
130
|
owticketobj.restriction = savedrestriction;
|
|
92
131
|
}
|
|
132
|
+
else {
|
|
133
|
+
//Fetch last value so it won't publish a 0 value to openware and overwrite the last value with default 0
|
|
134
|
+
const [lastRestrictionError, lastRestriction] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Restriction)
|
|
135
|
+
.equalTo("ticket", ticket)
|
|
136
|
+
.descending("createdAt")
|
|
137
|
+
.first(fetchOptions));
|
|
138
|
+
if (lastRestrictionError) {
|
|
139
|
+
console.log("Error fetching last restriction", lastRestrictionError);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
owticketobj.restriction = lastRestriction?.get("value") ?? 0;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
93
145
|
if (data.issuecategory) {
|
|
94
146
|
const savedissuecategory = await saveIssueCategory(ticket, data.issuecategory, fetchOptions);
|
|
95
147
|
const [fetchedSavedIssuecategoryError, fetchedSavedIssuecategory] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Ticket_Issuecategory)
|
|
96
148
|
.include("issuecategory")
|
|
97
|
-
.get(savedissuecategory.id));
|
|
149
|
+
.get(savedissuecategory.id, fetchOptions));
|
|
98
150
|
if (fetchedSavedIssuecategoryError) {
|
|
99
151
|
console.log("Error fetching saved issue category", fetchedSavedIssuecategoryError);
|
|
100
152
|
}
|
|
@@ -106,7 +158,7 @@ async function saveTicketData(data, user) {
|
|
|
106
158
|
const savedstate = await saveState(ticket, data.state, fetchOptions);
|
|
107
159
|
const [fetchedSavedStateError, fetchedSavedState] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Ticket_Kanban_State)
|
|
108
160
|
.include("state")
|
|
109
|
-
.get(savedstate.id));
|
|
161
|
+
.get(savedstate.id, fetchOptions));
|
|
110
162
|
if (fetchedSavedStateError) {
|
|
111
163
|
console.log("Error fetching saved state", fetchedSavedStateError);
|
|
112
164
|
}
|
|
@@ -141,7 +193,9 @@ async function saveTicketData(data, user) {
|
|
|
141
193
|
else if (ticketsource && ticketsource.get("source")) {
|
|
142
194
|
owticketobj.source = ticketsource;
|
|
143
195
|
// publish to openware
|
|
144
|
-
await publishToOpenWare(owticketobj, ticket, ticketsource.get("source").
|
|
196
|
+
await publishToOpenWare(owticketobj, ticket, ticketsource.get("source").get("tag")
|
|
197
|
+
? ticketsource.get("source").get("tag")
|
|
198
|
+
: "");
|
|
145
199
|
}
|
|
146
200
|
return ticket;
|
|
147
201
|
}
|
|
@@ -154,90 +208,112 @@ async function publishToOpenWare(owticketobj, ticket, source) {
|
|
|
154
208
|
const time = new Date().getTime();
|
|
155
209
|
const values = {
|
|
156
210
|
date: time,
|
|
157
|
-
value: Object.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
211
|
+
value: Object.entries(owticketobj).map(([key, value]) => {
|
|
212
|
+
if (key === "downtime") {
|
|
213
|
+
if (value instanceof types_1.Maintenance_Downtime) {
|
|
214
|
+
return value.get("value");
|
|
215
|
+
}
|
|
216
|
+
return value;
|
|
161
217
|
}
|
|
162
|
-
else if (
|
|
163
|
-
|
|
218
|
+
else if (key === "frequency") {
|
|
219
|
+
if (value instanceof types_1.Maintenance_Frequency) {
|
|
220
|
+
return value.get("value");
|
|
221
|
+
}
|
|
222
|
+
return value;
|
|
164
223
|
}
|
|
165
|
-
else if (
|
|
166
|
-
|
|
224
|
+
else if (key === "priority") {
|
|
225
|
+
if (value instanceof types_1.Maintenance_Priority) {
|
|
226
|
+
return value.get("value");
|
|
227
|
+
}
|
|
228
|
+
return value;
|
|
167
229
|
}
|
|
168
|
-
else if (
|
|
169
|
-
|
|
230
|
+
else if (key === "restriction") {
|
|
231
|
+
if (value instanceof types_1.Maintenance_Restriction) {
|
|
232
|
+
return value.get("value");
|
|
233
|
+
}
|
|
234
|
+
return value;
|
|
170
235
|
}
|
|
171
|
-
else if (
|
|
172
|
-
|
|
236
|
+
else if (key === "issuecategory") {
|
|
237
|
+
if (value instanceof types_1.Maintenance_Ticket_Issuecategory) {
|
|
238
|
+
return value.get("issuecategory").id;
|
|
239
|
+
}
|
|
240
|
+
return value;
|
|
173
241
|
}
|
|
174
|
-
else if (
|
|
175
|
-
|
|
242
|
+
else if (key === "state") {
|
|
243
|
+
if (value instanceof types_1.Maintenance_Ticket_Kanban_State) {
|
|
244
|
+
return value.get("state").id;
|
|
245
|
+
}
|
|
246
|
+
return value;
|
|
176
247
|
}
|
|
177
|
-
else if (
|
|
178
|
-
|
|
248
|
+
else if (key === "ticket") {
|
|
249
|
+
if (value instanceof types_1.Maintenance_Ticket) {
|
|
250
|
+
return value.id;
|
|
251
|
+
}
|
|
252
|
+
return value;
|
|
179
253
|
}
|
|
180
|
-
else if (
|
|
181
|
-
|
|
254
|
+
else if (key === "source") {
|
|
255
|
+
if (value instanceof types_1.Maintenance_Ticket_Source) {
|
|
256
|
+
return value.get("source").id;
|
|
257
|
+
}
|
|
258
|
+
return value;
|
|
182
259
|
}
|
|
183
|
-
return
|
|
184
|
-
})
|
|
185
|
-
.filter((v) => v !== undefined),
|
|
260
|
+
return value;
|
|
261
|
+
}),
|
|
186
262
|
};
|
|
187
|
-
const valueTypes = Object.
|
|
263
|
+
const valueTypes = Object.keys(owticketobj).map((key) => {
|
|
188
264
|
const tmpvaluetype = {
|
|
189
265
|
name: "",
|
|
190
266
|
unit: "",
|
|
191
267
|
type: "String",
|
|
192
268
|
};
|
|
193
|
-
if (
|
|
194
|
-
tmpvaluetype.name = types_1.Maintenance_Downtime.className;
|
|
269
|
+
if (key === "downtime") {
|
|
270
|
+
tmpvaluetype.name = types_1.Maintenance_Downtime.className.replace("OD3_Maintenance_", "");
|
|
195
271
|
tmpvaluetype.unit = "%";
|
|
196
272
|
tmpvaluetype.type = "Number";
|
|
197
273
|
}
|
|
198
|
-
else if (
|
|
199
|
-
tmpvaluetype.name = types_1.Maintenance_Frequency.className;
|
|
274
|
+
else if (key === "frequency") {
|
|
275
|
+
tmpvaluetype.name = types_1.Maintenance_Frequency.className.replace("OD3_Maintenance_", "");
|
|
200
276
|
tmpvaluetype.unit = "%";
|
|
201
277
|
tmpvaluetype.type = "Number";
|
|
202
278
|
}
|
|
203
|
-
else if (
|
|
204
|
-
tmpvaluetype.name = types_1.Maintenance_Priority.className;
|
|
279
|
+
else if (key === "priority") {
|
|
280
|
+
tmpvaluetype.name = types_1.Maintenance_Priority.className.replace("OD3_Maintenance_", "");
|
|
205
281
|
tmpvaluetype.unit = "%";
|
|
206
282
|
tmpvaluetype.type = "Number";
|
|
207
283
|
}
|
|
208
|
-
else if (
|
|
209
|
-
tmpvaluetype.name = types_1.Maintenance_Restriction.className;
|
|
284
|
+
else if (key === "restriction") {
|
|
285
|
+
tmpvaluetype.name = types_1.Maintenance_Restriction.className.replace("OD3_Maintenance_", "");
|
|
210
286
|
tmpvaluetype.unit = "%";
|
|
211
287
|
tmpvaluetype.type = "Number";
|
|
212
288
|
}
|
|
213
|
-
else if (
|
|
214
|
-
tmpvaluetype.name = types_1.Maintenance_Ticket_Issuecategory.className;
|
|
289
|
+
else if (key === "issuecategory") {
|
|
290
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket_Issuecategory.className.replace("OD3_Maintenance_", "");
|
|
215
291
|
tmpvaluetype.unit = "";
|
|
216
292
|
tmpvaluetype.type = "String";
|
|
217
293
|
}
|
|
218
|
-
else if (
|
|
219
|
-
tmpvaluetype.name = types_1.Maintenance_Ticket_Kanban_State.className;
|
|
294
|
+
else if (key === "state") {
|
|
295
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket_Kanban_State.className.replace("OD3_Maintenance_", "");
|
|
220
296
|
tmpvaluetype.unit = "";
|
|
221
297
|
tmpvaluetype.type = "String";
|
|
222
298
|
}
|
|
223
|
-
else if (
|
|
224
|
-
tmpvaluetype.name = types_1.Maintenance_Ticket.className;
|
|
299
|
+
else if (key === "ticket") {
|
|
300
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket.className.replace("OD3_Maintenance_", "");
|
|
225
301
|
tmpvaluetype.unit = "";
|
|
226
302
|
tmpvaluetype.type = "String";
|
|
227
303
|
}
|
|
228
|
-
else if (
|
|
229
|
-
tmpvaluetype.name = types_1.Maintenance_Ticket_Source.className;
|
|
304
|
+
else if (key === "source") {
|
|
305
|
+
tmpvaluetype.name = types_1.Maintenance_Ticket_Source.className.replace("OD3_Maintenance_", "");
|
|
230
306
|
tmpvaluetype.unit = "";
|
|
231
307
|
tmpvaluetype.type = "String";
|
|
232
308
|
}
|
|
233
309
|
return tmpvaluetype;
|
|
234
310
|
});
|
|
235
311
|
const dataitem = {
|
|
236
|
-
id:
|
|
237
|
-
name: `Ticket`,
|
|
312
|
+
id: `openservice_ticket_${ticket.id}`,
|
|
313
|
+
name: `Ticket ${owticketobj.ticket.get("title")}`,
|
|
238
314
|
source: source,
|
|
239
315
|
values: [values],
|
|
240
|
-
valueTypes: valueTypes
|
|
316
|
+
valueTypes: valueTypes,
|
|
241
317
|
meta: {},
|
|
242
318
|
};
|
|
243
319
|
console.log("Publishing ticket to openware: ", dataitem, "with values", JSON.stringify(dataitem.values));
|
|
@@ -552,7 +628,7 @@ async function saveMaterial(ticket, material, fetchOptions) {
|
|
|
552
628
|
await materialObject.save(null, fetchOptions);
|
|
553
629
|
}
|
|
554
630
|
async function saveTicketProject(ticket, project, fetchOptions) {
|
|
555
|
-
const projectObj = await new Parse.Query(types_1.Maintenance_Project).get(project);
|
|
631
|
+
const projectObj = await new Parse.Query(types_1.Maintenance_Project).get(project, fetchOptions);
|
|
556
632
|
if (!projectObj)
|
|
557
633
|
throw new Error("Project not found");
|
|
558
634
|
const ticketProjectObject = new types_1.Maintenance_Ticket_Project({
|
|
@@ -562,7 +638,7 @@ async function saveTicketProject(ticket, project, fetchOptions) {
|
|
|
562
638
|
user: ticket.get("user"),
|
|
563
639
|
});
|
|
564
640
|
await ticketProjectObject.save(null, fetchOptions);
|
|
565
|
-
ticket.set("project",
|
|
641
|
+
ticket.set("project", projectObj);
|
|
566
642
|
await ticket.save(null, fetchOptions);
|
|
567
643
|
projectObj.relation("tickets").add(ticket);
|
|
568
644
|
await projectObj.save(null, fetchOptions);
|
|
@@ -108,6 +108,7 @@ async function getTicketData(tickets) {
|
|
|
108
108
|
const dailySchedule = getDailySchedule(ticket);
|
|
109
109
|
const messages = getMessages(ticket);
|
|
110
110
|
const material = getTicketMaterial(ticket);
|
|
111
|
+
const project = ticket.get("project")?.fetch({ useMasterKey: true });
|
|
111
112
|
const dataPromises = await Promise.all([
|
|
112
113
|
downtimes,
|
|
113
114
|
duedate,
|
|
@@ -120,6 +121,7 @@ async function getTicketData(tickets) {
|
|
|
120
121
|
dailySchedule,
|
|
121
122
|
messages,
|
|
122
123
|
material,
|
|
124
|
+
project,
|
|
123
125
|
]);
|
|
124
126
|
return {
|
|
125
127
|
ticket: ticket,
|
|
@@ -135,6 +137,7 @@ async function getTicketData(tickets) {
|
|
|
135
137
|
messages: dataPromises[9]?.messages,
|
|
136
138
|
assignedTo: [...assignedusers, ...assignedroles],
|
|
137
139
|
material: dataPromises[10],
|
|
140
|
+
project: dataPromises[11],
|
|
138
141
|
};
|
|
139
142
|
});
|
|
140
143
|
return await Promise.all(ticketDataPromises);
|
|
@@ -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, Maintenance_Ticket_Material } 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, Maintenance_Project } from "../types";
|
|
2
2
|
export type TicketData = {
|
|
3
3
|
ticket: Maintenance_Ticket;
|
|
4
4
|
dailySchedule?: Maintenance_DailySchedule;
|
|
@@ -13,4 +13,5 @@ export type TicketData = {
|
|
|
13
13
|
source?: Source;
|
|
14
14
|
assignedTo?: Array<Parse.User | Parse.Role>;
|
|
15
15
|
material?: Maintenance_Ticket_Material;
|
|
16
|
+
project?: Maintenance_Project;
|
|
16
17
|
};
|
package/dist/index.js
CHANGED
|
@@ -176,10 +176,14 @@ async function initDefaultData() {
|
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
async function initPermissions() {
|
|
179
|
-
const
|
|
179
|
+
const tenants = await new Parse.Query(types_1.Tenant)
|
|
180
180
|
.descending("createdAt")
|
|
181
|
-
.
|
|
182
|
-
|
|
181
|
+
.find({ useMasterKey: true });
|
|
182
|
+
if (tenants) {
|
|
183
|
+
for await (const tenant of tenants) {
|
|
184
|
+
await registerPermissions(tenant);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
183
187
|
}
|
|
184
188
|
/**
|
|
185
189
|
* Register all permissions in the database, if not already registered.
|
|
@@ -189,6 +193,7 @@ async function registerPermissions(tenant) {
|
|
|
189
193
|
(0, registerPermissions_1.getAllPermissions)().forEach((permission) => {
|
|
190
194
|
new Parse.Query(types_1.Permission)
|
|
191
195
|
.equalTo("key", permission.key)
|
|
196
|
+
.equalTo("tenant", tenant)
|
|
192
197
|
.first({ useMasterKey: true })
|
|
193
198
|
.then((result) => {
|
|
194
199
|
if (!result) {
|
|
@@ -196,14 +201,10 @@ async function registerPermissions(tenant) {
|
|
|
196
201
|
const newPermission = new types_1.Permission();
|
|
197
202
|
newPermission.set("key", permission.key);
|
|
198
203
|
newPermission.set("label", permission.label);
|
|
204
|
+
newPermission.set("tenant", tenant);
|
|
199
205
|
newPermission.set("description", permission.description);
|
|
200
206
|
newPermission.save({}, { useMasterKey: true });
|
|
201
207
|
}
|
|
202
|
-
else if (result.get("tenant") === undefined) {
|
|
203
|
-
console.log("Update permission tenant to default tenant", permission.key);
|
|
204
|
-
result.set("tenant", tenant);
|
|
205
|
-
result.save({}, { useMasterKey: true });
|
|
206
|
-
}
|
|
207
208
|
else {
|
|
208
209
|
console.log("Permission already exists", permission.key);
|
|
209
210
|
}
|