diff --git a/public-typescript/workOrderEdit.js b/public-typescript/workOrderEdit.js index 15c47630..9691157a 100644 --- a/public-typescript/workOrderEdit.js +++ b/public-typescript/workOrderEdit.js @@ -41,25 +41,41 @@ Object.defineProperty(exports, "__esModule", { value: true }); /* * Work Order Options */ + function doClose() { + cityssm.postJSON(los.urlPrefix + "/workOrders/doCloseWorkOrder", { + workOrderId + }, (responseJSON) => { + if (responseJSON.success) { + window.location.href = + los.urlPrefix + "/workOrders/" + encodeURIComponent(workOrderId); + } + else { + bulmaJS.alert({ + title: "Error Closing Work Order", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); + } + function doDelete() { + cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrder", { + workOrderId + }, (responseJSON) => { + if (responseJSON.success) { + window.location.href = los.urlPrefix + "/workOrders"; + } + else { + bulmaJS.alert({ + title: "Error Deleting Work Order", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); + } let workOrderMilestones; if (!isCreate) { - const doClose = () => { - cityssm.postJSON(los.urlPrefix + "/workOrders/doCloseWorkOrder", { - workOrderId - }, (responseJSON) => { - if (responseJSON.success) { - window.location.href = - los.urlPrefix + "/workOrders/" + encodeURIComponent(workOrderId); - } - else { - bulmaJS.alert({ - title: "Error Closing Work Order", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - }); - }; document.querySelector("#button--closeWorkOrder").addEventListener("click", () => { const hasOpenMilestones = workOrderMilestones.some((milestone) => { return !milestone.workOrderMilestoneCompletionDate; @@ -72,17 +88,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); contextualColorName: "warning" }); /* - // Disable closing work orders with open milestones - bulmaJS.confirm({ - title: "Close Work Order with Outstanding Milestones", - message: - "Are you sure you want to close this work order with outstanding milestones?", - contextualColorName: "danger", - okButton: { - text: "Yes, Close Work Order", - callbackFunction: doClose - } - }); + // Disable closing work orders with open milestones + bulmaJS.confirm({ + title: "Close Work Order with Outstanding Milestones", + message: + "Are you sure you want to close this work order with outstanding milestones?", + contextualColorName: "danger", + okButton: { + text: "Yes, Close Work Order", + callbackFunction: doClose + } + }); */ } else { @@ -97,23 +113,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); } }); - const doDelete = () => { - cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrder", { - workOrderId - }, (responseJSON) => { - if (responseJSON.success) { - window.location.href = los.urlPrefix + "/workOrders"; - } - else { - bulmaJS.alert({ - title: "Error Deleting Work Order", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - }); - }; - document.querySelector("#button--deleteWorkOrder").addEventListener("click", (clickEvent) => { + document + .querySelector("#button--deleteWorkOrder") + .addEventListener("click", (clickEvent) => { clickEvent.preventDefault(); bulmaJS.confirm({ title: "Delete Work Order", @@ -696,7 +698,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); let editFormElement; let editCloseModalFunction; - const editComment = (submitEvent) => { + function editComment(submitEvent) { submitEvent.preventDefault(); cityssm.postJSON(los.urlPrefix + "/workOrders/doUpdateWorkOrderComment", editFormElement, (responseJSON) => { if (responseJSON.success) { @@ -712,15 +714,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); } }); - }; + } cityssm.openHtmlModal("workOrder-editComment", { - onshow: (modalElement) => { + onshow(modalElement) { modalElement.querySelector("#workOrderCommentEdit--workOrderId").value = workOrderId; modalElement.querySelector("#workOrderCommentEdit--workOrderCommentId").value = workOrderCommentId.toString(); modalElement.querySelector("#workOrderCommentEdit--workOrderComment").value = workOrderComment.workOrderComment; const workOrderCommentDateStringElement = modalElement.querySelector("#workOrderCommentEdit--workOrderCommentDateString"); - workOrderCommentDateStringElement.value = - workOrderComment.workOrderCommentDateString; + workOrderCommentDateStringElement.value = workOrderComment.workOrderCommentDateString; const currentDateString = cityssm.dateToString(new Date()); workOrderCommentDateStringElement.max = workOrderComment.workOrderCommentDateString <= currentDateString @@ -728,7 +729,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); : workOrderComment.workOrderCommentDateString; modalElement.querySelector("#workOrderCommentEdit--workOrderCommentTimeString").value = workOrderComment.workOrderCommentTimeString; }, - onshown: (modalElement, closeModalFunction) => { + onshown(modalElement, closeModalFunction) { bulmaJS.toggleHtmlClipped(); los.initializeDatePickers(modalElement); // los.initializeTimePickers(modalElement); @@ -737,14 +738,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); editFormElement.addEventListener("submit", editComment); editCloseModalFunction = closeModalFunction; }, - onremoved: () => { + onremoved() { bulmaJS.toggleHtmlClipped(); } }); }; - const deleteWorkOrderComment = (clickEvent) => { + function deleteWorkOrderComment(clickEvent) { const workOrderCommentId = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset.workOrderCommentId, 10); - const doDelete = () => { + function doDelete() { cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrderComment", { workOrderId, workOrderCommentId @@ -761,7 +762,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); } }); - }; + } bulmaJS.confirm({ title: "Remove Comment?", message: "Are you sure you want to remove this comment?", @@ -771,8 +772,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); }, contextualColorName: "warning" }); - }; - const renderWorkOrderComments = () => { + } + function renderWorkOrderComments() { const containerElement = document.querySelector("#container--workOrderComments"); if (workOrderComments.length === 0) { containerElement.innerHTML = @@ -819,16 +820,20 @@ Object.defineProperty(exports, "__esModule", { value: true }); "") + "" + ""); - tableRowElement.querySelector(".button--edit").addEventListener("click", openEditWorkOrderComment); - tableRowElement.querySelector(".button--delete").addEventListener("click", deleteWorkOrderComment); + tableRowElement + .querySelector(".button--edit") + .addEventListener("click", openEditWorkOrderComment); + tableRowElement + .querySelector(".button--delete") + .addEventListener("click", deleteWorkOrderComment); tableElement.querySelector("tbody").append(tableRowElement); } containerElement.innerHTML = ""; containerElement.append(tableElement); - }; - const openAddCommentModal = () => { + } + function openAddCommentModal() { let addCommentCloseModalFunction; - const doAddComment = (formEvent) => { + function doAddComment(formEvent) { formEvent.preventDefault(); cityssm.postJSON(los.urlPrefix + "/workOrders/doAddWorkOrderComment", formEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { @@ -837,7 +842,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); addCommentCloseModalFunction(); } }); - }; + } cityssm.openHtmlModal("workOrder-addComment", { onshow(modalElement) { los.populateAliases(modalElement); @@ -854,237 +859,238 @@ Object.defineProperty(exports, "__esModule", { value: true }); document.querySelector("#workOrderComments--add").focus(); } }); - }; + } if (!isCreate) { - document.querySelector("#workOrderComments--add").addEventListener("click", openAddCommentModal); + document + .querySelector("#workOrderComments--add") + .addEventListener("click", openAddCommentModal); renderWorkOrderComments(); } /* * Milestones */ + function processMilestoneResponse(responseJSON) { + if (responseJSON.success) { + workOrderMilestones = responseJSON.workOrderMilestones; + renderMilestones(); + } + else { + bulmaJS.alert({ + title: "Error Reopening Milestone", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + function completeMilestone(clickEvent) { + clickEvent.preventDefault(); + const currentDateString = cityssm.dateToString(new Date()); + const workOrderMilestoneId = Number.parseInt(clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId, 10); + const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { + return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; + }); + const doComplete = () => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doCompleteWorkOrderMilestone", { + workOrderId, + workOrderMilestoneId + }, processMilestoneResponse); + }; + bulmaJS.confirm({ + title: "Complete Milestone", + message: "Are you sure you want to complete this milestone?" + + (workOrderMilestone.workOrderMilestoneDateString > currentDateString + ? "
Note that this milestone is expected to be completed in the future." + : ""), + messageIsHtml: true, + contextualColorName: "warning", + okButton: { + text: "Yes, Complete Milestone", + callbackFunction: doComplete + } + }); + } + function reopenMilestone(clickEvent) { + clickEvent.preventDefault(); + const workOrderMilestoneId = clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId; + const doReopen = () => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doReopenWorkOrderMilestone", { + workOrderId, + workOrderMilestoneId + }, processMilestoneResponse); + }; + bulmaJS.confirm({ + title: "Reopen Milestone", + message: "Are you sure you want to remove the completion status from this milestone, and reopen it?", + contextualColorName: "warning", + okButton: { + text: "Yes, Reopen Milestone", + callbackFunction: doReopen + } + }); + } + function deleteMilestone(clickEvent) { + clickEvent.preventDefault(); + const workOrderMilestoneId = clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId; + const doDelete = () => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrderMilestone", { + workOrderMilestoneId, + workOrderId + }, processMilestoneResponse); + }; + bulmaJS.confirm({ + title: "Delete Milestone", + message: "Are you sure you want to delete this milestone?", + contextualColorName: "warning", + okButton: { + text: "Yes, Delete Milestone", + callbackFunction: doDelete + } + }); + } + function editMilestone(clickEvent) { + clickEvent.preventDefault(); + const workOrderMilestoneId = Number.parseInt(clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId, 10); + const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { + return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; + }); + let editCloseModalFunction; + const doEdit = (submitEvent) => { + submitEvent.preventDefault(); + cityssm.postJSON(los.urlPrefix + "/workOrders/doUpdateWorkOrderMilestone", submitEvent.currentTarget, (responseJSON) => { + processMilestoneResponse(responseJSON); + if (responseJSON.success) { + editCloseModalFunction(); + } + }); + }; + cityssm.openHtmlModal("workOrder-editMilestone", { + onshow: (modalElement) => { + modalElement.querySelector("#milestoneEdit--workOrderId").value = workOrderId; + modalElement.querySelector("#milestoneEdit--workOrderMilestoneId").value = workOrderMilestone.workOrderMilestoneId.toString(); + const milestoneTypeElement = modalElement.querySelector("#milestoneEdit--workOrderMilestoneTypeId"); + let milestoneTypeFound = false; + for (const milestoneType of exports.workOrderMilestoneTypes) { + const optionElement = document.createElement("option"); + optionElement.value = milestoneType.workOrderMilestoneTypeId.toString(); + optionElement.textContent = milestoneType.workOrderMilestoneType; + if (milestoneType.workOrderMilestoneTypeId === + workOrderMilestone.workOrderMilestoneTypeId) { + optionElement.selected = true; + milestoneTypeFound = true; + } + milestoneTypeElement.append(optionElement); + } + if (!milestoneTypeFound && workOrderMilestone.workOrderMilestoneTypeId) { + const optionElement = document.createElement("option"); + optionElement.value = workOrderMilestone.workOrderMilestoneTypeId.toString(); + optionElement.textContent = workOrderMilestone.workOrderMilestoneType; + optionElement.selected = true; + milestoneTypeElement.append(optionElement); + } + modalElement.querySelector("#milestoneEdit--workOrderMilestoneDateString").value = workOrderMilestone.workOrderMilestoneDateString; + if (workOrderMilestone.workOrderMilestoneTime) { + modalElement.querySelector("#milestoneEdit--workOrderMilestoneTimeString").value = workOrderMilestone.workOrderMilestoneTimeString; + } + modalElement.querySelector("#milestoneEdit--workOrderMilestoneDescription").value = workOrderMilestone.workOrderMilestoneDescription; + }, + onshown: (modalElement, closeModalFunction) => { + editCloseModalFunction = closeModalFunction; + bulmaJS.toggleHtmlClipped(); + los.initializeDatePickers(modalElement); + // los.initializeTimePickers(modalElement); + modalElement.querySelector("form").addEventListener("submit", doEdit); + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); + } + }); + } + function renderMilestones() { + // Clear milestones panel + const milestonesPanelElement = document.querySelector("#panel--milestones"); + const panelBlockElementsToDelete = milestonesPanelElement.querySelectorAll(".panel-block"); + for (const panelBlockToDelete of panelBlockElementsToDelete) { + panelBlockToDelete.remove(); + } + for (const milestone of workOrderMilestones) { + const panelBlockElement = document.createElement("div"); + panelBlockElement.className = "panel-block is-block container--milestone"; + panelBlockElement.dataset.workOrderMilestoneId = + milestone.workOrderMilestoneId.toString(); + panelBlockElement.innerHTML = + '
' + + ('
' + + (milestone.workOrderMilestoneCompletionDate + ? '' + + '' + + "" + : '") + + "
") + + ('
' + + (milestone.workOrderMilestoneTypeId + ? "" + + cityssm.escapeHTML(milestone.workOrderMilestoneType || "") + + "
" + : "") + + milestone.workOrderMilestoneDateString + + (milestone.workOrderMilestoneTime + ? " " + milestone.workOrderMilestoneTimeString + : "") + + "
" + + '' + + cityssm.escapeHTML(milestone.workOrderMilestoneDescription || "") + + "" + + "
") + + ('
' + + '" + + "
") + + "
"; + if (milestone.workOrderMilestoneCompletionDate) { + panelBlockElement.querySelector(".button--reopenMilestone").addEventListener("click", reopenMilestone); + } + else { + panelBlockElement.querySelector(".button--editMilestone").addEventListener("click", editMilestone); + panelBlockElement.querySelector(".button--completeMilestone").addEventListener("click", completeMilestone); + } + panelBlockElement.querySelector(".button--deleteMilestone").addEventListener("click", deleteMilestone); + milestonesPanelElement.append(panelBlockElement); + } + bulmaJS.init(milestonesPanelElement); + } if (!isCreate) { workOrderMilestones = exports.workOrderMilestones; delete exports.workOrderMilestones; - const processMilestoneResponse = (responseJSON) => { - if (responseJSON.success) { - workOrderMilestones = responseJSON.workOrderMilestones; - renderMilestones(); - } - else { - bulmaJS.alert({ - title: "Error Reopening Milestone", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - }; - const completeMilestone = (clickEvent) => { - clickEvent.preventDefault(); - const currentDateString = cityssm.dateToString(new Date()); - const workOrderMilestoneId = Number.parseInt(clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId, 10); - const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { - return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; - }); - const doComplete = () => { - cityssm.postJSON(los.urlPrefix + "/workOrders/doCompleteWorkOrderMilestone", { - workOrderId, - workOrderMilestoneId - }, processMilestoneResponse); - }; - bulmaJS.confirm({ - title: "Complete Milestone", - message: "Are you sure you want to complete this milestone?" + - (workOrderMilestone.workOrderMilestoneDateString > currentDateString - ? "
Note that this milestone is expected to be completed in the future." - : ""), - messageIsHtml: true, - contextualColorName: "warning", - okButton: { - text: "Yes, Complete Milestone", - callbackFunction: doComplete - } - }); - }; - const reopenMilestone = (clickEvent) => { - clickEvent.preventDefault(); - const workOrderMilestoneId = clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId; - const doReopen = () => { - cityssm.postJSON(los.urlPrefix + "/workOrders/doReopenWorkOrderMilestone", { - workOrderId, - workOrderMilestoneId - }, processMilestoneResponse); - }; - bulmaJS.confirm({ - title: "Reopen Milestone", - message: "Are you sure you want to remove the completion status from this milestone, and reopen it?", - contextualColorName: "warning", - okButton: { - text: "Yes, Reopen Milestone", - callbackFunction: doReopen - } - }); - }; - const deleteMilestone = (clickEvent) => { - clickEvent.preventDefault(); - const workOrderMilestoneId = clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId; - const doDelete = () => { - cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrderMilestone", { - workOrderMilestoneId, - workOrderId - }, processMilestoneResponse); - }; - bulmaJS.confirm({ - title: "Delete Milestone", - message: "Are you sure you want to delete this milestone?", - contextualColorName: "warning", - okButton: { - text: "Yes, Delete Milestone", - callbackFunction: doDelete - } - }); - }; - const editMilestone = (clickEvent) => { - clickEvent.preventDefault(); - const workOrderMilestoneId = Number.parseInt(clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId, 10); - const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { - return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; - }); - let editCloseModalFunction; - const doEdit = (submitEvent) => { - submitEvent.preventDefault(); - cityssm.postJSON(los.urlPrefix + "/workOrders/doUpdateWorkOrderMilestone", submitEvent.currentTarget, (responseJSON) => { - processMilestoneResponse(responseJSON); - if (responseJSON.success) { - editCloseModalFunction(); - } - }); - }; - cityssm.openHtmlModal("workOrder-editMilestone", { - onshow: (modalElement) => { - modalElement.querySelector("#milestoneEdit--workOrderId").value = workOrderId; - modalElement.querySelector("#milestoneEdit--workOrderMilestoneId").value = workOrderMilestone.workOrderMilestoneId.toString(); - const milestoneTypeElement = modalElement.querySelector("#milestoneEdit--workOrderMilestoneTypeId"); - let milestoneTypeFound = false; - for (const milestoneType of exports.workOrderMilestoneTypes) { - const optionElement = document.createElement("option"); - optionElement.value = milestoneType.workOrderMilestoneTypeId.toString(); - optionElement.textContent = milestoneType.workOrderMilestoneType; - if (milestoneType.workOrderMilestoneTypeId === - workOrderMilestone.workOrderMilestoneTypeId) { - optionElement.selected = true; - milestoneTypeFound = true; - } - milestoneTypeElement.append(optionElement); - } - if (!milestoneTypeFound && workOrderMilestone.workOrderMilestoneTypeId) { - const optionElement = document.createElement("option"); - optionElement.value = - workOrderMilestone.workOrderMilestoneTypeId.toString(); - optionElement.textContent = workOrderMilestone.workOrderMilestoneType; - optionElement.selected = true; - milestoneTypeElement.append(optionElement); - } - modalElement.querySelector("#milestoneEdit--workOrderMilestoneDateString").value = workOrderMilestone.workOrderMilestoneDateString; - if (workOrderMilestone.workOrderMilestoneTime) { - modalElement.querySelector("#milestoneEdit--workOrderMilestoneTimeString").value = workOrderMilestone.workOrderMilestoneTimeString; - } - modalElement.querySelector("#milestoneEdit--workOrderMilestoneDescription").value = workOrderMilestone.workOrderMilestoneDescription; - }, - onshown: (modalElement, closeModalFunction) => { - editCloseModalFunction = closeModalFunction; - bulmaJS.toggleHtmlClipped(); - los.initializeDatePickers(modalElement); - // los.initializeTimePickers(modalElement); - modalElement.querySelector("form").addEventListener("submit", doEdit); - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - }; - const renderMilestones = () => { - // Clear milestones panel - const milestonesPanelElement = document.querySelector("#panel--milestones"); - const panelBlockElementsToDelete = milestonesPanelElement.querySelectorAll(".panel-block"); - for (const panelBlockToDelete of panelBlockElementsToDelete) { - panelBlockToDelete.remove(); - } - for (const milestone of workOrderMilestones) { - const panelBlockElement = document.createElement("div"); - panelBlockElement.className = "panel-block is-block container--milestone"; - panelBlockElement.dataset.workOrderMilestoneId = - milestone.workOrderMilestoneId.toString(); - panelBlockElement.innerHTML = - '
' + - ('
' + - (milestone.workOrderMilestoneCompletionDate - ? '' + - '' + - "" - : '") + - "
") + - ('
' + - (milestone.workOrderMilestoneTypeId - ? "" + - cityssm.escapeHTML(milestone.workOrderMilestoneType || "") + - "
" - : "") + - milestone.workOrderMilestoneDateString + - (milestone.workOrderMilestoneTime - ? " " + milestone.workOrderMilestoneTimeString - : "") + - "
" + - '' + - cityssm.escapeHTML(milestone.workOrderMilestoneDescription || "") + - "" + - "
") + - ('
' + - '" + - "
") + - "
"; - if (milestone.workOrderMilestoneCompletionDate) { - panelBlockElement.querySelector(".button--reopenMilestone").addEventListener("click", reopenMilestone); - } - else { - panelBlockElement.querySelector(".button--editMilestone").addEventListener("click", editMilestone); - panelBlockElement.querySelector(".button--completeMilestone").addEventListener("click", completeMilestone); - } - panelBlockElement.querySelector(".button--deleteMilestone").addEventListener("click", deleteMilestone); - milestonesPanelElement.append(panelBlockElement); - } - bulmaJS.init(milestonesPanelElement); - }; renderMilestones(); document.querySelector("#button--addMilestone").addEventListener("click", () => { let addModalElement; @@ -1095,14 +1101,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); submitEvent.preventDefault(); } const currentDateString = cityssm.dateToString(new Date()); - const _doAdd = () => { + function _doAdd() { cityssm.postJSON(los.urlPrefix + "/workOrders/doAddWorkOrderMilestone", addFormElement, (responseJSON) => { processMilestoneResponse(responseJSON); if (responseJSON.success) { addCloseModalFunction(); } }); - }; + } if (addModalElement.querySelector("#milestoneAdd--workOrderMilestoneDateString").value < currentDateString) { bulmaJS.confirm({ title: "Milestone Date in the Past", @@ -1119,7 +1125,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); } }; cityssm.openHtmlModal("workOrder-addMilestone", { - onshow: (modalElement) => { + onshow(modalElement) { modalElement.querySelector("#milestoneAdd--workOrderId").value = workOrderId; const milestoneTypeElement = modalElement.querySelector("#milestoneAdd--workOrderMilestoneTypeId"); for (const milestoneType of exports.workOrderMilestoneTypes) { @@ -1130,7 +1136,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); } modalElement.querySelector("#milestoneAdd--workOrderMilestoneDateString").valueAsDate = new Date(); }, - onshown: (modalElement, closeModalFunction) => { + onshown(modalElement, closeModalFunction) { addModalElement = modalElement; addCloseModalFunction = closeModalFunction; los.initializeDatePickers(modalElement); @@ -1139,7 +1145,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); addFormElement = modalElement.querySelector("form"); addFormElement.addEventListener("submit", doAdd); }, - onremoved: () => { + onremoved() { bulmaJS.toggleHtmlClipped(); } }); diff --git a/public-typescript/workOrderEdit/workOrderEdit.js b/public-typescript/workOrderEdit/workOrderEdit.js index 2613f3e1..d0953003 100644 --- a/public-typescript/workOrderEdit/workOrderEdit.js +++ b/public-typescript/workOrderEdit/workOrderEdit.js @@ -41,25 +41,41 @@ Object.defineProperty(exports, "__esModule", { value: true }); /* * Work Order Options */ + function doClose() { + cityssm.postJSON(los.urlPrefix + "/workOrders/doCloseWorkOrder", { + workOrderId + }, (responseJSON) => { + if (responseJSON.success) { + window.location.href = + los.urlPrefix + "/workOrders/" + encodeURIComponent(workOrderId); + } + else { + bulmaJS.alert({ + title: "Error Closing Work Order", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); + } + function doDelete() { + cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrder", { + workOrderId + }, (responseJSON) => { + if (responseJSON.success) { + window.location.href = los.urlPrefix + "/workOrders"; + } + else { + bulmaJS.alert({ + title: "Error Deleting Work Order", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + }); + } let workOrderMilestones; if (!isCreate) { - const doClose = () => { - cityssm.postJSON(los.urlPrefix + "/workOrders/doCloseWorkOrder", { - workOrderId - }, (responseJSON) => { - if (responseJSON.success) { - window.location.href = - los.urlPrefix + "/workOrders/" + encodeURIComponent(workOrderId); - } - else { - bulmaJS.alert({ - title: "Error Closing Work Order", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - }); - }; document.querySelector("#button--closeWorkOrder").addEventListener("click", () => { const hasOpenMilestones = workOrderMilestones.some((milestone) => { return !milestone.workOrderMilestoneCompletionDate; @@ -72,17 +88,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); contextualColorName: "warning" }); /* - // Disable closing work orders with open milestones - bulmaJS.confirm({ - title: "Close Work Order with Outstanding Milestones", - message: - "Are you sure you want to close this work order with outstanding milestones?", - contextualColorName: "danger", - okButton: { - text: "Yes, Close Work Order", - callbackFunction: doClose - } - }); + // Disable closing work orders with open milestones + bulmaJS.confirm({ + title: "Close Work Order with Outstanding Milestones", + message: + "Are you sure you want to close this work order with outstanding milestones?", + contextualColorName: "danger", + okButton: { + text: "Yes, Close Work Order", + callbackFunction: doClose + } + }); */ } else { @@ -97,23 +113,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); } }); - const doDelete = () => { - cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrder", { - workOrderId - }, (responseJSON) => { - if (responseJSON.success) { - window.location.href = los.urlPrefix + "/workOrders"; - } - else { - bulmaJS.alert({ - title: "Error Deleting Work Order", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - }); - }; - document.querySelector("#button--deleteWorkOrder").addEventListener("click", (clickEvent) => { + document + .querySelector("#button--deleteWorkOrder") + .addEventListener("click", (clickEvent) => { clickEvent.preventDefault(); bulmaJS.confirm({ title: "Delete Work Order", @@ -139,228 +141,227 @@ Object.defineProperty(exports, "__esModule", { value: true }); /* * Milestones */ + function processMilestoneResponse(responseJSON) { + if (responseJSON.success) { + workOrderMilestones = responseJSON.workOrderMilestones; + renderMilestones(); + } + else { + bulmaJS.alert({ + title: "Error Reopening Milestone", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + function completeMilestone(clickEvent) { + clickEvent.preventDefault(); + const currentDateString = cityssm.dateToString(new Date()); + const workOrderMilestoneId = Number.parseInt(clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId, 10); + const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { + return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; + }); + const doComplete = () => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doCompleteWorkOrderMilestone", { + workOrderId, + workOrderMilestoneId + }, processMilestoneResponse); + }; + bulmaJS.confirm({ + title: "Complete Milestone", + message: "Are you sure you want to complete this milestone?" + + (workOrderMilestone.workOrderMilestoneDateString > currentDateString + ? "
Note that this milestone is expected to be completed in the future." + : ""), + messageIsHtml: true, + contextualColorName: "warning", + okButton: { + text: "Yes, Complete Milestone", + callbackFunction: doComplete + } + }); + } + function reopenMilestone(clickEvent) { + clickEvent.preventDefault(); + const workOrderMilestoneId = clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId; + const doReopen = () => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doReopenWorkOrderMilestone", { + workOrderId, + workOrderMilestoneId + }, processMilestoneResponse); + }; + bulmaJS.confirm({ + title: "Reopen Milestone", + message: "Are you sure you want to remove the completion status from this milestone, and reopen it?", + contextualColorName: "warning", + okButton: { + text: "Yes, Reopen Milestone", + callbackFunction: doReopen + } + }); + } + function deleteMilestone(clickEvent) { + clickEvent.preventDefault(); + const workOrderMilestoneId = clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId; + const doDelete = () => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrderMilestone", { + workOrderMilestoneId, + workOrderId + }, processMilestoneResponse); + }; + bulmaJS.confirm({ + title: "Delete Milestone", + message: "Are you sure you want to delete this milestone?", + contextualColorName: "warning", + okButton: { + text: "Yes, Delete Milestone", + callbackFunction: doDelete + } + }); + } + function editMilestone(clickEvent) { + clickEvent.preventDefault(); + const workOrderMilestoneId = Number.parseInt(clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId, 10); + const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { + return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; + }); + let editCloseModalFunction; + const doEdit = (submitEvent) => { + submitEvent.preventDefault(); + cityssm.postJSON(los.urlPrefix + "/workOrders/doUpdateWorkOrderMilestone", submitEvent.currentTarget, (responseJSON) => { + processMilestoneResponse(responseJSON); + if (responseJSON.success) { + editCloseModalFunction(); + } + }); + }; + cityssm.openHtmlModal("workOrder-editMilestone", { + onshow: (modalElement) => { + modalElement.querySelector("#milestoneEdit--workOrderId").value = workOrderId; + modalElement.querySelector("#milestoneEdit--workOrderMilestoneId").value = workOrderMilestone.workOrderMilestoneId.toString(); + const milestoneTypeElement = modalElement.querySelector("#milestoneEdit--workOrderMilestoneTypeId"); + let milestoneTypeFound = false; + for (const milestoneType of exports.workOrderMilestoneTypes) { + const optionElement = document.createElement("option"); + optionElement.value = milestoneType.workOrderMilestoneTypeId.toString(); + optionElement.textContent = milestoneType.workOrderMilestoneType; + if (milestoneType.workOrderMilestoneTypeId === + workOrderMilestone.workOrderMilestoneTypeId) { + optionElement.selected = true; + milestoneTypeFound = true; + } + milestoneTypeElement.append(optionElement); + } + if (!milestoneTypeFound && workOrderMilestone.workOrderMilestoneTypeId) { + const optionElement = document.createElement("option"); + optionElement.value = workOrderMilestone.workOrderMilestoneTypeId.toString(); + optionElement.textContent = workOrderMilestone.workOrderMilestoneType; + optionElement.selected = true; + milestoneTypeElement.append(optionElement); + } + modalElement.querySelector("#milestoneEdit--workOrderMilestoneDateString").value = workOrderMilestone.workOrderMilestoneDateString; + if (workOrderMilestone.workOrderMilestoneTime) { + modalElement.querySelector("#milestoneEdit--workOrderMilestoneTimeString").value = workOrderMilestone.workOrderMilestoneTimeString; + } + modalElement.querySelector("#milestoneEdit--workOrderMilestoneDescription").value = workOrderMilestone.workOrderMilestoneDescription; + }, + onshown: (modalElement, closeModalFunction) => { + editCloseModalFunction = closeModalFunction; + bulmaJS.toggleHtmlClipped(); + los.initializeDatePickers(modalElement); + // los.initializeTimePickers(modalElement); + modalElement.querySelector("form").addEventListener("submit", doEdit); + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); + } + }); + } + function renderMilestones() { + // Clear milestones panel + const milestonesPanelElement = document.querySelector("#panel--milestones"); + const panelBlockElementsToDelete = milestonesPanelElement.querySelectorAll(".panel-block"); + for (const panelBlockToDelete of panelBlockElementsToDelete) { + panelBlockToDelete.remove(); + } + for (const milestone of workOrderMilestones) { + const panelBlockElement = document.createElement("div"); + panelBlockElement.className = "panel-block is-block container--milestone"; + panelBlockElement.dataset.workOrderMilestoneId = + milestone.workOrderMilestoneId.toString(); + panelBlockElement.innerHTML = + '
' + + ('
' + + (milestone.workOrderMilestoneCompletionDate + ? '' + + '' + + "" + : '") + + "
") + + ('
' + + (milestone.workOrderMilestoneTypeId + ? "" + + cityssm.escapeHTML(milestone.workOrderMilestoneType || "") + + "
" + : "") + + milestone.workOrderMilestoneDateString + + (milestone.workOrderMilestoneTime + ? " " + milestone.workOrderMilestoneTimeString + : "") + + "
" + + '' + + cityssm.escapeHTML(milestone.workOrderMilestoneDescription || "") + + "" + + "
") + + ('
' + + '" + + "
") + + "
"; + if (milestone.workOrderMilestoneCompletionDate) { + panelBlockElement.querySelector(".button--reopenMilestone").addEventListener("click", reopenMilestone); + } + else { + panelBlockElement.querySelector(".button--editMilestone").addEventListener("click", editMilestone); + panelBlockElement.querySelector(".button--completeMilestone").addEventListener("click", completeMilestone); + } + panelBlockElement.querySelector(".button--deleteMilestone").addEventListener("click", deleteMilestone); + milestonesPanelElement.append(panelBlockElement); + } + bulmaJS.init(milestonesPanelElement); + } if (!isCreate) { workOrderMilestones = exports.workOrderMilestones; delete exports.workOrderMilestones; - const processMilestoneResponse = (responseJSON) => { - if (responseJSON.success) { - workOrderMilestones = responseJSON.workOrderMilestones; - renderMilestones(); - } - else { - bulmaJS.alert({ - title: "Error Reopening Milestone", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - }; - const completeMilestone = (clickEvent) => { - clickEvent.preventDefault(); - const currentDateString = cityssm.dateToString(new Date()); - const workOrderMilestoneId = Number.parseInt(clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId, 10); - const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { - return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; - }); - const doComplete = () => { - cityssm.postJSON(los.urlPrefix + "/workOrders/doCompleteWorkOrderMilestone", { - workOrderId, - workOrderMilestoneId - }, processMilestoneResponse); - }; - bulmaJS.confirm({ - title: "Complete Milestone", - message: "Are you sure you want to complete this milestone?" + - (workOrderMilestone.workOrderMilestoneDateString > currentDateString - ? "
Note that this milestone is expected to be completed in the future." - : ""), - messageIsHtml: true, - contextualColorName: "warning", - okButton: { - text: "Yes, Complete Milestone", - callbackFunction: doComplete - } - }); - }; - const reopenMilestone = (clickEvent) => { - clickEvent.preventDefault(); - const workOrderMilestoneId = clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId; - const doReopen = () => { - cityssm.postJSON(los.urlPrefix + "/workOrders/doReopenWorkOrderMilestone", { - workOrderId, - workOrderMilestoneId - }, processMilestoneResponse); - }; - bulmaJS.confirm({ - title: "Reopen Milestone", - message: "Are you sure you want to remove the completion status from this milestone, and reopen it?", - contextualColorName: "warning", - okButton: { - text: "Yes, Reopen Milestone", - callbackFunction: doReopen - } - }); - }; - const deleteMilestone = (clickEvent) => { - clickEvent.preventDefault(); - const workOrderMilestoneId = clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId; - const doDelete = () => { - cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrderMilestone", { - workOrderMilestoneId, - workOrderId - }, processMilestoneResponse); - }; - bulmaJS.confirm({ - title: "Delete Milestone", - message: "Are you sure you want to delete this milestone?", - contextualColorName: "warning", - okButton: { - text: "Yes, Delete Milestone", - callbackFunction: doDelete - } - }); - }; - const editMilestone = (clickEvent) => { - clickEvent.preventDefault(); - const workOrderMilestoneId = Number.parseInt(clickEvent.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId, 10); - const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { - return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; - }); - let editCloseModalFunction; - const doEdit = (submitEvent) => { - submitEvent.preventDefault(); - cityssm.postJSON(los.urlPrefix + "/workOrders/doUpdateWorkOrderMilestone", submitEvent.currentTarget, (responseJSON) => { - processMilestoneResponse(responseJSON); - if (responseJSON.success) { - editCloseModalFunction(); - } - }); - }; - cityssm.openHtmlModal("workOrder-editMilestone", { - onshow: (modalElement) => { - modalElement.querySelector("#milestoneEdit--workOrderId").value = workOrderId; - modalElement.querySelector("#milestoneEdit--workOrderMilestoneId").value = workOrderMilestone.workOrderMilestoneId.toString(); - const milestoneTypeElement = modalElement.querySelector("#milestoneEdit--workOrderMilestoneTypeId"); - let milestoneTypeFound = false; - for (const milestoneType of exports.workOrderMilestoneTypes) { - const optionElement = document.createElement("option"); - optionElement.value = milestoneType.workOrderMilestoneTypeId.toString(); - optionElement.textContent = milestoneType.workOrderMilestoneType; - if (milestoneType.workOrderMilestoneTypeId === - workOrderMilestone.workOrderMilestoneTypeId) { - optionElement.selected = true; - milestoneTypeFound = true; - } - milestoneTypeElement.append(optionElement); - } - if (!milestoneTypeFound && workOrderMilestone.workOrderMilestoneTypeId) { - const optionElement = document.createElement("option"); - optionElement.value = - workOrderMilestone.workOrderMilestoneTypeId.toString(); - optionElement.textContent = workOrderMilestone.workOrderMilestoneType; - optionElement.selected = true; - milestoneTypeElement.append(optionElement); - } - modalElement.querySelector("#milestoneEdit--workOrderMilestoneDateString").value = workOrderMilestone.workOrderMilestoneDateString; - if (workOrderMilestone.workOrderMilestoneTime) { - modalElement.querySelector("#milestoneEdit--workOrderMilestoneTimeString").value = workOrderMilestone.workOrderMilestoneTimeString; - } - modalElement.querySelector("#milestoneEdit--workOrderMilestoneDescription").value = workOrderMilestone.workOrderMilestoneDescription; - }, - onshown: (modalElement, closeModalFunction) => { - editCloseModalFunction = closeModalFunction; - bulmaJS.toggleHtmlClipped(); - los.initializeDatePickers(modalElement); - // los.initializeTimePickers(modalElement); - modalElement.querySelector("form").addEventListener("submit", doEdit); - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - }; - const renderMilestones = () => { - // Clear milestones panel - const milestonesPanelElement = document.querySelector("#panel--milestones"); - const panelBlockElementsToDelete = milestonesPanelElement.querySelectorAll(".panel-block"); - for (const panelBlockToDelete of panelBlockElementsToDelete) { - panelBlockToDelete.remove(); - } - for (const milestone of workOrderMilestones) { - const panelBlockElement = document.createElement("div"); - panelBlockElement.className = "panel-block is-block container--milestone"; - panelBlockElement.dataset.workOrderMilestoneId = - milestone.workOrderMilestoneId.toString(); - panelBlockElement.innerHTML = - '
' + - ('
' + - (milestone.workOrderMilestoneCompletionDate - ? '' + - '' + - "" - : '") + - "
") + - ('
' + - (milestone.workOrderMilestoneTypeId - ? "" + - cityssm.escapeHTML(milestone.workOrderMilestoneType || "") + - "
" - : "") + - milestone.workOrderMilestoneDateString + - (milestone.workOrderMilestoneTime - ? " " + milestone.workOrderMilestoneTimeString - : "") + - "
" + - '' + - cityssm.escapeHTML(milestone.workOrderMilestoneDescription || "") + - "" + - "
") + - ('
' + - '" + - "
") + - "
"; - if (milestone.workOrderMilestoneCompletionDate) { - panelBlockElement.querySelector(".button--reopenMilestone").addEventListener("click", reopenMilestone); - } - else { - panelBlockElement.querySelector(".button--editMilestone").addEventListener("click", editMilestone); - panelBlockElement.querySelector(".button--completeMilestone").addEventListener("click", completeMilestone); - } - panelBlockElement.querySelector(".button--deleteMilestone").addEventListener("click", deleteMilestone); - milestonesPanelElement.append(panelBlockElement); - } - bulmaJS.init(milestonesPanelElement); - }; renderMilestones(); document.querySelector("#button--addMilestone").addEventListener("click", () => { let addModalElement; @@ -371,14 +372,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); submitEvent.preventDefault(); } const currentDateString = cityssm.dateToString(new Date()); - const _doAdd = () => { + function _doAdd() { cityssm.postJSON(los.urlPrefix + "/workOrders/doAddWorkOrderMilestone", addFormElement, (responseJSON) => { processMilestoneResponse(responseJSON); if (responseJSON.success) { addCloseModalFunction(); } }); - }; + } if (addModalElement.querySelector("#milestoneAdd--workOrderMilestoneDateString").value < currentDateString) { bulmaJS.confirm({ title: "Milestone Date in the Past", @@ -395,7 +396,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); } }; cityssm.openHtmlModal("workOrder-addMilestone", { - onshow: (modalElement) => { + onshow(modalElement) { modalElement.querySelector("#milestoneAdd--workOrderId").value = workOrderId; const milestoneTypeElement = modalElement.querySelector("#milestoneAdd--workOrderMilestoneTypeId"); for (const milestoneType of exports.workOrderMilestoneTypes) { @@ -406,7 +407,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); } modalElement.querySelector("#milestoneAdd--workOrderMilestoneDateString").valueAsDate = new Date(); }, - onshown: (modalElement, closeModalFunction) => { + onshown(modalElement, closeModalFunction) { addModalElement = modalElement; addCloseModalFunction = closeModalFunction; los.initializeDatePickers(modalElement); @@ -415,7 +416,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); addFormElement = modalElement.querySelector("form"); addFormElement.addEventListener("submit", doAdd); }, - onremoved: () => { + onremoved() { bulmaJS.toggleHtmlClipped(); } }); diff --git a/public-typescript/workOrderEdit/workOrderEdit.ts b/public-typescript/workOrderEdit/workOrderEdit.ts index 7d968bf9..2a015359 100644 --- a/public-typescript/workOrderEdit/workOrderEdit.ts +++ b/public-typescript/workOrderEdit/workOrderEdit.ts @@ -70,47 +70,65 @@ declare const bulmaJS: BulmaJS; * Work Order Options */ + function doClose() { + cityssm.postJSON( + los.urlPrefix + "/workOrders/doCloseWorkOrder", + { + workOrderId + }, + (responseJSON: { success: boolean; errorMessage?: string }) => { + if (responseJSON.success) { + window.location.href = + los.urlPrefix + "/workOrders/" + encodeURIComponent(workOrderId); + } else { + bulmaJS.alert({ + title: "Error Closing Work Order", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); + } + + function doDelete() { + cityssm.postJSON( + los.urlPrefix + "/workOrders/doDeleteWorkOrder", + { + workOrderId + }, + (responseJSON: { success: boolean; errorMessage?: string }) => { + if (responseJSON.success) { + window.location.href = los.urlPrefix + "/workOrders"; + } else { + bulmaJS.alert({ + title: "Error Deleting Work Order", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + ); + } + let workOrderMilestones: recordTypes.WorkOrderMilestone[]; if (!isCreate) { - const doClose = () => { - cityssm.postJSON( - los.urlPrefix + "/workOrders/doCloseWorkOrder", - { - workOrderId - }, - (responseJSON: { success: boolean; errorMessage?: string }) => { - if (responseJSON.success) { - window.location.href = - los.urlPrefix + "/workOrders/" + encodeURIComponent(workOrderId); - } else { - bulmaJS.alert({ - title: "Error Closing Work Order", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - } - ); - }; + document.querySelector("#button--closeWorkOrder")!.addEventListener("click", () => { + const hasOpenMilestones = workOrderMilestones.some((milestone) => { + return !milestone.workOrderMilestoneCompletionDate; + }); - (document.querySelector("#button--closeWorkOrder") as HTMLButtonElement).addEventListener( - "click", - () => { - const hasOpenMilestones = workOrderMilestones.some((milestone) => { - return !milestone.workOrderMilestoneCompletionDate; + if (hasOpenMilestones) { + bulmaJS.alert({ + title: "Outstanding Milestones", + message: + "You cannot close a work order with outstanding milestones." + + " Either complete the outstanding milestones, or remove them from the work order.", + contextualColorName: "warning" }); - if (hasOpenMilestones) { - bulmaJS.alert({ - title: "Outstanding Milestones", - message: - "You cannot close a work order with outstanding milestones." + - " Either complete the outstanding milestones, or remove them from the work order.", - contextualColorName: "warning" - }); - - /* + /* // Disable closing work orders with open milestones bulmaJS.confirm({ title: "Close Work Order with Outstanding Milestones", @@ -122,44 +140,23 @@ declare const bulmaJS: BulmaJS; callbackFunction: doClose } }); - */ - } else { - bulmaJS.confirm({ - title: "Close Work Order", - message: "Are you sure you want to close this work order?", - contextualColorName: "info", - okButton: { - text: "Yes, Close Work Order", - callbackFunction: doClose - } - }); - } - } - ); - - const doDelete = () => { - cityssm.postJSON( - los.urlPrefix + "/workOrders/doDeleteWorkOrder", - { - workOrderId - }, - (responseJSON: { success: boolean; errorMessage?: string }) => { - if (responseJSON.success) { - window.location.href = los.urlPrefix + "/workOrders"; - } else { - bulmaJS.alert({ - title: "Error Deleting Work Order", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); + */ + } else { + bulmaJS.confirm({ + title: "Close Work Order", + message: "Are you sure you want to close this work order?", + contextualColorName: "info", + okButton: { + text: "Yes, Close Work Order", + callbackFunction: doClose } - } - ); - }; + }); + } + }); - (document.querySelector("#button--deleteWorkOrder") as HTMLButtonElement).addEventListener( - "click", - (clickEvent: Event) => { + document + .querySelector("#button--deleteWorkOrder")! + .addEventListener("click", (clickEvent: Event) => { clickEvent.preventDefault(); bulmaJS.confirm({ @@ -171,8 +168,7 @@ declare const bulmaJS: BulmaJS; callbackFunction: doDelete } }); - } - ); + }); } /* @@ -193,464 +189,447 @@ declare const bulmaJS: BulmaJS; * Milestones */ + function processMilestoneResponse(responseJSON: { + success: boolean; + errorMessage?: string; + workOrderMilestones?: recordTypes.WorkOrderMilestone[]; + }) { + if (responseJSON.success) { + workOrderMilestones = responseJSON.workOrderMilestones!; + renderMilestones(); + } else { + bulmaJS.alert({ + title: "Error Reopening Milestone", + message: responseJSON.errorMessage || "", + contextualColorName: "danger" + }); + } + } + + function completeMilestone(clickEvent: Event) { + clickEvent.preventDefault(); + + const currentDateString = cityssm.dateToString(new Date()); + + const workOrderMilestoneId = Number.parseInt( + ( + (clickEvent.currentTarget as HTMLElement).closest( + ".container--milestone" + ) as HTMLElement + ).dataset.workOrderMilestoneId!, + 10 + ); + + const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { + return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; + })!; + + const doComplete = () => { + cityssm.postJSON( + los.urlPrefix + "/workOrders/doCompleteWorkOrderMilestone", + { + workOrderId, + workOrderMilestoneId + }, + processMilestoneResponse + ); + }; + + bulmaJS.confirm({ + title: "Complete Milestone", + message: + "Are you sure you want to complete this milestone?" + + (workOrderMilestone.workOrderMilestoneDateString! > currentDateString + ? "
Note that this milestone is expected to be completed in the future." + : ""), + messageIsHtml: true, + contextualColorName: "warning", + okButton: { + text: "Yes, Complete Milestone", + callbackFunction: doComplete + } + }); + } + + function reopenMilestone(clickEvent: Event) { + clickEvent.preventDefault(); + + const workOrderMilestoneId = ( + (clickEvent.currentTarget as HTMLElement).closest( + ".container--milestone" + ) as HTMLElement + ).dataset.workOrderMilestoneId; + + const doReopen = () => { + cityssm.postJSON( + los.urlPrefix + "/workOrders/doReopenWorkOrderMilestone", + { + workOrderId, + workOrderMilestoneId + }, + processMilestoneResponse + ); + }; + + bulmaJS.confirm({ + title: "Reopen Milestone", + message: + "Are you sure you want to remove the completion status from this milestone, and reopen it?", + contextualColorName: "warning", + okButton: { + text: "Yes, Reopen Milestone", + callbackFunction: doReopen + } + }); + } + + function deleteMilestone(clickEvent: Event) { + clickEvent.preventDefault(); + + const workOrderMilestoneId = ( + (clickEvent.currentTarget as HTMLElement).closest( + ".container--milestone" + ) as HTMLElement + ).dataset.workOrderMilestoneId; + + const doDelete = () => { + cityssm.postJSON( + los.urlPrefix + "/workOrders/doDeleteWorkOrderMilestone", + { + workOrderMilestoneId, + workOrderId + }, + processMilestoneResponse + ); + }; + + bulmaJS.confirm({ + title: "Delete Milestone", + message: "Are you sure you want to delete this milestone?", + contextualColorName: "warning", + okButton: { + text: "Yes, Delete Milestone", + callbackFunction: doDelete + } + }); + } + + function editMilestone(clickEvent: Event) { + clickEvent.preventDefault(); + + const workOrderMilestoneId = Number.parseInt( + ( + (clickEvent.currentTarget as HTMLElement).closest( + ".container--milestone" + ) as HTMLElement + ).dataset.workOrderMilestoneId!, + 10 + ); + + const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { + return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; + })!; + + let editCloseModalFunction: () => void; + + const doEdit = (submitEvent: SubmitEvent) => { + submitEvent.preventDefault(); + + cityssm.postJSON( + los.urlPrefix + "/workOrders/doUpdateWorkOrderMilestone", + submitEvent.currentTarget, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderMilestones?: recordTypes.WorkOrderMilestone[]; + }) => { + processMilestoneResponse(responseJSON); + if (responseJSON.success) { + editCloseModalFunction(); + } + } + ); + }; + + cityssm.openHtmlModal("workOrder-editMilestone", { + onshow: (modalElement) => { + ( + modalElement.querySelector("#milestoneEdit--workOrderId") as HTMLInputElement + ).value = workOrderId; + + ( + modalElement.querySelector( + "#milestoneEdit--workOrderMilestoneId" + ) as HTMLInputElement + ).value = workOrderMilestone.workOrderMilestoneId!.toString(); + + const milestoneTypeElement = modalElement.querySelector( + "#milestoneEdit--workOrderMilestoneTypeId" + ) as HTMLSelectElement; + + let milestoneTypeFound = false; + + for (const milestoneType of exports.workOrderMilestoneTypes as recordTypes.WorkOrderMilestoneType[]) { + const optionElement = document.createElement("option"); + + optionElement.value = milestoneType.workOrderMilestoneTypeId.toString(); + optionElement.textContent = milestoneType.workOrderMilestoneType; + + if ( + milestoneType.workOrderMilestoneTypeId === + workOrderMilestone.workOrderMilestoneTypeId + ) { + optionElement.selected = true; + milestoneTypeFound = true; + } + + milestoneTypeElement.append(optionElement); + } + + if (!milestoneTypeFound && workOrderMilestone.workOrderMilestoneTypeId) { + const optionElement = document.createElement("option"); + optionElement.value = workOrderMilestone.workOrderMilestoneTypeId.toString(); + optionElement.textContent = workOrderMilestone.workOrderMilestoneType!; + optionElement.selected = true; + milestoneTypeElement.append(optionElement); + } + + ( + modalElement.querySelector( + "#milestoneEdit--workOrderMilestoneDateString" + ) as HTMLInputElement + ).value = workOrderMilestone.workOrderMilestoneDateString!; + + if (workOrderMilestone.workOrderMilestoneTime) { + ( + modalElement.querySelector( + "#milestoneEdit--workOrderMilestoneTimeString" + ) as HTMLInputElement + ).value = workOrderMilestone.workOrderMilestoneTimeString!; + } + + ( + modalElement.querySelector( + "#milestoneEdit--workOrderMilestoneDescription" + ) as HTMLTextAreaElement + ).value = workOrderMilestone.workOrderMilestoneDescription!; + }, + onshown: (modalElement, closeModalFunction) => { + editCloseModalFunction = closeModalFunction; + + bulmaJS.toggleHtmlClipped(); + + los.initializeDatePickers(modalElement); + // los.initializeTimePickers(modalElement); + modalElement.querySelector("form")!.addEventListener("submit", doEdit); + }, + onremoved: () => { + bulmaJS.toggleHtmlClipped(); + } + }); + } + + function renderMilestones() { + // Clear milestones panel + const milestonesPanelElement = document.querySelector("#panel--milestones") as HTMLElement; + + const panelBlockElementsToDelete = milestonesPanelElement.querySelectorAll(".panel-block"); + + for (const panelBlockToDelete of panelBlockElementsToDelete) { + panelBlockToDelete.remove(); + } + + for (const milestone of workOrderMilestones) { + const panelBlockElement = document.createElement("div"); + panelBlockElement.className = "panel-block is-block container--milestone"; + + panelBlockElement.dataset.workOrderMilestoneId = + milestone.workOrderMilestoneId!.toString(); + + panelBlockElement.innerHTML = + '
' + + ('
' + + (milestone.workOrderMilestoneCompletionDate + ? '' + + '' + + "" + : '") + + "
") + + ('
' + + (milestone.workOrderMilestoneTypeId + ? "" + + cityssm.escapeHTML(milestone.workOrderMilestoneType || "") + + "
" + : "") + + milestone.workOrderMilestoneDateString + + (milestone.workOrderMilestoneTime + ? " " + milestone.workOrderMilestoneTimeString + : "") + + "
" + + '' + + cityssm.escapeHTML(milestone.workOrderMilestoneDescription || "") + + "" + + "
") + + ('
' + + '" + + "
") + + "
"; + + if (milestone.workOrderMilestoneCompletionDate) { + ( + panelBlockElement.querySelector(".button--reopenMilestone") as HTMLButtonElement + ).addEventListener("click", reopenMilestone); + } else { + ( + panelBlockElement.querySelector(".button--editMilestone") as HTMLButtonElement + ).addEventListener("click", editMilestone); + + ( + panelBlockElement.querySelector( + ".button--completeMilestone" + ) as HTMLButtonElement + ).addEventListener("click", completeMilestone); + } + + ( + panelBlockElement.querySelector(".button--deleteMilestone") as HTMLButtonElement + ).addEventListener("click", deleteMilestone); + + milestonesPanelElement.append(panelBlockElement); + } + + bulmaJS.init(milestonesPanelElement); + } + if (!isCreate) { workOrderMilestones = exports.workOrderMilestones as recordTypes.WorkOrderMilestone[]; delete exports.workOrderMilestones; - const processMilestoneResponse = (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderMilestones?: recordTypes.WorkOrderMilestone[]; - }) => { - if (responseJSON.success) { - workOrderMilestones = responseJSON.workOrderMilestones!; - renderMilestones(); - } else { - bulmaJS.alert({ - title: "Error Reopening Milestone", - message: responseJSON.errorMessage || "", - contextualColorName: "danger" - }); - } - }; + renderMilestones(); - const completeMilestone = (clickEvent: Event) => { - clickEvent.preventDefault(); + document.querySelector("#button--addMilestone")!.addEventListener("click", () => { + let addModalElement: HTMLElement; + let addFormElement: HTMLFormElement; + let addCloseModalFunction: () => void; - const currentDateString = cityssm.dateToString(new Date()); - - const workOrderMilestoneId = Number.parseInt( - ( - (clickEvent.currentTarget as HTMLElement).closest( - ".container--milestone" - ) as HTMLElement - ).dataset.workOrderMilestoneId!, - 10 - ); - - const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { - return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; - })!; - - const doComplete = () => { - cityssm.postJSON( - los.urlPrefix + "/workOrders/doCompleteWorkOrderMilestone", - { - workOrderId, - workOrderMilestoneId - }, - processMilestoneResponse - ); - }; - - bulmaJS.confirm({ - title: "Complete Milestone", - message: - "Are you sure you want to complete this milestone?" + - (workOrderMilestone.workOrderMilestoneDateString! > currentDateString - ? "
Note that this milestone is expected to be completed in the future." - : ""), - messageIsHtml: true, - contextualColorName: "warning", - okButton: { - text: "Yes, Complete Milestone", - callbackFunction: doComplete + const doAdd = (submitEvent: SubmitEvent) => { + if (submitEvent) { + submitEvent.preventDefault(); } - }); - }; - const reopenMilestone = (clickEvent: Event) => { - clickEvent.preventDefault(); + const currentDateString = cityssm.dateToString(new Date()); - const workOrderMilestoneId = ( - (clickEvent.currentTarget as HTMLElement).closest( - ".container--milestone" - ) as HTMLElement - ).dataset.workOrderMilestoneId; + function _doAdd() { + cityssm.postJSON( + los.urlPrefix + "/workOrders/doAddWorkOrderMilestone", + addFormElement, + (responseJSON: { + success: boolean; + errorMessage?: string; + workOrderMilestones?: recordTypes.WorkOrderMilestone[]; + }) => { + processMilestoneResponse(responseJSON); - const doReopen = () => { - cityssm.postJSON( - los.urlPrefix + "/workOrders/doReopenWorkOrderMilestone", - { - workOrderId, - workOrderMilestoneId - }, - processMilestoneResponse - ); - }; - - bulmaJS.confirm({ - title: "Reopen Milestone", - message: - "Are you sure you want to remove the completion status from this milestone, and reopen it?", - contextualColorName: "warning", - okButton: { - text: "Yes, Reopen Milestone", - callbackFunction: doReopen - } - }); - }; - - const deleteMilestone = (clickEvent: Event) => { - clickEvent.preventDefault(); - - const workOrderMilestoneId = ( - (clickEvent.currentTarget as HTMLElement).closest( - ".container--milestone" - ) as HTMLElement - ).dataset.workOrderMilestoneId; - - const doDelete = () => { - cityssm.postJSON( - los.urlPrefix + "/workOrders/doDeleteWorkOrderMilestone", - { - workOrderMilestoneId, - workOrderId - }, - processMilestoneResponse - ); - }; - - bulmaJS.confirm({ - title: "Delete Milestone", - message: "Are you sure you want to delete this milestone?", - contextualColorName: "warning", - okButton: { - text: "Yes, Delete Milestone", - callbackFunction: doDelete - } - }); - }; - - const editMilestone = (clickEvent: Event) => { - clickEvent.preventDefault(); - - const workOrderMilestoneId = Number.parseInt( - ( - (clickEvent.currentTarget as HTMLElement).closest( - ".container--milestone" - ) as HTMLElement - ).dataset.workOrderMilestoneId!, - 10 - ); - - const workOrderMilestone = workOrderMilestones.find((currentMilestone) => { - return currentMilestone.workOrderMilestoneId === workOrderMilestoneId; - })!; - - let editCloseModalFunction: () => void; - - const doEdit = (submitEvent: SubmitEvent) => { - submitEvent.preventDefault(); - - cityssm.postJSON( - los.urlPrefix + "/workOrders/doUpdateWorkOrderMilestone", - submitEvent.currentTarget, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderMilestones?: recordTypes.WorkOrderMilestone[]; - }) => { - processMilestoneResponse(responseJSON); - if (responseJSON.success) { - editCloseModalFunction(); + if (responseJSON.success) { + addCloseModalFunction(); + } } - } - ); + ); + } + + if ( + ( + addModalElement.querySelector( + "#milestoneAdd--workOrderMilestoneDateString" + ) as HTMLInputElement + ).value < currentDateString + ) { + bulmaJS.confirm({ + title: "Milestone Date in the Past", + message: + "Are you sure you want to create a milestone with a date in the past?", + contextualColorName: "warning", + okButton: { + text: "Yes, Create a Past Milestone", + callbackFunction: _doAdd + } + }); + } else { + _doAdd(); + } }; - cityssm.openHtmlModal("workOrder-editMilestone", { - onshow: (modalElement) => { + cityssm.openHtmlModal("workOrder-addMilestone", { + onshow(modalElement) { ( - modalElement.querySelector( - "#milestoneEdit--workOrderId" - ) as HTMLInputElement + modalElement.querySelector("#milestoneAdd--workOrderId") as HTMLInputElement ).value = workOrderId; - ( - modalElement.querySelector( - "#milestoneEdit--workOrderMilestoneId" - ) as HTMLInputElement - ).value = workOrderMilestone.workOrderMilestoneId!.toString(); - const milestoneTypeElement = modalElement.querySelector( - "#milestoneEdit--workOrderMilestoneTypeId" + "#milestoneAdd--workOrderMilestoneTypeId" ) as HTMLSelectElement; - let milestoneTypeFound = false; - for (const milestoneType of exports.workOrderMilestoneTypes as recordTypes.WorkOrderMilestoneType[]) { const optionElement = document.createElement("option"); optionElement.value = milestoneType.workOrderMilestoneTypeId.toString(); optionElement.textContent = milestoneType.workOrderMilestoneType; - if ( - milestoneType.workOrderMilestoneTypeId === - workOrderMilestone.workOrderMilestoneTypeId - ) { - optionElement.selected = true; - milestoneTypeFound = true; - } - - milestoneTypeElement.append(optionElement); - } - - if (!milestoneTypeFound && workOrderMilestone.workOrderMilestoneTypeId) { - const optionElement = document.createElement("option"); - optionElement.value = - workOrderMilestone.workOrderMilestoneTypeId.toString(); - optionElement.textContent = workOrderMilestone.workOrderMilestoneType!; - optionElement.selected = true; milestoneTypeElement.append(optionElement); } ( modalElement.querySelector( - "#milestoneEdit--workOrderMilestoneDateString" + "#milestoneAdd--workOrderMilestoneDateString" ) as HTMLInputElement - ).value = workOrderMilestone.workOrderMilestoneDateString!; - - if (workOrderMilestone.workOrderMilestoneTime) { - ( - modalElement.querySelector( - "#milestoneEdit--workOrderMilestoneTimeString" - ) as HTMLInputElement - ).value = workOrderMilestone.workOrderMilestoneTimeString!; - } - - ( - modalElement.querySelector( - "#milestoneEdit--workOrderMilestoneDescription" - ) as HTMLTextAreaElement - ).value = workOrderMilestone.workOrderMilestoneDescription!; + ).valueAsDate = new Date(); }, - onshown: (modalElement, closeModalFunction) => { - editCloseModalFunction = closeModalFunction; - - bulmaJS.toggleHtmlClipped(); + onshown(modalElement, closeModalFunction) { + addModalElement = modalElement; + addCloseModalFunction = closeModalFunction; los.initializeDatePickers(modalElement); // los.initializeTimePickers(modalElement); - modalElement.querySelector("form")!.addEventListener("submit", doEdit); + bulmaJS.toggleHtmlClipped(); + + addFormElement = modalElement.querySelector("form")!; + addFormElement.addEventListener("submit", doAdd); }, - onremoved: () => { + onremoved() { bulmaJS.toggleHtmlClipped(); } }); - }; - - const renderMilestones = () => { - // Clear milestones panel - - const milestonesPanelElement = document.querySelector( - "#panel--milestones" - ) as HTMLElement; - - const panelBlockElementsToDelete = - milestonesPanelElement.querySelectorAll(".panel-block"); - - for (const panelBlockToDelete of panelBlockElementsToDelete) { - panelBlockToDelete.remove(); - } - - for (const milestone of workOrderMilestones) { - const panelBlockElement = document.createElement("div"); - panelBlockElement.className = "panel-block is-block container--milestone"; - - panelBlockElement.dataset.workOrderMilestoneId = - milestone.workOrderMilestoneId!.toString(); - - panelBlockElement.innerHTML = - '
' + - ('
' + - (milestone.workOrderMilestoneCompletionDate - ? '' + - '' + - "" - : '") + - "
") + - ('
' + - (milestone.workOrderMilestoneTypeId - ? "" + - cityssm.escapeHTML(milestone.workOrderMilestoneType || "") + - "
" - : "") + - milestone.workOrderMilestoneDateString + - (milestone.workOrderMilestoneTime - ? " " + milestone.workOrderMilestoneTimeString - : "") + - "
" + - '' + - cityssm.escapeHTML(milestone.workOrderMilestoneDescription || "") + - "" + - "
") + - ('
' + - '" + - "
") + - "
"; - - if (milestone.workOrderMilestoneCompletionDate) { - ( - panelBlockElement.querySelector( - ".button--reopenMilestone" - ) as HTMLButtonElement - ).addEventListener("click", reopenMilestone); - } else { - ( - panelBlockElement.querySelector( - ".button--editMilestone" - ) as HTMLButtonElement - ).addEventListener("click", editMilestone); - - ( - panelBlockElement.querySelector( - ".button--completeMilestone" - ) as HTMLButtonElement - ).addEventListener("click", completeMilestone); - } - - ( - panelBlockElement.querySelector(".button--deleteMilestone") as HTMLButtonElement - ).addEventListener("click", deleteMilestone); - - milestonesPanelElement.append(panelBlockElement); - } - - bulmaJS.init(milestonesPanelElement); - }; - - renderMilestones(); - - (document.querySelector("#button--addMilestone") as HTMLButtonElement).addEventListener( - "click", - () => { - let addModalElement: HTMLElement; - let addFormElement: HTMLFormElement; - let addCloseModalFunction: () => void; - - const doAdd = (submitEvent: SubmitEvent) => { - if (submitEvent) { - submitEvent.preventDefault(); - } - - const currentDateString = cityssm.dateToString(new Date()); - - const _doAdd = () => { - cityssm.postJSON( - los.urlPrefix + "/workOrders/doAddWorkOrderMilestone", - addFormElement, - (responseJSON: { - success: boolean; - errorMessage?: string; - workOrderMilestones?: recordTypes.WorkOrderMilestone[]; - }) => { - processMilestoneResponse(responseJSON); - - if (responseJSON.success) { - addCloseModalFunction(); - } - } - ); - }; - - if ( - ( - addModalElement.querySelector( - "#milestoneAdd--workOrderMilestoneDateString" - ) as HTMLInputElement - ).value < currentDateString - ) { - bulmaJS.confirm({ - title: "Milestone Date in the Past", - message: - "Are you sure you want to create a milestone with a date in the past?", - contextualColorName: "warning", - okButton: { - text: "Yes, Create a Past Milestone", - callbackFunction: _doAdd - } - }); - } else { - _doAdd(); - } - }; - - cityssm.openHtmlModal("workOrder-addMilestone", { - onshow: (modalElement) => { - ( - modalElement.querySelector( - "#milestoneAdd--workOrderId" - ) as HTMLInputElement - ).value = workOrderId; - - const milestoneTypeElement = modalElement.querySelector( - "#milestoneAdd--workOrderMilestoneTypeId" - ) as HTMLSelectElement; - - for (const milestoneType of exports.workOrderMilestoneTypes as recordTypes.WorkOrderMilestoneType[]) { - const optionElement = document.createElement("option"); - - optionElement.value = milestoneType.workOrderMilestoneTypeId.toString(); - optionElement.textContent = milestoneType.workOrderMilestoneType; - - milestoneTypeElement.append(optionElement); - } - - ( - modalElement.querySelector( - "#milestoneAdd--workOrderMilestoneDateString" - ) as HTMLInputElement - ).valueAsDate = new Date(); - }, - onshown: (modalElement, closeModalFunction) => { - addModalElement = modalElement; - addCloseModalFunction = closeModalFunction; - - los.initializeDatePickers(modalElement); - // los.initializeTimePickers(modalElement); - - bulmaJS.toggleHtmlClipped(); - - addFormElement = modalElement.querySelector("form")!; - addFormElement.addEventListener("submit", doAdd); - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - } - ); + }); } })(); diff --git a/public-typescript/workOrderEdit/workOrderEditComments.js b/public-typescript/workOrderEdit/workOrderEditComments.js index 56699840..62becc8f 100644 --- a/public-typescript/workOrderEdit/workOrderEditComments.js +++ b/public-typescript/workOrderEdit/workOrderEditComments.js @@ -10,7 +10,7 @@ const openEditWorkOrderComment = (clickEvent) => { }); let editFormElement; let editCloseModalFunction; - const editComment = (submitEvent) => { + function editComment(submitEvent) { submitEvent.preventDefault(); cityssm.postJSON(los.urlPrefix + "/workOrders/doUpdateWorkOrderComment", editFormElement, (responseJSON) => { if (responseJSON.success) { @@ -26,15 +26,14 @@ const openEditWorkOrderComment = (clickEvent) => { }); } }); - }; + } cityssm.openHtmlModal("workOrder-editComment", { - onshow: (modalElement) => { + onshow(modalElement) { modalElement.querySelector("#workOrderCommentEdit--workOrderId").value = workOrderId; modalElement.querySelector("#workOrderCommentEdit--workOrderCommentId").value = workOrderCommentId.toString(); modalElement.querySelector("#workOrderCommentEdit--workOrderComment").value = workOrderComment.workOrderComment; const workOrderCommentDateStringElement = modalElement.querySelector("#workOrderCommentEdit--workOrderCommentDateString"); - workOrderCommentDateStringElement.value = - workOrderComment.workOrderCommentDateString; + workOrderCommentDateStringElement.value = workOrderComment.workOrderCommentDateString; const currentDateString = cityssm.dateToString(new Date()); workOrderCommentDateStringElement.max = workOrderComment.workOrderCommentDateString <= currentDateString @@ -42,7 +41,7 @@ const openEditWorkOrderComment = (clickEvent) => { : workOrderComment.workOrderCommentDateString; modalElement.querySelector("#workOrderCommentEdit--workOrderCommentTimeString").value = workOrderComment.workOrderCommentTimeString; }, - onshown: (modalElement, closeModalFunction) => { + onshown(modalElement, closeModalFunction) { bulmaJS.toggleHtmlClipped(); los.initializeDatePickers(modalElement); // los.initializeTimePickers(modalElement); @@ -51,14 +50,14 @@ const openEditWorkOrderComment = (clickEvent) => { editFormElement.addEventListener("submit", editComment); editCloseModalFunction = closeModalFunction; }, - onremoved: () => { + onremoved() { bulmaJS.toggleHtmlClipped(); } }); }; -const deleteWorkOrderComment = (clickEvent) => { +function deleteWorkOrderComment(clickEvent) { const workOrderCommentId = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset.workOrderCommentId, 10); - const doDelete = () => { + function doDelete() { cityssm.postJSON(los.urlPrefix + "/workOrders/doDeleteWorkOrderComment", { workOrderId, workOrderCommentId @@ -75,7 +74,7 @@ const deleteWorkOrderComment = (clickEvent) => { }); } }); - }; + } bulmaJS.confirm({ title: "Remove Comment?", message: "Are you sure you want to remove this comment?", @@ -85,8 +84,8 @@ const deleteWorkOrderComment = (clickEvent) => { }, contextualColorName: "warning" }); -}; -const renderWorkOrderComments = () => { +} +function renderWorkOrderComments() { const containerElement = document.querySelector("#container--workOrderComments"); if (workOrderComments.length === 0) { containerElement.innerHTML = @@ -133,16 +132,20 @@ const renderWorkOrderComments = () => { "") + "" + ""); - tableRowElement.querySelector(".button--edit").addEventListener("click", openEditWorkOrderComment); - tableRowElement.querySelector(".button--delete").addEventListener("click", deleteWorkOrderComment); + tableRowElement + .querySelector(".button--edit") + .addEventListener("click", openEditWorkOrderComment); + tableRowElement + .querySelector(".button--delete") + .addEventListener("click", deleteWorkOrderComment); tableElement.querySelector("tbody").append(tableRowElement); } containerElement.innerHTML = ""; containerElement.append(tableElement); -}; -const openAddCommentModal = () => { +} +function openAddCommentModal() { let addCommentCloseModalFunction; - const doAddComment = (formEvent) => { + function doAddComment(formEvent) { formEvent.preventDefault(); cityssm.postJSON(los.urlPrefix + "/workOrders/doAddWorkOrderComment", formEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { @@ -151,7 +154,7 @@ const openAddCommentModal = () => { addCommentCloseModalFunction(); } }); - }; + } cityssm.openHtmlModal("workOrder-addComment", { onshow(modalElement) { los.populateAliases(modalElement); @@ -168,8 +171,10 @@ const openAddCommentModal = () => { document.querySelector("#workOrderComments--add").focus(); } }); -}; +} if (!isCreate) { - document.querySelector("#workOrderComments--add").addEventListener("click", openAddCommentModal); + document + .querySelector("#workOrderComments--add") + .addEventListener("click", openAddCommentModal); renderWorkOrderComments(); } diff --git a/public-typescript/workOrderEdit/workOrderEditComments.ts b/public-typescript/workOrderEdit/workOrderEditComments.ts index 09ccfef8..f4403b1b 100644 --- a/public-typescript/workOrderEdit/workOrderEditComments.ts +++ b/public-typescript/workOrderEdit/workOrderEditComments.ts @@ -30,7 +30,7 @@ const openEditWorkOrderComment = (clickEvent: Event) => { let editFormElement: HTMLFormElement; let editCloseModalFunction: () => void; - const editComment = (submitEvent: SubmitEvent) => { + function editComment(submitEvent: SubmitEvent): void { submitEvent.preventDefault(); cityssm.postJSON( @@ -54,14 +54,12 @@ const openEditWorkOrderComment = (clickEvent: Event) => { } } ); - }; + } cityssm.openHtmlModal("workOrder-editComment", { - onshow: (modalElement) => { + onshow(modalElement) { ( - modalElement.querySelector( - "#workOrderCommentEdit--workOrderId" - ) as HTMLInputElement + modalElement.querySelector("#workOrderCommentEdit--workOrderId") as HTMLInputElement ).value = workOrderId; ( modalElement.querySelector( @@ -79,8 +77,7 @@ const openEditWorkOrderComment = (clickEvent: Event) => { "#workOrderCommentEdit--workOrderCommentDateString" ) as HTMLInputElement; - workOrderCommentDateStringElement.value = - workOrderComment.workOrderCommentDateString!; + workOrderCommentDateStringElement.value = workOrderComment.workOrderCommentDateString!; const currentDateString = cityssm.dateToString(new Date()); @@ -95,7 +92,7 @@ const openEditWorkOrderComment = (clickEvent: Event) => { ) as HTMLInputElement ).value = workOrderComment.workOrderCommentTimeString!; }, - onshown: (modalElement, closeModalFunction) => { + onshown(modalElement, closeModalFunction) { bulmaJS.toggleHtmlClipped(); los.initializeDatePickers(modalElement); @@ -112,19 +109,19 @@ const openEditWorkOrderComment = (clickEvent: Event) => { editCloseModalFunction = closeModalFunction; }, - onremoved: () => { + onremoved() { bulmaJS.toggleHtmlClipped(); } }); }; -const deleteWorkOrderComment = (clickEvent: Event) => { +function deleteWorkOrderComment(clickEvent: Event): void { const workOrderCommentId = Number.parseInt( (clickEvent.currentTarget as HTMLElement).closest("tr")!.dataset.workOrderCommentId!, 10 ); - const doDelete = () => { + function doDelete() { cityssm.postJSON( los.urlPrefix + "/workOrders/doDeleteWorkOrderComment", { @@ -148,7 +145,7 @@ const deleteWorkOrderComment = (clickEvent: Event) => { } } ); - }; + } bulmaJS.confirm({ title: "Remove Comment?", @@ -159,12 +156,10 @@ const deleteWorkOrderComment = (clickEvent: Event) => { }, contextualColorName: "warning" }); -}; +} -const renderWorkOrderComments = () => { - const containerElement = document.querySelector( - "#container--workOrderComments" - ) as HTMLElement; +function renderWorkOrderComments() { + const containerElement = document.querySelector("#container--workOrderComments") as HTMLElement; if (workOrderComments.length === 0) { containerElement.innerHTML = @@ -215,26 +210,25 @@ const renderWorkOrderComments = () => { "" + ""); - (tableRowElement.querySelector(".button--edit") as HTMLButtonElement).addEventListener( - "click", - openEditWorkOrderComment - ); + tableRowElement + .querySelector(".button--edit")! + .addEventListener("click", openEditWorkOrderComment); - ( - tableRowElement.querySelector(".button--delete") as HTMLButtonElement - ).addEventListener("click", deleteWorkOrderComment); + tableRowElement + .querySelector(".button--delete")! + .addEventListener("click", deleteWorkOrderComment); tableElement.querySelector("tbody")!.append(tableRowElement); } containerElement.innerHTML = ""; containerElement.append(tableElement); -}; +} -const openAddCommentModal = () => { +function openAddCommentModal() { let addCommentCloseModalFunction: () => void; - const doAddComment = (formEvent: SubmitEvent) => { + function doAddComment(formEvent: SubmitEvent) { formEvent.preventDefault(); cityssm.postJSON( @@ -251,15 +245,13 @@ const openAddCommentModal = () => { } } ); - }; + } cityssm.openHtmlModal("workOrder-addComment", { onshow(modalElement) { los.populateAliases(modalElement); ( - modalElement.querySelector( - "#workOrderCommentAdd--workOrderId" - ) as HTMLInputElement + modalElement.querySelector("#workOrderCommentAdd--workOrderId") as HTMLInputElement ).value = workOrderId; modalElement.querySelector("form")!.addEventListener("submit", doAddComment); }, @@ -277,12 +269,12 @@ const openAddCommentModal = () => { (document.querySelector("#workOrderComments--add") as HTMLButtonElement).focus(); } }); -}; +} if (!isCreate) { - (document.querySelector("#workOrderComments--add") as HTMLButtonElement).addEventListener( - "click", - openAddCommentModal - ); + document + .querySelector("#workOrderComments--add")! + .addEventListener("click", openAddCommentModal); + renderWorkOrderComments(); -} \ No newline at end of file +} diff --git a/public/javascripts/workOrderEdit.min.js b/public/javascripts/workOrderEdit.min.js index 36de7332..6bfb7aef 100644 --- a/public/javascripts/workOrderEdit.min.js +++ b/public/javascripts/workOrderEdit.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#workOrderEdit--workOrderId").value,o=""===t,r=document.querySelector("#form--workOrderEdit");e.initializeDatePickers(r.querySelector("#workOrderEdit--workOrderOpenDateString").closest(".field")),e.initializeUnlockFieldButtons(r),r.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/"+(o?"doCreateWorkOrder":"doUpdateWorkOrder"),t.currentTarget,t=>{t.success?(cityssm.disableNavBlocker(),o?window.location.href=e.urlPrefix+"/workOrders/"+t.workOrderId+"/edit":bulmaJS.alert({message:"Work Order Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order",message:t.errorMessage||"",contextualColorName:"danger"})})});const s=r.querySelectorAll("input, select");for(const e of s)e.addEventListener("change",cityssm.enableNavBlocker);let a;if(!o){const o=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doCloseWorkOrder",{workOrderId:t},o=>{o.success?window.location.href=e.urlPrefix+"/workOrders/"+encodeURIComponent(t):bulmaJS.alert({title:"Error Closing Work Order",message:o.errorMessage||"",contextualColorName:"danger"})})};document.querySelector("#button--closeWorkOrder").addEventListener("click",()=>{a.some(e=>!e.workOrderMilestoneCompletionDate)?bulmaJS.alert({title:"Outstanding Milestones",message:"You cannot close a work order with outstanding milestones. Either complete the outstanding milestones, or remove them from the work order.",contextualColorName:"warning"}):bulmaJS.confirm({title:"Close Work Order",message:"Are you sure you want to close this work order?",contextualColorName:"info",okButton:{text:"Yes, Close Work Order",callbackFunction:o}})});const r=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrder",{workOrderId:t},t=>{t.success?window.location.href=e.urlPrefix+"/workOrders":bulmaJS.alert({title:"Error Deleting Work Order",message:t.errorMessage||"",contextualColorName:"danger"})})};document.querySelector("#button--deleteWorkOrder").addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:"Delete Work Order",message:"Are you sure you want to delete this work order?",contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order",callbackFunction:r}})})}if(!o){Object.defineProperty(exports,"__esModule",{value:!0});let o=exports.workOrderLots;delete exports.workOrderLots;let r=exports.workOrderLotOccupancies;function n(o){const s=o.currentTarget.closest(".container--lotOccupancy").dataset.lotOccupancyId;bulmaJS.confirm({title:`Delete ${exports.aliases.occupancy} Relationship`,message:`Are you sure you want to remove the relationship to this ${exports.aliases.occupancy.toLowerCase()} record from this work order? Note that the record will remain.`,contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:function(){cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderLotOccupancy",{workOrderId:t,lotOccupancyId:s},e=>{e.success?(r=e.workOrderLotOccupancies,u()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}}})}function l(r,s){cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderLot",{workOrderId:t,lotId:r},e=>{e.success?(o=e.workOrderLots,u()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot,message:e.errorMessage||"",contextualColorName:"danger"}),s&&s(e.success)})}function c(e){l(e.currentTarget.dataset.lotId)}function i(r){const s=Number.parseInt(r.currentTarget.closest(".container--lot").dataset.lotId,10),a=o.find(e=>e.lotId===s);let n;function l(t){t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateLotStatus",t.currentTarget,e=>{e.success?(o=e.workOrderLots,u(),n()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lot-editLotStatus",{onshow(o){e.populateAliases(o),o.querySelector("#lotStatusEdit--lotId").value=s.toString(),o.querySelector("#lotStatusEdit--lotName").value=a.lotName;const r=o.querySelector("#lotStatusEdit--lotStatusId");let n=!1;for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,e.lotStatusId===a.lotStatusId&&(n=!0),r.append(t)}if(!n&&a.lotStatusId){const e=document.createElement("option");e.value=a.lotStatusId.toString(),e.textContent=a.lotStatus,r.append(e)}a.lotStatusId&&(r.value=a.lotStatusId.toString()),o.querySelector("form").insertAdjacentHTML("beforeend",'')},onshown(e,t){n=t,bulmaJS.toggleHtmlClipped(),e.querySelector("form").addEventListener("submit",l)},onremoved(){bulmaJS.toggleHtmlClipped()}})}function d(r){const s=r.currentTarget.closest(".container--lot").dataset.lotId;bulmaJS.confirm({title:`Delete ${e.escapedAliases.Occupancy} Relationship`,message:`Are you sure you want to remove the relationship to this ${e.escapedAliases.occupancy} record from this work order? Note that the record will remain.`,contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:function(){cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderLot",{workOrderId:t,lotId:s},e=>{e.success?(o=e.workOrderLots,u()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}}})}function u(){!function(){var t;const s=document.querySelector("#container--lotOccupancies");if(document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent=r.length.toString(),0===r.length)return void(s.innerHTML=`
\n

There are no ${exports.aliases.occupancies.toLowerCase()} associated with this work order.

\n
`);s.innerHTML=`\n \n \n \n \n \n \n \n
${e.escapedAliases.Occupancy} Type${e.escapedAliases.Lot}${e.escapedAliases.OccupancyStartDate}End Date${e.escapedAliases.Occupants}
`;const a=cityssm.dateToString(new Date);for(const l of r){const r=document.createElement("tr");r.className="container--lotOccupancy",r.dataset.lotOccupancyId=l.lotOccupancyId.toString();const i=!(l.occupancyEndDate&&l.occupancyEndDateStringl.lotId===e.lotId);r.innerHTML=''+(i?'':'')+''+cityssm.escapeHTML(l.occupancyType||"")+"",l.lotId?r.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(l.lotName||"")+(d?"":' ')+""):r.insertAdjacentHTML("beforeend",`(No ${exports.aliases.lot})`),r.insertAdjacentHTML("beforeend",""+l.occupancyStartDateString+""+(l.occupancyEndDate?l.occupancyEndDateString:'(No End Date)')+""+(0===l.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":null===(t=l.lotOccupancyOccupants)||void 0===t?void 0:t.reduce((e,t)=>e+' '+cityssm.escapeHTML(t.occupantName)+"
",""))+''),l.lotId&&!d&&r.querySelector(".button--addLot").addEventListener("click",c),r.querySelector(".button--deleteLotOccupancy").addEventListener("click",n),s.querySelector("tbody").append(r)}}(),function(){const t=document.querySelector("#container--lots");if(document.querySelector(".tabs a[href='#relatedTab--lots'] .tag").textContent=o.length.toString(),0!==o.length){t.innerHTML=`\n \n \n \n \n \n \n \n \n
${e.escapedAliases.Lot}${e.escapedAliases.Map}${e.escapedAliases.Lot} TypeStatus
`;for(const r of o){const o=document.createElement("tr");o.className="container--lot",o.dataset.lotId=r.lotId.toString(),o.innerHTML=''+cityssm.escapeHTML(r.lotName||"")+""+cityssm.escapeHTML(r.mapName||"")+""+cityssm.escapeHTML(r.lotType||"")+""+(r.lotStatusId?cityssm.escapeHTML(r.lotStatus||""):'(No Status)')+' ',o.querySelector(".button--editLotStatus").addEventListener("click",i),o.querySelector(".button--deleteLot").addEventListener("click",d),t.querySelector("tbody").append(o)}}else t.innerHTML=`
\n

There are no ${e.escapedAliases.lots} associated with this work order.

\n
`}()}function m(o){const s=o.currentTarget.closest("tr");!function(o,s){cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderLotOccupancy",{workOrderId:t,lotOccupancyId:o},e=>{e.success?(r=e.workOrderLotOccupancies,u()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupancy,message:e.errorMessage||"",contextualColorName:"danger"}),s&&s(e.success)})}(s.dataset.lotOccupancyId,e=>{e&&s.remove()})}function p(e){const t=e.currentTarget.closest("tr");l(t.dataset.lotId,e=>{e&&t.remove()})}delete exports.workOrderLotOccupancies,u(),document.querySelector("#button--addLotOccupancy").addEventListener("click",()=>{let o,r;function s(t){t&&t.preventDefault(),r.innerHTML='


Searching...

',cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doSearchLotOccupancies",o,t=>{if(0!==t.lotOccupancies.length){r.innerHTML=`\n \n \n \n \n \n \n \n \n \n
${e.escapedAliases.Occupancy} Type${e.escapedAliases.Lot}${e.escapedAliases.OccupancyStartDate}End Date${e.escapedAliases.Occupants}
`;for(const o of t.lotOccupancies){const t=document.createElement("tr");t.className="container--lotOccupancy",t.dataset.lotOccupancyId=o.lotOccupancyId.toString(),t.innerHTML=''+cityssm.escapeHTML(o.occupancyType||"")+"",o.lotId?t.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(o.lotName||"")+""):t.insertAdjacentHTML("beforeend",`(No ${e.escapedAliases.Lot})`),t.insertAdjacentHTML("beforeend",""+o.occupancyStartDateString+""+(o.occupancyEndDate?o.occupancyEndDateString:'(No End Date)')+""+(0===o.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":cityssm.escapeHTML(o.lotOccupancyOccupants[0].occupantName)+(o.lotOccupancyOccupants.length>1?" plus "+(o.lotOccupancyOccupants.length-1):""))+""),t.querySelector(".button--addLotOccupancy").addEventListener("click",m),r.querySelector("tbody").append(t)}}else r.innerHTML='

There are no records that meet the search criteria.

'})}cityssm.openHtmlModal("workOrder-addLotOccupancy",{onshow(a){e.populateAliases(a),o=a.querySelector("form"),r=a.querySelector("#resultsContainer--lotOccupancyAdd"),a.querySelector("#lotOccupancySearch--notWorkOrderId").value=t,a.querySelector("#lotOccupancySearch--occupancyEffectiveDateString").value=document.querySelector("#workOrderEdit--workOrderOpenDateString").value,s()},onshown(e){bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancySearch--occupantName").addEventListener("change",s),e.querySelector("#lotOccupancySearch--lotName").addEventListener("change",s),o.addEventListener("submit",s)},onremoved(){bulmaJS.toggleHtmlClipped()}})}),document.querySelector("#button--addLot").addEventListener("click",()=>{let o,r;function s(t){t&&t.preventDefault(),r.innerHTML='


Searching...

',cityssm.postJSON(e.urlPrefix+"/lots/doSearchLots",o,t=>{if(0!==t.lots.length){r.innerHTML=`\n \n \n \n \n \n \n \n \n
${e.escapedAliases.Lot}${e.escapedAliases.Map}${e.escapedAliases.Lot} TypeStatus
`;for(const e of t.lots){const t=document.createElement("tr");t.className="container--lot",t.dataset.lotId=e.lotId.toString(),t.innerHTML=''+cityssm.escapeHTML(e.lotName||"")+""+cityssm.escapeHTML(e.mapName||"")+""+cityssm.escapeHTML(e.lotType||"")+""+cityssm.escapeHTML(e.lotStatus||"")+"",t.querySelector(".button--addLot").addEventListener("click",p),r.querySelector("tbody").append(t)}}else r.innerHTML='

There are no records that meet the search criteria.

'})}cityssm.openHtmlModal("workOrder-addLot",{onshow(a){e.populateAliases(a),o=a.querySelector("form"),r=a.querySelector("#resultsContainer--lotAdd"),a.querySelector("#lotSearch--notWorkOrderId").value=t;const n=a.querySelector("#lotSearch--lotStatusId");for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,n.append(t)}s()},onshown(e){bulmaJS.toggleHtmlClipped(),e.querySelector("#lotSearch--lotName").addEventListener("change",s),e.querySelector("#lotSearch--lotStatusId").addEventListener("change",s),o.addEventListener("submit",s)},onremoved(){bulmaJS.toggleHtmlClipped()}})})}Object.defineProperty(exports,"__esModule",{value:!0});let y=exports.workOrderComments;delete exports.workOrderComments;const O=o=>{const r=Number.parseInt(o.currentTarget.closest("tr").dataset.workOrderCommentId,10),s=y.find(e=>e.workOrderCommentId===r);let a,n;const l=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateWorkOrderComment",a,e=>{e.success?(y=e.workOrderComments,n(),w()):bulmaJS.alert({title:"Error Updating Comment",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("workOrder-editComment",{onshow:e=>{e.querySelector("#workOrderCommentEdit--workOrderId").value=t,e.querySelector("#workOrderCommentEdit--workOrderCommentId").value=r.toString(),e.querySelector("#workOrderCommentEdit--workOrderComment").value=s.workOrderComment;const o=e.querySelector("#workOrderCommentEdit--workOrderCommentDateString");o.value=s.workOrderCommentDateString;const a=cityssm.dateToString(new Date);o.max=s.workOrderCommentDateString<=a?a:s.workOrderCommentDateString,e.querySelector("#workOrderCommentEdit--workOrderCommentTimeString").value=s.workOrderCommentTimeString},onshown:(t,o)=>{bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),t.querySelector("#workOrderCommentEdit--workOrderComment").focus(),(a=t.querySelector("form")).addEventListener("submit",l),n=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},h=o=>{const r=Number.parseInt(o.currentTarget.closest("tr").dataset.workOrderCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderComment",{workOrderId:t,workOrderCommentId:r},e=>{e.success?(y=e.workOrderComments,w()):bulmaJS.alert({title:"Error Removing Comment",message:e.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})},w=()=>{const e=document.querySelector("#container--workOrderComments");if(0===y.length)return void(e.innerHTML='

There are no comments to display.

');const t=document.createElement("table");t.className="table is-fullwidth is-striped is-hoverable",t.innerHTML='CommentorComment DateCommentOptions';for(const e of y){const o=document.createElement("tr");o.dataset.workOrderCommentId=e.workOrderCommentId.toString(),o.innerHTML=""+cityssm.escapeHTML(e.recordCreate_userName||"")+""+e.workOrderCommentDateString+(0===e.workOrderCommentTime?"":" "+e.workOrderCommentTimeString)+""+cityssm.escapeHTML(e.workOrderComment||"")+'
',o.querySelector(".button--edit").addEventListener("click",O),o.querySelector(".button--delete").addEventListener("click",h),t.querySelector("tbody").append(o)}e.innerHTML="",e.append(t)},k=()=>{let o;const r=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderComment",t.currentTarget,e=>{e.success&&(y=e.workOrderComments,w(),o())})};cityssm.openHtmlModal("workOrder-addComment",{onshow(o){e.populateAliases(o),o.querySelector("#workOrderCommentAdd--workOrderId").value=t,o.querySelector("form").addEventListener("submit",r)},onshown(e,t){bulmaJS.toggleHtmlClipped(),o=t,e.querySelector("#workOrderCommentAdd--workOrderComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#workOrderComments--add").focus()}})};if(o||(document.querySelector("#workOrderComments--add").addEventListener("click",k),w()),!o){a=exports.workOrderMilestones,delete exports.workOrderMilestones;const o=e=>{e.success?(a=e.workOrderMilestones,c()):bulmaJS.alert({title:"Error Reopening Milestone",message:e.errorMessage||"",contextualColorName:"danger"})},r=r=>{r.preventDefault();const s=cityssm.dateToString(new Date),n=Number.parseInt(r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),l=a.find(e=>e.workOrderMilestoneId===n);bulmaJS.confirm({title:"Complete Milestone",message:"Are you sure you want to complete this milestone?"+(l.workOrderMilestoneDateString>s?"
Note that this milestone is expected to be completed in the future.":""),messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Complete Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doCompleteWorkOrderMilestone",{workOrderId:t,workOrderMilestoneId:n},o)}}})},s=r=>{r.preventDefault();const s=r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Reopen Milestone",message:"Are you sure you want to remove the completion status from this milestone, and reopen it?",contextualColorName:"warning",okButton:{text:"Yes, Reopen Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doReopenWorkOrderMilestone",{workOrderId:t,workOrderMilestoneId:s},o)}}})},n=r=>{r.preventDefault();const s=r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Delete Milestone",message:"Are you sure you want to delete this milestone?",contextualColorName:"warning",okButton:{text:"Yes, Delete Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderMilestone",{workOrderMilestoneId:s,workOrderId:t},o)}}})},l=r=>{r.preventDefault();const s=Number.parseInt(r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),n=a.find(e=>e.workOrderMilestoneId===s);let l;const c=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateWorkOrderMilestone",t.currentTarget,e=>{o(e),e.success&&l()})};cityssm.openHtmlModal("workOrder-editMilestone",{onshow:e=>{e.querySelector("#milestoneEdit--workOrderId").value=t,e.querySelector("#milestoneEdit--workOrderMilestoneId").value=n.workOrderMilestoneId.toString();const o=e.querySelector("#milestoneEdit--workOrderMilestoneTypeId");let r=!1;for(const e of exports.workOrderMilestoneTypes){const t=document.createElement("option");t.value=e.workOrderMilestoneTypeId.toString(),t.textContent=e.workOrderMilestoneType,e.workOrderMilestoneTypeId===n.workOrderMilestoneTypeId&&(t.selected=!0,r=!0),o.append(t)}if(!r&&n.workOrderMilestoneTypeId){const e=document.createElement("option");e.value=n.workOrderMilestoneTypeId.toString(),e.textContent=n.workOrderMilestoneType,e.selected=!0,o.append(e)}e.querySelector("#milestoneEdit--workOrderMilestoneDateString").value=n.workOrderMilestoneDateString,n.workOrderMilestoneTime&&(e.querySelector("#milestoneEdit--workOrderMilestoneTimeString").value=n.workOrderMilestoneTimeString),e.querySelector("#milestoneEdit--workOrderMilestoneDescription").value=n.workOrderMilestoneDescription},onshown:(t,o)=>{l=o,bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),t.querySelector("form").addEventListener("submit",c)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},c=()=>{const e=document.querySelector("#panel--milestones"),t=e.querySelectorAll(".panel-block");for(const e of t)e.remove();for(const t of a){const o=document.createElement("div");o.className="panel-block is-block container--milestone",o.dataset.workOrderMilestoneId=t.workOrderMilestoneId.toString(),o.innerHTML='
'+(t.workOrderMilestoneCompletionDate?'':'')+'
'+(t.workOrderMilestoneTypeId?""+cityssm.escapeHTML(t.workOrderMilestoneType||"")+"
":"")+t.workOrderMilestoneDateString+(t.workOrderMilestoneTime?" "+t.workOrderMilestoneTimeString:"")+'
'+cityssm.escapeHTML(t.workOrderMilestoneDescription||"")+'
',t.workOrderMilestoneCompletionDate?o.querySelector(".button--reopenMilestone").addEventListener("click",s):(o.querySelector(".button--editMilestone").addEventListener("click",l),o.querySelector(".button--completeMilestone").addEventListener("click",r)),o.querySelector(".button--deleteMilestone").addEventListener("click",n),e.append(o)}bulmaJS.init(e)};c(),document.querySelector("#button--addMilestone").addEventListener("click",()=>{let r,s,a;const n=t=>{t&&t.preventDefault();const n=cityssm.dateToString(new Date),l=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderMilestone",s,e=>{o(e),e.success&&a()})};r.querySelector("#milestoneAdd--workOrderMilestoneDateString").value{e.querySelector("#milestoneAdd--workOrderId").value=t;const o=e.querySelector("#milestoneAdd--workOrderMilestoneTypeId");for(const e of exports.workOrderMilestoneTypes){const t=document.createElement("option");t.value=e.workOrderMilestoneTypeId.toString(),t.textContent=e.workOrderMilestoneType,o.append(t)}e.querySelector("#milestoneAdd--workOrderMilestoneDateString").valueAsDate=new Date},onshown:(t,o)=>{r=t,a=o,e.initializeDatePickers(t),bulmaJS.toggleHtmlClipped(),(s=t.querySelector("form")).addEventListener("submit",n)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})})}})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#workOrderEdit--workOrderId").value,o=""===t,r=document.querySelector("#form--workOrderEdit");e.initializeDatePickers(r.querySelector("#workOrderEdit--workOrderOpenDateString").closest(".field")),e.initializeUnlockFieldButtons(r),r.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/"+(o?"doCreateWorkOrder":"doUpdateWorkOrder"),t.currentTarget,t=>{t.success?(cityssm.disableNavBlocker(),o?window.location.href=e.urlPrefix+"/workOrders/"+t.workOrderId+"/edit":bulmaJS.alert({message:"Work Order Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order",message:t.errorMessage||"",contextualColorName:"danger"})})});const s=r.querySelectorAll("input, select");for(const e of s)e.addEventListener("change",cityssm.enableNavBlocker);function n(){cityssm.postJSON(e.urlPrefix+"/workOrders/doCloseWorkOrder",{workOrderId:t},o=>{o.success?window.location.href=e.urlPrefix+"/workOrders/"+encodeURIComponent(t):bulmaJS.alert({title:"Error Closing Work Order",message:o.errorMessage||"",contextualColorName:"danger"})})}function a(){cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrder",{workOrderId:t},t=>{t.success?window.location.href=e.urlPrefix+"/workOrders":bulmaJS.alert({title:"Error Deleting Work Order",message:t.errorMessage||"",contextualColorName:"danger"})})}let l;if(o||(document.querySelector("#button--closeWorkOrder").addEventListener("click",()=>{l.some(e=>!e.workOrderMilestoneCompletionDate)?bulmaJS.alert({title:"Outstanding Milestones",message:"You cannot close a work order with outstanding milestones. Either complete the outstanding milestones, or remove them from the work order.",contextualColorName:"warning"}):bulmaJS.confirm({title:"Close Work Order",message:"Are you sure you want to close this work order?",contextualColorName:"info",okButton:{text:"Yes, Close Work Order",callbackFunction:n}})}),document.querySelector("#button--deleteWorkOrder").addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:"Delete Work Order",message:"Are you sure you want to delete this work order?",contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order",callbackFunction:a}})})),!o){Object.defineProperty(exports,"__esModule",{value:!0});let o=exports.workOrderLots;delete exports.workOrderLots;let r=exports.workOrderLotOccupancies;function c(o){const s=o.currentTarget.closest(".container--lotOccupancy").dataset.lotOccupancyId;bulmaJS.confirm({title:`Delete ${exports.aliases.occupancy} Relationship`,message:`Are you sure you want to remove the relationship to this ${exports.aliases.occupancy.toLowerCase()} record from this work order? Note that the record will remain.`,contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:function(){cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderLotOccupancy",{workOrderId:t,lotOccupancyId:s},e=>{e.success?(r=e.workOrderLotOccupancies,p()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}}})}function i(r,s){cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderLot",{workOrderId:t,lotId:r},e=>{e.success?(o=e.workOrderLots,p()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot,message:e.errorMessage||"",contextualColorName:"danger"}),s&&s(e.success)})}function d(e){i(e.currentTarget.dataset.lotId)}function u(r){const s=Number.parseInt(r.currentTarget.closest(".container--lot").dataset.lotId,10),n=o.find(e=>e.lotId===s);let a;function l(t){t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateLotStatus",t.currentTarget,e=>{e.success?(o=e.workOrderLots,p(),a()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lot-editLotStatus",{onshow(o){e.populateAliases(o),o.querySelector("#lotStatusEdit--lotId").value=s.toString(),o.querySelector("#lotStatusEdit--lotName").value=n.lotName;const r=o.querySelector("#lotStatusEdit--lotStatusId");let a=!1;for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,e.lotStatusId===n.lotStatusId&&(a=!0),r.append(t)}if(!a&&n.lotStatusId){const e=document.createElement("option");e.value=n.lotStatusId.toString(),e.textContent=n.lotStatus,r.append(e)}n.lotStatusId&&(r.value=n.lotStatusId.toString()),o.querySelector("form").insertAdjacentHTML("beforeend",'')},onshown(e,t){a=t,bulmaJS.toggleHtmlClipped(),e.querySelector("form").addEventListener("submit",l)},onremoved(){bulmaJS.toggleHtmlClipped()}})}function m(r){const s=r.currentTarget.closest(".container--lot").dataset.lotId;bulmaJS.confirm({title:`Delete ${e.escapedAliases.Occupancy} Relationship`,message:`Are you sure you want to remove the relationship to this ${e.escapedAliases.occupancy} record from this work order? Note that the record will remain.`,contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:function(){cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderLot",{workOrderId:t,lotId:s},e=>{e.success?(o=e.workOrderLots,p()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}}})}function p(){!function(){var t;const s=document.querySelector("#container--lotOccupancies");if(document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent=r.length.toString(),0===r.length)return void(s.innerHTML=`
\n

There are no ${exports.aliases.occupancies.toLowerCase()} associated with this work order.

\n
`);s.innerHTML=`\n \n \n \n \n \n \n \n
${e.escapedAliases.Occupancy} Type${e.escapedAliases.Lot}${e.escapedAliases.OccupancyStartDate}End Date${e.escapedAliases.Occupants}
`;const n=cityssm.dateToString(new Date);for(const a of r){const r=document.createElement("tr");r.className="container--lotOccupancy",r.dataset.lotOccupancyId=a.lotOccupancyId.toString();const l=!(a.occupancyEndDate&&a.occupancyEndDateStringa.lotId===e.lotId);r.innerHTML=''+(l?'':'')+''+cityssm.escapeHTML(a.occupancyType||"")+"",a.lotId?r.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(a.lotName||"")+(i?"":' ')+""):r.insertAdjacentHTML("beforeend",`(No ${exports.aliases.lot})`),r.insertAdjacentHTML("beforeend",""+a.occupancyStartDateString+""+(a.occupancyEndDate?a.occupancyEndDateString:'(No End Date)')+""+(0===a.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":null===(t=a.lotOccupancyOccupants)||void 0===t?void 0:t.reduce((e,t)=>e+' '+cityssm.escapeHTML(t.occupantName)+"
",""))+''),a.lotId&&!i&&r.querySelector(".button--addLot").addEventListener("click",d),r.querySelector(".button--deleteLotOccupancy").addEventListener("click",c),s.querySelector("tbody").append(r)}}(),function(){const t=document.querySelector("#container--lots");if(document.querySelector(".tabs a[href='#relatedTab--lots'] .tag").textContent=o.length.toString(),0!==o.length){t.innerHTML=`\n \n \n \n \n \n \n \n \n
${e.escapedAliases.Lot}${e.escapedAliases.Map}${e.escapedAliases.Lot} TypeStatus
`;for(const r of o){const o=document.createElement("tr");o.className="container--lot",o.dataset.lotId=r.lotId.toString(),o.innerHTML=''+cityssm.escapeHTML(r.lotName||"")+""+cityssm.escapeHTML(r.mapName||"")+""+cityssm.escapeHTML(r.lotType||"")+""+(r.lotStatusId?cityssm.escapeHTML(r.lotStatus||""):'(No Status)')+' ',o.querySelector(".button--editLotStatus").addEventListener("click",u),o.querySelector(".button--deleteLot").addEventListener("click",m),t.querySelector("tbody").append(o)}}else t.innerHTML=`
\n

There are no ${e.escapedAliases.lots} associated with this work order.

\n
`}()}function y(o){const s=o.currentTarget.closest("tr");!function(o,s){cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderLotOccupancy",{workOrderId:t,lotOccupancyId:o},e=>{e.success?(r=e.workOrderLotOccupancies,p()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupancy,message:e.errorMessage||"",contextualColorName:"danger"}),s&&s(e.success)})}(s.dataset.lotOccupancyId,e=>{e&&s.remove()})}function O(e){const t=e.currentTarget.closest("tr");i(t.dataset.lotId,e=>{e&&t.remove()})}delete exports.workOrderLotOccupancies,p(),document.querySelector("#button--addLotOccupancy").addEventListener("click",()=>{let o,r;function s(t){t&&t.preventDefault(),r.innerHTML='


Searching...

',cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doSearchLotOccupancies",o,t=>{if(0!==t.lotOccupancies.length){r.innerHTML=`\n \n \n \n \n \n \n \n \n \n
${e.escapedAliases.Occupancy} Type${e.escapedAliases.Lot}${e.escapedAliases.OccupancyStartDate}End Date${e.escapedAliases.Occupants}
`;for(const o of t.lotOccupancies){const t=document.createElement("tr");t.className="container--lotOccupancy",t.dataset.lotOccupancyId=o.lotOccupancyId.toString(),t.innerHTML=''+cityssm.escapeHTML(o.occupancyType||"")+"",o.lotId?t.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(o.lotName||"")+""):t.insertAdjacentHTML("beforeend",`(No ${e.escapedAliases.Lot})`),t.insertAdjacentHTML("beforeend",""+o.occupancyStartDateString+""+(o.occupancyEndDate?o.occupancyEndDateString:'(No End Date)')+""+(0===o.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":cityssm.escapeHTML(o.lotOccupancyOccupants[0].occupantName)+(o.lotOccupancyOccupants.length>1?" plus "+(o.lotOccupancyOccupants.length-1):""))+""),t.querySelector(".button--addLotOccupancy").addEventListener("click",y),r.querySelector("tbody").append(t)}}else r.innerHTML='

There are no records that meet the search criteria.

'})}cityssm.openHtmlModal("workOrder-addLotOccupancy",{onshow(n){e.populateAliases(n),o=n.querySelector("form"),r=n.querySelector("#resultsContainer--lotOccupancyAdd"),n.querySelector("#lotOccupancySearch--notWorkOrderId").value=t,n.querySelector("#lotOccupancySearch--occupancyEffectiveDateString").value=document.querySelector("#workOrderEdit--workOrderOpenDateString").value,s()},onshown(e){bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancySearch--occupantName").addEventListener("change",s),e.querySelector("#lotOccupancySearch--lotName").addEventListener("change",s),o.addEventListener("submit",s)},onremoved(){bulmaJS.toggleHtmlClipped()}})}),document.querySelector("#button--addLot").addEventListener("click",()=>{let o,r;function s(t){t&&t.preventDefault(),r.innerHTML='


Searching...

',cityssm.postJSON(e.urlPrefix+"/lots/doSearchLots",o,t=>{if(0!==t.lots.length){r.innerHTML=`\n \n \n \n \n \n \n \n \n
${e.escapedAliases.Lot}${e.escapedAliases.Map}${e.escapedAliases.Lot} TypeStatus
`;for(const e of t.lots){const t=document.createElement("tr");t.className="container--lot",t.dataset.lotId=e.lotId.toString(),t.innerHTML=''+cityssm.escapeHTML(e.lotName||"")+""+cityssm.escapeHTML(e.mapName||"")+""+cityssm.escapeHTML(e.lotType||"")+""+cityssm.escapeHTML(e.lotStatus||"")+"",t.querySelector(".button--addLot").addEventListener("click",O),r.querySelector("tbody").append(t)}}else r.innerHTML='

There are no records that meet the search criteria.

'})}cityssm.openHtmlModal("workOrder-addLot",{onshow(n){e.populateAliases(n),o=n.querySelector("form"),r=n.querySelector("#resultsContainer--lotAdd"),n.querySelector("#lotSearch--notWorkOrderId").value=t;const a=n.querySelector("#lotSearch--lotStatusId");for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,a.append(t)}s()},onshown(e){bulmaJS.toggleHtmlClipped(),e.querySelector("#lotSearch--lotName").addEventListener("change",s),e.querySelector("#lotSearch--lotStatusId").addEventListener("change",s),o.addEventListener("submit",s)},onremoved(){bulmaJS.toggleHtmlClipped()}})})}Object.defineProperty(exports,"__esModule",{value:!0});let h=exports.workOrderComments;delete exports.workOrderComments;const w=o=>{const r=Number.parseInt(o.currentTarget.closest("tr").dataset.workOrderCommentId,10),s=h.find(e=>e.workOrderCommentId===r);let n,a;function l(t){t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateWorkOrderComment",n,e=>{e.success?(h=e.workOrderComments,a(),S()):bulmaJS.alert({title:"Error Updating Comment",message:e.errorMessage||"",contextualColorName:"danger"})})}cityssm.openHtmlModal("workOrder-editComment",{onshow(e){e.querySelector("#workOrderCommentEdit--workOrderId").value=t,e.querySelector("#workOrderCommentEdit--workOrderCommentId").value=r.toString(),e.querySelector("#workOrderCommentEdit--workOrderComment").value=s.workOrderComment;const o=e.querySelector("#workOrderCommentEdit--workOrderCommentDateString");o.value=s.workOrderCommentDateString;const n=cityssm.dateToString(new Date);o.max=s.workOrderCommentDateString<=n?n:s.workOrderCommentDateString,e.querySelector("#workOrderCommentEdit--workOrderCommentTimeString").value=s.workOrderCommentTimeString},onshown(t,o){bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),t.querySelector("#workOrderCommentEdit--workOrderComment").focus(),(n=t.querySelector("form")).addEventListener("submit",l),a=o},onremoved(){bulmaJS.toggleHtmlClipped()}})};function k(o){const r=Number.parseInt(o.currentTarget.closest("tr").dataset.workOrderCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:function(){cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderComment",{workOrderId:t,workOrderCommentId:r},e=>{e.success?(h=e.workOrderComments,S()):bulmaJS.alert({title:"Error Removing Comment",message:e.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})}function S(){const e=document.querySelector("#container--workOrderComments");if(0===h.length)return void(e.innerHTML='

There are no comments to display.

');const t=document.createElement("table");t.className="table is-fullwidth is-striped is-hoverable",t.innerHTML='CommentorComment DateCommentOptions';for(const e of h){const o=document.createElement("tr");o.dataset.workOrderCommentId=e.workOrderCommentId.toString(),o.innerHTML=""+cityssm.escapeHTML(e.recordCreate_userName||"")+""+e.workOrderCommentDateString+(0===e.workOrderCommentTime?"":" "+e.workOrderCommentTimeString)+""+cityssm.escapeHTML(e.workOrderComment||"")+'
',o.querySelector(".button--edit").addEventListener("click",w),o.querySelector(".button--delete").addEventListener("click",k),t.querySelector("tbody").append(o)}e.innerHTML="",e.append(t)}function g(e){e.success?(l=e.workOrderMilestones,L()):bulmaJS.alert({title:"Error Reopening Milestone",message:e.errorMessage||"",contextualColorName:"danger"})}function f(o){o.preventDefault();const r=cityssm.dateToString(new Date),s=Number.parseInt(o.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),n=l.find(e=>e.workOrderMilestoneId===s);bulmaJS.confirm({title:"Complete Milestone",message:"Are you sure you want to complete this milestone?"+(n.workOrderMilestoneDateString>r?"
Note that this milestone is expected to be completed in the future.":""),messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Complete Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doCompleteWorkOrderMilestone",{workOrderId:t,workOrderMilestoneId:s},g)}}})}function b(o){o.preventDefault();const r=o.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Reopen Milestone",message:"Are you sure you want to remove the completion status from this milestone, and reopen it?",contextualColorName:"warning",okButton:{text:"Yes, Reopen Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doReopenWorkOrderMilestone",{workOrderId:t,workOrderMilestoneId:r},g)}}})}function M(o){o.preventDefault();const r=o.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Delete Milestone",message:"Are you sure you want to delete this milestone?",contextualColorName:"warning",okButton:{text:"Yes, Delete Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderMilestone",{workOrderMilestoneId:r,workOrderId:t},g)}}})}function v(o){o.preventDefault();const r=Number.parseInt(o.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),s=l.find(e=>e.workOrderMilestoneId===r);let n;const a=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateWorkOrderMilestone",t.currentTarget,e=>{g(e),e.success&&n()})};cityssm.openHtmlModal("workOrder-editMilestone",{onshow:e=>{e.querySelector("#milestoneEdit--workOrderId").value=t,e.querySelector("#milestoneEdit--workOrderMilestoneId").value=s.workOrderMilestoneId.toString();const o=e.querySelector("#milestoneEdit--workOrderMilestoneTypeId");let r=!1;for(const e of exports.workOrderMilestoneTypes){const t=document.createElement("option");t.value=e.workOrderMilestoneTypeId.toString(),t.textContent=e.workOrderMilestoneType,e.workOrderMilestoneTypeId===s.workOrderMilestoneTypeId&&(t.selected=!0,r=!0),o.append(t)}if(!r&&s.workOrderMilestoneTypeId){const e=document.createElement("option");e.value=s.workOrderMilestoneTypeId.toString(),e.textContent=s.workOrderMilestoneType,e.selected=!0,o.append(e)}e.querySelector("#milestoneEdit--workOrderMilestoneDateString").value=s.workOrderMilestoneDateString,s.workOrderMilestoneTime&&(e.querySelector("#milestoneEdit--workOrderMilestoneTimeString").value=s.workOrderMilestoneTimeString),e.querySelector("#milestoneEdit--workOrderMilestoneDescription").value=s.workOrderMilestoneDescription},onshown:(t,o)=>{n=o,bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),t.querySelector("form").addEventListener("submit",a)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}function L(){const e=document.querySelector("#panel--milestones"),t=e.querySelectorAll(".panel-block");for(const e of t)e.remove();for(const t of l){const o=document.createElement("div");o.className="panel-block is-block container--milestone",o.dataset.workOrderMilestoneId=t.workOrderMilestoneId.toString(),o.innerHTML='
'+(t.workOrderMilestoneCompletionDate?'':'')+'
'+(t.workOrderMilestoneTypeId?""+cityssm.escapeHTML(t.workOrderMilestoneType||"")+"
":"")+t.workOrderMilestoneDateString+(t.workOrderMilestoneTime?" "+t.workOrderMilestoneTimeString:"")+'
'+cityssm.escapeHTML(t.workOrderMilestoneDescription||"")+'
',t.workOrderMilestoneCompletionDate?o.querySelector(".button--reopenMilestone").addEventListener("click",b):(o.querySelector(".button--editMilestone").addEventListener("click",v),o.querySelector(".button--completeMilestone").addEventListener("click",f)),o.querySelector(".button--deleteMilestone").addEventListener("click",M),e.append(o)}bulmaJS.init(e)}o||(document.querySelector("#workOrderComments--add").addEventListener("click",function(){let o;function r(t){t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderComment",t.currentTarget,e=>{e.success&&(h=e.workOrderComments,S(),o())})}cityssm.openHtmlModal("workOrder-addComment",{onshow(o){e.populateAliases(o),o.querySelector("#workOrderCommentAdd--workOrderId").value=t,o.querySelector("form").addEventListener("submit",r)},onshown(e,t){bulmaJS.toggleHtmlClipped(),o=t,e.querySelector("#workOrderCommentAdd--workOrderComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#workOrderComments--add").focus()}})}),S()),o||(l=exports.workOrderMilestones,delete exports.workOrderMilestones,L(),document.querySelector("#button--addMilestone").addEventListener("click",()=>{let o,r,s;const n=t=>{t&&t.preventDefault();const n=cityssm.dateToString(new Date);function a(){cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderMilestone",r,e=>{g(e),e.success&&s()})}o.querySelector("#milestoneAdd--workOrderMilestoneDateString").value