/* eslint-disable @typescript-eslint/no-non-null-assertion, 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 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; function 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 | undefined; 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!) + "" + "
") + ('
' + '' + ' ' + cityssm.escapeHTML(milestone.workOrderNumber || "") + "
" + '' + cityssm.escapeHTML(milestone.workOrderDescription || "") + "" + "
") + ('
' + lotOccupancyHTML + "
") + "
"; (currentPanelElement as HTMLElement).append(panelBlockElement); } milestoneCalendarContainerElement.append(currentPanelElement!); } function getMilestones(event?: Event) { if (event) { event.preventDefault(); } milestoneCalendarContainerElement.innerHTML = los.getLoadingParagraphHTML("Loading Milestones..."); cityssm.postJSON( los.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(); })();