"use strict"; // eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair /* eslint-disable unicorn/prefer-module */ Object.defineProperty(exports, "__esModule", { value: true }); (() => { var _a, _b, _c, _d; const los = exports.los; const workOrderId = document.querySelector('#workOrderEdit--workOrderId').value; const isCreate = workOrderId === ''; const workOrderFormElement = document.querySelector('#form--workOrderEdit'); los.initializeDatePickers((_a = workOrderFormElement .querySelector('#workOrderEdit--workOrderOpenDateString')) === null || _a === void 0 ? void 0 : _a.closest('.field')); los.initializeUnlockFieldButtons(workOrderFormElement); function setUnsavedChanges() { var _a; los.setUnsavedChanges(); (_a = document .querySelector("button[type='submit'][form='form--workOrderEdit']")) === null || _a === void 0 ? void 0 : _a.classList.remove('is-light'); } function clearUnsavedChanges() { var _a; los.clearUnsavedChanges(); (_a = document .querySelector("button[type='submit'][form='form--workOrderEdit']")) === null || _a === void 0 ? void 0 : _a.classList.add('is-light'); } workOrderFormElement.addEventListener('submit', (submitEvent) => { submitEvent.preventDefault(); cityssm.postJSON(los.urlPrefix + '/workOrders/' + (isCreate ? 'doCreateWorkOrder' : 'doUpdateWorkOrder'), submitEvent.currentTarget, (rawResponseJSON) => { var _a; const responseJSON = rawResponseJSON; if (responseJSON.success) { clearUnsavedChanges(); if (isCreate) { window.location.href = los.getWorkOrderURL(responseJSON.workOrderId, true); } else { bulmaJS.alert({ message: 'Work Order Updated Successfully', contextualColorName: 'success' }); } } else { bulmaJS.alert({ title: 'Error Updating Work Order', message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', contextualColorName: 'danger' }); } }); }); const inputElements = workOrderFormElement.querySelectorAll('input, select, textarea'); for (const inputElement of inputElements) { inputElement.addEventListener('change', setUnsavedChanges); } /* * Work Order Options */ function doClose() { cityssm.postJSON(`${los.urlPrefix}/workOrders/doCloseWorkOrder`, { workOrderId }, (rawResponseJSON) => { var _a; const responseJSON = rawResponseJSON; if (responseJSON.success) { clearUnsavedChanges(); window.location.href = los.getWorkOrderURL(workOrderId); } else { bulmaJS.alert({ title: 'Error Closing Work Order', message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', contextualColorName: 'danger' }); } }); } function doDelete() { cityssm.postJSON(`${los.urlPrefix}/workOrders/doDeleteWorkOrder`, { workOrderId }, (rawResponseJSON) => { var _a; const responseJSON = rawResponseJSON; if (responseJSON.success) { clearUnsavedChanges(); window.location.href = `${los.urlPrefix}/workOrders`; } else { bulmaJS.alert({ title: 'Error Deleting Work Order', message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', contextualColorName: 'danger' }); } }); } let workOrderMilestones; (_b = document .querySelector('#button--closeWorkOrder')) === null || _b === void 0 ? void 0 : _b.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' }); /* // 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 { bulmaJS.confirm({ title: 'Close Work Order', message: los.hasUnsavedChanges() ? 'Are you sure you want to close this work order with unsaved changes?' : 'Are you sure you want to close this work order?', contextualColorName: los.hasUnsavedChanges() ? 'warning' : 'info', okButton: { text: 'Yes, Close Work Order', callbackFunction: doClose } }); } }); (_c = document .querySelector('#button--deleteWorkOrder')) === null || _c === void 0 ? void 0 : _c.addEventListener('click', (clickEvent) => { clickEvent.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: doDelete } }); }); /* * Related Lots */ if (!isCreate) { "use strict"; /* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ var _a, _b; Object.defineProperty(exports, "__esModule", { value: true }); let workOrderLots = exports.workOrderLots; delete exports.workOrderLots; let workOrderLotOccupancies = exports.workOrderLotOccupancies; delete exports.workOrderLotOccupancies; function deleteLotOccupancy(clickEvent) { const lotOccupancyId = clickEvent.currentTarget.closest('.container--lotOccupancy').dataset.lotOccupancyId; function doDelete() { cityssm.postJSON(los.urlPrefix + '/workOrders/doDeleteWorkOrderLotOccupancy', { workOrderId, lotOccupancyId }, (rawResponseJSON) => { var _a; const responseJSON = rawResponseJSON; if (responseJSON.success) { workOrderLotOccupancies = responseJSON.workOrderLotOccupancies; renderRelatedLotsAndOccupancies(); } else { bulmaJS.alert({ title: 'Error Deleting Relationship', message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', contextualColorName: 'danger' }); } }); } bulmaJS.confirm({ title: `Delete ${los.escapedAliases.Occupancy} Relationship`, message: `Are you sure you want to remove the relationship to this ${los.escapedAliases.occupancy} record from this work order? Note that the record will remain.`, contextualColorName: 'warning', okButton: { text: 'Yes, Delete Relationship', callbackFunction: doDelete } }); } function addLot(lotId, callbackFunction) { cityssm.postJSON(los.urlPrefix + '/workOrders/doAddWorkOrderLot', { workOrderId, lotId }, (rawResponseJSON) => { var _a; const responseJSON = rawResponseJSON; if (responseJSON.success) { workOrderLots = responseJSON.workOrderLots; renderRelatedLotsAndOccupancies(); } else { bulmaJS.alert({ title: `Error Adding ${los.escapedAliases.Lot}`, message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', contextualColorName: 'danger' }); } if (callbackFunction !== undefined) { callbackFunction(responseJSON.success); } }); } function addLotOccupancy(lotOccupancyId, callbackFunction) { cityssm.postJSON(los.urlPrefix + '/workOrders/doAddWorkOrderLotOccupancy', { workOrderId, lotOccupancyId }, (rawResponseJSON) => { var _a; const responseJSON = rawResponseJSON; if (responseJSON.success) { workOrderLotOccupancies = responseJSON.workOrderLotOccupancies; renderRelatedLotsAndOccupancies(); } else { bulmaJS.alert({ title: 'Error Adding ' + los.escapedAliases.Occupancy, message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', contextualColorName: 'danger' }); } if (callbackFunction !== undefined) { callbackFunction(responseJSON.success); } }); } function addLotFromLotOccupancy(clickEvent) { const lotId = clickEvent.currentTarget.dataset.lotId; addLot(lotId); } function renderRelatedOccupancies() { var _a, _b, _c, _d; const occupanciesContainerElement = document.querySelector('#container--lotOccupancies'); document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent = workOrderLotOccupancies.length.toString(); if (workOrderLotOccupancies.length === 0) { occupanciesContainerElement.innerHTML = `

There are no ${los.escapedAliases.occupancies} associated with this work order.

`; return; } occupanciesContainerElement.innerHTML = `
${los.escapedAliases.Occupancy} Type ${los.escapedAliases.Lot} ${los.escapedAliases.OccupancyStartDate} End Date ${los.escapedAliases.Occupants}
`; const currentDateString = cityssm.dateToString(new Date()); for (const lotOccupancy of workOrderLotOccupancies) { const rowElement = document.createElement('tr'); rowElement.className = 'container--lotOccupancy'; rowElement.dataset.lotOccupancyId = lotOccupancy.lotOccupancyId.toString(); const isActive = !(lotOccupancy.occupancyEndDate && lotOccupancy.occupancyEndDateString < currentDateString); const hasLotRecord = lotOccupancy.lotId && workOrderLots.some((lot) => { return lotOccupancy.lotId === lot.lotId; }); rowElement.innerHTML = '' + (isActive ? '' : '') + '' + ('' + '' + cityssm.escapeHTML((_a = lotOccupancy.occupancyType) !== null && _a !== void 0 ? _a : '') + '
' + `#${lotOccupancy.lotOccupancyId}` + ''); if (lotOccupancy.lotId) { rowElement.insertAdjacentHTML('beforeend', '' + cityssm.escapeHTML((_b = lotOccupancy.lotName) !== null && _b !== void 0 ? _b : '') + (hasLotRecord ? '' : ' ') + ''); } else { rowElement.insertAdjacentHTML('beforeend', `(No ${los.escapedAliases.Lot})`); } let occupantsHTML = ''; for (const occupant of lotOccupancy.lotOccupancyOccupants) { occupantsHTML += `
  • ${cityssm.escapeHTML(occupant.occupantName)} ${cityssm.escapeHTML(occupant.occupantFamilyName)}
  • `; } rowElement.insertAdjacentHTML('beforeend', '' + lotOccupancy.occupancyStartDateString + '' + ('' + (lotOccupancy.occupancyEndDate ? lotOccupancy.occupancyEndDateString : '(No End Date)') + '') + ('' + (lotOccupancy.lotOccupancyOccupants.length === 0 ? `(No ${los.escapedAliases.Occupants})` : ``) + '') + ('' + '' + '')); (_d = rowElement .querySelector('.button--addLot')) === null || _d === void 0 ? void 0 : _d.addEventListener('click', addLotFromLotOccupancy); rowElement .querySelector('.button--deleteLotOccupancy') .addEventListener('click', deleteLotOccupancy); occupanciesContainerElement.querySelector('tbody').append(rowElement); } } function openEditLotStatus(clickEvent) { const lotId = Number.parseInt(clickEvent.currentTarget.closest('.container--lot').dataset.lotId, 10); const lot = workOrderLots.find((possibleLot) => { return possibleLot.lotId === lotId; }); let editCloseModalFunction; function doUpdateLotStatus(submitEvent) { submitEvent.preventDefault(); cityssm.postJSON(los.urlPrefix + '/workOrders/doUpdateLotStatus', submitEvent.currentTarget, (rawResponseJSON) => { var _a; const responseJSON = rawResponseJSON; if (responseJSON.success) { workOrderLots = responseJSON.workOrderLots; renderRelatedLotsAndOccupancies(); editCloseModalFunction(); } else { bulmaJS.alert({ title: 'Error Deleting Relationship', message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', contextualColorName: 'danger' }); } }); } cityssm.openHtmlModal('lot-editLotStatus', { onshow(modalElement) { los.populateAliases(modalElement); modalElement.querySelector('#lotStatusEdit--lotId').value = lotId.toString(); modalElement.querySelector('#lotStatusEdit--lotName').value = lot.lotName; const lotStatusElement = modalElement.querySelector('#lotStatusEdit--lotStatusId'); let lotStatusFound = false; for (const lotStatus of exports.lotStatuses) { const optionElement = document.createElement('option'); optionElement.value = lotStatus.lotStatusId.toString(); optionElement.textContent = lotStatus.lotStatus; if (lotStatus.lotStatusId === lot.lotStatusId) { lotStatusFound = true; } lotStatusElement.append(optionElement); } if (!lotStatusFound && lot.lotStatusId) { const optionElement = document.createElement('option'); optionElement.value = lot.lotStatusId.toString(); optionElement.textContent = lot.lotStatus; lotStatusElement.append(optionElement); } if (lot.lotStatusId) { lotStatusElement.value = lot.lotStatusId.toString(); } modalElement .querySelector('form') .insertAdjacentHTML('beforeend', ``); }, onshown(modalElement, closeModalFunction) { editCloseModalFunction = closeModalFunction; bulmaJS.toggleHtmlClipped(); modalElement .querySelector('form') .addEventListener('submit', doUpdateLotStatus); }, onremoved() { bulmaJS.toggleHtmlClipped(); } }); } function deleteLot(clickEvent) { const lotId = clickEvent.currentTarget.closest('.container--lot').dataset.lotId; function doDelete() { cityssm.postJSON(los.urlPrefix + '/workOrders/doDeleteWorkOrderLot', { workOrderId, lotId }, (rawResponseJSON) => { var _a; const responseJSON = rawResponseJSON; if (responseJSON.success) { workOrderLots = responseJSON.workOrderLots; renderRelatedLotsAndOccupancies(); } else { bulmaJS.alert({ title: 'Error Deleting Relationship', message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', contextualColorName: 'danger' }); } }); } bulmaJS.confirm({ title: `Delete ${los.escapedAliases.Occupancy} Relationship`, message: `Are you sure you want to remove the relationship to this ${los.escapedAliases.occupancy} record from this work order? Note that the record will remain.`, contextualColorName: 'warning', okButton: { text: 'Yes, Delete Relationship', callbackFunction: doDelete } }); } function renderRelatedLots() { var _a, _b, _c, _d; const lotsContainerElement = document.querySelector('#container--lots'); document.querySelector(".tabs a[href='#relatedTab--lots'] .tag").textContent = workOrderLots.length.toString(); if (workOrderLots.length === 0) { lotsContainerElement.innerHTML = `

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

    `; return; } lotsContainerElement.innerHTML = `
    ${los.escapedAliases.Lot} ${los.escapedAliases.Map} ${los.escapedAliases.Lot} Type Status
    `; for (const lot of workOrderLots) { const rowElement = document.createElement('tr'); rowElement.className = 'container--lot'; rowElement.dataset.lotId = lot.lotId.toString(); rowElement.innerHTML = '' + '' + cityssm.escapeHTML((_a = lot.lotName) !== null && _a !== void 0 ? _a : '') + '' + '' + `${cityssm.escapeHTML((_b = lot.mapName) !== null && _b !== void 0 ? _b : '')}` + `${cityssm.escapeHTML((_c = lot.lotType) !== null && _c !== void 0 ? _c : '')}` + ('' + (lot.lotStatusId ? cityssm.escapeHTML((_d = lot.lotStatus) !== null && _d !== void 0 ? _d : '') : '(No Status)') + '') + ` `; rowElement .querySelector('.button--editLotStatus') .addEventListener('click', openEditLotStatus); rowElement .querySelector('.button--deleteLot') .addEventListener('click', deleteLot); lotsContainerElement.querySelector('tbody').append(rowElement); } } function renderRelatedLotsAndOccupancies() { renderRelatedOccupancies(); renderRelatedLots(); } renderRelatedLotsAndOccupancies(); function doAddLotOccupancy(clickEvent) { const rowElement = clickEvent.currentTarget.closest('tr'); const lotOccupancyId = rowElement.dataset.lotOccupancyId; addLotOccupancy(lotOccupancyId, (success) => { if (success) { rowElement.remove(); } }); } (_a = document .querySelector('#button--addLotOccupancy')) === null || _a === void 0 ? void 0 : _a.addEventListener('click', () => { let searchFormElement; let searchResultsContainerElement; function doSearch(event) { if (event) { event.preventDefault(); } searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML('Searching...'); cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doSearchLotOccupancies', searchFormElement, (rawResponseJSON) => { var _a, _b; const responseJSON = rawResponseJSON; if (responseJSON.lotOccupancies.length === 0) { searchResultsContainerElement.innerHTML = `

    There are no records that meet the search criteria.

    `; return; } searchResultsContainerElement.innerHTML = `
    ${los.escapedAliases.Occupancy} Type ${los.escapedAliases.Lot} ${los.escapedAliases.OccupancyStartDate} End Date ${los.escapedAliases.Occupants}
    `; for (const lotOccupancy of responseJSON.lotOccupancies) { const rowElement = document.createElement('tr'); rowElement.className = 'container--lotOccupancy'; rowElement.dataset.lotOccupancyId = lotOccupancy.lotOccupancyId.toString(); rowElement.innerHTML = ` ${cityssm.escapeHTML((_a = lotOccupancy.occupancyType) !== null && _a !== void 0 ? _a : '')} `; if (lotOccupancy.lotId) { rowElement.insertAdjacentHTML('beforeend', '' + cityssm.escapeHTML((_b = lotOccupancy.lotName) !== null && _b !== void 0 ? _b : '') + ''); } else { rowElement.insertAdjacentHTML('beforeend', `(No ${los.escapedAliases.Lot})`); } rowElement.insertAdjacentHTML('beforeend', `${lotOccupancy.occupancyStartDateString}` + ('' + (lotOccupancy.occupancyEndDate ? lotOccupancy.occupancyEndDateString : '(No End Date)') + '') + ('' + (lotOccupancy.lotOccupancyOccupants.length === 0 ? `(No ${cityssm.escapeHTML(los.escapedAliases.Occupants)})` : cityssm.escapeHTML(lotOccupancy.lotOccupancyOccupants[0].occupantName + ' ' + lotOccupancy.lotOccupancyOccupants[0] .occupantFamilyName) + (lotOccupancy.lotOccupancyOccupants.length > 1 ? ' plus ' + (lotOccupancy.lotOccupancyOccupants.length - 1).toString() : '')) + '')); rowElement .querySelector('.button--addLotOccupancy') .addEventListener('click', doAddLotOccupancy); searchResultsContainerElement .querySelector('tbody') .append(rowElement); } }); } cityssm.openHtmlModal('workOrder-addLotOccupancy', { onshow(modalElement) { los.populateAliases(modalElement); searchFormElement = modalElement.querySelector('form'); searchResultsContainerElement = modalElement.querySelector('#resultsContainer--lotOccupancyAdd'); modalElement.querySelector('#lotOccupancySearch--notWorkOrderId').value = workOrderId; modalElement.querySelector('#lotOccupancySearch--occupancyEffectiveDateString').value = document.querySelector('#workOrderEdit--workOrderOpenDateString').value; doSearch(); }, onshown(modalElement) { bulmaJS.toggleHtmlClipped(); const occupantNameElement = modalElement.querySelector('#lotOccupancySearch--occupantName'); occupantNameElement.addEventListener('change', doSearch); occupantNameElement.focus(); modalElement.querySelector('#lotOccupancySearch--lotName').addEventListener('change', doSearch); searchFormElement.addEventListener('submit', doSearch); }, onremoved() { bulmaJS.toggleHtmlClipped(); document.querySelector('#button--addLotOccupancy').focus(); } }); }); function doAddLot(clickEvent) { const rowElement = clickEvent.currentTarget.closest('tr'); const lotId = rowElement.dataset.lotId; addLot(lotId, (success) => { if (success) { rowElement.remove(); } }); } (_b = document.querySelector('#button--addLot')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', () => { let searchFormElement; let searchResultsContainerElement; function doSearch(event) { if (event) { event.preventDefault(); } searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML('Searching...'); cityssm.postJSON(los.urlPrefix + '/lots/doSearchLots', searchFormElement, (rawResponseJSON) => { var _a, _b, _c, _d; const responseJSON = rawResponseJSON; if (responseJSON.lots.length === 0) { searchResultsContainerElement.innerHTML = '
    ' + '

    There are no records that meet the search criteria.

    ' + '
    '; return; } searchResultsContainerElement.innerHTML = `
    ${los.escapedAliases.Lot} ${los.escapedAliases.Map} ${los.escapedAliases.Lot} Type Status
    `; for (const lot of responseJSON.lots) { const rowElement = document.createElement('tr'); rowElement.className = 'container--lot'; rowElement.dataset.lotId = lot.lotId.toString(); rowElement.innerHTML = '' + '' + '' + ('' + cityssm.escapeHTML((_a = lot.lotName) !== null && _a !== void 0 ? _a : '') + '') + '' + cityssm.escapeHTML((_b = lot.mapName) !== null && _b !== void 0 ? _b : '') + '' + ('' + cityssm.escapeHTML((_c = lot.lotType) !== null && _c !== void 0 ? _c : '') + '') + ('' + cityssm.escapeHTML((_d = lot.lotStatus) !== null && _d !== void 0 ? _d : '') + ''); rowElement .querySelector('.button--addLot') .addEventListener('click', doAddLot); searchResultsContainerElement .querySelector('tbody') .append(rowElement); } }); } cityssm.openHtmlModal('workOrder-addLot', { onshow(modalElement) { los.populateAliases(modalElement); searchFormElement = modalElement.querySelector('form'); searchResultsContainerElement = modalElement.querySelector('#resultsContainer--lotAdd'); modalElement.querySelector('#lotSearch--notWorkOrderId').value = workOrderId; const lotStatusElement = modalElement.querySelector('#lotSearch--lotStatusId'); for (const lotStatus of exports.lotStatuses) { const optionElement = document.createElement('option'); optionElement.value = lotStatus.lotStatusId.toString(); optionElement.textContent = lotStatus.lotStatus; lotStatusElement.append(optionElement); } doSearch(); }, onshown(modalElement) { bulmaJS.toggleHtmlClipped(); const lotNameElement = modalElement.querySelector('#lotSearch--lotName'); lotNameElement.addEventListener('change', doSearch); lotNameElement.focus(); modalElement .querySelector('#lotSearch--lotStatusId') .addEventListener('change', doSearch); searchFormElement.addEventListener('submit', doSearch); }, onremoved() { bulmaJS.toggleHtmlClipped(); document.querySelector('#button--addLot').focus(); } }); }); } /* * Comments */ "use strict"; /* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ var _a; Object.defineProperty(exports, "__esModule", { value: true }); let workOrderComments = exports.workOrderComments; delete exports.workOrderComments; function openEditWorkOrderComment(clickEvent) { const workOrderCommentId = Number.parseInt(clickEvent.currentTarget.closest('tr').dataset .workOrderCommentId, 10); const workOrderComment = workOrderComments.find((currentComment) => { return currentComment.workOrderCommentId === workOrderCommentId; }); let editFormElement; let editCloseModalFunction; function editComment(submitEvent) { submitEvent.preventDefault(); cityssm.postJSON(los.urlPrefix + '/workOrders/doUpdateWorkOrderComment', editFormElement, (responseJSON) => { var _a; if (responseJSON.success) { workOrderComments = responseJSON.workOrderComments; editCloseModalFunction(); renderWorkOrderComments(); } else { bulmaJS.alert({ title: 'Error Updating Comment', message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', contextualColorName: 'danger' }); } }); } cityssm.openHtmlModal('workOrder-editComment', { 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; const currentDateString = cityssm.dateToString(new Date()); workOrderCommentDateStringElement.max = workOrderComment.workOrderCommentDateString <= currentDateString ? currentDateString : workOrderComment.workOrderCommentDateString; modalElement.querySelector('#workOrderCommentEdit--workOrderCommentTimeString').value = workOrderComment.workOrderCommentTimeString; }, onshown(modalElement, closeModalFunction) { bulmaJS.toggleHtmlClipped(); los.initializeDatePickers(modalElement); modalElement.querySelector('#workOrderCommentEdit--workOrderComment').focus(); editFormElement = modalElement.querySelector('form'); editFormElement.addEventListener('submit', editComment); editCloseModalFunction = closeModalFunction; }, onremoved() { bulmaJS.toggleHtmlClipped(); } }); } function deleteWorkOrderComment(clickEvent) { const workOrderCommentId = Number.parseInt(clickEvent.currentTarget.closest('tr').dataset .workOrderCommentId, 10); function doDelete() { cityssm.postJSON(los.urlPrefix + '/workOrders/doDeleteWorkOrderComment', { workOrderId, workOrderCommentId }, (responseJSON) => { var _a; if (responseJSON.success) { workOrderComments = responseJSON.workOrderComments; renderWorkOrderComments(); } else { bulmaJS.alert({ title: 'Error Removing Comment', message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', contextualColorName: 'danger' }); } }); } bulmaJS.confirm({ title: 'Remove Comment?', message: 'Are you sure you want to remove this comment?', okButton: { text: 'Yes, Remove Comment', callbackFunction: doDelete }, contextualColorName: 'warning' }); } function renderWorkOrderComments() { var _a, _b; const containerElement = document.querySelector('#container--workOrderComments'); if (workOrderComments.length === 0) { containerElement.innerHTML = `

    There are no comments to display.

    `; return; } const tableElement = document.createElement('table'); tableElement.className = 'table is-fullwidth is-striped is-hoverable'; tableElement.innerHTML = ` Commentor Comment Date Comment Options`; for (const workOrderComment of workOrderComments) { const tableRowElement = document.createElement('tr'); tableRowElement.dataset.workOrderCommentId = workOrderComment.workOrderCommentId.toString(); tableRowElement.innerHTML = '' + cityssm.escapeHTML((_a = workOrderComment.recordCreate_userName) !== null && _a !== void 0 ? _a : '') + '' + '' + workOrderComment.workOrderCommentDateString + (workOrderComment.workOrderCommentTime === 0 ? '' : ' ' + workOrderComment.workOrderCommentTimePeriodString) + '' + '' + cityssm.escapeHTML((_b = workOrderComment.workOrderComment) !== null && _b !== void 0 ? _b : '') + '' + ('' + '
    ' + ('') + ('') + '
    ' + ''); tableRowElement .querySelector('.button--edit') .addEventListener('click', openEditWorkOrderComment); tableRowElement .querySelector('.button--delete') .addEventListener('click', deleteWorkOrderComment); tableElement.querySelector('tbody').append(tableRowElement); } containerElement.innerHTML = ''; containerElement.append(tableElement); } function openAddCommentModal() { let addCommentCloseModalFunction; function doAddComment(formEvent) { formEvent.preventDefault(); cityssm.postJSON(los.urlPrefix + '/workOrders/doAddWorkOrderComment', formEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { workOrderComments = responseJSON.workOrderComments; renderWorkOrderComments(); addCommentCloseModalFunction(); } }); } cityssm.openHtmlModal('workOrder-addComment', { onshow(modalElement) { los.populateAliases(modalElement); modalElement.querySelector('#workOrderCommentAdd--workOrderId').value = workOrderId; modalElement .querySelector('form') .addEventListener('submit', doAddComment); }, onshown(modalElement, closeModalFunction) { bulmaJS.toggleHtmlClipped(); addCommentCloseModalFunction = closeModalFunction; modalElement.querySelector('#workOrderCommentAdd--workOrderComment').focus(); }, onremoved() { bulmaJS.toggleHtmlClipped(); document.querySelector('#workOrderComments--add').focus(); } }); } (_a = document .querySelector('#workOrderComments--add')) === null || _a === void 0 ? void 0 : _a.addEventListener('click', openAddCommentModal); if (!isCreate) { renderWorkOrderComments(); } /* * Milestones */ function clearPanelBlockElements(panelElement) { for (const panelBlockElement of panelElement.querySelectorAll('.panel-block')) { panelBlockElement.remove(); } } function refreshConflictingMilestones(workOrderMilestoneDateString, targetPanelElement) { // Clear panel-block elements clearPanelBlockElements(targetPanelElement); // eslint-disable-next-line no-unsanitized/method targetPanelElement.insertAdjacentHTML('beforeend', `
    ${los.getLoadingParagraphHTML('Loading conflicting milestones...')}
    `); cityssm.postJSON(`${los.urlPrefix}/workOrders/doGetWorkOrderMilestones`, { workOrderMilestoneDateFilter: 'date', workOrderMilestoneDateString }, (rawResponseJSON) => { var _a, _b, _c, _d; const responseJSON = rawResponseJSON; const workOrderMilestones = responseJSON.workOrderMilestones.filter((possibleMilestone) => { return possibleMilestone.workOrderId.toString() !== workOrderId; }); clearPanelBlockElements(targetPanelElement); for (const milestone of workOrderMilestones) { targetPanelElement.insertAdjacentHTML('beforeend', `
    ${cityssm.escapeHTML(milestone.workOrderMilestoneTime === 0 ? 'No Time' : (_a = milestone.workOrderMilestoneTimePeriodString) !== null && _a !== void 0 ? _a : '')}
    ${cityssm.escapeHTML((_b = milestone.workOrderMilestoneType) !== null && _b !== void 0 ? _b : '')}
    ${cityssm.escapeHTML((_c = milestone.workOrderNumber) !== null && _c !== void 0 ? _c : '')}
    ${cityssm.escapeHTML((_d = milestone.workOrderDescription) !== null && _d !== void 0 ? _d : '')}
    `); } if (workOrderMilestones.length === 0) { targetPanelElement.insertAdjacentHTML('beforeend', `

    There are no milestones on other work orders scheduled for ${cityssm.escapeHTML(workOrderMilestoneDateString)}.

    `); } }); } function processMilestoneResponse(rawResponseJSON) { var _a; const responseJSON = rawResponseJSON; if (responseJSON.success) { workOrderMilestones = responseJSON.workOrderMilestones; renderMilestones(); } else { bulmaJS.alert({ title: 'Error Reopening Milestone', message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', 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; }); function 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 !== '' && 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; function 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; function 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; let workOrderMilestoneDateStringElement; function doEdit(submitEvent) { submitEvent.preventDefault(); cityssm.postJSON(`${los.urlPrefix}/workOrders/doUpdateWorkOrderMilestone`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON; processMilestoneResponse(responseJSON); if (responseJSON.success) { editCloseModalFunction(); } }); } cityssm.openHtmlModal('workOrder-editMilestone', { onshow(modalElement) { var _a, _b, _c, _d, _e; ; modalElement.querySelector('#milestoneEdit--workOrderId').value = workOrderId; modalElement.querySelector('#milestoneEdit--workOrderMilestoneId').value = (_b = (_a = workOrderMilestone.workOrderMilestoneId) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''; 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); } workOrderMilestoneDateStringElement = modalElement.querySelector('#milestoneEdit--workOrderMilestoneDateString'); workOrderMilestoneDateStringElement.value = (_c = workOrderMilestone.workOrderMilestoneDateString) !== null && _c !== void 0 ? _c : ''; if (workOrderMilestone.workOrderMilestoneTime) { ; modalElement.querySelector('#milestoneEdit--workOrderMilestoneTimeString').value = (_d = workOrderMilestone.workOrderMilestoneTimeString) !== null && _d !== void 0 ? _d : ''; } ; modalElement.querySelector('#milestoneEdit--workOrderMilestoneDescription').value = (_e = workOrderMilestone.workOrderMilestoneDescription) !== null && _e !== void 0 ? _e : ''; }, onshown(modalElement, closeModalFunction) { var _a; editCloseModalFunction = closeModalFunction; bulmaJS.toggleHtmlClipped(); los.initializeDatePickers(modalElement); // los.initializeTimePickers(modalElement); (_a = modalElement.querySelector('form')) === null || _a === void 0 ? void 0 : _a.addEventListener('submit', doEdit); const conflictingMilestonePanelElement = document.querySelector('#milestoneEdit--conflictingMilestonesPanel'); workOrderMilestoneDateStringElement.addEventListener('change', () => { refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement); }); refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement); }, onremoved() { bulmaJS.toggleHtmlClipped(); } }); } function renderMilestones() { var _a, _b, _c, _d, _e; // 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((_a = milestone.workOrderMilestoneType) !== null && _a !== void 0 ? _a : '') + '
    ' : '') + (milestone.workOrderMilestoneDate === 0 ? '(No Set Date)' : milestone.workOrderMilestoneDateString) + (milestone.workOrderMilestoneTime ? ' ' + milestone.workOrderMilestoneTimePeriodString : '') + '
    ' + '' + cityssm.escapeHTML((_b = milestone.workOrderMilestoneDescription) !== null && _b !== void 0 ? _b : '') + '' + '
    ') + ('
    ' + '' + '
    ') + '
    '; (_c = panelBlockElement .querySelector('.button--reopenMilestone')) === null || _c === void 0 ? void 0 : _c.addEventListener('click', reopenMilestone); (_d = panelBlockElement .querySelector('.button--editMilestone')) === null || _d === void 0 ? void 0 : _d.addEventListener('click', editMilestone); (_e = panelBlockElement .querySelector('.button--completeMilestone')) === null || _e === void 0 ? void 0 : _e.addEventListener('click', completeMilestone); panelBlockElement .querySelector('.button--deleteMilestone') .addEventListener('click', deleteMilestone); milestonesPanelElement.append(panelBlockElement); } bulmaJS.init(milestonesPanelElement); } if (!isCreate) { workOrderMilestones = exports.workOrderMilestones; delete exports.workOrderMilestones; renderMilestones(); (_d = document .querySelector('#button--addMilestone')) === null || _d === void 0 ? void 0 : _d.addEventListener('click', () => { let addFormElement; let workOrderMilestoneDateStringElement; let addCloseModalFunction; function doAdd(submitEvent) { if (submitEvent) { submitEvent.preventDefault(); } const currentDateString = cityssm.dateToString(new Date()); function _doAdd() { cityssm.postJSON(`${los.urlPrefix}/workOrders/doAddWorkOrderMilestone`, addFormElement, (rawResponseJSON) => { const responseJSON = rawResponseJSON; processMilestoneResponse(responseJSON); if (responseJSON.success) { addCloseModalFunction(); } }); } const milestoneDateString = workOrderMilestoneDateStringElement.value; if (milestoneDateString !== '' && milestoneDateString < 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').value = workOrderId; const milestoneTypeElement = modalElement.querySelector('#milestoneAdd--workOrderMilestoneTypeId'); for (const milestoneType of exports.workOrderMilestoneTypes) { const optionElement = document.createElement('option'); optionElement.value = milestoneType.workOrderMilestoneTypeId.toString(); optionElement.textContent = milestoneType.workOrderMilestoneType; milestoneTypeElement.append(optionElement); } workOrderMilestoneDateStringElement = modalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString'); workOrderMilestoneDateStringElement.valueAsDate = new Date(); }, onshown(modalElement, closeModalFunction) { addCloseModalFunction = closeModalFunction; los.initializeDatePickers(modalElement); // los.initializeTimePickers(modalElement); bulmaJS.toggleHtmlClipped(); modalElement.querySelector('#milestoneAdd--workOrderMilestoneTypeId').focus(); addFormElement = modalElement.querySelector('form'); addFormElement.addEventListener('submit', doAdd); const conflictingMilestonePanelElement = document.querySelector('#milestoneAdd--conflictingMilestonesPanel'); workOrderMilestoneDateStringElement.addEventListener('change', () => { refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement); }); refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement); }, onremoved() { bulmaJS.toggleHtmlClipped(); document.querySelector('#button--addMilestone').focus(); } }); }); } })();