57 lines
2.6 KiB
JavaScript
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;
|