@openinc/parse-server-opendash 2.4.93 → 2.4.95

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 (32) hide show
  1. package/dist/functions/openinc-openservice-save-ticket-data.d.ts +6 -6
  2. package/dist/functions/openinc-openservice-save-ticket-data.js +53 -9
  3. package/dist/functions/openinc-openservice-ticket-data.d.ts +9 -1
  4. package/dist/functions/openinc-openservice-ticket-data.js +5 -0
  5. package/dist/helper/BreeInstance.d.ts +16 -0
  6. package/dist/helper/BreeInstance.js +78 -0
  7. package/dist/helper/removeShorltyPreviousEntry.d.ts +2 -2
  8. package/dist/helper/removeShorltyPreviousEntry.js +6 -2
  9. package/dist/hooks/Maintenance_Downtime.js +32 -2
  10. package/dist/hooks/Maintenance_Duedate.js +46 -3
  11. package/dist/hooks/Maintenance_Frequency.js +32 -3
  12. package/dist/hooks/Maintenance_Kanban_State.js +10 -0
  13. package/dist/hooks/Maintenance_Message.d.ts +7 -0
  14. package/dist/hooks/Maintenance_Message.js +38 -0
  15. package/dist/hooks/Maintenance_Priority.js +34 -4
  16. package/dist/hooks/Maintenance_Restriction.js +35 -3
  17. package/dist/hooks/Maintenance_Schedule_Template.js +11 -86
  18. package/dist/hooks/Maintenance_Ticket_Issuecategory.js +36 -4
  19. package/dist/hooks/Maintenance_Ticket_Kanban_State.js +41 -12
  20. package/dist/hooks/Maintenance_Ticket_Source.js +35 -5
  21. package/dist/hooks/Maintenance_Ticket_Title.js +32 -3
  22. package/dist/hooks/Permission.js +0 -26
  23. package/dist/index.js +51 -0
  24. package/dist/jobs/index.d.ts +0 -0
  25. package/dist/jobs/index.js +2 -0
  26. package/dist/types/Maintenance_Kanban_State.d.ts +3 -0
  27. package/dist/types/Maintenance_Kanban_State.js +6 -0
  28. package/dist/types/Maintenance_Schedule_Template.d.ts +3 -0
  29. package/dist/types/Maintenance_Schedule_Template.js +6 -0
  30. package/package.json +2 -1
  31. package/schema/Maintenance_Kanban_State.json +5 -0
  32. package/schema/Maintenance_Schedule_Template.json +4 -0
@@ -2,24 +2,34 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
4
  const __1 = require("..");
5
+ const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
5
6
  const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
6
7
  const types_1 = require("../types");
8
+ const Maintenance_Message_1 = require("./Maintenance_Message");
9
+ const TRANSLATION_TITLE = "maintenance:ticket.message.restriction.changed.title";
10
+ const TRANSLATION_CONTENT = "maintenance:ticket.message.restriction.changed.content";
7
11
  async function init() {
8
12
  (0, __1.beforeSaveHook)(types_1.Maintenance_Restriction, async (request) => {
9
13
  const { object, original, user } = request;
10
14
  await (0, __1.defaultHandler)(request);
11
15
  await (0, __1.defaultAclHandler)(request);
12
16
  // Remove previous entry if it was created within 5 minutes
13
- await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
17
+ const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
14
18
  query.equalTo("ticket", object.get("ticket"));
15
19
  query.descending("createdAt");
16
20
  return query;
17
21
  });
22
+ // if an entry was removed, remove the message as well
23
+ if (removedEntry)
24
+ (0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
25
+ // if an entry was removed, remove the message as well
26
+ if (removedEntry)
27
+ (0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
18
28
  });
19
29
  (0, __1.afterSaveHook)(types_1.Maintenance_Restriction, async (request) => {
20
30
  const { object, original, user } = request;
21
31
  // Remove entry if it has the same values as the previous entry so its simply reverted to the already existing entry
22
- await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
32
+ const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
23
33
  query.includeAll();
24
34
  query.equalTo("ticket", object.get("ticket"));
25
35
  query.notEqualTo("objectId", object.id);
@@ -27,6 +37,28 @@ async function init() {
27
37
  }, (first, second) => {
28
38
  return first.get("value") === second.get("value");
29
39
  });
30
- // TODO
40
+ const previous = await new Parse.Query(types_1.Maintenance_Restriction)
41
+ .includeAll()
42
+ .equalTo("ticket", savedObject.get("ticket"))
43
+ .notEqualTo("objectId", savedObject.id)
44
+ .descending("createdAt")
45
+ .first({ useMasterKey: true });
46
+ // create new message log
47
+ await new types_1.Maintenance_Message({
48
+ referencedObjectId: savedObject.get("ticket")?.id,
49
+ classname: savedObject.get("ticket")?.className,
50
+ title: TRANSLATION_TITLE,
51
+ content: TRANSLATION_CONTENT,
52
+ user: user,
53
+ tenant: user?.get("tenant"),
54
+ data: {
55
+ type: "system",
56
+ translation: {
57
+ username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
58
+ old: previous?.get("value") ?? "Nicht vorhanden",
59
+ new: savedObject?.get("value"),
60
+ },
61
+ },
62
+ }).save(null, { useMasterKey: true });
31
63
  });
32
64
  }
@@ -7,6 +7,7 @@ exports.init = init;
7
7
  const bree_1 = __importDefault(require("bree"));
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
9
  const __1 = require("..");
10
+ const BreeInstance_1 = __importDefault(require("../helper/BreeInstance"));
10
11
  const catchError_1 = require("../helper/catchError");
11
12
  const types_1 = require("../types");
12
13
  bree_1.default.extend(require("@breejs/ts-worker"));
@@ -19,10 +20,7 @@ async function init() {
19
20
  });
20
21
  (0, __1.afterSaveHook)(types_1.Maintenance_Schedule_Template, async (request) => {
21
22
  const { object, original, user } = request;
22
- //TODO: Create notification object
23
- //TODO: Send mail or anything that is enabled
24
- //TODO: Move bree to a separate file and use as singleton
25
- startBree([object]);
23
+ addJobToBree([object]);
26
24
  });
27
25
  /**
28
26
  * This function is called upon initialization and uses bree to schedule all jobs.
@@ -30,26 +28,27 @@ async function init() {
30
28
  async function initScheduling() {
31
29
  console.log("Init Scheduling Maintenance_Schedule_Template jobs");
32
30
  //Get all Maintenance_Schedule_Template objects
33
- const [queryError, query] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Schedule_Template).find());
31
+ const [queryError, query] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Schedule_Template).find({
32
+ useMasterKey: true,
33
+ }));
34
34
  //Create an new bree object for all Maintenance_Schedule_Template objects that have cron.is_one_time = false
35
35
  if (queryError) {
36
36
  console.error("Error while querying Maintenance_Schedule_Template objects", queryError);
37
37
  return;
38
38
  }
39
- //TODO: Do I need to reschedule all jobs when server restarts?
39
+ await addJobToBree(query);
40
40
  }
41
- async function startBree(query) {
42
- console.log("Starting Bree");
43
- const jobs = [];
41
+ async function addJobToBree(query) {
44
42
  for (const schedule of query) {
43
+ console.log(`Adding job for schedule ${schedule.id}`);
45
44
  const cron = schedule.get("cron");
46
45
  if (cron["is_one_time"] === false) {
47
46
  if (cron["scheduletype"] === "human") {
48
- jobs.push({
47
+ BreeInstance_1.default.getInstance().add({
49
48
  name: `Schedule ${schedule.id}`,
50
49
  path: node_path_1.default.join(__dirname, "..", "jobs", "open_service_notifyOnSchedule.js"),
51
50
  timeout: 0,
52
- interval: createHumanReadableFormat(cron["run_cron"]),
51
+ interval: BreeInstance_1.default.createHumanReadableFormat(cron["run_cron"]),
53
52
  hasSeconds: true,
54
53
  worker: {
55
54
  workerData: {
@@ -63,7 +62,7 @@ async function init() {
63
62
  });
64
63
  }
65
64
  else if (cron["scheduletype"] === "quartz") {
66
- jobs.push({
65
+ BreeInstance_1.default.getInstance().add({
67
66
  name: `Schedule ${schedule.id}`,
68
67
  cron: cron["run_cron"],
69
68
  path: node_path_1.default.join(__dirname, "..", "jobs", "open_service_notifyOnSchedule.js"),
@@ -83,79 +82,5 @@ async function init() {
83
82
  }
84
83
  }
85
84
  }
86
- //Create bree object
87
- console.log("Creating bree object");
88
- const bree = new bree_1.default({
89
- errorHandler: (error, workerMetadata) => {
90
- console.error(`An error occurred in worker ${workerMetadata.name} with the following error: ${error}`);
91
- },
92
- workerMessageHandler: (message) => {
93
- console.log(`Worker ${message.name} sent the following message: ${message.message}`);
94
- },
95
- root: node_path_1.default.join(__dirname, "..", "jobs"),
96
- jobs: [...jobs],
97
- acceptedExtensions: ["js"],
98
- defaultExtension: "js",
99
- outputWorkerMetadata: false,
100
- });
101
- //Start bree object
102
- // const graceful = new Graceful({ brees: [bree] });
103
- // graceful.listen();
104
- (async () => {
105
- console.log("Starting bree");
106
- await bree.start();
107
- })();
108
- }
109
- // async function notifyOnSchedule() {
110
- // console.log("Notify on schedule");
111
- // console.log("Creating new ticket");
112
- // //Create a new ticket
113
- // const ticketObject = new Maintenance_Ticket();
114
- // await ticketObject.save(null, { useMasterKey: true });
115
- // console.log("Creating new notification object");
116
- // //Create a new notification object in the database, class name: OD3_Notification
117
- // const notificationObject = new Notification();
118
- // notificationObject.set("title", "Maintenance Notification");
119
- // notificationObject.set("description", "Maintenance is scheduled");
120
- // notificationObject.set("data", { test: "test" });
121
- // await notificationObject.save(null, { useMasterKey: true });
122
- // console.log("Ticket and Notification object created");
123
- // }
124
- function createHumanReadableFormat(value) {
125
- //value looks like this: "1 1 1 1 1 1 1"
126
- //1. seconds
127
- //2. minutes
128
- //3. hours
129
- //4. days
130
- //5. weeks
131
- //6. months
132
- //7. years
133
- const valueArray = value.split(" ");
134
- //Should be in the format: "every 1 second" when second is 1
135
- //If any value is 0, it should be ignored
136
- //Values should be separated by a comma
137
- const returnArray = [];
138
- if (valueArray[0] !== "0") {
139
- returnArray.push(`every ${valueArray[0]} seconds`);
140
- }
141
- if (valueArray[1] !== "0") {
142
- returnArray.push(`every ${valueArray[1]} minutes`);
143
- }
144
- if (valueArray[2] !== "0") {
145
- returnArray.push(`every ${valueArray[2]} hours`);
146
- }
147
- if (valueArray[3] !== "0") {
148
- returnArray.push(`every ${valueArray[3]} days`);
149
- }
150
- if (valueArray[4] !== "0") {
151
- returnArray.push(`every ${valueArray[4]} weeks`);
152
- }
153
- if (valueArray[5] !== "0") {
154
- returnArray.push(`every ${valueArray[5]} months`);
155
- }
156
- if (valueArray[6] !== "0") {
157
- returnArray.push(`every ${valueArray[6]} years`);
158
- }
159
- return returnArray.join(", ");
160
85
  }
161
86
  }
@@ -2,30 +2,62 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
4
  const __1 = require("..");
5
+ const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
5
6
  const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
6
7
  const types_1 = require("../types");
8
+ const Maintenance_Message_1 = require("./Maintenance_Message");
9
+ const TRANSLATION_TITLE = "maintenance:ticket.message.issuecategory.changed.title";
10
+ const TRANSLATION_CONTENT = "maintenance:ticket.message.issuecategory.changed.content";
7
11
  async function init() {
8
12
  (0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Issuecategory, async (request) => {
9
13
  const { object, original, user } = request;
10
14
  await (0, __1.defaultHandler)(request);
11
15
  await (0, __1.defaultAclHandler)(request);
12
16
  // Remove previous entry if it was created within 5 minutes
13
- await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
17
+ const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
14
18
  query.equalTo("ticket", object.get("ticket"));
15
19
  query.descending("createdAt");
16
20
  return query;
17
21
  });
22
+ // if an entry was removed, remove the message as well
23
+ if (removedEntry)
24
+ (0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
18
25
  });
19
26
  (0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Issuecategory, async (request) => {
20
27
  const { object, original, user } = request;
21
28
  // Remove entry if it has the same values as the previous entry so its simply reverted to the already existing entry
22
- await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
23
- query.includeAll();
29
+ const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
24
30
  query.equalTo("ticket", object.get("ticket"));
25
31
  query.notEqualTo("objectId", object.id);
26
- return query;
27
32
  }, (first, second) => {
28
33
  return (first.get("issuecategory")?.id === second.get("issuecategory")?.id);
29
34
  });
35
+ const previousIssue = await new Parse.Query(types_1.Maintenance_Ticket_Issuecategory)
36
+ .includeAll()
37
+ .equalTo("ticket", savedObject.get("ticket"))
38
+ .notEqualTo("objectId", savedObject.id)
39
+ .descending("createdAt")
40
+ .first({ useMasterKey: true });
41
+ const issue = await savedObject
42
+ .get("issuecategory")
43
+ ?.fetch({ useMasterKey: true });
44
+ // create new message log
45
+ await new types_1.Maintenance_Message({
46
+ referencedObjectId: savedObject.get("ticket")?.id,
47
+ classname: savedObject.get("ticket")?.className,
48
+ title: TRANSLATION_TITLE,
49
+ content: TRANSLATION_CONTENT,
50
+ user: user,
51
+ tenant: user?.get("tenant"),
52
+ data: {
53
+ type: "system",
54
+ translation: {
55
+ username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
56
+ old: previousIssue?.get("issuecategory")?.get("name") ??
57
+ "Nicht vorhanden",
58
+ new: issue?.get("name"),
59
+ },
60
+ },
61
+ }).save(null, { useMasterKey: true });
30
62
  });
31
63
  }
@@ -2,8 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
4
  const __1 = require("..");
5
+ const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
5
6
  const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
6
7
  const types_1 = require("../types");
8
+ const Maintenance_Message_1 = require("./Maintenance_Message");
9
+ const TRANSLATION_TITLE = "maintenance:ticket.message.kanbanstate.changed.title";
10
+ const TRANSLATION_CONTENT = "maintenance:ticket.message.kanbanstate.changed.content";
7
11
  async function init() {
8
12
  (0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Kanban_State, async (request) => {
9
13
  const { object, original, user } = request;
@@ -15,41 +19,66 @@ async function init() {
15
19
  await (0, __1.requirePermission)(request, "maintenance:can-update-kanbanstate", "Permission denied.");
16
20
  }
17
21
  // Remove previous entry if it was created within 5 minutes
18
- await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
22
+ const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
19
23
  query.equalTo("ticket", object.get("ticket"));
24
+ query.notEqualTo("objectId", object.id);
20
25
  query.descending("createdAt");
21
26
  return query;
22
27
  });
23
- // TODO
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);
24
31
  });
25
32
  (0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Kanban_State, async (request) => {
26
33
  const { object, original, user } = request;
27
34
  // Remove entry if it has the same values as the previous entry so its simply reverted to the already existing entry
28
- const latestEntry = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
29
- query.includeAll();
35
+ const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
30
36
  query.equalTo("ticket", object.get("ticket"));
31
37
  query.notEqualTo("objectId", object.id);
32
- return query;
33
38
  }, (first, second) => {
34
39
  return first.get("state")?.id === second.get("state")?.id;
35
40
  });
41
+ const previousState = await new Parse.Query(types_1.Maintenance_Ticket_Kanban_State)
42
+ .includeAll()
43
+ .descending("createdAt")
44
+ .equalTo("ticket", savedObject.get("ticket"))
45
+ .notEqualTo("objectId", savedObject.id)
46
+ .first({ useMasterKey: true });
47
+ const state = await savedObject.get("state")?.fetch({ useMasterKey: true });
48
+ // create new message log
49
+ await new types_1.Maintenance_Message({
50
+ referencedObjectId: savedObject.get("ticket")?.id,
51
+ classname: savedObject.get("ticket")?.className,
52
+ title: TRANSLATION_TITLE,
53
+ content: TRANSLATION_CONTENT,
54
+ user: user,
55
+ tenant: user?.get("tenant"),
56
+ data: {
57
+ type: "system",
58
+ translation: {
59
+ username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
60
+ old: previousState?.get("state").get("label") ?? "Nicht vorhanden",
61
+ new: state.get("label"),
62
+ },
63
+ },
64
+ }).save(null, { useMasterKey: true });
36
65
  // Update the current state of the ticket
37
66
  const currentTicketState = await new Parse.Query(types_1.Maintenance_Ticket_Kanban_State_Current)
38
- .equalTo("ticket", latestEntry.get("ticket"))
67
+ .equalTo("ticket", savedObject.get("ticket"))
39
68
  .first({ useMasterKey: true });
40
69
  // if the ticket is already in the current state table, update it
41
70
  if (currentTicketState) {
42
- currentTicketState.set("ticketState", latestEntry);
43
- currentTicketState.set("state", latestEntry.get("state"));
71
+ currentTicketState.set("ticketState", savedObject);
72
+ currentTicketState.set("state", savedObject.get("state"));
44
73
  await currentTicketState.save(null, { useMasterKey: true });
45
74
  }
46
75
  // if the ticket is not in the current state table, create a new entry
47
76
  else {
48
77
  const newTicketState = new types_1.Maintenance_Ticket_Kanban_State_Current({
49
- ticket: latestEntry.get("ticket"),
50
- ticketState: latestEntry,
51
- state: latestEntry.get("state"),
52
- tenant: latestEntry.get("tenant"),
78
+ ticket: savedObject.get("ticket"),
79
+ ticketState: savedObject,
80
+ state: savedObject.get("state"),
81
+ tenant: savedObject.get("tenant"),
53
82
  });
54
83
  await newTicketState.save(null, { useMasterKey: true });
55
84
  }
@@ -2,32 +2,62 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
4
  const __1 = require("..");
5
+ const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
5
6
  const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
6
7
  const types_1 = require("../types");
8
+ const Maintenance_Message_1 = require("./Maintenance_Message");
9
+ const TRANSLATION_TITLE = "maintenance:ticket.message.source.changed.title";
10
+ const TRANSLATION_CONTENT = "maintenance:ticket.message.source.changed.content";
7
11
  async function init() {
8
12
  (0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Source, async (request) => {
9
13
  const { object, original, user } = request;
10
14
  await (0, __1.defaultHandler)(request);
11
15
  await (0, __1.defaultAclHandler)(request);
12
16
  // Remove previous entry if it was created within 5 minutes
13
- await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
17
+ const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
14
18
  query.equalTo("ticket", object.get("ticket"));
15
19
  query.descending("createdAt");
16
20
  return query;
17
21
  });
18
- // TODO
22
+ // if an entry was removed, remove the message as well
23
+ if (removedEntry)
24
+ (0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
19
25
  });
20
26
  (0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Source, async (request) => {
21
27
  const { object, original, user } = request;
22
28
  // Remove entry if it has the same values as the previous entry so its simply reverted to the already existing entry
23
- await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
24
- query.includeAll();
29
+ const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
25
30
  query.equalTo("ticket", object.get("ticket"));
26
31
  query.notEqualTo("objectId", object.id);
27
32
  return query;
28
33
  }, (first, second) => {
29
34
  return first.get("source")?.id === second.get("source")?.id;
30
35
  });
31
- // TODO
36
+ const previousSource = await new Parse.Query(types_1.Maintenance_Ticket_Source)
37
+ .includeAll()
38
+ .equalTo("ticket", savedObject.get("ticket"))
39
+ .notEqualTo("objectId", savedObject.id)
40
+ .descending("createdAt")
41
+ .first({ useMasterKey: true });
42
+ const source = await savedObject
43
+ .get("source")
44
+ ?.fetch({ useMasterKey: true });
45
+ // create new message log
46
+ await new types_1.Maintenance_Message({
47
+ referencedObjectId: savedObject.get("ticket")?.id,
48
+ classname: savedObject.get("ticket")?.className,
49
+ title: TRANSLATION_TITLE,
50
+ content: TRANSLATION_CONTENT,
51
+ user: user,
52
+ tenant: user?.get("tenant"),
53
+ data: {
54
+ type: "system",
55
+ translation: {
56
+ username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
57
+ old: previousSource?.get("source").get("name") ?? "Nicht vorhanden",
58
+ new: source.get("name"),
59
+ },
60
+ },
61
+ }).save(null, { useMasterKey: true });
32
62
  });
33
63
  }
@@ -2,25 +2,32 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
4
  const __1 = require("..");
5
+ const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
5
6
  const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
6
7
  const types_1 = require("../types");
8
+ const Maintenance_Message_1 = require("./Maintenance_Message");
9
+ const TRANSLATION_TITLE = "maintenance:ticket.message.title.changed.title";
10
+ const TRANSLATION_CONTENT = "maintenance:ticket.message.title.changed.content";
7
11
  async function init() {
8
12
  (0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Title, async (request) => {
9
13
  const { object, original, user } = request;
10
14
  await (0, __1.defaultHandler)(request);
11
15
  await (0, __1.defaultAclHandler)(request);
12
16
  // Remove previous entry if it was created within 5 minutes
13
- await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
17
+ const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
14
18
  query.equalTo("ticket", object.get("ticket"));
15
19
  query.descending("createdAt");
16
20
  return query;
17
21
  });
22
+ // if an entry was removed, remove the message as well
23
+ if (removedEntry)
24
+ (0, Maintenance_Message_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
18
25
  // TODO
19
26
  });
20
27
  (0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Title, async (request) => {
21
28
  const { object, original, user } = request;
22
29
  // Remove entry if it has the same values as the previous entry so its simply reverted to the already existing entry
23
- await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
30
+ const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
24
31
  query.includeAll();
25
32
  query.equalTo("ticket", object.get("ticket"));
26
33
  query.notEqualTo("objectId", object.id);
@@ -28,6 +35,28 @@ async function init() {
28
35
  }, (first, second) => {
29
36
  return first.get("title") === second.get("title");
30
37
  });
31
- // TODO
38
+ const previousTitle = await new Parse.Query(types_1.Maintenance_Ticket_Title)
39
+ .includeAll()
40
+ .descending("createdAt")
41
+ .equalTo("ticket", savedObject.get("ticket"))
42
+ .notEqualTo("objectId", savedObject.id)
43
+ .first({ useMasterKey: true });
44
+ // create new message log
45
+ await new types_1.Maintenance_Message({
46
+ referencedObjectId: savedObject.get("ticket")?.id,
47
+ classname: savedObject.get("ticket")?.className,
48
+ title: TRANSLATION_TITLE,
49
+ content: TRANSLATION_CONTENT,
50
+ user: user,
51
+ tenant: user?.get("tenant"),
52
+ data: {
53
+ type: "system",
54
+ translation: {
55
+ username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
56
+ old: previousTitle?.get("title") ?? "Nicht vorhanden",
57
+ new: savedObject.get("title"),
58
+ },
59
+ },
60
+ }).save(null, { useMasterKey: true });
32
61
  });
33
62
  }
@@ -2,10 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
4
  const __1 = require("..");
5
- const registerPermissions_1 = require("../helper/registerPermissions");
6
5
  const types_1 = require("../types");
7
6
  async function init() {
8
- await registerPermissions();
9
7
  (0, __1.beforeSaveHook)(types_1.Permission, async (request) => {
10
8
  const { object, original, user } = request;
11
9
  await (0, __1.defaultHandler)(request);
@@ -18,27 +16,3 @@ async function init() {
18
16
  // TODO
19
17
  });
20
18
  }
21
- /**
22
- * Register all permissions in the database, if not already registered.
23
- */
24
- async function registerPermissions() {
25
- console.log("Register all permissions");
26
- (0, registerPermissions_1.getAllPermissions)().forEach((permission) => {
27
- new Parse.Query(types_1.Permission)
28
- .equalTo("key", permission.key)
29
- .first({ useMasterKey: true })
30
- .then((result) => {
31
- if (!result) {
32
- console.log("Create permission", permission.key);
33
- const newPermission = new types_1.Permission();
34
- newPermission.set("key", permission.key);
35
- newPermission.set("label", permission.label);
36
- newPermission.set("description", permission.description);
37
- newPermission.save({}, { useMasterKey: true });
38
- }
39
- else {
40
- console.log("Permission already exists", permission.key);
41
- }
42
- });
43
- });
44
- }
package/dist/index.js CHANGED
@@ -28,9 +28,11 @@ const web_push_1 = __importDefault(require("web-push"));
28
28
  const config_1 = require("./config");
29
29
  const featuremap_json_1 = __importDefault(require("./featuremap.json"));
30
30
  const _init_1 = require("./functions/_init");
31
+ const BreeInstance_1 = __importDefault(require("./helper/BreeInstance"));
31
32
  const Core_Email_1 = require("./hooks/Core_Email");
32
33
  const _init_2 = require("./hooks/_init");
33
34
  const types_1 = require("./types");
35
+ const registerPermissions_1 = require("./helper/registerPermissions");
34
36
  // export { Config } from "./helper/Config";
35
37
  var Core_Email_2 = require("./hooks/Core_Email");
36
38
  Object.defineProperty(exports, "sendSimpleEmail", { enumerable: true, get: function () { return Core_Email_2.sendSimpleEmail; } });
@@ -54,6 +56,7 @@ async function init() {
54
56
  }
55
57
  catch (error) { }
56
58
  await config_1.config.init(true);
59
+ await initBree();
57
60
  await initTranslations();
58
61
  await (0, Core_Email_1.initEmailTransport)();
59
62
  await initWebPush();
@@ -63,6 +66,19 @@ async function init() {
63
66
  await initDefaultData();
64
67
  await (0, _init_1.init)();
65
68
  await initAutoload();
69
+ await initPermissions();
70
+ }
71
+ async function initBree() {
72
+ const bree = BreeInstance_1.default.getInstance();
73
+ //Start bree object
74
+ // const graceful = new Graceful({ brees: [bree] });
75
+ // graceful.listen();
76
+ (async () => {
77
+ console.log("[@openinc/parse-server-opendash] Starting bree");
78
+ await bree.start();
79
+ const jobs = BreeInstance_1.default.getAllJobs();
80
+ console.log("[@openinc/parse-server-opendash] Number of Bree jobs in initialization:", jobs.length);
81
+ })();
66
82
  }
67
83
  async function initTranslations() {
68
84
  // try {
@@ -159,6 +175,41 @@ async function initDefaultData() {
159
175
  console.error(error);
160
176
  }
161
177
  }
178
+ async function initPermissions() {
179
+ const tenant = await new Parse.Query(types_1.Tenant)
180
+ .descending("createdAt")
181
+ .first({ useMasterKey: true });
182
+ tenant && (await registerPermissions(tenant));
183
+ }
184
+ /**
185
+ * Register all permissions in the database, if not already registered.
186
+ */
187
+ async function registerPermissions(tenant) {
188
+ console.log("Register all permissions");
189
+ (0, registerPermissions_1.getAllPermissions)().forEach((permission) => {
190
+ new Parse.Query(types_1.Permission)
191
+ .equalTo("key", permission.key)
192
+ .first({ useMasterKey: true })
193
+ .then((result) => {
194
+ if (!result) {
195
+ console.log("Create permission", permission.key);
196
+ const newPermission = new types_1.Permission();
197
+ newPermission.set("key", permission.key);
198
+ newPermission.set("label", permission.label);
199
+ newPermission.set("description", permission.description);
200
+ newPermission.save({}, { useMasterKey: true });
201
+ }
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
+ else {
208
+ console.log("Permission already exists", permission.key);
209
+ }
210
+ });
211
+ });
212
+ }
162
213
  /**
163
214
  * Checks if a user has a specific permission in OD3_Permission.
164
215
  * @param sessionToken - The session token of the user.
File without changes
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ (async () => { })();
@@ -6,6 +6,7 @@ export interface Maintenance_Kanban_StateAttributes {
6
6
  updatedAt: Date;
7
7
  color: string;
8
8
  description?: string;
9
+ enabled: boolean;
9
10
  isFinished: boolean;
10
11
  isInbox: boolean;
11
12
  label: string;
@@ -19,6 +20,8 @@ export declare class Maintenance_Kanban_State extends Parse.Object<Maintenance_K
19
20
  set color(value: string);
20
21
  get description(): string | undefined;
21
22
  set description(value: string | undefined);
23
+ get enabled(): boolean;
24
+ set enabled(value: boolean);
22
25
  get isFinished(): boolean;
23
26
  set isFinished(value: boolean);
24
27
  get isInbox(): boolean;
@@ -17,6 +17,12 @@ class Maintenance_Kanban_State extends Parse.Object {
17
17
  set description(value) {
18
18
  super.set("description", value);
19
19
  }
20
+ get enabled() {
21
+ return super.get("enabled");
22
+ }
23
+ set enabled(value) {
24
+ super.set("enabled", value);
25
+ }
20
26
  get isFinished() {
21
27
  return super.get("isFinished");
22
28
  }