UNPKG

@openinc/parse-server-opendash

Version:
329 lines (328 loc) 13.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getUsername = getUsername; exports.init = init; exports.saveTicketData = saveTicketData; const openservice_1 = require("../features/openservice"); const openware_1 = require("../features/openware"); const catchError_1 = require("../helper/catchError"); const types_1 = require("../types"); function getUsername(user) { if (!user) return "System"; let username = ""; if (user?.get("firstname") && user?.get("lastname")) { username = user?.get("firstname") + " " + user?.get("lastname"); } else if (user?.get("name")) { username = user.get("name"); } else { username = user?.getUsername(); } return username ?? "System"; } async function init(name) { Parse.Cloud.define(name, handleRequest, { requireUser: true, }); } async function handleRequest(request) { const result = { success: true, }; try { const session = request.user?.getSessionToken(); if (!session) { throw new Error("No user session found"); } const ticket = await saveTicketData(request.params, request.user); result.success = true; result.ticket = ticket; return result; } catch (error) { console.error(error); result.success = false; result.error = error; return result; } } async function saveTicketData(data, user) { const fetchOptions = user ? { sessionToken: user.getSessionToken() } : { useMasterKey: true }; const ticket = await (0, openservice_1.getTicketObject)(data, user, fetchOptions); const owticketobj = { ticket: ticket, priority: 0, downtime: 0, restriction: 0, frequency: 0, issuecategory: "", state: "", source: new types_1.Maintenance_Ticket_Source(), }; // needs to be the first save to save a message before data change messages are created on ticket creation if (data.message) await (0, openservice_1.saveMessage)(ticket, data.message, fetchOptions, data); if (data.assignedTo !== undefined) await (0, openservice_1.assignUsersAndRoles)(ticket, data.assignedTo, fetchOptions, user); if (data.title) await (0, openservice_1.saveTicketTitle)(ticket, fetchOptions); if (data.description) await (0, openservice_1.saveDescription)(ticket, data, fetchOptions); if (data.meta) await (0, openservice_1.saveTicketMeta)(ticket, data.meta, fetchOptions); if (data.duedate) await (0, openservice_1.saveDuedate)(ticket, data.duedate, fetchOptions); if (data.priority !== undefined) { const savedpriority = await (0, openservice_1.savePriority)(ticket, data.priority, fetchOptions); owticketobj.priority = savedpriority; } else { //Fetch last value so it won't publish a 0 value to openware and overwrite the last value with default 0 const [lastPriorityError, lastPriority] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Priority) .equalTo("ticket", ticket) .descending("createdAt") .first(fetchOptions)); if (lastPriorityError) { console.log("Error fetching last priority", lastPriorityError); } else { owticketobj.priority = lastPriority?.get("value") ?? 0; } } if (data.downtime !== undefined) { const saveddowntime = await (0, openservice_1.saveDowntime)(ticket, data.downtime, fetchOptions); owticketobj.downtime = saveddowntime; } else { //Fetch last value so it won't publish a 0 value to openware and overwrite the last value with default 0 const [lastDowntimeError, lastDowntime] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Downtime) .equalTo("ticket", ticket) .descending("createdAt") .first(fetchOptions)); if (lastDowntimeError) { console.log("Error fetching last downtime", lastDowntimeError); } else { owticketobj.downtime = lastDowntime?.get("value") ?? 0; } } if (data.frequency !== undefined) { const savedfrequency = await (0, openservice_1.saveFrequency)(ticket, data.frequency, fetchOptions); owticketobj.frequency = savedfrequency; } else { //Fetch last value so it won't publish a 0 value to openware and overwrite the last value with default 0 const [lastFrequencyError, lastFrequency] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Frequency) .equalTo("ticket", ticket) .descending("createdAt") .first(fetchOptions)); if (lastFrequencyError) { console.log("Error fetching last frequency", lastFrequencyError); } else { owticketobj.frequency = lastFrequency?.get("value") ?? 0; } } if (data.restriction !== undefined) { const savedrestriction = await (0, openservice_1.saveRestriction)(ticket, data.restriction, fetchOptions); owticketobj.restriction = savedrestriction; } else { //Fetch last value so it won't publish a 0 value to openware and overwrite the last value with default 0 const [lastRestrictionError, lastRestriction] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Restriction) .equalTo("ticket", ticket) .descending("createdAt") .first(fetchOptions)); if (lastRestrictionError) { console.log("Error fetching last restriction", lastRestrictionError); } else { owticketobj.restriction = lastRestriction?.get("value") ?? 0; } } if (data.issuecategory) { const savedissuecategory = await (0, openservice_1.saveIssueCategory)(ticket, data.issuecategory, fetchOptions); const [fetchedSavedIssuecategoryError, fetchedSavedIssuecategory] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Ticket_Issuecategory) .include("issuecategory") .get(savedissuecategory.id, fetchOptions)); if (fetchedSavedIssuecategoryError) { console.log("Error fetching saved issue category", fetchedSavedIssuecategoryError); } else { owticketobj.issuecategory = fetchedSavedIssuecategory; } } if (data.state) { const savedstate = await (0, openservice_1.saveState)(ticket, data.state, fetchOptions); const [fetchedSavedStateError, fetchedSavedState] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Ticket_Kanban_State) .include("state") .get(savedstate.id, fetchOptions)); if (fetchedSavedStateError) { console.log("Error fetching saved state", fetchedSavedStateError); } else { owticketobj.state = fetchedSavedState; } } if (data.media && data.media.length > 0) await (0, openservice_1.saveMedia)(ticket, data.media, fetchOptions); if (data.material) await (0, openservice_1.saveMaterial)(ticket, data.material, fetchOptions); if (data.project) await (0, openservice_1.saveProject)(ticket, data.project, fetchOptions); // save defaults if (!data.issuecategory && !data.existingTicketId) await (0, openservice_1.saveDefaultIssueCategory)(ticket, fetchOptions); if (!data.state && !data.existingTicketId) await (0, openservice_1.saveDefaultState)(ticket, fetchOptions); // save source last so the machinelog does not have the initialization messages of the ticket data if (data.source) { await (0, openservice_1.saveSource)(ticket, data.source, fetchOptions); } //Get source from ticket and save to openware const [fetchedTicketSourceError, ticketsource] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Maintenance_Ticket_Source) .equalTo("ticket", new types_1.Maintenance_Ticket({ objectId: ticket.id })) .descending("createdAt") .include("source") .first({ useMasterKey: true })); if (fetchedTicketSourceError) { console.log("Error fetching saved source", fetchedTicketSourceError); } else if (ticketsource && ticketsource.get("source")) { owticketobj.source = ticketsource; // publish to openware await publishToOpenWare(owticketobj, ticket, ticketsource.get("source").get("tag") ? ticketsource.get("source").get("tag") : ""); } return ticket; } /** * Publishes the ticket to open.WARE with all changed data * @param owticketobj OpenWareTicketObject * @param source OD3_Source */ async function publishToOpenWare(owticketobj, ticket, source) { const time = new Date().getTime(); const values = { date: time, value: Object.entries(owticketobj).map(([key, value]) => { if (key === "downtime") { if (value instanceof types_1.Maintenance_Downtime) { return value.get("value"); } return value; } else if (key === "frequency") { if (value instanceof types_1.Maintenance_Frequency) { return value.get("value"); } return value; } else if (key === "priority") { if (value instanceof types_1.Maintenance_Priority) { return value.get("value"); } return value; } else if (key === "restriction") { if (value instanceof types_1.Maintenance_Restriction) { return value.get("value"); } return value; } else if (key === "issuecategory") { if (value instanceof types_1.Maintenance_Ticket_Issuecategory) { return value.get("issuecategory").id; } return value; } else if (key === "state") { if (value instanceof types_1.Maintenance_Ticket_Kanban_State) { return value.get("state").id; } return value; } else if (key === "ticket") { if (value instanceof types_1.Maintenance_Ticket) { return value.id; } return value; } else if (key === "source") { if (value instanceof types_1.Maintenance_Ticket_Source) { return value.get("source").id; } return value; } return value; }), }; const valueTypes = Object.keys(owticketobj).map((key) => { const tmpvaluetype = { name: "", unit: "", type: "String", }; if (key === "downtime") { tmpvaluetype.name = types_1.Maintenance_Downtime.className.replace("OD3_Maintenance_", ""); tmpvaluetype.unit = "%"; tmpvaluetype.type = "Number"; } else if (key === "frequency") { tmpvaluetype.name = types_1.Maintenance_Frequency.className.replace("OD3_Maintenance_", ""); tmpvaluetype.unit = "%"; tmpvaluetype.type = "Number"; } else if (key === "priority") { tmpvaluetype.name = types_1.Maintenance_Priority.className.replace("OD3_Maintenance_", ""); tmpvaluetype.unit = "%"; tmpvaluetype.type = "Number"; } else if (key === "restriction") { tmpvaluetype.name = types_1.Maintenance_Restriction.className.replace("OD3_Maintenance_", ""); tmpvaluetype.unit = "%"; tmpvaluetype.type = "Number"; } else if (key === "issuecategory") { tmpvaluetype.name = types_1.Maintenance_Ticket_Issuecategory.className.replace("OD3_Maintenance_", ""); tmpvaluetype.unit = ""; tmpvaluetype.type = "String"; } else if (key === "state") { tmpvaluetype.name = types_1.Maintenance_Ticket_Kanban_State.className.replace("OD3_Maintenance_", ""); tmpvaluetype.unit = ""; tmpvaluetype.type = "String"; } else if (key === "ticket") { tmpvaluetype.name = types_1.Maintenance_Ticket.className.replace("OD3_Maintenance_", ""); tmpvaluetype.unit = ""; tmpvaluetype.type = "String"; } else if (key === "source") { tmpvaluetype.name = types_1.Maintenance_Ticket_Source.className.replace("OD3_Maintenance_", ""); tmpvaluetype.unit = ""; tmpvaluetype.type = "String"; } return tmpvaluetype; }); const dataitem = { id: `openservice_ticket_${ticket.id}`, name: `Ticket ${owticketobj.ticket.get("title")}`, source: source, values: [values], valueTypes: valueTypes, meta: {}, }; console.log("Publishing ticket to openware: ", dataitem, "with values", JSON.stringify(dataitem.values)); try { await (0, openware_1.publishDataItem)(dataitem, ticket.get("user")?.get("email"), true); } catch (error) { console.error("Error publishing ticket to openware", error); } }