/* eslint-disable unicorn/prefer-module */
import type * as recordTypes from "../types/recordTypes";
import type * as globalTypes from "../types/globalTypes";
import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types";
declare const cityssm: cityssmGlobal;
(() => {
const los = exports.los as globalTypes.LOS;
const urlPrefix = document.querySelector("main").dataset.urlPrefix;
const workOrderSearchFiltersFormElement = document.querySelector(
"#form--searchFilters"
) as HTMLFormElement;
const workOrderMilestoneDateFilterElement = workOrderSearchFiltersFormElement.querySelector(
"#searchFilter--workOrderMilestoneDateFilter"
) as HTMLSelectElement;
const workOrderMilestoneDateStringElement = workOrderSearchFiltersFormElement.querySelector(
"#searchFilter--workOrderMilestoneDateString"
) as HTMLInputElement;
const milestoneCalendarContainerElement = document.querySelector(
"#container--milestoneCalendar"
) as HTMLElement;
const renderMilestones = (workOrderMilestones: recordTypes.WorkOrderMilestone[]) => {
if (workOrderMilestones.length === 0) {
milestoneCalendarContainerElement.innerHTML =
'
' +
'
There are no milestones that meet the search criteria.
' +
"
";
return;
}
milestoneCalendarContainerElement.innerHTML = "";
const currentDate = cityssm.dateToString(new Date());
let currentPanelElement: HTMLElement;
let currentPanelDateString = "";
for (const milestone of workOrderMilestones) {
if (currentPanelDateString !== milestone.workOrderMilestoneDateString) {
if (currentPanelElement) {
milestoneCalendarContainerElement.append(currentPanelElement);
}
currentPanelElement = document.createElement("div");
currentPanelElement.className = "panel";
currentPanelElement.innerHTML =
'' + milestone.workOrderMilestoneDateString + "
";
currentPanelDateString = milestone.workOrderMilestoneDateString;
}
const panelBlockElement = document.createElement("div");
panelBlockElement.className = "panel-block is-block";
if (
!milestone.workOrderMilestoneCompletionDate &&
milestone.workOrderMilestoneDateString < currentDate
) {
panelBlockElement.classList.add("has-background-warning-light");
}
let lotOccupancyHTML = "";
for (const lot of milestone.workOrderLots) {
lotOccupancyHTML +=
'' +
' ' +
cityssm.escapeHTML(lot.lotName) +
"" +
"
";
}
for (const lotOccupancy of milestone.workOrderLotOccupancies) {
for (const occupant of lotOccupancy.lotOccupancyOccupants) {
lotOccupancyHTML +=
'' +
' ' +
cityssm.escapeHTML(occupant.occupantName) +
"" +
"
";
}
}
panelBlockElement.innerHTML =
'' +
('
' +
'' +
(milestone.workOrderMilestoneCompletionDate
? ''
: '') +
"" +
"
") +
('
' +
(milestone.workOrderMilestoneTime === 0
? ""
: milestone.workOrderMilestoneTimeString + "
") +
(milestone.workOrderMilestoneTypeId
? "" +
cityssm.escapeHTML(milestone.workOrderMilestoneType) +
"
"
: "") +
'' +
cityssm.escapeHTML(milestone.workOrderMilestoneDescription) +
"" +
"
") +
('
") +
('
' + lotOccupancyHTML + "
") +
"
";
currentPanelElement.append(panelBlockElement);
}
milestoneCalendarContainerElement.append(currentPanelElement);
};
const getMilestones = (event?: Event) => {
if (event) {
event.preventDefault();
}
milestoneCalendarContainerElement.innerHTML =
'' +
'
' +
"Loading Milestones..." +
"
";
cityssm.postJSON(
urlPrefix + "/workOrders/doGetWorkOrderMilestones",
workOrderSearchFiltersFormElement,
(responseJSON: { workOrderMilestones: recordTypes.WorkOrderMilestone[] }) => {
renderMilestones(responseJSON.workOrderMilestones);
}
);
};
workOrderMilestoneDateFilterElement.addEventListener("change", () => {
workOrderMilestoneDateStringElement.closest("fieldset").disabled =
workOrderMilestoneDateFilterElement.value !== "date";
getMilestones();
});
los.initializeDatePickers(workOrderSearchFiltersFormElement);
workOrderMilestoneDateStringElement.addEventListener("change", getMilestones);
workOrderSearchFiltersFormElement.addEventListener("submit", getMilestones);
getMilestones();
})();