sunrise-cms/handlers/api-get/milestoneICS.js

57 lines
2.6 KiB
JavaScript

import ical, { ICalEventStatus } from "ical-generator";
import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js";
const timeStringSplitRegex = /[ :-]/;
export const handler = (request, response) => {
const workOrderMilestones = getWorkOrderMilestones({
workOrderMilestoneDateFilter: "recent",
workOrderTypeIds: request.query.workOrderTypeIds,
workOrderMilestoneTypeIds: request.query
.workOrderMilestoneTypeIds
}, { includeWorkOrders: true, orderBy: "date" });
const calendar = ical({
name: "Work Order Milestone Calendar"
});
for (const milestone of workOrderMilestones) {
const milestoneTimePieces = (milestone.workOrderMilestoneDateString +
" " +
milestone.workOrderMilestoneTimeString).split(timeStringSplitRegex);
const milestoneDate = new Date(Number.parseInt(milestoneTimePieces[0], 10), Number.parseInt(milestoneTimePieces[1], 10) - 1, Number.parseInt(milestoneTimePieces[2], 10), Number.parseInt(milestoneTimePieces[3], 10), Number.parseInt(milestoneTimePieces[4], 10));
const eventData = {
start: milestoneDate,
stamp: new Date(milestone.recordCreate_timeMillis),
lastModified: new Date(milestone.recordUpdate_timeMillis),
allDay: !milestone.workOrderMilestoneTime,
summary: milestone.workOrderMilestoneDescription
};
const calendarEvent = calendar.createEvent(eventData);
if (milestone.workOrderMilestoneCompletionDate) {
calendarEvent.status(ICalEventStatus.CONFIRMED);
}
if (milestone.workOrderMilestoneTypeId) {
calendarEvent.createCategory({
name: milestone.workOrderMilestoneType
});
}
if (milestone.workOrder.workOrderLots.length > 0) {
const lotNames = [];
for (const lot of milestone.workOrder.workOrderLots) {
lotNames.push(lot.mapName + ": " + lot.lotName);
}
calendarEvent.location(lotNames.join(", "));
}
if (milestone.workOrder.workOrderLotOccupancies.length > 0) {
for (const lotOccupancy of milestone.workOrder
.workOrderLotOccupancies) {
for (const occupants of lotOccupancy.lotOccupancyOccupants) {
calendarEvent.createAttendee({
name: occupants.occupantName,
email: "no-reply@example.com"
});
}
}
}
}
calendar.serve(response);
};
export default handler;