refactor to reduce complexity
parent
8edf9e62a4
commit
eda8483e62
|
|
@ -2,50 +2,24 @@ import ical, { ICalEventStatus } from "ical-generator";
|
|||
import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js";
|
||||
import * as configFunctions from "../../helpers/functions.config.js";
|
||||
import { getPrintConfig } from "../../helpers/functions.print.js";
|
||||
const calendarCompany = "cityssm.github.io";
|
||||
const calendarProduct = configFunctions.getProperty("application.applicationName");
|
||||
const timeStringSplitRegex = /[ :-]/;
|
||||
function escapeHTML(stringToEscape) {
|
||||
return stringToEscape.replace(/[^\d A-Za-z]/g, (c) => "&#" + c.codePointAt(0) + ";");
|
||||
}
|
||||
export const handler = (request, response) => {
|
||||
const urlRoot = "http://" +
|
||||
function getUrlRoot(request) {
|
||||
return ("http://" +
|
||||
request.hostname +
|
||||
(configFunctions.getProperty("application.httpPort") === 80
|
||||
? ""
|
||||
: ":" + configFunctions.getProperty("application.httpPort")) +
|
||||
configFunctions.getProperty("reverseProxy.urlPrefix");
|
||||
const workOrderMilestoneFilters = {
|
||||
workOrderTypeIds: request.query.workOrderTypeIds,
|
||||
workOrderMilestoneTypeIds: request.query.workOrderMilestoneTypeIds
|
||||
};
|
||||
if (request.query.workOrderId) {
|
||||
workOrderMilestoneFilters.workOrderId = request.query.workOrderId;
|
||||
}
|
||||
else {
|
||||
workOrderMilestoneFilters.workOrderMilestoneDateFilter = "recent";
|
||||
}
|
||||
const workOrderMilestones = getWorkOrderMilestones(workOrderMilestoneFilters, {
|
||||
includeWorkOrders: true,
|
||||
orderBy: "date"
|
||||
});
|
||||
const calendar = ical({
|
||||
name: "Work Order Milestone Calendar",
|
||||
url: urlRoot + "/workOrders"
|
||||
});
|
||||
if (request.query.workOrderId && workOrderMilestones.length > 0) {
|
||||
calendar.name("Work Order #" + workOrderMilestones[0].workOrderNumber);
|
||||
calendar.url(urlRoot + "/workOrders/" + workOrderMilestones[0].workOrderId);
|
||||
}
|
||||
calendar.prodId({
|
||||
company: "cityssm.github.io",
|
||||
product: configFunctions.getProperty("application.applicationName")
|
||||
});
|
||||
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 milestoneEndDate = new Date(milestoneDate.getTime());
|
||||
milestoneEndDate.setHours(milestoneEndDate.getHours() + 1);
|
||||
configFunctions.getProperty("reverseProxy.urlPrefix"));
|
||||
}
|
||||
function getWorkOrderUrl(request, milestone) {
|
||||
return getUrlRoot(request) + "/workOrders/" + milestone.workOrderId;
|
||||
}
|
||||
function buildEventSummary(milestone) {
|
||||
let summary = (milestone.workOrderMilestoneCompletionDate ? "✔ " : "") +
|
||||
(milestone.workOrderMilestoneTypeId
|
||||
? milestone.workOrderMilestoneType
|
||||
|
|
@ -67,20 +41,11 @@ export const handler = (request, response) => {
|
|||
summary += " plus " + (occupantCount - 1);
|
||||
}
|
||||
}
|
||||
const workOrderURL = urlRoot + "/workOrders/" + milestone.workOrderId;
|
||||
const eventData = {
|
||||
start: milestoneDate,
|
||||
created: new Date(milestone.recordCreate_timeMillis),
|
||||
stamp: new Date(milestone.recordCreate_timeMillis),
|
||||
lastModified: new Date(Math.max(milestone.recordUpdate_timeMillis, milestone.workOrderRecordUpdate_timeMillis)),
|
||||
allDay: !milestone.workOrderMilestoneTime,
|
||||
summary,
|
||||
url: workOrderURL
|
||||
};
|
||||
if (!eventData.allDay) {
|
||||
eventData.end = milestoneEndDate;
|
||||
}
|
||||
const calendarEvent = calendar.createEvent(eventData);
|
||||
return summary;
|
||||
}
|
||||
function buildEventDescriptionHTML(request, milestone) {
|
||||
const urlRoot = getUrlRoot(request);
|
||||
const workOrderUrl = getWorkOrderUrl(request, milestone);
|
||||
let descriptionHTML = "<h1>Milestone Description</h1>" +
|
||||
"<p>" +
|
||||
escapeHTML(milestone.workOrderMilestoneDescription) +
|
||||
|
|
@ -89,16 +54,14 @@ export const handler = (request, response) => {
|
|||
milestone.workOrderNumber +
|
||||
"</h2>" +
|
||||
("<p>" + escapeHTML(milestone.workOrderDescription) + "</p>") +
|
||||
("<p>" + workOrderURL + "</p>");
|
||||
("<p>" + workOrderUrl + "</p>");
|
||||
if (milestone.workOrderLotOccupancies.length > 0) {
|
||||
descriptionHTML +=
|
||||
"<h2>Related " +
|
||||
escapeHTML(configFunctions.getProperty("aliases.occupancies")) +
|
||||
"</h2>" +
|
||||
'<table border="1"><thead><tr>' +
|
||||
("<th>" +
|
||||
escapeHTML(configFunctions.getProperty("aliases.occupancy")) +
|
||||
" Type</th>") +
|
||||
("<th>" + escapeHTML(configFunctions.getProperty("aliases.occupancy")) + " Type</th>") +
|
||||
("<th>" + escapeHTML(configFunctions.getProperty("aliases.lot")) + "</th>") +
|
||||
"<th>Start Date</th>" +
|
||||
"<th>End Date</th>" +
|
||||
|
|
@ -121,13 +84,15 @@ export const handler = (request, response) => {
|
|||
"</td>") +
|
||||
("<td>" + occupancy.occupancyStartDateString + "</td>") +
|
||||
"<td>" +
|
||||
(occupancy.occupancyEndDate
|
||||
? occupancy.occupancyEndDateString
|
||||
: "(No End Date)") +
|
||||
(occupancy.occupancyEndDate ? occupancy.occupancyEndDateString : "(No End Date)") +
|
||||
"</td>" +
|
||||
"<td>";
|
||||
for (const occupant of occupancy.lotOccupancyOccupants) {
|
||||
descriptionHTML += escapeHTML(occupant.lotOccupantType) + ": " + escapeHTML(occupant.occupantName) + "<br />";
|
||||
descriptionHTML +=
|
||||
escapeHTML(occupant.lotOccupantType) +
|
||||
": " +
|
||||
escapeHTML(occupant.occupantName) +
|
||||
"<br />";
|
||||
}
|
||||
descriptionHTML += "</td>" + "</tr>";
|
||||
}
|
||||
|
|
@ -141,10 +106,7 @@ export const handler = (request, response) => {
|
|||
'<table border="1"><thead><tr>' +
|
||||
("<th>" + escapeHTML(configFunctions.getProperty("aliases.lot")) + " Type</th>") +
|
||||
("<th>" + escapeHTML(configFunctions.getProperty("aliases.map")) + "</th>") +
|
||||
("<th>" +
|
||||
escapeHTML(configFunctions.getProperty("aliases.lot")) +
|
||||
" Type" +
|
||||
"</th>") +
|
||||
("<th>" + escapeHTML(configFunctions.getProperty("aliases.lot")) + " Type" + "</th>") +
|
||||
"<th>Status</th>" +
|
||||
"</tr></thead>" +
|
||||
"<tbody>";
|
||||
|
|
@ -176,17 +138,66 @@ export const handler = (request, response) => {
|
|||
"<p>" +
|
||||
escapeHTML(printConfig.title) +
|
||||
"<br />" +
|
||||
(urlRoot +
|
||||
"/print/" +
|
||||
printName +
|
||||
"/?workOrderId=" +
|
||||
milestone.workOrderId) +
|
||||
(urlRoot + "/print/" + printName + "/?workOrderId=" + milestone.workOrderId) +
|
||||
"</p>";
|
||||
}
|
||||
}
|
||||
}
|
||||
return descriptionHTML;
|
||||
}
|
||||
export const handler = (request, response) => {
|
||||
const urlRoot = getUrlRoot(request);
|
||||
const workOrderMilestoneFilters = {
|
||||
workOrderTypeIds: request.query.workOrderTypeIds,
|
||||
workOrderMilestoneTypeIds: request.query.workOrderMilestoneTypeIds
|
||||
};
|
||||
if (request.query.workOrderId) {
|
||||
workOrderMilestoneFilters.workOrderId = request.query.workOrderId;
|
||||
}
|
||||
else {
|
||||
workOrderMilestoneFilters.workOrderMilestoneDateFilter = "recent";
|
||||
}
|
||||
const workOrderMilestones = getWorkOrderMilestones(workOrderMilestoneFilters, {
|
||||
includeWorkOrders: true,
|
||||
orderBy: "date"
|
||||
});
|
||||
const calendar = ical({
|
||||
name: "Work Order Milestone Calendar",
|
||||
url: urlRoot + "/workOrders"
|
||||
});
|
||||
if (request.query.workOrderId && workOrderMilestones.length > 0) {
|
||||
calendar.name("Work Order #" + workOrderMilestones[0].workOrderNumber);
|
||||
calendar.url(urlRoot + "/workOrders/" + workOrderMilestones[0].workOrderId);
|
||||
}
|
||||
calendar.prodId({
|
||||
company: calendarCompany,
|
||||
product: calendarProduct
|
||||
});
|
||||
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 milestoneEndDate = new Date(milestoneDate.getTime());
|
||||
milestoneEndDate.setHours(milestoneEndDate.getHours() + 1);
|
||||
const summary = buildEventSummary(milestone);
|
||||
const workOrderUrl = getWorkOrderUrl(request, milestone);
|
||||
const eventData = {
|
||||
start: milestoneDate,
|
||||
created: new Date(milestone.recordCreate_timeMillis),
|
||||
stamp: new Date(milestone.recordCreate_timeMillis),
|
||||
lastModified: new Date(Math.max(milestone.recordUpdate_timeMillis, milestone.workOrderRecordUpdate_timeMillis)),
|
||||
allDay: !milestone.workOrderMilestoneTime,
|
||||
summary,
|
||||
url: workOrderUrl
|
||||
};
|
||||
if (!eventData.allDay) {
|
||||
eventData.end = milestoneEndDate;
|
||||
}
|
||||
const calendarEvent = calendar.createEvent(eventData);
|
||||
const descriptionHTML = buildEventDescriptionHTML(request, milestone);
|
||||
calendarEvent.description({
|
||||
plain: workOrderURL,
|
||||
plain: workOrderUrl,
|
||||
html: descriptionHTML
|
||||
});
|
||||
if (milestone.workOrderMilestoneCompletionDate) {
|
||||
|
|
|
|||
|
|
@ -7,89 +7,38 @@ import {
|
|||
WorkOrderMilestoneFilters
|
||||
} from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js";
|
||||
|
||||
import type { RequestHandler } from "express";
|
||||
import type { RequestHandler, Request } from "express";
|
||||
|
||||
import * as configFunctions from "../../helpers/functions.config.js";
|
||||
import { getPrintConfig } from "../../helpers/functions.print.js";
|
||||
|
||||
import type * as recordTypes from "../../types/recordTypes";
|
||||
|
||||
const calendarCompany = "cityssm.github.io";
|
||||
const calendarProduct = configFunctions.getProperty("application.applicationName");
|
||||
|
||||
const timeStringSplitRegex = /[ :-]/;
|
||||
|
||||
function escapeHTML(stringToEscape: string) {
|
||||
return stringToEscape.replace(/[^\d A-Za-z]/g, (c) => "&#" + c.codePointAt(0) + ";");
|
||||
}
|
||||
|
||||
export const handler: RequestHandler = (request, response) => {
|
||||
const urlRoot =
|
||||
function getUrlRoot(request: Request): string {
|
||||
return (
|
||||
"http://" +
|
||||
request.hostname +
|
||||
(configFunctions.getProperty("application.httpPort") === 80
|
||||
? ""
|
||||
: ":" + configFunctions.getProperty("application.httpPort")) +
|
||||
configFunctions.getProperty("reverseProxy.urlPrefix");
|
||||
|
||||
/*
|
||||
* Get work order milestones
|
||||
*/
|
||||
|
||||
const workOrderMilestoneFilters: WorkOrderMilestoneFilters = {
|
||||
workOrderTypeIds: request.query.workOrderTypeIds as string,
|
||||
workOrderMilestoneTypeIds: request.query.workOrderMilestoneTypeIds as string
|
||||
};
|
||||
|
||||
if (request.query.workOrderId) {
|
||||
workOrderMilestoneFilters.workOrderId = request.query.workOrderId as string;
|
||||
} else {
|
||||
workOrderMilestoneFilters.workOrderMilestoneDateFilter = "recent";
|
||||
}
|
||||
|
||||
const workOrderMilestones = getWorkOrderMilestones(workOrderMilestoneFilters, {
|
||||
includeWorkOrders: true,
|
||||
orderBy: "date"
|
||||
});
|
||||
|
||||
/*
|
||||
* Create calendar object
|
||||
*/
|
||||
|
||||
const calendar = ical({
|
||||
name: "Work Order Milestone Calendar",
|
||||
url: urlRoot + "/workOrders"
|
||||
});
|
||||
|
||||
if (request.query.workOrderId && workOrderMilestones.length > 0) {
|
||||
calendar.name("Work Order #" + workOrderMilestones[0].workOrderNumber);
|
||||
calendar.url(urlRoot + "/workOrders/" + workOrderMilestones[0].workOrderId);
|
||||
}
|
||||
|
||||
calendar.prodId({
|
||||
company: "cityssm.github.io",
|
||||
product: configFunctions.getProperty("application.applicationName")
|
||||
});
|
||||
|
||||
/*
|
||||
* Loop through milestones
|
||||
*/
|
||||
|
||||
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)
|
||||
configFunctions.getProperty("reverseProxy.urlPrefix")
|
||||
);
|
||||
}
|
||||
|
||||
const milestoneEndDate = new Date(milestoneDate.getTime());
|
||||
milestoneEndDate.setHours(milestoneEndDate.getHours() + 1);
|
||||
|
||||
// Build summary (title in Outlook)
|
||||
function getWorkOrderUrl(request: Request, milestone: recordTypes.WorkOrderMilestone) {
|
||||
return getUrlRoot(request) + "/workOrders/" + milestone.workOrderId;
|
||||
}
|
||||
|
||||
function buildEventSummary(milestone: recordTypes.WorkOrderMilestone): string {
|
||||
let summary =
|
||||
(milestone.workOrderMilestoneCompletionDate ? "✔ " : "") +
|
||||
(milestone.workOrderMilestoneTypeId
|
||||
|
|
@ -119,34 +68,15 @@ export const handler: RequestHandler = (request, response) => {
|
|||
}
|
||||
}
|
||||
|
||||
// Build URL
|
||||
return summary;
|
||||
}
|
||||
|
||||
const workOrderURL = urlRoot + "/workOrders/" + milestone.workOrderId;
|
||||
|
||||
// Create event
|
||||
|
||||
const eventData: ICalEventData = {
|
||||
start: milestoneDate,
|
||||
created: new Date(milestone.recordCreate_timeMillis),
|
||||
stamp: new Date(milestone.recordCreate_timeMillis),
|
||||
lastModified: new Date(
|
||||
Math.max(
|
||||
milestone.recordUpdate_timeMillis,
|
||||
milestone.workOrderRecordUpdate_timeMillis
|
||||
)
|
||||
),
|
||||
allDay: !milestone.workOrderMilestoneTime,
|
||||
summary,
|
||||
url: workOrderURL
|
||||
};
|
||||
|
||||
if (!eventData.allDay) {
|
||||
eventData.end = milestoneEndDate;
|
||||
}
|
||||
|
||||
const calendarEvent = calendar.createEvent(eventData);
|
||||
|
||||
// Build description
|
||||
function buildEventDescriptionHTML(
|
||||
request: Request,
|
||||
milestone: recordTypes.WorkOrderMilestone
|
||||
): string {
|
||||
const urlRoot = getUrlRoot(request);
|
||||
const workOrderUrl = getWorkOrderUrl(request, milestone);
|
||||
|
||||
let descriptionHTML =
|
||||
"<h1>Milestone Description</h1>" +
|
||||
|
|
@ -157,7 +87,7 @@ export const handler: RequestHandler = (request, response) => {
|
|||
milestone.workOrderNumber +
|
||||
"</h2>" +
|
||||
("<p>" + escapeHTML(milestone.workOrderDescription) + "</p>") +
|
||||
("<p>" + workOrderURL + "</p>");
|
||||
("<p>" + workOrderUrl + "</p>");
|
||||
|
||||
if (milestone.workOrderLotOccupancies.length > 0) {
|
||||
descriptionHTML +=
|
||||
|
|
@ -165,9 +95,7 @@ export const handler: RequestHandler = (request, response) => {
|
|||
escapeHTML(configFunctions.getProperty("aliases.occupancies")) +
|
||||
"</h2>" +
|
||||
'<table border="1"><thead><tr>' +
|
||||
("<th>" +
|
||||
escapeHTML(configFunctions.getProperty("aliases.occupancy")) +
|
||||
" Type</th>") +
|
||||
("<th>" + escapeHTML(configFunctions.getProperty("aliases.occupancy")) + " Type</th>") +
|
||||
("<th>" + escapeHTML(configFunctions.getProperty("aliases.lot")) + "</th>") +
|
||||
"<th>Start Date</th>" +
|
||||
"<th>End Date</th>" +
|
||||
|
|
@ -191,14 +119,16 @@ export const handler: RequestHandler = (request, response) => {
|
|||
"</td>") +
|
||||
("<td>" + occupancy.occupancyStartDateString + "</td>") +
|
||||
"<td>" +
|
||||
(occupancy.occupancyEndDate
|
||||
? occupancy.occupancyEndDateString
|
||||
: "(No End Date)") +
|
||||
(occupancy.occupancyEndDate ? occupancy.occupancyEndDateString : "(No End Date)") +
|
||||
"</td>" +
|
||||
"<td>";
|
||||
|
||||
for (const occupant of occupancy.lotOccupancyOccupants) {
|
||||
descriptionHTML += escapeHTML(occupant.lotOccupantType) + ": " + escapeHTML(occupant.occupantName) + "<br />";
|
||||
descriptionHTML +=
|
||||
escapeHTML(occupant.lotOccupantType) +
|
||||
": " +
|
||||
escapeHTML(occupant.occupantName) +
|
||||
"<br />";
|
||||
}
|
||||
|
||||
descriptionHTML += "</td>" + "</tr>";
|
||||
|
|
@ -215,10 +145,7 @@ export const handler: RequestHandler = (request, response) => {
|
|||
'<table border="1"><thead><tr>' +
|
||||
("<th>" + escapeHTML(configFunctions.getProperty("aliases.lot")) + " Type</th>") +
|
||||
("<th>" + escapeHTML(configFunctions.getProperty("aliases.map")) + "</th>") +
|
||||
("<th>" +
|
||||
escapeHTML(configFunctions.getProperty("aliases.lot")) +
|
||||
" Type" +
|
||||
"</th>") +
|
||||
("<th>" + escapeHTML(configFunctions.getProperty("aliases.lot")) + " Type" + "</th>") +
|
||||
"<th>Status</th>" +
|
||||
"</tr></thead>" +
|
||||
"<tbody>";
|
||||
|
|
@ -256,18 +183,116 @@ export const handler: RequestHandler = (request, response) => {
|
|||
"<p>" +
|
||||
escapeHTML(printConfig.title) +
|
||||
"<br />" +
|
||||
(urlRoot +
|
||||
"/print/" +
|
||||
printName +
|
||||
"/?workOrderId=" +
|
||||
milestone.workOrderId) +
|
||||
(urlRoot + "/print/" + printName + "/?workOrderId=" + milestone.workOrderId) +
|
||||
"</p>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return descriptionHTML;
|
||||
}
|
||||
|
||||
export const handler: RequestHandler = (request, response) => {
|
||||
const urlRoot = getUrlRoot(request);
|
||||
|
||||
/*
|
||||
* Get work order milestones
|
||||
*/
|
||||
|
||||
const workOrderMilestoneFilters: WorkOrderMilestoneFilters = {
|
||||
workOrderTypeIds: request.query.workOrderTypeIds as string,
|
||||
workOrderMilestoneTypeIds: request.query.workOrderMilestoneTypeIds as string
|
||||
};
|
||||
|
||||
if (request.query.workOrderId) {
|
||||
workOrderMilestoneFilters.workOrderId = request.query.workOrderId as string;
|
||||
} else {
|
||||
workOrderMilestoneFilters.workOrderMilestoneDateFilter = "recent";
|
||||
}
|
||||
|
||||
const workOrderMilestones = getWorkOrderMilestones(workOrderMilestoneFilters, {
|
||||
includeWorkOrders: true,
|
||||
orderBy: "date"
|
||||
});
|
||||
|
||||
/*
|
||||
* Create calendar object
|
||||
*/
|
||||
|
||||
const calendar = ical({
|
||||
name: "Work Order Milestone Calendar",
|
||||
url: urlRoot + "/workOrders"
|
||||
});
|
||||
|
||||
if (request.query.workOrderId && workOrderMilestones.length > 0) {
|
||||
calendar.name("Work Order #" + workOrderMilestones[0].workOrderNumber);
|
||||
calendar.url(urlRoot + "/workOrders/" + workOrderMilestones[0].workOrderId);
|
||||
}
|
||||
|
||||
calendar.prodId({
|
||||
company: calendarCompany,
|
||||
product: calendarProduct
|
||||
});
|
||||
|
||||
/*
|
||||
* Loop through milestones
|
||||
*/
|
||||
|
||||
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 milestoneEndDate = new Date(milestoneDate.getTime());
|
||||
milestoneEndDate.setHours(milestoneEndDate.getHours() + 1);
|
||||
|
||||
// Build summary (title in Outlook)
|
||||
|
||||
const summary = buildEventSummary(milestone);
|
||||
|
||||
// Build URL
|
||||
|
||||
const workOrderUrl = getWorkOrderUrl(request, milestone);
|
||||
|
||||
// Create event
|
||||
|
||||
const eventData: ICalEventData = {
|
||||
start: milestoneDate,
|
||||
created: new Date(milestone.recordCreate_timeMillis),
|
||||
stamp: new Date(milestone.recordCreate_timeMillis),
|
||||
lastModified: new Date(
|
||||
Math.max(
|
||||
milestone.recordUpdate_timeMillis,
|
||||
milestone.workOrderRecordUpdate_timeMillis
|
||||
)
|
||||
),
|
||||
allDay: !milestone.workOrderMilestoneTime,
|
||||
summary,
|
||||
url: workOrderUrl
|
||||
};
|
||||
|
||||
if (!eventData.allDay) {
|
||||
eventData.end = milestoneEndDate;
|
||||
}
|
||||
|
||||
const calendarEvent = calendar.createEvent(eventData);
|
||||
|
||||
// Build description
|
||||
|
||||
const descriptionHTML = buildEventDescriptionHTML(request, milestone);
|
||||
|
||||
calendarEvent.description({
|
||||
plain: workOrderURL,
|
||||
plain: workOrderUrl,
|
||||
html: descriptionHTML
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue