diff --git a/handlers/api-get/milestoneICS.js b/handlers/api-get/milestoneICS.js index 40f57764..c58ba596 100644 --- a/handlers/api-get/milestoneICS.js +++ b/handlers/api-get/milestoneICS.js @@ -12,16 +12,27 @@ export const handler = (request, response) => { ? "" : ":" + configFunctions.getProperty("application.httpPort")) + configFunctions.getProperty("reverseProxy.urlPrefix"); - const workOrderMilestones = getWorkOrderMilestones({ - workOrderMilestoneDateFilter: "recent", + const workOrderMilestoneFilters = { workOrderTypeIds: request.query.workOrderTypeIds, workOrderMilestoneTypeIds: request.query .workOrderMilestoneTypeIds - }, { includeWorkOrders: true, orderBy: "date" }); + }; + 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].workOrder.workOrderNumber); + calendar.url(urlRoot + "/workOrders/" + workOrderMilestones[0].workOrderId); + } calendar.prodId({ company: "cityssm.github.io", product: configFunctions.getProperty("application.applicationName") diff --git a/handlers/api-get/milestoneICS.ts b/handlers/api-get/milestoneICS.ts index bfc2e4ad..24f7f7fb 100644 --- a/handlers/api-get/milestoneICS.ts +++ b/handlers/api-get/milestoneICS.ts @@ -2,10 +2,12 @@ import ical, { ICalEventData, ICalEventStatus } from "ical-generator"; -import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js"; +import { + getWorkOrderMilestones, + WorkOrderMilestoneFilters +} from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js"; import type { RequestHandler } from "express"; -import { dateIntegerToString } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import * as configFunctions from "../../helpers/functions.config.js"; @@ -27,13 +29,21 @@ export const handler: RequestHandler = (request, response) => { : ":" + configFunctions.getProperty("application.httpPort")) + configFunctions.getProperty("reverseProxy.urlPrefix"); + 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( - { - workOrderMilestoneDateFilter: "recent", - workOrderTypeIds: request.query.workOrderTypeIds as string, - workOrderMilestoneTypeIds: request.query - .workOrderMilestoneTypeIds as string - }, + workOrderMilestoneFilters, { includeWorkOrders: true, orderBy: "date" } ); @@ -42,6 +52,11 @@ export const handler: RequestHandler = (request, response) => { url: urlRoot + "/workOrders" }); + if (request.query.workOrderId && workOrderMilestones.length > 0) { + calendar.name("Work Order #" + workOrderMilestones[0].workOrder.workOrderNumber); + calendar.url(urlRoot + "/workOrders/" + workOrderMilestones[0].workOrderId); + } + calendar.prodId({ company: "cityssm.github.io", product: configFunctions.getProperty("application.applicationName") diff --git a/helpers/lotOccupancyDB/getWorkOrderMilestones.d.ts b/helpers/lotOccupancyDB/getWorkOrderMilestones.d.ts index 4581b0aa..ae85bfea 100644 --- a/helpers/lotOccupancyDB/getWorkOrderMilestones.d.ts +++ b/helpers/lotOccupancyDB/getWorkOrderMilestones.d.ts @@ -1,6 +1,6 @@ import sqlite from "better-sqlite3"; import type * as recordTypes from "../../types/recordTypes"; -interface WorkOrderMilestoneFilters { +export interface WorkOrderMilestoneFilters { workOrderId?: number | string; workOrderMilestoneDateFilter?: "upcomingMissed" | "recent" | "date"; workOrderMilestoneDateString?: string; diff --git a/helpers/lotOccupancyDB/getWorkOrderMilestones.ts b/helpers/lotOccupancyDB/getWorkOrderMilestones.ts index 6fd7d6b1..a1d6fb28 100644 --- a/helpers/lotOccupancyDB/getWorkOrderMilestones.ts +++ b/helpers/lotOccupancyDB/getWorkOrderMilestones.ts @@ -15,7 +15,7 @@ import * as configFunctions from "../functions.config.js"; import type * as recordTypes from "../../types/recordTypes"; -interface WorkOrderMilestoneFilters { +export interface WorkOrderMilestoneFilters { workOrderId?: number | string; workOrderMilestoneDateFilter?: "upcomingMissed" | "recent" | "date"; workOrderMilestoneDateString?: string; diff --git a/views/workOrder-outlook.ejs b/views/workOrder-outlook.ejs index 7d4170f2..8147e1f4 100644 --- a/views/workOrder-outlook.ejs +++ b/views/workOrder-outlook.ejs @@ -27,8 +27,14 @@