support work order calendar
parent
0143823358
commit
b4058c5257
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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 workOrderMilestones = getWorkOrderMilestones(
|
||||
{
|
||||
workOrderMilestoneDateFilter: "recent",
|
||||
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" }
|
||||
);
|
||||
|
||||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -27,8 +27,14 @@
|
|||
</h1>
|
||||
|
||||
<div class="panel" id="panel--icsFilters">
|
||||
<h2 class="panel-heading">Outlook Calendar (ICS) Integration</h2>
|
||||
<h2 class="panel-heading">Work Order Milestone Calendar (ICS)</h2>
|
||||
<div class="panel-block is-block">
|
||||
<div class="message is-info">
|
||||
<p class="message-body">
|
||||
Recent milestones can be exported in the iCalendar format.
|
||||
They can then imported into Outlook as Internet calendars that can be regularly refreshed.
|
||||
</p>
|
||||
</div>
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<label class="label" for="icsFilters--workOrderTypeIds">Work Order Types</label>
|
||||
|
|
|
|||
|
|
@ -214,7 +214,34 @@
|
|||
<% if (workOrder.workOrderMilestones.length > 0) { %>
|
||||
<div class="column is-4">
|
||||
<div class="panel">
|
||||
<h2 class="panel-heading">Milestones</h2>
|
||||
<div class="panel-heading">
|
||||
<div class="level">
|
||||
<div class="level-left">
|
||||
<div class="level-item">
|
||||
<h2 class="title is-5 has-text-weight-bold">Milestones</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-right">
|
||||
<div class="level-item">
|
||||
<div class="dropdown is-right has-text-weight-normal">
|
||||
<div class="dropdown-trigger">
|
||||
<button class="button" type="button" aria-label="Options">
|
||||
<i class="fas fa-ellipsis-v" aria-hidden="true"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="dropdown-menu">
|
||||
<div class="dropdown-content">
|
||||
<a class="dropdown-item" href="<%= urlPrefix %>/api/<%= user.userProperties.apiKey %>/milestoneICS/?workOrderId=<%= workOrder.workOrderId %>">
|
||||
<span class="icon is-small"><i class="fas fa-calendar" aria-hidden="true"></i></span>
|
||||
<span>Download iCalendar</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% for (const milestone of workOrder.workOrderMilestones) { %>
|
||||
<div class="panel-block is-block">
|
||||
<div class="columns">
|
||||
|
|
|
|||
Loading…
Reference in New Issue