@openinc/parse-server-opendash 3.0.8 → 3.1.0
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/features/openservice/functions/assignUsersAndRoles.d.ts +8 -0
- package/dist/features/openservice/functions/assignUsersAndRoles.js +168 -0
- package/dist/features/openservice/functions/getTicketObject.d.ts +4 -0
- package/dist/features/openservice/functions/getTicketObject.js +22 -0
- package/dist/features/openservice/functions/saveDowntime.d.ts +3 -0
- package/dist/features/openservice/functions/saveDowntime.js +23 -0
- package/dist/features/openservice/functions/saveDuedate.d.ts +8 -0
- package/dist/features/openservice/functions/saveDuedate.js +30 -0
- package/dist/features/openservice/functions/saveFrequency.d.ts +3 -0
- package/dist/features/openservice/functions/saveFrequency.js +23 -0
- package/dist/features/openservice/functions/saveIssuecategory.d.ts +4 -0
- package/dist/features/openservice/functions/saveIssuecategory.js +39 -0
- package/dist/features/openservice/functions/saveMaterial.d.ts +4 -0
- package/dist/features/openservice/functions/saveMaterial.js +13 -0
- package/dist/features/openservice/functions/saveMedia.d.ts +3 -0
- package/dist/features/openservice/functions/saveMedia.js +17 -0
- package/dist/features/openservice/functions/saveMessage.d.ts +5 -0
- package/dist/features/openservice/functions/saveMessage.js +66 -0
- package/dist/features/openservice/functions/savePriority.d.ts +3 -0
- package/dist/features/openservice/functions/savePriority.js +23 -0
- package/dist/features/openservice/functions/saveProject.d.ts +3 -0
- package/dist/features/openservice/functions/saveProject.js +39 -0
- package/dist/features/openservice/functions/saveRestriction.d.ts +3 -0
- package/dist/features/openservice/functions/saveRestriction.js +23 -0
- package/dist/features/openservice/functions/saveSource.d.ts +3 -0
- package/dist/features/openservice/functions/saveSource.js +23 -0
- package/dist/features/openservice/functions/saveState.d.ts +4 -0
- package/dist/features/openservice/functions/saveState.js +38 -0
- package/dist/features/openservice/functions/saveTicketTitle.d.ts +3 -0
- package/dist/features/openservice/functions/saveTicketTitle.js +19 -0
- package/dist/features/openservice/index.d.ts +19 -0
- package/dist/features/openservice/index.js +33 -1
- package/dist/features/openservice/types/FetchOptions.d.ts +4 -0
- package/dist/features/openservice/types/FetchOptions.js +2 -0
- package/dist/features/openservice/types/Material.d.ts +6 -0
- package/dist/features/openservice/types/Material.js +2 -0
- package/dist/features/openservice/types/MessageData.d.ts +16 -0
- package/dist/features/openservice/types/MessageData.js +2 -0
- package/dist/features/openservice/types/SaveValues.d.ts +26 -0
- package/dist/features/openservice/types/SaveValues.js +2 -0
- package/dist/features/openservice/types/TicketData.d.ts +2 -2
- package/dist/features/permissions/types/Permissions.d.ts +0 -1
- package/dist/features/permissions/types/Permissions.js +0 -1
- package/dist/functions/openinc-openservice-save-ticket-data.d.ts +3 -44
- package/dist/functions/openinc-openservice-save-ticket-data.js +18 -422
- package/dist/functions/openinc-openservice-ticket-data.js +15 -30
- package/dist/hooks/Maintenance_Message.js +0 -17
- package/dist/hooks/Maintenance_Ticket_Material.d.ts +1 -6
- package/dist/types/Maintenance_Ticket.d.ts +0 -4
- package/dist/types/Maintenance_Ticket.js +0 -6
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.js +3 -7
- package/package.json +3 -2
- package/schema/Maintenance_Ticket.json +0 -5
- package/dist/hooks/Maintenance_DailySchedule.d.ts +0 -1
- package/dist/hooks/Maintenance_DailySchedule.js +0 -17
- package/dist/hooks/Maintenance_Message_Body.d.ts +0 -1
- package/dist/hooks/Maintenance_Message_Body.js +0 -26
- package/dist/types/Maintenance_DailySchedule.d.ts +0 -33
- package/dist/types/Maintenance_DailySchedule.js +0 -50
- package/dist/types/Maintenance_Message_Body.d.ts +0 -31
- package/dist/types/Maintenance_Message_Body.js +0 -47
- package/schema/Maintenance_DailySchedule.json +0 -63
- package/schema/Maintenance_Message_Body.json +0 -55
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { _User, Maintenance_Ticket } from "../../../types";
|
|
2
|
+
import { FetchOptions } from "../types/FetchOptions";
|
|
3
|
+
type Assignments = Array<{
|
|
4
|
+
type: "user" | "role";
|
|
5
|
+
id: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function assignUsersAndRoles(ticket: Maintenance_Ticket, assignedTo: Assignments, fetchOptions: FetchOptions, assigningUser?: _User): Promise<void>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assignUsersAndRoles = assignUsersAndRoles;
|
|
4
|
+
const parse_1 = require("parse");
|
|
5
|
+
const openinc_openservice_save_ticket_data_1 = require("../../../functions/openinc-openservice-save-ticket-data");
|
|
6
|
+
const openinc_openservice_ticket_data_1 = require("../../../functions/openinc-openservice-ticket-data");
|
|
7
|
+
const types_1 = require("../../../types");
|
|
8
|
+
async function assignUsersAndRoles(ticket, assignedTo, fetchOptions, assigningUser) {
|
|
9
|
+
const assignedUsers = (await ticket
|
|
10
|
+
.relation("assignedusers")
|
|
11
|
+
.query()
|
|
12
|
+
.find(fetchOptions));
|
|
13
|
+
const assignedroles = (await ticket
|
|
14
|
+
.relation("assignedroles")
|
|
15
|
+
.query()
|
|
16
|
+
.find(fetchOptions));
|
|
17
|
+
if (!hasChanged(assignedTo, assignedUsers, assignedroles))
|
|
18
|
+
return;
|
|
19
|
+
ticket.relation("assignedusers").remove(assignedUsers);
|
|
20
|
+
ticket.relation("assignedroles").remove(assignedroles);
|
|
21
|
+
const assignments = [];
|
|
22
|
+
const batchTime = new Date();
|
|
23
|
+
const ids = assignedTo.map((a) => a.id);
|
|
24
|
+
const newUsers = await new Parse.Query(parse_1.User)
|
|
25
|
+
.containedIn("objectId", ids)
|
|
26
|
+
.find(fetchOptions);
|
|
27
|
+
const newRoles = await new Parse.Query(parse_1.Role)
|
|
28
|
+
.containedIn("objectId", ids)
|
|
29
|
+
.find(fetchOptions);
|
|
30
|
+
ticket.relation("assignedusers").add(newUsers);
|
|
31
|
+
ticket.relation("assignedroles").add(newRoles);
|
|
32
|
+
await ticket.save(null, fetchOptions);
|
|
33
|
+
if (newRoles.length === 0 && newUsers.length === 0) {
|
|
34
|
+
assignments.push(new types_1.Maintenance_Ticket_Assignment({
|
|
35
|
+
ticket,
|
|
36
|
+
assignedUser: undefined,
|
|
37
|
+
assignedRole: undefined,
|
|
38
|
+
user: ticket.user,
|
|
39
|
+
tenant: ticket.tenant,
|
|
40
|
+
batchStamp: batchTime,
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
for (const assignedTo of newUsers) {
|
|
44
|
+
assignments.push(new types_1.Maintenance_Ticket_Assignment({
|
|
45
|
+
ticket,
|
|
46
|
+
assignedUser: assignedTo,
|
|
47
|
+
tenant: ticket.get("tenant"),
|
|
48
|
+
user: ticket.get("user"),
|
|
49
|
+
batchStamp: batchTime,
|
|
50
|
+
}));
|
|
51
|
+
await new types_1.Notification({
|
|
52
|
+
data: {
|
|
53
|
+
ticketId: ticket.id,
|
|
54
|
+
translation: {
|
|
55
|
+
ticketName: ticket.get("title"),
|
|
56
|
+
ticketId: ticket.id,
|
|
57
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(assigningUser) ?? "System",
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
isSent: false,
|
|
61
|
+
title: "maintenance:ticket.assignuser.notification.title",
|
|
62
|
+
user: assignedTo,
|
|
63
|
+
description: "maintenance:ticket.assignuser.notification.description",
|
|
64
|
+
}).save(null, fetchOptions);
|
|
65
|
+
}
|
|
66
|
+
for (const assignedTo of newRoles) {
|
|
67
|
+
assignments.push(new types_1.Maintenance_Ticket_Assignment({
|
|
68
|
+
ticket,
|
|
69
|
+
assignedRole: assignedTo,
|
|
70
|
+
tenant: ticket.get("tenant"),
|
|
71
|
+
user: ticket.get("user"),
|
|
72
|
+
batchStamp: batchTime,
|
|
73
|
+
}));
|
|
74
|
+
const roleUsers = await assignedTo
|
|
75
|
+
.relation("users")
|
|
76
|
+
.query()
|
|
77
|
+
.find(fetchOptions);
|
|
78
|
+
for (const roleUser of roleUsers) {
|
|
79
|
+
await new types_1.Notification({
|
|
80
|
+
data: {
|
|
81
|
+
ticketId: ticket.id,
|
|
82
|
+
translation: {
|
|
83
|
+
ticketName: ticket.get("title"),
|
|
84
|
+
ticketId: ticket.id,
|
|
85
|
+
user: ticket.get("user")?.get("username"),
|
|
86
|
+
role: assignedTo.get("label"),
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
isSent: false,
|
|
90
|
+
title: "maintenance:ticket.assignrole.notification.title",
|
|
91
|
+
user: roleUser,
|
|
92
|
+
description: "maintenance:ticket.assignrole.notification.description",
|
|
93
|
+
}).save(null, fetchOptions);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
await types_1.Maintenance_Ticket_Assignment.saveAll(assignments, fetchOptions);
|
|
97
|
+
//Set ACLs for assigned users and roles on ticket
|
|
98
|
+
const acl = new Parse.ACL();
|
|
99
|
+
for (const assignedUser of newUsers) {
|
|
100
|
+
acl.setReadAccess(assignedUser, true);
|
|
101
|
+
acl.setWriteAccess(assignedUser, true);
|
|
102
|
+
}
|
|
103
|
+
// get the parent roles of the assigned roles
|
|
104
|
+
const rolesWithParents = await addParentRoles(newRoles);
|
|
105
|
+
// remove duplicates from the array
|
|
106
|
+
const distinctRolesWithParents = (0, openinc_openservice_ticket_data_1.arrayToDistinct)(rolesWithParents, (obj) => obj.id);
|
|
107
|
+
for (const assignedRole of distinctRolesWithParents) {
|
|
108
|
+
acl.setRoleReadAccess(assignedRole, true);
|
|
109
|
+
acl.setRoleWriteAccess(assignedRole, true);
|
|
110
|
+
}
|
|
111
|
+
ticket.setACL(acl);
|
|
112
|
+
await ticket.save(null, fetchOptions);
|
|
113
|
+
// SAVE ASSIGNMENT MESSAGE
|
|
114
|
+
// set the content for the message
|
|
115
|
+
let content = "maintenance:ticket.eventlist.OD3_Maintenance_Ticket_Assignment.none";
|
|
116
|
+
if (newUsers.length > 0 && newRoles.length > 0)
|
|
117
|
+
content =
|
|
118
|
+
"maintenance:ticket.eventlist.OD3_Maintenance_Ticket_Assignment.both";
|
|
119
|
+
else if (newUsers.length > 0)
|
|
120
|
+
content =
|
|
121
|
+
"maintenance:ticket.eventlist.OD3_Maintenance_Ticket_Assignment.user";
|
|
122
|
+
else if (newRoles.length > 0)
|
|
123
|
+
content =
|
|
124
|
+
"maintenance:ticket.eventlist.OD3_Maintenance_Ticket_Assignment.role";
|
|
125
|
+
await new types_1.Maintenance_Message({
|
|
126
|
+
referencedObjectId: ticket.id,
|
|
127
|
+
classname: types_1.Maintenance_Ticket.className,
|
|
128
|
+
title: "maintenance:ticket.message.assignment.changed.title",
|
|
129
|
+
content,
|
|
130
|
+
user: ticket.get("user"),
|
|
131
|
+
tenant: ticket.get("tenant"),
|
|
132
|
+
data: {
|
|
133
|
+
type: "system",
|
|
134
|
+
translation: {
|
|
135
|
+
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(assigningUser),
|
|
136
|
+
userList: newUsers.map((u) => `'${u.get("username")}'`).join(", "),
|
|
137
|
+
roleList: newRoles.map((r) => `'${r.get("label")}'`).join(", "),
|
|
138
|
+
ticketName: ticket.get("title"),
|
|
139
|
+
},
|
|
140
|
+
origin: {
|
|
141
|
+
id: ticket.id,
|
|
142
|
+
classname: ticket.className,
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
}).save(null, fetchOptions);
|
|
146
|
+
await ticket.save(null, fetchOptions);
|
|
147
|
+
}
|
|
148
|
+
async function addParentRoles(roles) {
|
|
149
|
+
for (const role of roles) {
|
|
150
|
+
const roleQuery = new Parse.Query(parse_1.Role).equalTo("objectId", role.id);
|
|
151
|
+
const parentRoles = await new Parse.Query(parse_1.Role)
|
|
152
|
+
.matchesQuery("roles", roleQuery)
|
|
153
|
+
.find();
|
|
154
|
+
if (parentRoles.length > 0) {
|
|
155
|
+
roles.push(...(await addParentRoles(parentRoles)));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return roles;
|
|
159
|
+
}
|
|
160
|
+
function hasChanged(assignedTo, assignedUsers, assignedRoles) {
|
|
161
|
+
const assignedIds = [
|
|
162
|
+
...assignedUsers.map((u) => u.id),
|
|
163
|
+
...assignedRoles.map((r) => r.id),
|
|
164
|
+
];
|
|
165
|
+
const newIds = assignedTo.map((a) => a.id);
|
|
166
|
+
return (assignedIds.length !== newIds.length ||
|
|
167
|
+
!newIds.every((id) => assignedIds.includes(id)));
|
|
168
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { _User, Maintenance_Ticket } from "../../../types";
|
|
2
|
+
import { FetchOptions } from "../types/FetchOptions";
|
|
3
|
+
import { SaveValues } from "../types/SaveValues";
|
|
4
|
+
export declare function getTicketObject(value: SaveValues, user: _User | undefined, fetchOptions: FetchOptions): Promise<Maintenance_Ticket>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTicketObject = getTicketObject;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
async function getTicketObject(value, user, fetchOptions) {
|
|
6
|
+
if (value.existingTicketId) {
|
|
7
|
+
const ticket = await new Parse.Query(types_1.Maintenance_Ticket).get(value.existingTicketId, fetchOptions);
|
|
8
|
+
if (!ticket) {
|
|
9
|
+
throw new Error("Ticket not found");
|
|
10
|
+
}
|
|
11
|
+
if (value.title && ticket.get("title") !== value.title) {
|
|
12
|
+
ticket.set("title", value.title);
|
|
13
|
+
await ticket.save(null, fetchOptions);
|
|
14
|
+
}
|
|
15
|
+
return ticket;
|
|
16
|
+
}
|
|
17
|
+
return await new types_1.Maintenance_Ticket({
|
|
18
|
+
title: value.title,
|
|
19
|
+
user: user,
|
|
20
|
+
tenant: user?.get("tenant"),
|
|
21
|
+
}).save(null, fetchOptions);
|
|
22
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveDowntime = saveDowntime;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
async function saveDowntime(ticket, value, fetchOptions) {
|
|
6
|
+
const current = await getCurrent(ticket);
|
|
7
|
+
const changed = current?.get("value") !== value;
|
|
8
|
+
if (!changed)
|
|
9
|
+
return current;
|
|
10
|
+
const downtime = new types_1.Maintenance_Downtime({
|
|
11
|
+
ticket,
|
|
12
|
+
value: value,
|
|
13
|
+
tenant: ticket.get("tenant"),
|
|
14
|
+
user: ticket.get("user"),
|
|
15
|
+
});
|
|
16
|
+
return await downtime.save(null, fetchOptions);
|
|
17
|
+
}
|
|
18
|
+
async function getCurrent(ticket) {
|
|
19
|
+
return await new Parse.Query(types_1.Maintenance_Downtime)
|
|
20
|
+
.descending("createdAt")
|
|
21
|
+
.equalTo("ticket", ticket)
|
|
22
|
+
.first({ useMasterKey: true });
|
|
23
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Maintenance_Ticket, Maintenance_Duedate } from "../../../types";
|
|
2
|
+
import { FetchOptions } from "../types/FetchOptions";
|
|
3
|
+
type DuedateValue = {
|
|
4
|
+
start?: Date;
|
|
5
|
+
end: Date;
|
|
6
|
+
};
|
|
7
|
+
export declare function saveDuedate(ticket: Maintenance_Ticket, duedate: DuedateValue, fetchOptions: FetchOptions): Promise<Maintenance_Duedate | undefined>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveDuedate = saveDuedate;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
async function saveDuedate(ticket, duedate, fetchOptions) {
|
|
6
|
+
const current = await getCurrent(ticket);
|
|
7
|
+
const changed = await hasChanged(current, duedate);
|
|
8
|
+
if (!changed)
|
|
9
|
+
return current;
|
|
10
|
+
const dueDate = new types_1.Maintenance_Duedate({
|
|
11
|
+
ticket,
|
|
12
|
+
end: duedate.end,
|
|
13
|
+
start: duedate.start,
|
|
14
|
+
tenant: ticket.get("tenant"),
|
|
15
|
+
user: ticket.get("user"),
|
|
16
|
+
endformat: "DD.MM.YYYY",
|
|
17
|
+
startformat: "DD.MM.YYYY",
|
|
18
|
+
});
|
|
19
|
+
await dueDate.save(null, fetchOptions);
|
|
20
|
+
}
|
|
21
|
+
async function getCurrent(ticket) {
|
|
22
|
+
return await new Parse.Query(types_1.Maintenance_Duedate)
|
|
23
|
+
.equalTo("ticket", ticket)
|
|
24
|
+
.descending("createdAt")
|
|
25
|
+
.first({ useMasterKey: true });
|
|
26
|
+
}
|
|
27
|
+
async function hasChanged(current, duedate) {
|
|
28
|
+
return (current?.get("end") !== duedate.end ||
|
|
29
|
+
current?.get("start") !== duedate.start);
|
|
30
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveFrequency = saveFrequency;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
async function saveFrequency(ticket, value, fetchOptions) {
|
|
6
|
+
const current = await getCurrent(ticket);
|
|
7
|
+
const changed = current?.get("value") !== value;
|
|
8
|
+
if (!changed)
|
|
9
|
+
return current;
|
|
10
|
+
const frequency = new types_1.Maintenance_Frequency({
|
|
11
|
+
ticket,
|
|
12
|
+
value: value,
|
|
13
|
+
tenant: ticket.get("tenant"),
|
|
14
|
+
user: ticket.get("user"),
|
|
15
|
+
});
|
|
16
|
+
return await frequency.save(null, fetchOptions);
|
|
17
|
+
}
|
|
18
|
+
async function getCurrent(ticket) {
|
|
19
|
+
return await new Parse.Query(types_1.Maintenance_Frequency)
|
|
20
|
+
.descending("createdAt")
|
|
21
|
+
.equalTo("ticket", ticket)
|
|
22
|
+
.first({ useMasterKey: true });
|
|
23
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Maintenance_Ticket, Maintenance_Ticket_Issuecategory } from "../../../types";
|
|
2
|
+
import { FetchOptions } from "../types/FetchOptions";
|
|
3
|
+
export declare function saveIssueCategory(ticket: Maintenance_Ticket, value: string, fetchOptions: FetchOptions): Promise<Maintenance_Ticket_Issuecategory>;
|
|
4
|
+
export declare function saveDefaultIssueCategory(ticket: Maintenance_Ticket, fetchOptions: FetchOptions): Promise<void>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveIssueCategory = saveIssueCategory;
|
|
4
|
+
exports.saveDefaultIssueCategory = saveDefaultIssueCategory;
|
|
5
|
+
const types_1 = require("../../../types");
|
|
6
|
+
async function saveIssueCategory(ticket, value, fetchOptions) {
|
|
7
|
+
const current = await getCurrent(ticket);
|
|
8
|
+
const changed = current?.get("issuecategory")?.id !== value;
|
|
9
|
+
if (!changed)
|
|
10
|
+
return current;
|
|
11
|
+
const issueCategory = new types_1.Maintenance_Ticket_Issuecategory({
|
|
12
|
+
ticket,
|
|
13
|
+
issuecategory: new types_1.Maintenance_Issuecategory({ objectId: value }), // pointer
|
|
14
|
+
tenant: ticket.get("tenant"),
|
|
15
|
+
user: ticket.get("user"),
|
|
16
|
+
});
|
|
17
|
+
return await issueCategory.save(null, fetchOptions);
|
|
18
|
+
}
|
|
19
|
+
async function saveDefaultIssueCategory(ticket, fetchOptions) {
|
|
20
|
+
const catchAll = await new Parse.Query(types_1.Maintenance_Issuecategory)
|
|
21
|
+
.equalTo("catchall", true)
|
|
22
|
+
.first(fetchOptions);
|
|
23
|
+
if (!catchAll)
|
|
24
|
+
return;
|
|
25
|
+
const issueCategory = new types_1.Maintenance_Ticket_Issuecategory({
|
|
26
|
+
ticket,
|
|
27
|
+
issuecategory: catchAll,
|
|
28
|
+
tenant: ticket.get("tenant"),
|
|
29
|
+
user: ticket.get("user"),
|
|
30
|
+
});
|
|
31
|
+
await issueCategory.save(null, fetchOptions);
|
|
32
|
+
}
|
|
33
|
+
async function getCurrent(ticket) {
|
|
34
|
+
return await new Parse.Query(types_1.Maintenance_Ticket_Issuecategory)
|
|
35
|
+
.descending("createdAt")
|
|
36
|
+
.equalTo("ticket", ticket)
|
|
37
|
+
.includeAll()
|
|
38
|
+
.first({ useMasterKey: true });
|
|
39
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Maintenance_Ticket } from "../../../types";
|
|
2
|
+
import { FetchOptions } from "../types/FetchOptions";
|
|
3
|
+
import { Material } from "../types/Material";
|
|
4
|
+
export declare function saveMaterial(ticket: Maintenance_Ticket, material: Material[], fetchOptions: FetchOptions): Promise<void>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveMaterial = saveMaterial;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
async function saveMaterial(ticket, material, fetchOptions) {
|
|
6
|
+
const materialObject = new types_1.Maintenance_Ticket_Material({
|
|
7
|
+
ticket,
|
|
8
|
+
itemList: material,
|
|
9
|
+
tenant: ticket.get("tenant"),
|
|
10
|
+
user: ticket.get("user"),
|
|
11
|
+
});
|
|
12
|
+
await materialObject.save(null, fetchOptions);
|
|
13
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveMedia = saveMedia;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
async function saveMedia(ticket, media, fetchOptions) {
|
|
6
|
+
const message = new types_1.Maintenance_Message({
|
|
7
|
+
referencedObjectId: ticket.id,
|
|
8
|
+
classname: types_1.Maintenance_Ticket.className,
|
|
9
|
+
data: { type: "media" },
|
|
10
|
+
tenant: ticket.get("tenant"),
|
|
11
|
+
user: ticket.get("user"),
|
|
12
|
+
});
|
|
13
|
+
message
|
|
14
|
+
.relation("media")
|
|
15
|
+
.add(media.map((m) => new types_1.Maintenance_Media({ objectId: m })));
|
|
16
|
+
await message.save(null, fetchOptions);
|
|
17
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Maintenance_Ticket } from "../../../types";
|
|
2
|
+
import { FetchOptions } from "../types/FetchOptions";
|
|
3
|
+
import { MessageField } from "../types/MessageData";
|
|
4
|
+
import { SaveValues } from "../types/SaveValues";
|
|
5
|
+
export declare function saveMessage(ticket: Maintenance_Ticket, message: MessageField, fetchOptions: FetchOptions, values: SaveValues): Promise<void>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveMessage = saveMessage;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
async function saveMessage(ticket, message, fetchOptions, values) {
|
|
6
|
+
if (values.existingTicketId &&
|
|
7
|
+
message.title === "maintenance:ticket.update.message.title") {
|
|
8
|
+
const description = await new Parse.Query(types_1.Maintenance_Message)
|
|
9
|
+
.equalTo("referencedObjectId", ticket.id)
|
|
10
|
+
.equalTo("classname", types_1.Maintenance_Ticket.className)
|
|
11
|
+
.equalTo("title", "maintenance:ticket.create.database.subject.1")
|
|
12
|
+
.first(fetchOptions);
|
|
13
|
+
if (description) {
|
|
14
|
+
// dont do anything when description is the same
|
|
15
|
+
if (description.content === message.description)
|
|
16
|
+
return;
|
|
17
|
+
// update description
|
|
18
|
+
description.set("content", message.description);
|
|
19
|
+
await description.save(null, fetchOptions);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// create new message log
|
|
24
|
+
await new types_1.Maintenance_Message({
|
|
25
|
+
content: message.description,
|
|
26
|
+
referencedObjectId: ticket.id,
|
|
27
|
+
classname: types_1.Maintenance_Ticket.className,
|
|
28
|
+
tenant: ticket.get("tenant"),
|
|
29
|
+
user: ticket.get("user"),
|
|
30
|
+
title: message.title,
|
|
31
|
+
data: {
|
|
32
|
+
origin: { id: ticket.id, classname: ticket.className }, // default
|
|
33
|
+
...message.data,
|
|
34
|
+
},
|
|
35
|
+
}).save(null, fetchOptions);
|
|
36
|
+
// to machinelog
|
|
37
|
+
// if needed, this saves a message to the machinelog when a message is saved to the ticket
|
|
38
|
+
// this counts for user input and the ticket creation
|
|
39
|
+
// const source = values.source
|
|
40
|
+
// ? await new Parse.Query(Source).get(values.source, fetchOptions)
|
|
41
|
+
// : (await getTicketSource(ticket))?.get("source");
|
|
42
|
+
// if (source) {
|
|
43
|
+
// await new Maintenance_Message({
|
|
44
|
+
// referencedObjectId: source.id,
|
|
45
|
+
// classname: source.className,
|
|
46
|
+
// title: message.title,
|
|
47
|
+
// content: message.description,
|
|
48
|
+
// user: ticket.get("user"),
|
|
49
|
+
// tenant: ticket.get("tenant"),
|
|
50
|
+
// data: {
|
|
51
|
+
// type: "system",
|
|
52
|
+
// translation: {
|
|
53
|
+
// username: getUsername(ticket.get("user") as _User),
|
|
54
|
+
// old: "Nicht vorhanden",
|
|
55
|
+
// new: ticket.get("title"),
|
|
56
|
+
// ticketName: ticket.get("title"),
|
|
57
|
+
// },
|
|
58
|
+
// origin: {
|
|
59
|
+
// id: ticket.id,
|
|
60
|
+
// classname: ticket.className,
|
|
61
|
+
// },
|
|
62
|
+
// ...message.data,
|
|
63
|
+
// } as MessageData,
|
|
64
|
+
// }).save(null, fetchOptions);
|
|
65
|
+
// }
|
|
66
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.savePriority = savePriority;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
async function savePriority(ticket, value, fetchOptions) {
|
|
6
|
+
const current = await getCurrent(ticket);
|
|
7
|
+
const changed = current?.get("value") !== value;
|
|
8
|
+
if (!changed)
|
|
9
|
+
return current;
|
|
10
|
+
const priority = new types_1.Maintenance_Priority({
|
|
11
|
+
ticket,
|
|
12
|
+
value: value,
|
|
13
|
+
tenant: ticket.get("tenant"),
|
|
14
|
+
user: ticket.get("user"),
|
|
15
|
+
});
|
|
16
|
+
return await priority.save(null, fetchOptions);
|
|
17
|
+
}
|
|
18
|
+
async function getCurrent(ticket) {
|
|
19
|
+
return await new Parse.Query(types_1.Maintenance_Priority)
|
|
20
|
+
.descending("createdAt")
|
|
21
|
+
.equalTo("ticket", ticket)
|
|
22
|
+
.first({ useMasterKey: true });
|
|
23
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Maintenance_Ticket, Maintenance_Ticket_Project } from "../../../types";
|
|
2
|
+
import { FetchOptions } from "../types/FetchOptions";
|
|
3
|
+
export declare function saveProject(ticket: Maintenance_Ticket, project: string, fetchOptions: FetchOptions): Promise<Maintenance_Ticket_Project | undefined>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveProject = saveProject;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
async function saveProject(ticket, project, fetchOptions) {
|
|
6
|
+
const current = await getCurrent(ticket);
|
|
7
|
+
const changed = current?.get("project")?.id !== project;
|
|
8
|
+
if (!changed)
|
|
9
|
+
return current;
|
|
10
|
+
// check if ticket already has a project assigned
|
|
11
|
+
// if so, remove the ticket from the old project
|
|
12
|
+
const prevProject = await ticket.get("project")?.fetch(fetchOptions);
|
|
13
|
+
if (prevProject && prevProject.id !== project) {
|
|
14
|
+
prevProject.relation("tickets").remove(ticket);
|
|
15
|
+
prevProject.save(null, fetchOptions);
|
|
16
|
+
}
|
|
17
|
+
const projectObj = await new Parse.Query(types_1.Maintenance_Project)
|
|
18
|
+
.equalTo("objectId", project)
|
|
19
|
+
.first(fetchOptions);
|
|
20
|
+
const ticketProjectObject = new types_1.Maintenance_Ticket_Project({
|
|
21
|
+
ticket,
|
|
22
|
+
project: projectObj,
|
|
23
|
+
tenant: ticket.get("tenant"),
|
|
24
|
+
user: ticket.get("user"),
|
|
25
|
+
});
|
|
26
|
+
await ticketProjectObject.save(null, fetchOptions);
|
|
27
|
+
ticket.set("project", projectObj);
|
|
28
|
+
await ticket.save(null, fetchOptions);
|
|
29
|
+
if (projectObj) {
|
|
30
|
+
projectObj.relation("tickets").add(ticket);
|
|
31
|
+
await projectObj.save(null, fetchOptions);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function getCurrent(ticket) {
|
|
35
|
+
return await new Parse.Query(types_1.Maintenance_Ticket_Project)
|
|
36
|
+
.descending("createdAt")
|
|
37
|
+
.equalTo("ticket", ticket)
|
|
38
|
+
.first({ useMasterKey: true });
|
|
39
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Maintenance_Ticket, Maintenance_Restriction } from "../../../types";
|
|
2
|
+
import { FetchOptions } from "../types/FetchOptions";
|
|
3
|
+
export declare function saveRestriction(ticket: Maintenance_Ticket, value: number, fetchOptions: FetchOptions): Promise<Maintenance_Restriction>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveRestriction = saveRestriction;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
async function saveRestriction(ticket, value, fetchOptions) {
|
|
6
|
+
const current = await getCurrent(ticket);
|
|
7
|
+
const changed = current?.get("value") !== value;
|
|
8
|
+
if (!changed)
|
|
9
|
+
return current;
|
|
10
|
+
const restriction = new types_1.Maintenance_Restriction({
|
|
11
|
+
ticket,
|
|
12
|
+
value: value,
|
|
13
|
+
tenant: ticket.get("tenant"),
|
|
14
|
+
user: ticket.get("user"),
|
|
15
|
+
});
|
|
16
|
+
return await restriction.save(null, fetchOptions);
|
|
17
|
+
}
|
|
18
|
+
async function getCurrent(ticket) {
|
|
19
|
+
return await new Parse.Query(types_1.Maintenance_Restriction)
|
|
20
|
+
.descending("createdAt")
|
|
21
|
+
.equalTo("ticket", ticket)
|
|
22
|
+
.first({ useMasterKey: true });
|
|
23
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Maintenance_Ticket, Maintenance_Ticket_Source } from "../../../types";
|
|
2
|
+
import { FetchOptions } from "../types/FetchOptions";
|
|
3
|
+
export declare function saveSource(ticket: Maintenance_Ticket, source: string, fetchOptions: FetchOptions): Promise<Maintenance_Ticket_Source>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveSource = saveSource;
|
|
4
|
+
const types_1 = require("../../../types");
|
|
5
|
+
async function saveSource(ticket, source, fetchOptions) {
|
|
6
|
+
const current = await getCurrent(ticket);
|
|
7
|
+
const changed = current?.get("source")?.id !== source;
|
|
8
|
+
if (!changed)
|
|
9
|
+
return current;
|
|
10
|
+
const tSource = new types_1.Maintenance_Ticket_Source({
|
|
11
|
+
ticket,
|
|
12
|
+
source: new types_1.Source({ objectId: source }),
|
|
13
|
+
tenant: ticket.get("tenant"),
|
|
14
|
+
user: ticket.get("user"),
|
|
15
|
+
});
|
|
16
|
+
return await tSource.save(null, fetchOptions);
|
|
17
|
+
}
|
|
18
|
+
async function getCurrent(ticket) {
|
|
19
|
+
return await new Parse.Query(types_1.Maintenance_Ticket_Source)
|
|
20
|
+
.descending("createdAt")
|
|
21
|
+
.equalTo("ticket", ticket)
|
|
22
|
+
.first({ useMasterKey: true });
|
|
23
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Maintenance_Ticket, Maintenance_Ticket_Kanban_State, Maintenance_Ticket_Kanban_State_Current } from "../../../types";
|
|
2
|
+
import { FetchOptions } from "../types/FetchOptions";
|
|
3
|
+
export declare function saveState(ticket: Maintenance_Ticket, state: string, fetchOptions: FetchOptions): Promise<Maintenance_Ticket_Kanban_State | Maintenance_Ticket_Kanban_State_Current>;
|
|
4
|
+
export declare function saveDefaultState(ticket: Maintenance_Ticket, fetchOptions: FetchOptions): Promise<void>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveState = saveState;
|
|
4
|
+
exports.saveDefaultState = saveDefaultState;
|
|
5
|
+
const types_1 = require("../../../types");
|
|
6
|
+
async function saveState(ticket, state, fetchOptions) {
|
|
7
|
+
const current = await getCurrent(ticket);
|
|
8
|
+
const changed = current?.get("state")?.id !== state;
|
|
9
|
+
if (!changed)
|
|
10
|
+
return current;
|
|
11
|
+
return await new types_1.Maintenance_Ticket_Kanban_State({
|
|
12
|
+
ticket,
|
|
13
|
+
state: new types_1.Maintenance_Kanban_State({ objectId: state }), // pointer
|
|
14
|
+
tenant: ticket.get("tenant"),
|
|
15
|
+
user: ticket.get("user"),
|
|
16
|
+
}).save(null, fetchOptions);
|
|
17
|
+
}
|
|
18
|
+
async function saveDefaultState(ticket, fetchOptions) {
|
|
19
|
+
const newState = await new Parse.Query(types_1.Maintenance_Kanban_State)
|
|
20
|
+
.equalTo("isInbox", true)
|
|
21
|
+
.first(fetchOptions);
|
|
22
|
+
if (!newState)
|
|
23
|
+
return;
|
|
24
|
+
const state = new types_1.Maintenance_Ticket_Kanban_State({
|
|
25
|
+
ticket,
|
|
26
|
+
state: newState,
|
|
27
|
+
tenant: ticket.get("tenant"),
|
|
28
|
+
user: ticket.get("user"),
|
|
29
|
+
});
|
|
30
|
+
await state.save(null, fetchOptions);
|
|
31
|
+
}
|
|
32
|
+
async function getCurrent(ticket) {
|
|
33
|
+
return await new Parse.Query(types_1.Maintenance_Ticket_Kanban_State_Current)
|
|
34
|
+
.descending("createdAt")
|
|
35
|
+
.equalTo("ticket", ticket)
|
|
36
|
+
.includeAll()
|
|
37
|
+
.first({ useMasterKey: true });
|
|
38
|
+
}
|