@openinc/parse-server-opendash
Version:
Parse Server Cloud Code for open.INC Stack.
124 lines (123 loc) • 6.39 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.init = init;
const __1 = require("..");
const openservice_1 = require("../features/openservice");
const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
const openinc_openservice_ticket_data_1 = require("../functions/openinc-openservice-ticket-data");
const removeShorltyPreviousEntry_1 = require("../helper/removeShorltyPreviousEntry");
const types_1 = require("../types");
const removeLatestMessage_1 = require("../features/openservice/messages/removeLatestMessage");
const TRANSLATION_TITLE = openservice_1.OpenserviceMessageTranslationKeys.TICKETLOG.KANBANSTATE.TITLE;
const TRANSLATION_CONTENT = openservice_1.OpenserviceMessageTranslationKeys.TICKETLOG.KANBANSTATE.CONTENT;
const TRANSLATION_TITLE_MACHINELOG = openservice_1.OpenserviceMessageTranslationKeys.MACHINELOG.KANBANSTATE.TITLE;
const TRANSLATION_CONTENT_MACHINELOG = openservice_1.OpenserviceMessageTranslationKeys.MACHINELOG.KANBANSTATE.CONTENT;
async function init() {
(0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Kanban_State, async (request) => {
const { object, original, user } = request;
await (0, __1.defaultHandler)(request);
await (0, __1.defaultAclHandler)(request, {
allowTenantUserWrite: true,
});
if (original) {
await (0, __1.requirePermission)(request, "maintenance:can-update-kanbanstate", "Permission denied.");
}
// Remove previous entry if it was created within 5 minutes
const removedEntry = await (0, removeShorltyPreviousEntry_1.removeShortlyPreviousEntry)(object, (query) => {
query.equalTo("ticket", object.get("ticket"));
query.notEqualTo("objectId", object.id);
query.descending("createdAt");
return query;
});
// if an entry was removed, remove the message as well
if (removedEntry)
(0, removeLatestMessage_1.removeLatestMessage)(removedEntry, TRANSLATION_TITLE, TRANSLATION_CONTENT);
});
(0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Kanban_State, async (request) => {
const { object, original, user } = request;
// Remove entry if it has the same values as the previous entry so its simply reverted to the already existing entry
const savedObject = await (0, removeShorltyPreviousEntry_1.removeEqualSaved)(object, (query) => {
query.equalTo("ticket", object.get("ticket"));
query.notEqualTo("objectId", object.id);
}, (first, second) => {
return first.get("state")?.id === second.get("state")?.id;
});
// fetch necessary data
await savedObject.fetchWithInclude(["ticket", "state"], {
useMasterKey: true,
});
const previousState = await new Parse.Query(types_1.Maintenance_Ticket_Kanban_State)
.includeAll()
.descending("createdAt")
.equalTo("ticket", savedObject.get("ticket"))
.notEqualTo("objectId", savedObject.id)
.first({ useMasterKey: true });
const state = await savedObject.get("state")?.fetch({ useMasterKey: true });
// create new message log
await new types_1.Maintenance_Message({
referencedObjectId: savedObject.get("ticket")?.id,
classname: savedObject.get("ticket")?.className,
title: TRANSLATION_TITLE,
content: TRANSLATION_CONTENT,
user: user,
tenant: user?.get("tenant"),
data: {
type: "system",
translation: {
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
old: previousState?.get("state").get("label") ?? "Nicht vorhanden",
new: state.get("label"),
},
origin: {
id: savedObject.id,
classname: savedObject.className,
},
},
}).save(null, { useMasterKey: true });
// Update the current state of the ticket
const currentTicketState = await new Parse.Query(types_1.Maintenance_Ticket_Kanban_State_Current)
.equalTo("ticket", savedObject.get("ticket"))
.first({ useMasterKey: true });
// if the ticket is already in the current state table, update it
if (currentTicketState) {
currentTicketState.set("ticketState", savedObject);
currentTicketState.set("state", savedObject.get("state"));
await currentTicketState.save(null, { useMasterKey: true });
}
// if the ticket is not in the current state table, create a new entry
else {
const newTicketState = new types_1.Maintenance_Ticket_Kanban_State_Current({
ticket: savedObject.get("ticket"),
ticketState: savedObject,
state: savedObject.get("state"),
tenant: savedObject.get("tenant"),
});
await newTicketState.save(null, { useMasterKey: true });
}
// to machinelog
const source = (await (0, openinc_openservice_ticket_data_1.getTicketSource)(savedObject.get("ticket")))?.get("source");
if (source) {
await new types_1.Maintenance_Message({
referencedObjectId: source?.id,
classname: source?.className,
title: TRANSLATION_TITLE_MACHINELOG,
content: TRANSLATION_CONTENT_MACHINELOG,
user: user,
tenant: user?.get("tenant"),
data: {
type: "system",
translation: {
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
old: previousState?.get("state").get("label") ?? "Nicht vorhanden",
new: state.get("label"),
ticketName: savedObject.get("ticket")?.get("title"),
},
origin: {
id: savedObject.get("ticket")?.id,
classname: savedObject.get("ticket")?.className,
},
},
}).save(null, { useMasterKey: true });
}
});
}