@openinc/parse-server-opendash 2.4.90 → 2.4.92
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/ConfigKeys.d.ts +9 -0
- package/dist/app_types/ConfigKeys.js +14 -0
- package/dist/app_types/Notifications.d.ts +10 -0
- package/dist/app_types/Notifications.js +16 -0
- package/dist/app_types/Permissions.d.ts +42 -0
- package/dist/app_types/Permissions.js +61 -0
- package/dist/app_types/index.d.ts +3 -0
- package/dist/app_types/index.js +9 -0
- package/dist/featuremap.json +7 -5
- package/dist/functions/openinc-deregister-permission.js +2 -2
- package/dist/functions/openinc-openservice-save-ticket-data.d.ts +40 -0
- package/dist/functions/openinc-openservice-save-ticket-data.js +328 -0
- package/dist/functions/openinc-openservice-ticket-data.js +16 -32
- package/dist/functions/openinc-register-permission.js +1 -1
- package/dist/functions/openinc-user-roles.js +1 -1
- package/dist/helper/TicketData.d.ts +15 -0
- package/dist/helper/TicketData.js +2 -0
- package/dist/helper/pdf2img.d.ts +4 -1
- package/dist/helper/pdf2img.js +151 -104
- package/dist/helper/registerNotification.d.ts +25 -0
- package/dist/helper/registerNotification.js +61 -0
- package/dist/helper/registerPermissions.d.ts +0 -42
- package/dist/helper/registerPermissions.js +5 -62
- package/dist/hooks/Assets.js +17 -0
- package/dist/hooks/Documentation_Category.d.ts +1 -0
- package/dist/hooks/Documentation_Category.js +17 -0
- package/dist/hooks/Documentation_Document.d.ts +1 -0
- package/dist/hooks/Documentation_Document.js +17 -0
- package/dist/hooks/Knowledge_Document.js +35 -2
- package/dist/hooks/Maintenance_Schedule_Execution.js +4 -4
- package/dist/hooks/Maintenance_Schedule_Template.js +19 -8
- package/dist/hooks/Maintenance_Ticket.js +1 -4
- package/dist/hooks/Maintenance_Ticket_Kanban_State_Current.js +1 -1
- package/dist/hooks/Notification_Setting.d.ts +1 -0
- package/dist/hooks/Notification_Setting.js +55 -0
- package/dist/hooks/User_Setting.d.ts +1 -0
- package/dist/hooks/User_Setting.js +17 -0
- package/dist/hooks/_User.js +0 -12
- package/dist/index.js +12 -0
- package/dist/jobs/open_service_notifyOnSchedule.js +125 -20
- package/dist/types/Assets.d.ts +27 -0
- package/dist/types/Assets.js +41 -0
- package/dist/types/Documentation_Document.d.ts +0 -6
- package/dist/types/Documentation_Document.js +0 -12
- package/dist/types/Knowledge_Document.d.ts +3 -0
- package/dist/types/Knowledge_Document.js +6 -0
- package/dist/types/Maintenance_Message.d.ts +6 -0
- package/dist/types/Maintenance_Message.js +9 -0
- package/dist/types/Notification_Setting.d.ts +29 -0
- package/dist/types/Notification_Setting.js +41 -0
- package/dist/types/User_Setting.d.ts +13 -0
- package/dist/types/User_Setting.js +17 -0
- package/dist/types/_User.d.ts +2 -0
- package/dist/types/index.d.ts +6 -2
- package/dist/types/index.js +8 -4
- package/package.json +4 -4
- package/schema/Assets.json +52 -0
- package/schema/Documentation_Document.json +0 -10
- package/schema/Knowledge_Document.json +5 -0
- package/schema/Maintenance_Message.json +9 -0
- package/schema/Notification_Setting.json +57 -0
- package/schema/User_Setting.json +35 -0
- package/dist/hooks/Group.js +0 -55
- package/dist/types/Group.d.ts +0 -31
- package/dist/types/Group.js +0 -47
- package/schema/Group.json +0 -62
- /package/dist/hooks/{Group.d.ts → Assets.d.ts} +0 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare namespace ConfigKeys {
|
|
2
|
+
enum OpenService {
|
|
3
|
+
closedTicketsLifetime = "OPENSERVICE_CLOSED_TICKET_LIFETIME",
|
|
4
|
+
ticketCreationForm = "OPENSERVICE_CREATE_TICKET_FORM",
|
|
5
|
+
scheduleMetaFields = "OPENSERVICE_SCHEDULE_META_FIELDS",
|
|
6
|
+
sampledataCreated = "OPENSERVICE_SAMPLEDATA_CREATED",
|
|
7
|
+
createTicketOnSchedule = "OPENSERVICE_CREATE_TICKET_ON_SCHEDULE"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigKeys = void 0;
|
|
4
|
+
var ConfigKeys;
|
|
5
|
+
(function (ConfigKeys) {
|
|
6
|
+
let OpenService;
|
|
7
|
+
(function (OpenService) {
|
|
8
|
+
OpenService["closedTicketsLifetime"] = "OPENSERVICE_CLOSED_TICKET_LIFETIME";
|
|
9
|
+
OpenService["ticketCreationForm"] = "OPENSERVICE_CREATE_TICKET_FORM";
|
|
10
|
+
OpenService["scheduleMetaFields"] = "OPENSERVICE_SCHEDULE_META_FIELDS";
|
|
11
|
+
OpenService["sampledataCreated"] = "OPENSERVICE_SAMPLEDATA_CREATED";
|
|
12
|
+
OpenService["createTicketOnSchedule"] = "OPENSERVICE_CREATE_TICKET_ON_SCHEDULE";
|
|
13
|
+
})(OpenService = ConfigKeys.OpenService || (ConfigKeys.OpenService = {}));
|
|
14
|
+
})(ConfigKeys || (exports.ConfigKeys = ConfigKeys = {}));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notifications that should be registered in the database by default when the server starts.
|
|
3
|
+
* The ACLs are set to od-admin only.
|
|
4
|
+
* Adding new Notification here requires the server to restart for registering those.
|
|
5
|
+
*/
|
|
6
|
+
export declare namespace Notifications {
|
|
7
|
+
enum OpenService {
|
|
8
|
+
schedule_due = "maintenance:schedule_due"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Notifications that should be registered in the database by default when the server starts.
|
|
4
|
+
* The ACLs are set to od-admin only.
|
|
5
|
+
* Adding new Notification here requires the server to restart for registering those.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.Notifications = void 0;
|
|
9
|
+
var Notifications;
|
|
10
|
+
(function (Notifications) {
|
|
11
|
+
// needs to be exported for getAllNotifications() to work
|
|
12
|
+
let OpenService;
|
|
13
|
+
(function (OpenService) {
|
|
14
|
+
OpenService["schedule_due"] = "maintenance:schedule_due";
|
|
15
|
+
})(OpenService = Notifications.OpenService || (Notifications.OpenService = {}));
|
|
16
|
+
})(Notifications || (exports.Notifications = Notifications = {}));
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permissions that should be registered in the database by default when the server starts.
|
|
3
|
+
* The ACLs are set to od-admin only.
|
|
4
|
+
* Adding new Permissions here requires the server to restart for registering those.
|
|
5
|
+
*/
|
|
6
|
+
export declare namespace Permissions {
|
|
7
|
+
enum OpenService {
|
|
8
|
+
ticket = "maintenance:can-create-ticket",
|
|
9
|
+
schedule = "maintenance:can-create-schedule",
|
|
10
|
+
message = "maintenance:can-create-message",
|
|
11
|
+
machinelog_ticket = "maintenance:can-create-machinelog-ticket",
|
|
12
|
+
machinelog_schedule = "maintenance:can-create-machinelog-schedule",
|
|
13
|
+
machinelog_message = "maintenance:can-create-machinelog-message",
|
|
14
|
+
global = "maintenance:can-access-global",
|
|
15
|
+
monitor = "maintenance:can-access-monitor",
|
|
16
|
+
material = "maintenance:can-access-material",
|
|
17
|
+
scheduletemplate = "maintenance:can-access-scheduletemplate",
|
|
18
|
+
dailySchedule = "maintenance:can-access-dailySchedule",
|
|
19
|
+
downtime = "maintenance:can-access-downtime",
|
|
20
|
+
restriction = "maintenance:can-access-restriction",
|
|
21
|
+
frequency = "maintenance:can-access-frequency",
|
|
22
|
+
downtimeField0 = "maintenance:can-access-downtime-field-0",
|
|
23
|
+
downtimeField1 = "maintenance:can-access-downtime-field-1",
|
|
24
|
+
downtimeField2 = "maintenance:can-access-downtime-field-2",
|
|
25
|
+
downtimeField3 = "maintenance:can-access-downtime-field-3",
|
|
26
|
+
downtimeField4 = "maintenance:can-access-downtime-field-4",
|
|
27
|
+
restrictionField0 = "maintenance:can-access-restriction-field-0",
|
|
28
|
+
restrictionField1 = "maintenance:can-access-restriction-field-1",
|
|
29
|
+
restrictionField2 = "maintenance:can-access-restriction-field-2",
|
|
30
|
+
frequencyField0 = "maintenance:can-access-frequency-field-0",
|
|
31
|
+
frequencyField1 = "maintenance:can-access-frequency-field-1",
|
|
32
|
+
frequencyField2 = "maintenance:can-access-frequency-field-2",
|
|
33
|
+
frequencyField3 = "maintenance:can-access-frequency-field-3",
|
|
34
|
+
frequencyField4 = "maintenance:can-access-frequency-field-4",
|
|
35
|
+
priority = "maintenance:can-access-priority",
|
|
36
|
+
priorityNumber = "maintenance:can-access-priority-number",
|
|
37
|
+
priorityLabel = "maintenance:can-access-priority-label",
|
|
38
|
+
issuecategory = "maintenance:can-update-issuecategory",
|
|
39
|
+
monitorstate = "maintenance:can-update-monitorstate",
|
|
40
|
+
kanban_view = "maintenance:can-update-kanban-view"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Permissions = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Permissions that should be registered in the database by default when the server starts.
|
|
6
|
+
* The ACLs are set to od-admin only.
|
|
7
|
+
* Adding new Permissions here requires the server to restart for registering those.
|
|
8
|
+
*/
|
|
9
|
+
var Permissions;
|
|
10
|
+
(function (Permissions) {
|
|
11
|
+
// needs to be exported for getAllPermissions() to work
|
|
12
|
+
let OpenService;
|
|
13
|
+
(function (OpenService) {
|
|
14
|
+
// Create
|
|
15
|
+
OpenService["ticket"] = "maintenance:can-create-ticket";
|
|
16
|
+
OpenService["schedule"] = "maintenance:can-create-schedule";
|
|
17
|
+
OpenService["message"] = "maintenance:can-create-message";
|
|
18
|
+
OpenService["machinelog_ticket"] = "maintenance:can-create-machinelog-ticket";
|
|
19
|
+
OpenService["machinelog_schedule"] = "maintenance:can-create-machinelog-schedule";
|
|
20
|
+
OpenService["machinelog_message"] = "maintenance:can-create-machinelog-message";
|
|
21
|
+
// Access
|
|
22
|
+
OpenService["global"] = "maintenance:can-access-global";
|
|
23
|
+
OpenService["monitor"] = "maintenance:can-access-monitor";
|
|
24
|
+
OpenService["material"] = "maintenance:can-access-material";
|
|
25
|
+
OpenService["scheduletemplate"] = "maintenance:can-access-scheduletemplate";
|
|
26
|
+
OpenService["dailySchedule"] = "maintenance:can-access-dailySchedule";
|
|
27
|
+
OpenService["downtime"] = "maintenance:can-access-downtime";
|
|
28
|
+
OpenService["restriction"] = "maintenance:can-access-restriction";
|
|
29
|
+
OpenService["frequency"] = "maintenance:can-access-frequency";
|
|
30
|
+
OpenService["downtimeField0"] = "maintenance:can-access-downtime-field-0";
|
|
31
|
+
OpenService["downtimeField1"] = "maintenance:can-access-downtime-field-1";
|
|
32
|
+
OpenService["downtimeField2"] = "maintenance:can-access-downtime-field-2";
|
|
33
|
+
OpenService["downtimeField3"] = "maintenance:can-access-downtime-field-3";
|
|
34
|
+
OpenService["downtimeField4"] = "maintenance:can-access-downtime-field-4";
|
|
35
|
+
OpenService["restrictionField0"] = "maintenance:can-access-restriction-field-0";
|
|
36
|
+
OpenService["restrictionField1"] = "maintenance:can-access-restriction-field-1";
|
|
37
|
+
OpenService["restrictionField2"] = "maintenance:can-access-restriction-field-2";
|
|
38
|
+
OpenService["frequencyField0"] = "maintenance:can-access-frequency-field-0";
|
|
39
|
+
OpenService["frequencyField1"] = "maintenance:can-access-frequency-field-1";
|
|
40
|
+
OpenService["frequencyField2"] = "maintenance:can-access-frequency-field-2";
|
|
41
|
+
OpenService["frequencyField3"] = "maintenance:can-access-frequency-field-3";
|
|
42
|
+
OpenService["frequencyField4"] = "maintenance:can-access-frequency-field-4";
|
|
43
|
+
OpenService["priority"] = "maintenance:can-access-priority";
|
|
44
|
+
OpenService["priorityNumber"] = "maintenance:can-access-priority-number";
|
|
45
|
+
OpenService["priorityLabel"] = "maintenance:can-access-priority-label";
|
|
46
|
+
// Update
|
|
47
|
+
OpenService["issuecategory"] = "maintenance:can-update-issuecategory";
|
|
48
|
+
OpenService["monitorstate"] = "maintenance:can-update-monitorstate";
|
|
49
|
+
OpenService["kanban_view"] = "maintenance:can-update-kanban-view";
|
|
50
|
+
})(OpenService = Permissions.OpenService || (Permissions.OpenService = {}));
|
|
51
|
+
// can also be used for nested permissions
|
|
52
|
+
// Example:
|
|
53
|
+
// export namespace TestPlugin {
|
|
54
|
+
// export enum TestPermission {
|
|
55
|
+
// test = "test:can-test",
|
|
56
|
+
// }
|
|
57
|
+
// export enum TestPermission2 {
|
|
58
|
+
// test2 = "test:can-test2",
|
|
59
|
+
// }
|
|
60
|
+
// }
|
|
61
|
+
})(Permissions || (exports.Permissions = Permissions = {}));
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Permissions = exports.Notifications = exports.ConfigKeys = void 0;
|
|
4
|
+
var ConfigKeys_1 = require("./ConfigKeys");
|
|
5
|
+
Object.defineProperty(exports, "ConfigKeys", { enumerable: true, get: function () { return ConfigKeys_1.ConfigKeys; } });
|
|
6
|
+
var Notifications_1 = require("./Notifications");
|
|
7
|
+
Object.defineProperty(exports, "Notifications", { enumerable: true, get: function () { return Notifications_1.Notifications; } });
|
|
8
|
+
var Permissions_1 = require("./Permissions");
|
|
9
|
+
Object.defineProperty(exports, "Permissions", { enumerable: true, get: function () { return Permissions_1.Permissions; } });
|
package/dist/featuremap.json
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"OD3_Alarm": "MONITORING",
|
|
3
3
|
"OD3_AlarmAction": "MONITORING",
|
|
4
4
|
"OD3_AlarmWebhook": "MONITORING",
|
|
5
|
+
"OD3_Assets": "CORE",
|
|
5
6
|
"OD3_Attachment": "CORE",
|
|
6
7
|
"OD3_BDE_Form": "BDE",
|
|
7
8
|
"OD3_BDE_List": "BDE",
|
|
@@ -30,7 +31,6 @@
|
|
|
30
31
|
"OD3_GTFS_Trip": "GTFS",
|
|
31
32
|
"OD3_GTFS_Wheelchair_Accessible": "GTFS",
|
|
32
33
|
"OD3_GTFS_Wheelchair_Boarding": "GTFS",
|
|
33
|
-
"OD3_Group": "CORE",
|
|
34
34
|
"OD3_Knowledge_Article": "KNOWLEDGE",
|
|
35
35
|
"OD3_Knowledge_Category": "KNOWLEDGE",
|
|
36
36
|
"OD3_Knowledge_Chat": "KNOWLEDGE",
|
|
@@ -40,10 +40,6 @@
|
|
|
40
40
|
"OD3_Knowledge_Video": "KNOWLEDGE",
|
|
41
41
|
"OD3_Language": "CORE",
|
|
42
42
|
"OD3_Log": "CORE",
|
|
43
|
-
"OD3_MES_Article": "MONITORING",
|
|
44
|
-
"OD3_MES_Order": "MONITORING",
|
|
45
|
-
"OD3_MES_OrderPlan": "MONITORING",
|
|
46
|
-
"OD3_MIAAS_MDSEndpoint": "MIAAS",
|
|
47
43
|
"OD3_MailTemplate": "MONITORING",
|
|
48
44
|
"OD3_Maintenance_DailySchedule": "MAINTENANCE",
|
|
49
45
|
"OD3_Maintenance_Downtime": "MAINTENANCE",
|
|
@@ -71,6 +67,10 @@
|
|
|
71
67
|
"OD3_Maintenance_Ticket_Kanban_State_Current": "MAINTENANCE",
|
|
72
68
|
"OD3_Maintenance_Ticket_Source": "MAINTENANCE",
|
|
73
69
|
"OD3_Maintenance_Ticket_Title": "MAINTENANCE",
|
|
70
|
+
"OD3_MES_Article": "MONITORING",
|
|
71
|
+
"OD3_MES_Order": "MONITORING",
|
|
72
|
+
"OD3_MES_OrderPlan": "MONITORING",
|
|
73
|
+
"OD3_MIAAS_MDSEndpoint": "MIAAS",
|
|
74
74
|
"OD3_Monitoring_DataHierachies": "MONITORING",
|
|
75
75
|
"OD3_Monitoring_Jobs": "MONITORING",
|
|
76
76
|
"OD3_Monitoring_ParseTableSensor": "MONITORING",
|
|
@@ -79,6 +79,7 @@
|
|
|
79
79
|
"OD3_NavigationGroup": "CORE",
|
|
80
80
|
"OD3_NavigationItem": "CORE",
|
|
81
81
|
"OD3_Notification": "CORE",
|
|
82
|
+
"OD3_Notification_Setting": "CORE",
|
|
82
83
|
"OD3_Permission": "CORE",
|
|
83
84
|
"OD3_Push": "CORE",
|
|
84
85
|
"OD3_Report": "CORE",
|
|
@@ -89,6 +90,7 @@
|
|
|
89
90
|
"OD3_TenantMeta": "CORE",
|
|
90
91
|
"OD3_TenantTrustedDomain": "CORE",
|
|
91
92
|
"OD3_UserData": "CORE",
|
|
93
|
+
"OD3_User_Setting": "CORE",
|
|
92
94
|
"OD3_VirtualKPI": "MONITORING",
|
|
93
95
|
"OD3_WebPush": "CORE",
|
|
94
96
|
"OD3_Widget": "MONITORING",
|
|
@@ -8,7 +8,7 @@ const types_1 = require("../types");
|
|
|
8
8
|
*/
|
|
9
9
|
async function init(name) {
|
|
10
10
|
Parse.Cloud.define(name, async function (request) {
|
|
11
|
-
if (
|
|
11
|
+
if (request.user === undefined) {
|
|
12
12
|
return { success: false, error: "User is not provided." };
|
|
13
13
|
}
|
|
14
14
|
//Get the current user
|
|
@@ -35,7 +35,7 @@ async function init(name) {
|
|
|
35
35
|
const acl = permission.getACL();
|
|
36
36
|
return acl?.getPublicWriteAccess() ||
|
|
37
37
|
acl?.getWriteAccess(user.id) ||
|
|
38
|
-
|
|
38
|
+
role !== undefined
|
|
39
39
|
? acl?.getRoleWriteAccess(role)
|
|
40
40
|
: false;
|
|
41
41
|
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { _User, Maintenance_Ticket } from "../types";
|
|
2
|
+
type MessageData = {
|
|
3
|
+
type?: "media" | "userinput" | "move" | "schedule_execution_step";
|
|
4
|
+
headline?: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
objectId?: string;
|
|
7
|
+
translation?: any;
|
|
8
|
+
};
|
|
9
|
+
type MessageField = {
|
|
10
|
+
title: string;
|
|
11
|
+
description: string;
|
|
12
|
+
data?: MessageData;
|
|
13
|
+
};
|
|
14
|
+
type Values = {
|
|
15
|
+
existingTicketId?: string;
|
|
16
|
+
duedate?: {
|
|
17
|
+
start?: Date;
|
|
18
|
+
end: Date;
|
|
19
|
+
};
|
|
20
|
+
title?: string;
|
|
21
|
+
message?: MessageField;
|
|
22
|
+
source?: string;
|
|
23
|
+
issuecategory?: string;
|
|
24
|
+
priority?: number;
|
|
25
|
+
media?: string[];
|
|
26
|
+
downtime?: number;
|
|
27
|
+
frequency?: number;
|
|
28
|
+
restriction?: number;
|
|
29
|
+
date?: string;
|
|
30
|
+
item?: string[];
|
|
31
|
+
assignedTo?: Array<{
|
|
32
|
+
type: "user" | "role";
|
|
33
|
+
id: string;
|
|
34
|
+
}>;
|
|
35
|
+
state?: string;
|
|
36
|
+
dailySchedule?: string;
|
|
37
|
+
};
|
|
38
|
+
export declare function init(name: string): Promise<void>;
|
|
39
|
+
export declare function saveTicketData(data: Values, user?: _User): Promise<Maintenance_Ticket>;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.init = init;
|
|
4
|
+
exports.saveTicketData = saveTicketData;
|
|
5
|
+
const parse_1 = require("parse");
|
|
6
|
+
const types_1 = require("../types");
|
|
7
|
+
async function init(name) {
|
|
8
|
+
Parse.Cloud.define(name, handleRequest, {
|
|
9
|
+
requireUser: true,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
async function handleRequest(request) {
|
|
13
|
+
const result = {
|
|
14
|
+
success: true,
|
|
15
|
+
};
|
|
16
|
+
try {
|
|
17
|
+
const session = request.user?.getSessionToken();
|
|
18
|
+
if (!session) {
|
|
19
|
+
throw new Error("No user session found");
|
|
20
|
+
}
|
|
21
|
+
const ticket = await saveTicketData(request.params, request.user);
|
|
22
|
+
result.success = true;
|
|
23
|
+
result.ticket = ticket;
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
console.error(error);
|
|
28
|
+
result.success = false;
|
|
29
|
+
result.error = error;
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function saveTicketData(data, user) {
|
|
34
|
+
const fetchOptions = user
|
|
35
|
+
? { sessionToken: user.getSessionToken() }
|
|
36
|
+
: { useMasterKey: true };
|
|
37
|
+
const ticket = await getTicketObject(data, user, fetchOptions);
|
|
38
|
+
if (data.assignedTo !== undefined)
|
|
39
|
+
await assignUsersAndRoles(ticket, data.assignedTo, fetchOptions, user);
|
|
40
|
+
if (data.title)
|
|
41
|
+
await saveTicketTitle(ticket, fetchOptions);
|
|
42
|
+
if (data.dailySchedule !== undefined)
|
|
43
|
+
await saveDailySchedule(ticket, data.dailySchedule, fetchOptions);
|
|
44
|
+
if (data.duedate)
|
|
45
|
+
await saveDuedate(ticket, data.duedate, fetchOptions);
|
|
46
|
+
if (data.priority !== undefined)
|
|
47
|
+
await savePriority(ticket, data.priority, fetchOptions);
|
|
48
|
+
if (data.downtime !== undefined)
|
|
49
|
+
await saveDowntime(ticket, data.downtime, fetchOptions);
|
|
50
|
+
if (data.frequency !== undefined)
|
|
51
|
+
await saveFrequency(ticket, data.frequency, fetchOptions);
|
|
52
|
+
if (data.restriction !== undefined)
|
|
53
|
+
await saveRestriction(ticket, data.restriction, fetchOptions);
|
|
54
|
+
if (data.issuecategory)
|
|
55
|
+
await saveIssueCategory(ticket, data.issuecategory, fetchOptions);
|
|
56
|
+
if (data.state)
|
|
57
|
+
await saveState(ticket, data.state, fetchOptions);
|
|
58
|
+
if (data.source)
|
|
59
|
+
await saveSource(ticket, data.source, fetchOptions);
|
|
60
|
+
if (data.media)
|
|
61
|
+
await saveMedia(ticket, data.media, fetchOptions);
|
|
62
|
+
if (data.message)
|
|
63
|
+
await saveMessage(ticket, data.message, fetchOptions);
|
|
64
|
+
// save defaults
|
|
65
|
+
if (!data.issuecategory && !data.existingTicketId)
|
|
66
|
+
await saveDefaultIssueCategory(ticket, fetchOptions);
|
|
67
|
+
if (!data.state && !data.existingTicketId)
|
|
68
|
+
await saveDefaultState(ticket, fetchOptions);
|
|
69
|
+
return ticket;
|
|
70
|
+
}
|
|
71
|
+
async function getTicketObject(value, user, fetchOptions) {
|
|
72
|
+
if (value.existingTicketId) {
|
|
73
|
+
const ticket = await new Parse.Query(types_1.Maintenance_Ticket).get(value.existingTicketId, fetchOptions);
|
|
74
|
+
if (!ticket) {
|
|
75
|
+
throw new Error("Ticket not found");
|
|
76
|
+
}
|
|
77
|
+
if (value.title && ticket.get("title") !== value.title) {
|
|
78
|
+
ticket.set("title", value.title);
|
|
79
|
+
await ticket.save(null, fetchOptions);
|
|
80
|
+
}
|
|
81
|
+
return ticket;
|
|
82
|
+
}
|
|
83
|
+
return await new types_1.Maintenance_Ticket({
|
|
84
|
+
title: value.title,
|
|
85
|
+
user: user,
|
|
86
|
+
tenant: user?.get("tenant"),
|
|
87
|
+
}).save(null, fetchOptions);
|
|
88
|
+
}
|
|
89
|
+
async function saveState(ticket, state, fetchOptions) {
|
|
90
|
+
return await new types_1.Maintenance_Ticket_Kanban_State({
|
|
91
|
+
ticket,
|
|
92
|
+
state: new types_1.Maintenance_Kanban_State({ objectId: state }), // pointer
|
|
93
|
+
tenant: ticket.get("tenant"),
|
|
94
|
+
user: ticket.get("user"),
|
|
95
|
+
}).save(null, fetchOptions);
|
|
96
|
+
}
|
|
97
|
+
async function assignUsersAndRoles(ticket, assignedTo, fetchOptions, assigningUser) {
|
|
98
|
+
const assignedUsers = await ticket
|
|
99
|
+
.relation("assignedusers")
|
|
100
|
+
.query()
|
|
101
|
+
.find(fetchOptions);
|
|
102
|
+
const assignedroles = await ticket
|
|
103
|
+
.relation("assignedroles")
|
|
104
|
+
.query()
|
|
105
|
+
.find(fetchOptions);
|
|
106
|
+
ticket.relation("assignedusers").remove(assignedUsers);
|
|
107
|
+
ticket.relation("assignedroles").remove(assignedroles);
|
|
108
|
+
await ticket.save(null, fetchOptions);
|
|
109
|
+
await ticket.save(null, fetchOptions);
|
|
110
|
+
const assignments = [];
|
|
111
|
+
const batchTime = new Date();
|
|
112
|
+
const ids = assignedTo.map((a) => a.id);
|
|
113
|
+
const newUsers = await new Parse.Query(parse_1.User)
|
|
114
|
+
.containedIn("objectId", ids)
|
|
115
|
+
.find(fetchOptions);
|
|
116
|
+
const newRoles = await new Parse.Query(parse_1.Role)
|
|
117
|
+
.containedIn("objectId", ids)
|
|
118
|
+
.find(fetchOptions);
|
|
119
|
+
ticket.relation("assignedusers").add(newUsers);
|
|
120
|
+
ticket.relation("assignedroles").add(newRoles);
|
|
121
|
+
if (newRoles.length === 0 && newUsers.length === 0) {
|
|
122
|
+
assignments.push(new types_1.Maintenance_Ticket_Assignment({
|
|
123
|
+
ticket,
|
|
124
|
+
assignedUser: undefined,
|
|
125
|
+
assignedRole: undefined,
|
|
126
|
+
user: ticket.user,
|
|
127
|
+
tenant: ticket.tenant,
|
|
128
|
+
batchStamp: batchTime,
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
for (const assignedTo of newUsers) {
|
|
132
|
+
assignments.push(new types_1.Maintenance_Ticket_Assignment({
|
|
133
|
+
ticket,
|
|
134
|
+
assignedUser: assignedTo,
|
|
135
|
+
tenant: ticket.get("tenant"),
|
|
136
|
+
user: ticket.get("user"),
|
|
137
|
+
batchStamp: batchTime,
|
|
138
|
+
}));
|
|
139
|
+
await new types_1.Notification({
|
|
140
|
+
data: {
|
|
141
|
+
ticketId: ticket.id,
|
|
142
|
+
translation: {
|
|
143
|
+
ticketName: ticket.get("title"),
|
|
144
|
+
ticketId: ticket.id,
|
|
145
|
+
username: assigningUser?.getUsername() ?? "System",
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
isSent: false,
|
|
149
|
+
title: "maintenance:ticket.assignuser.notification.title",
|
|
150
|
+
user: assignedTo,
|
|
151
|
+
description: "maintenance:ticket.assignuser.notification.description",
|
|
152
|
+
}).save(null, fetchOptions);
|
|
153
|
+
}
|
|
154
|
+
for (const assignedTo of newRoles) {
|
|
155
|
+
assignments.push(new types_1.Maintenance_Ticket_Assignment({
|
|
156
|
+
ticket,
|
|
157
|
+
assignedRole: assignedTo,
|
|
158
|
+
tenant: ticket.get("tenant"),
|
|
159
|
+
user: ticket.get("user"),
|
|
160
|
+
batchStamp: batchTime,
|
|
161
|
+
}));
|
|
162
|
+
const roleUsers = await assignedTo
|
|
163
|
+
.relation("users")
|
|
164
|
+
.query()
|
|
165
|
+
.find(fetchOptions);
|
|
166
|
+
for (const roleUser of roleUsers) {
|
|
167
|
+
await new types_1.Notification({
|
|
168
|
+
data: {
|
|
169
|
+
ticketId: ticket.id,
|
|
170
|
+
translation: {
|
|
171
|
+
ticketName: ticket.get("title"),
|
|
172
|
+
ticketId: ticket.id,
|
|
173
|
+
user: ticket.get("user")?.get("username"),
|
|
174
|
+
role: assignedTo.get("label"),
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
isSent: false,
|
|
178
|
+
title: "maintenance:ticket.assignrole.notification.title",
|
|
179
|
+
user: roleUser,
|
|
180
|
+
description: "maintenance:ticket.assignrole.notification.description",
|
|
181
|
+
}).save(null, fetchOptions);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
await types_1.Maintenance_Ticket_Assignment.saveAll(assignments, fetchOptions);
|
|
185
|
+
await ticket.save(null, fetchOptions);
|
|
186
|
+
}
|
|
187
|
+
async function saveTicketTitle(ticket, fetchOptions) {
|
|
188
|
+
const ticketTitle = await new Parse.Query(types_1.Maintenance_Ticket_Title)
|
|
189
|
+
.equalTo("ticket", ticket)
|
|
190
|
+
.first(fetchOptions);
|
|
191
|
+
if ((ticketTitle && ticketTitle.get("title") !== ticket.get("title")) ||
|
|
192
|
+
!ticketTitle) {
|
|
193
|
+
await new types_1.Maintenance_Ticket_Title({
|
|
194
|
+
ticket,
|
|
195
|
+
title: ticket.get("title"),
|
|
196
|
+
user: ticket.get("user"),
|
|
197
|
+
tenant: ticket.get("tenant"),
|
|
198
|
+
}).save(null, fetchOptions);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async function saveDailySchedule(ticket, dailySchedule, fetchOptions) {
|
|
202
|
+
const schedule = await new Parse.Query(types_1.Maintenance_DailySchedule).get(dailySchedule, fetchOptions);
|
|
203
|
+
ticket.set("dailySchedule", schedule);
|
|
204
|
+
schedule.relation("tickets").add(ticket);
|
|
205
|
+
await schedule.save(null, fetchOptions);
|
|
206
|
+
await ticket.save(null, fetchOptions);
|
|
207
|
+
}
|
|
208
|
+
async function saveDuedate(ticket, duedate, fetchOptions) {
|
|
209
|
+
const dueDate = new types_1.Maintenance_Duedate({
|
|
210
|
+
ticket,
|
|
211
|
+
end: duedate.end,
|
|
212
|
+
start: duedate.start,
|
|
213
|
+
tenant: ticket.get("tenant"),
|
|
214
|
+
user: ticket.get("user"),
|
|
215
|
+
endformat: "DD.MM.YYYY",
|
|
216
|
+
startformat: "DD.MM.YYYY",
|
|
217
|
+
});
|
|
218
|
+
await dueDate.save(null, fetchOptions);
|
|
219
|
+
}
|
|
220
|
+
async function saveDowntime(ticket, value, fetchOptions) {
|
|
221
|
+
const downtime = new types_1.Maintenance_Downtime({
|
|
222
|
+
ticket,
|
|
223
|
+
value: value,
|
|
224
|
+
tenant: ticket.get("tenant"),
|
|
225
|
+
user: ticket.get("user"),
|
|
226
|
+
});
|
|
227
|
+
await downtime.save(null, fetchOptions);
|
|
228
|
+
}
|
|
229
|
+
async function saveFrequency(ticket, value, fetchOptions) {
|
|
230
|
+
const frequency = new types_1.Maintenance_Frequency({
|
|
231
|
+
ticket,
|
|
232
|
+
value: value,
|
|
233
|
+
tenant: ticket.get("tenant"),
|
|
234
|
+
user: ticket.get("user"),
|
|
235
|
+
});
|
|
236
|
+
await frequency.save(null, fetchOptions);
|
|
237
|
+
}
|
|
238
|
+
async function saveRestriction(ticket, value, fetchOptions) {
|
|
239
|
+
const restriction = new types_1.Maintenance_Restriction({
|
|
240
|
+
ticket,
|
|
241
|
+
value: value,
|
|
242
|
+
tenant: ticket.get("tenant"),
|
|
243
|
+
user: ticket.get("user"),
|
|
244
|
+
});
|
|
245
|
+
await restriction.save(null, fetchOptions);
|
|
246
|
+
}
|
|
247
|
+
async function saveIssueCategory(ticket, value, fetchOptions) {
|
|
248
|
+
const issueCategory = new types_1.Maintenance_Ticket_Issuecategory({
|
|
249
|
+
ticket,
|
|
250
|
+
issuecategory: new types_1.Maintenance_Issuecategory({ objectId: value }), // pointer
|
|
251
|
+
tenant: ticket.get("tenant"),
|
|
252
|
+
user: ticket.get("user"),
|
|
253
|
+
});
|
|
254
|
+
await issueCategory.save(null, fetchOptions);
|
|
255
|
+
}
|
|
256
|
+
async function savePriority(ticket, value, fetchOptions) {
|
|
257
|
+
const priority = new types_1.Maintenance_Priority({
|
|
258
|
+
ticket,
|
|
259
|
+
value: value,
|
|
260
|
+
tenant: ticket.get("tenant"),
|
|
261
|
+
user: ticket.get("user"),
|
|
262
|
+
});
|
|
263
|
+
await priority.save(null, fetchOptions);
|
|
264
|
+
}
|
|
265
|
+
async function saveMedia(ticket, media, fetchOptions) {
|
|
266
|
+
const message = new types_1.Maintenance_Message({
|
|
267
|
+
referencedObjectId: ticket.id,
|
|
268
|
+
classname: types_1.Maintenance_Ticket.className,
|
|
269
|
+
data: { type: "media" },
|
|
270
|
+
tenant: ticket.get("tenant"),
|
|
271
|
+
user: ticket.get("user"),
|
|
272
|
+
});
|
|
273
|
+
message
|
|
274
|
+
.relation("media")
|
|
275
|
+
.add(media.map((m) => new types_1.Maintenance_Media({ objectId: m })));
|
|
276
|
+
await message.save(null, fetchOptions);
|
|
277
|
+
}
|
|
278
|
+
async function saveSource(ticket, source, fetchOptions) {
|
|
279
|
+
const tSource = new types_1.Maintenance_Ticket_Source({
|
|
280
|
+
ticket,
|
|
281
|
+
source: new types_1.Source({ objectId: source }),
|
|
282
|
+
tenant: ticket.get("tenant"),
|
|
283
|
+
user: ticket.get("user"),
|
|
284
|
+
});
|
|
285
|
+
await tSource.save(null, fetchOptions);
|
|
286
|
+
}
|
|
287
|
+
async function saveMessage(ticket, message, fetchOptions) {
|
|
288
|
+
const msg = new types_1.Maintenance_Message({
|
|
289
|
+
content: message.description,
|
|
290
|
+
referencedObjectId: ticket.id,
|
|
291
|
+
classname: types_1.Maintenance_Ticket.className,
|
|
292
|
+
tenant: ticket.get("tenant"),
|
|
293
|
+
user: ticket.get("user"),
|
|
294
|
+
title: message.title,
|
|
295
|
+
data: message.data,
|
|
296
|
+
});
|
|
297
|
+
await msg.save(null, fetchOptions);
|
|
298
|
+
}
|
|
299
|
+
async function saveDefaultIssueCategory(ticket, fetchOptions) {
|
|
300
|
+
const catchAll = await new Parse.Query(types_1.Maintenance_Issuecategory)
|
|
301
|
+
.equalTo("catchall", true)
|
|
302
|
+
.first(fetchOptions);
|
|
303
|
+
if (!catchAll) {
|
|
304
|
+
throw new Error("CatchAll issue category not found");
|
|
305
|
+
}
|
|
306
|
+
const issueCategory = new types_1.Maintenance_Ticket_Issuecategory({
|
|
307
|
+
ticket,
|
|
308
|
+
issuecategory: catchAll,
|
|
309
|
+
tenant: ticket.get("tenant"),
|
|
310
|
+
user: ticket.get("user"),
|
|
311
|
+
});
|
|
312
|
+
await issueCategory.save(null, fetchOptions);
|
|
313
|
+
}
|
|
314
|
+
async function saveDefaultState(ticket, fetchOptions) {
|
|
315
|
+
const newState = await new Parse.Query(types_1.Maintenance_Kanban_State)
|
|
316
|
+
.equalTo("isInbox", true)
|
|
317
|
+
.first(fetchOptions);
|
|
318
|
+
if (!newState) {
|
|
319
|
+
throw new Error("Inbox state not found");
|
|
320
|
+
}
|
|
321
|
+
const state = new types_1.Maintenance_Ticket_Kanban_State({
|
|
322
|
+
ticket,
|
|
323
|
+
state: newState,
|
|
324
|
+
tenant: ticket.get("tenant"),
|
|
325
|
+
user: ticket.get("user"),
|
|
326
|
+
});
|
|
327
|
+
await state.save(null, fetchOptions);
|
|
328
|
+
}
|