@@ -520,11 +553,13 @@ declare const bulmaJS: BulmaJS
cityssm.postJSON(
los.urlPrefix + '/lots/doCreateLot',
submitEvent.currentTarget,
- (responseJSON: {
- success: boolean
- errorMessage?: string
- lotId?: number
- }) => {
+ (rawResponseJSON) => {
+ const responseJSON = rawResponseJSON as {
+ success: boolean
+ errorMessage?: string
+ lotId?: number
+ }
+
if (responseJSON.success) {
renderSelectedLotAndClose(responseJSON.lotId!, lotName)
} else {
diff --git a/public-typescript/mapEdit.js b/public-typescript/mapEdit.js
index 4ec62314..0a5cfaf0 100644
--- a/public-typescript/mapEdit.js
+++ b/public-typescript/mapEdit.js
@@ -8,12 +8,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
.value;
const isCreate = mapId === '';
const mapForm = document.querySelector('#form--map');
+ function setUnsavedChanges() {
+ var _a;
+ los.setUnsavedChanges();
+ (_a = document
+ .querySelector("button[type='submit'][form='form--map']")) === 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--map']")) === null || _a === void 0 ? void 0 : _a.classList.add('is-light');
+ }
function updateMap(formEvent) {
formEvent.preventDefault();
- cityssm.postJSON(los.urlPrefix + '/maps/' + (isCreate ? 'doCreateMap' : 'doUpdateMap'), mapForm, (responseJSON) => {
+ cityssm.postJSON(los.urlPrefix + '/maps/' + (isCreate ? 'doCreateMap' : 'doUpdateMap'), mapForm, (rawResponseJSON) => {
var _a;
+ const responseJSON = rawResponseJSON;
if (responseJSON.success) {
- cityssm.disableNavBlocker();
+ clearUnsavedChanges();
if (isCreate) {
window.location.href = los.getMapURL(responseJSON.mapId, true);
}
@@ -36,7 +49,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
mapForm.addEventListener('submit', updateMap);
const inputElements = mapForm.querySelectorAll('input, select');
for (const inputElement of inputElements) {
- inputElement.addEventListener('change', cityssm.enableNavBlocker);
+ inputElement.addEventListener('change', setUnsavedChanges);
}
(_a = document
.querySelector('#button--deleteMap')) === null || _a === void 0 ? void 0 : _a.addEventListener('click', (clickEvent) => {
@@ -44,8 +57,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
function doDelete() {
cityssm.postJSON(los.urlPrefix + '/maps/doDeleteMap', {
mapId
- }, (responseJSON) => {
+ }, (rawResponseJSON) => {
var _a;
+ const responseJSON = rawResponseJSON;
if (responseJSON.success) {
window.location.href = los.getMapURL();
}
diff --git a/public-typescript/mapEdit.ts b/public-typescript/mapEdit.ts
index e50810f9..b96101bc 100644
--- a/public-typescript/mapEdit.ts
+++ b/public-typescript/mapEdit.ts
@@ -16,19 +16,35 @@ declare const bulmaJS: BulmaJS
const mapForm = document.querySelector('#form--map') as HTMLFormElement
+ function setUnsavedChanges(): void {
+ los.setUnsavedChanges()
+ document
+ .querySelector("button[type='submit'][form='form--map']")
+ ?.classList.remove('is-light')
+ }
+
+ function clearUnsavedChanges(): void {
+ los.clearUnsavedChanges()
+ document
+ .querySelector("button[type='submit'][form='form--map']")
+ ?.classList.add('is-light')
+ }
+
function updateMap(formEvent: SubmitEvent): void {
formEvent.preventDefault()
cityssm.postJSON(
los.urlPrefix + '/maps/' + (isCreate ? 'doCreateMap' : 'doUpdateMap'),
mapForm,
- (responseJSON: {
- success: boolean
- mapId?: number
- errorMessage?: string
- }) => {
+ (rawResponseJSON) => {
+ const responseJSON = rawResponseJSON as {
+ success: boolean
+ mapId?: number
+ errorMessage?: string
+ }
+
if (responseJSON.success) {
- cityssm.disableNavBlocker()
+ clearUnsavedChanges()
if (isCreate) {
window.location.href = los.getMapURL(responseJSON.mapId, true)
@@ -55,7 +71,7 @@ declare const bulmaJS: BulmaJS
mapForm.querySelectorAll('input, select')
for (const inputElement of inputElements) {
- inputElement.addEventListener('change', cityssm.enableNavBlocker)
+ inputElement.addEventListener('change', setUnsavedChanges)
}
document
@@ -69,7 +85,12 @@ declare const bulmaJS: BulmaJS
{
mapId
},
- (responseJSON: { success: boolean; errorMessage?: string }) => {
+ (rawResponseJSON) => {
+ const responseJSON = rawResponseJSON as {
+ success: boolean
+ errorMessage?: string
+ }
+
if (responseJSON.success) {
window.location.href = los.getMapURL()
} else {
diff --git a/public-typescript/workOrderEdit.js b/public-typescript/workOrderEdit.js
index feae4b55..1c5d2f75 100644
--- a/public-typescript/workOrderEdit.js
+++ b/public-typescript/workOrderEdit.js
@@ -11,14 +11,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
.querySelector('#workOrderEdit--workOrderOpenDateString')
.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, (responseJSON) => {
+ (isCreate ? 'doCreateWorkOrder' : 'doUpdateWorkOrder'), submitEvent.currentTarget, (rawResponseJSON) => {
var _a;
+ const responseJSON = rawResponseJSON;
if (responseJSON.success) {
- cityssm.disableNavBlocker();
+ clearUnsavedChanges();
if (isCreate) {
window.location.href = los.getWorkOrderURL(responseJSON.workOrderId, true);
}
@@ -38,9 +51,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
});
- const inputElements = workOrderFormElement.querySelectorAll('input, select');
+ const inputElements = workOrderFormElement.querySelectorAll('input, select, textarea');
for (const inputElement of inputElements) {
- inputElement.addEventListener('change', cityssm.enableNavBlocker);
+ inputElement.addEventListener('change', setUnsavedChanges);
}
/*
* Work Order Options
@@ -48,9 +61,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
function doClose() {
cityssm.postJSON(los.urlPrefix + '/workOrders/doCloseWorkOrder', {
workOrderId
- }, (responseJSON) => {
+ }, (rawResponseJSON) => {
var _a;
+ const responseJSON = rawResponseJSON;
if (responseJSON.success) {
+ clearUnsavedChanges();
window.location.href = los.getWorkOrderURL(workOrderId);
}
else {
@@ -65,9 +80,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
function doDelete() {
cityssm.postJSON(los.urlPrefix + '/workOrders/doDeleteWorkOrder', {
workOrderId
- }, (responseJSON) => {
+ }, (rawResponseJSON) => {
var _a;
+ const responseJSON = rawResponseJSON;
if (responseJSON.success) {
+ clearUnsavedChanges();
window.location.href = los.urlPrefix + '/workOrders';
}
else {
@@ -89,28 +106,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
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.`,
+ 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
- }
+ 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: 'Are you sure you want to close this work order?',
- contextualColorName: 'info',
+ 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
@@ -902,8 +921,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
/*
* Milestones
*/
- function processMilestoneResponse(responseJSON) {
+ function processMilestoneResponse(rawResponseJSON) {
var _a;
+ const responseJSON = rawResponseJSON;
if (responseJSON.success) {
workOrderMilestones = responseJSON.workOrderMilestones;
renderMilestones();
diff --git a/public-typescript/workOrderEdit/workOrderEdit.js b/public-typescript/workOrderEdit/workOrderEdit.js
index 50426592..936fa646 100644
--- a/public-typescript/workOrderEdit/workOrderEdit.js
+++ b/public-typescript/workOrderEdit/workOrderEdit.js
@@ -11,14 +11,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
.querySelector('#workOrderEdit--workOrderOpenDateString')
.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, (responseJSON) => {
+ (isCreate ? 'doCreateWorkOrder' : 'doUpdateWorkOrder'), submitEvent.currentTarget, (rawResponseJSON) => {
var _a;
+ const responseJSON = rawResponseJSON;
if (responseJSON.success) {
- cityssm.disableNavBlocker();
+ clearUnsavedChanges();
if (isCreate) {
window.location.href = los.getWorkOrderURL(responseJSON.workOrderId, true);
}
@@ -38,9 +51,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
});
- const inputElements = workOrderFormElement.querySelectorAll('input, select');
+ const inputElements = workOrderFormElement.querySelectorAll('input, select, textarea');
for (const inputElement of inputElements) {
- inputElement.addEventListener('change', cityssm.enableNavBlocker);
+ inputElement.addEventListener('change', setUnsavedChanges);
}
/*
* Work Order Options
@@ -48,9 +61,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
function doClose() {
cityssm.postJSON(los.urlPrefix + '/workOrders/doCloseWorkOrder', {
workOrderId
- }, (responseJSON) => {
+ }, (rawResponseJSON) => {
var _a;
+ const responseJSON = rawResponseJSON;
if (responseJSON.success) {
+ clearUnsavedChanges();
window.location.href = los.getWorkOrderURL(workOrderId);
}
else {
@@ -65,9 +80,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
function doDelete() {
cityssm.postJSON(los.urlPrefix + '/workOrders/doDeleteWorkOrder', {
workOrderId
- }, (responseJSON) => {
+ }, (rawResponseJSON) => {
var _a;
+ const responseJSON = rawResponseJSON;
if (responseJSON.success) {
+ clearUnsavedChanges();
window.location.href = los.urlPrefix + '/workOrders';
}
else {
@@ -89,28 +106,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
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.`,
+ 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
- }
+ 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: 'Are you sure you want to close this work order?',
- contextualColorName: 'info',
+ 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
@@ -144,8 +163,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
/*
* Milestones
*/
- function processMilestoneResponse(responseJSON) {
+ function processMilestoneResponse(rawResponseJSON) {
var _a;
+ const responseJSON = rawResponseJSON;
if (responseJSON.success) {
workOrderMilestones = responseJSON.workOrderMilestones;
renderMilestones();
diff --git a/public-typescript/workOrderEdit/workOrderEdit.ts b/public-typescript/workOrderEdit/workOrderEdit.ts
index e1b09747..a101f56c 100644
--- a/public-typescript/workOrderEdit/workOrderEdit.ts
+++ b/public-typescript/workOrderEdit/workOrderEdit.ts
@@ -28,6 +28,20 @@ declare const bulmaJS: BulmaJS
)
los.initializeUnlockFieldButtons(workOrderFormElement)
+ function setUnsavedChanges(): void {
+ los.setUnsavedChanges()
+ document
+ .querySelector("button[type='submit'][form='form--workOrderEdit']")
+ ?.classList.remove('is-light')
+ }
+
+ function clearUnsavedChanges(): void {
+ los.clearUnsavedChanges()
+ document
+ .querySelector("button[type='submit'][form='form--workOrderEdit']")
+ ?.classList.add('is-light')
+ }
+
workOrderFormElement.addEventListener('submit', (submitEvent) => {
submitEvent.preventDefault()
@@ -36,13 +50,15 @@ declare const bulmaJS: BulmaJS
'/workOrders/' +
(isCreate ? 'doCreateWorkOrder' : 'doUpdateWorkOrder'),
submitEvent.currentTarget,
- (responseJSON: {
- success: boolean
- workOrderId?: number
- errorMessage?: string
- }) => {
+ (rawResponseJSON) => {
+ const responseJSON = rawResponseJSON as {
+ success: boolean
+ workOrderId?: number
+ errorMessage?: string
+ }
+
if (responseJSON.success) {
- cityssm.disableNavBlocker()
+ clearUnsavedChanges()
if (isCreate) {
window.location.href = los.getWorkOrderURL(
@@ -66,11 +82,11 @@ declare const bulmaJS: BulmaJS
)
})
- const inputElements: NodeListOf =
- workOrderFormElement.querySelectorAll('input, select')
+ const inputElements: NodeListOf =
+ workOrderFormElement.querySelectorAll('input, select, textarea')
for (const inputElement of inputElements) {
- inputElement.addEventListener('change', cityssm.enableNavBlocker)
+ inputElement.addEventListener('change', setUnsavedChanges)
}
/*
@@ -83,8 +99,14 @@ declare const bulmaJS: BulmaJS
{
workOrderId
},
- (responseJSON: { success: boolean; errorMessage?: string }) => {
+ (rawResponseJSON) => {
+ const responseJSON = rawResponseJSON as {
+ success: boolean
+ errorMessage?: string
+ }
+
if (responseJSON.success) {
+ clearUnsavedChanges()
window.location.href = los.getWorkOrderURL(workOrderId)
} else {
bulmaJS.alert({
@@ -103,8 +125,14 @@ declare const bulmaJS: BulmaJS
{
workOrderId
},
- (responseJSON: { success: boolean; errorMessage?: string }) => {
+ (rawResponseJSON) => {
+ const responseJSON = rawResponseJSON as {
+ success: boolean
+ errorMessage?: string
+ }
+
if (responseJSON.success) {
+ clearUnsavedChanges()
window.location.href = los.urlPrefix + '/workOrders'
} else {
bulmaJS.alert({
@@ -130,28 +158,30 @@ declare const bulmaJS: BulmaJS
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.`,
+ 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
- }
+ 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: 'Are you sure you want to close this work order?',
- contextualColorName: 'info',
+ 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
@@ -194,11 +224,13 @@ declare const bulmaJS: BulmaJS
* Milestones
*/
- function processMilestoneResponse(responseJSON: {
- success: boolean
- errorMessage?: string
- workOrderMilestones?: recordTypes.WorkOrderMilestone[]
- }): void {
+ function processMilestoneResponse(rawResponseJSON: unknown): void {
+ const responseJSON = rawResponseJSON as {
+ success: boolean
+ errorMessage?: string
+ workOrderMilestones?: recordTypes.WorkOrderMilestone[]
+ }
+
if (responseJSON.success) {
workOrderMilestones = responseJSON.workOrderMilestones!
renderMilestones()
diff --git a/public/javascripts/lotEdit.min.js b/public/javascripts/lotEdit.min.js
index a8bb895b..2ce0befb 100644
--- a/public/javascripts/lotEdit.min.js
+++ b/public/javascripts/lotEdit.min.js
@@ -1 +1 @@
-"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e;const t=exports.los,o=document.querySelector("#lot--lotId").value,n=""===o;let l=n;const s=document.querySelector("#form--lot");s.addEventListener("submit",function(e){e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/lots/"+(n?"doCreateLot":"doUpdateLot"),s,e=>{var o;e.success?(t.clearUnsavedChanges(),n||l?window.location.href=t.getLotURL(e.lotId,!0,!0):bulmaJS.alert({message:t.escapedAliases.Lot+" Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+t.escapedAliases.Lot,message:null!==(o=e.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})});const a=s.querySelectorAll("input, select");for(const e of a)e.addEventListener("change",t.setUnsavedChanges);t.initializeUnlockFieldButtons(s),null===(e=document.querySelector("#button--deleteLot"))||void 0===e||e.addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:"Delete "+t.escapedAliases.Lot,message:`Are you sure you want to delete this ${t.escapedAliases.lot}?`,contextualColorName:"warning",okButton:{text:`Yes, Delete ${t.escapedAliases.Lot}`,callbackFunction:function(){cityssm.postJSON(t.urlPrefix+"/lots/doDeleteLot",{lotId:o},e=>{var o;e.success?(cityssm.disableNavBlocker(),window.location.href=t.getLotURL()):bulmaJS.alert({title:`Error Deleting ${t.escapedAliases.Lot}`,message:null!==(o=e.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})}}})});const i=document.querySelector("#lot--lotTypeId");if(n){const e=document.querySelector("#container--lotFields");i.addEventListener("change",()=>{""!==i.value?cityssm.postJSON(t.urlPrefix+"/lots/doGetLotTypeFields",{lotTypeId:i.value},o=>{var n;if(0===o.lotTypeFields.length)return void(e.innerHTML=`
\n
There are no additional fields for this ${t.escapedAliases.lot} type.
\n
`);e.innerHTML="";let l="";for(const t of o.lotTypeFields){l+=","+t.lotTypeFieldId.toString();const o="lotFieldValue_"+t.lotTypeFieldId.toString(),s="lot--"+o,a=document.createElement("div");if(a.className="field",a.innerHTML=`\n `,a.querySelector("label").textContent=t.lotTypeField,""===t.lotTypeFieldValues){const e=document.createElement("input");e.className="input",e.id=s,e.name=o,e.type="text",e.required=t.isRequired,e.minLength=t.minimumLength,e.maxLength=t.maximumLength,""!==(null!==(n=t.pattern)&&void 0!==n?n:"")&&(e.pattern=t.pattern),a.querySelector(".control").append(e)}else{a.querySelector(".control").innerHTML=`
\n \n
`;const e=a.querySelector("select");e.required=t.isRequired;const n=t.lotTypeFieldValues.split("\n");for(const t of n){const o=document.createElement("option");o.value=t,o.textContent=t,e.append(o)}}e.append(a)}e.insertAdjacentHTML("beforeend",``)}):e.innerHTML=`
\n
Select the ${t.escapedAliases.lot} type to load the available fields.
\n
`})}else{const e=i.value;i.addEventListener("change",()=>{i.value!==e&&bulmaJS.confirm({title:"Confirm Change",message:`Are you sure you want to change the ${t.escapedAliases.lot} type?\n\n This change affects the additional fields associated with this record.`,contextualColorName:"warning",okButton:{text:"Yes, Keep the Change",callbackFunction:()=>{l=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{i.value=e}}})})}let r=exports.lotComments;function d(e){const n=Number.parseInt(e.currentTarget.closest("tr").dataset.lotCommentId,10),l=r.find(e=>e.lotCommentId===n);let s,a;function i(e){e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/lots/doUpdateLotComment",s,e=>{var t;e.success?(r=e.lotComments,a(),c()):bulmaJS.alert({title:"Error Updating Comment",message:null!==(t=e.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lot-editComment",{onshow:e=>{t.populateAliases(e),e.querySelector("#lotCommentEdit--lotId").value=o,e.querySelector("#lotCommentEdit--lotCommentId").value=n.toString(),e.querySelector("#lotCommentEdit--lotComment").value=l.lotComment;const s=e.querySelector("#lotCommentEdit--lotCommentDateString");s.value=l.lotCommentDateString;const a=cityssm.dateToString(new Date);s.max=l.lotCommentDateString<=a?a:l.lotCommentDateString,e.querySelector("#lotCommentEdit--lotCommentTimeString").value=l.lotCommentTimeString},onshown:(e,o)=>{bulmaJS.toggleHtmlClipped(),t.initializeDatePickers(e),e.querySelector("#lotCommentEdit--lotComment").focus(),(s=e.querySelector("form")).addEventListener("submit",i),a=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}function m(e){const n=Number.parseInt(e.currentTarget.closest("tr").dataset.lotCommentId,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(t.urlPrefix+"/lots/doDeleteLotComment",{lotId:o,lotCommentId:n},e=>{var t;e.success?(r=e.lotComments,c()):bulmaJS.alert({title:"Error Removing Comment",message:null!==(t=e.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}},contextualColorName:"warning"})}function c(){var e,t;const o=document.querySelector("#container--lotComments");if(0===r.length)return void(o.innerHTML='
',l.querySelector(".button--edit").addEventListener("click",d),l.querySelector(".button--delete").addEventListener("click",m),n.querySelector("tbody").append(l)}o.innerHTML="",o.append(n)}delete exports.lotComments,n||(document.querySelector("#lotComments--add").addEventListener("click",function(){let e;function n(o){o.preventDefault(),cityssm.postJSON(t.urlPrefix+"/lots/doAddLotComment",o.currentTarget,t=>{t.success&&(r=t.lotComments,c(),e())})}cityssm.openHtmlModal("lot-addComment",{onshow(e){t.populateAliases(e),e.querySelector("#lotCommentAdd--lotId").value=o,e.querySelector("form").addEventListener("submit",n)},onshown(t,o){bulmaJS.toggleHtmlClipped(),e=o,t.querySelector("#lotCommentAdd--lotComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#lotComments--add").focus()}})}),c())})();
\ No newline at end of file
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e;const t=exports.los,o=document.querySelector("#lot--lotId").value,n=""===o;let l=n;function s(){var e;t.setUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--lot']"))||void 0===e||e.classList.remove("is-light")}const a=document.querySelector("#form--lot");a.addEventListener("submit",function(e){e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/lots/"+(n?"doCreateLot":"doUpdateLot"),a,e=>{var o;const s=e;s.success?(function(){var e;t.clearUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--lot']"))||void 0===e||e.classList.add("is-light")}(),n||l?window.location.href=t.getLotURL(s.lotId,!0,!0):bulmaJS.alert({message:t.escapedAliases.Lot+" Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+t.escapedAliases.Lot,message:null!==(o=s.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})});const i=a.querySelectorAll("input, select");for(const e of i)e.addEventListener("change",s);t.initializeUnlockFieldButtons(a),null===(e=document.querySelector("#button--deleteLot"))||void 0===e||e.addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:"Delete "+t.escapedAliases.Lot,message:`Are you sure you want to delete this ${t.escapedAliases.lot}?`,contextualColorName:"warning",okButton:{text:`Yes, Delete ${t.escapedAliases.Lot}`,callbackFunction:function(){cityssm.postJSON(t.urlPrefix+"/lots/doDeleteLot",{lotId:o},e=>{var o;e.success?(cityssm.disableNavBlocker(),window.location.href=t.getLotURL()):bulmaJS.alert({title:`Error Deleting ${t.escapedAliases.Lot}`,message:null!==(o=e.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})}}})});const r=document.querySelector("#lot--lotTypeId");if(n){const e=document.querySelector("#container--lotFields");r.addEventListener("change",()=>{""!==r.value?cityssm.postJSON(t.urlPrefix+"/lots/doGetLotTypeFields",{lotTypeId:r.value},o=>{var n;if(0===o.lotTypeFields.length)return void(e.innerHTML=`
\n
There are no additional fields for this ${t.escapedAliases.lot} type.
\n
`);e.innerHTML="";let l="";for(const t of o.lotTypeFields){l+=","+t.lotTypeFieldId.toString();const o="lotFieldValue_"+t.lotTypeFieldId.toString(),s="lot--"+o,a=document.createElement("div");if(a.className="field",a.innerHTML=`\n `,a.querySelector("label").textContent=t.lotTypeField,""===t.lotTypeFieldValues){const e=document.createElement("input");e.className="input",e.id=s,e.name=o,e.type="text",e.required=t.isRequired,e.minLength=t.minimumLength,e.maxLength=t.maximumLength,""!==(null!==(n=t.pattern)&&void 0!==n?n:"")&&(e.pattern=t.pattern),a.querySelector(".control").append(e)}else{a.querySelector(".control").innerHTML=`
\n \n
`;const e=a.querySelector("select");e.required=t.isRequired;const n=t.lotTypeFieldValues.split("\n");for(const t of n){const o=document.createElement("option");o.value=t,o.textContent=t,e.append(o)}}e.append(a)}e.insertAdjacentHTML("beforeend",``)}):e.innerHTML=`
\n
Select the ${t.escapedAliases.lot} type to load the available fields.
\n
`})}else{const e=r.value;r.addEventListener("change",()=>{r.value!==e&&bulmaJS.confirm({title:"Confirm Change",message:`Are you sure you want to change the ${t.escapedAliases.lot} type?\n\n This change affects the additional fields associated with this record.`,contextualColorName:"warning",okButton:{text:"Yes, Keep the Change",callbackFunction:()=>{l=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{r.value=e}}})})}let m=exports.lotComments;function d(e){const n=Number.parseInt(e.currentTarget.closest("tr").dataset.lotCommentId,10),l=m.find(e=>e.lotCommentId===n);let s,a;function i(e){e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/lots/doUpdateLotComment",s,e=>{var t;e.success?(m=e.lotComments,a(),u()):bulmaJS.alert({title:"Error Updating Comment",message:null!==(t=e.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lot-editComment",{onshow:e=>{t.populateAliases(e),e.querySelector("#lotCommentEdit--lotId").value=o,e.querySelector("#lotCommentEdit--lotCommentId").value=n.toString(),e.querySelector("#lotCommentEdit--lotComment").value=l.lotComment;const s=e.querySelector("#lotCommentEdit--lotCommentDateString");s.value=l.lotCommentDateString;const a=cityssm.dateToString(new Date);s.max=l.lotCommentDateString<=a?a:l.lotCommentDateString,e.querySelector("#lotCommentEdit--lotCommentTimeString").value=l.lotCommentTimeString},onshown:(e,o)=>{bulmaJS.toggleHtmlClipped(),t.initializeDatePickers(e),e.querySelector("#lotCommentEdit--lotComment").focus(),(s=e.querySelector("form")).addEventListener("submit",i),a=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}function c(e){const n=Number.parseInt(e.currentTarget.closest("tr").dataset.lotCommentId,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(t.urlPrefix+"/lots/doDeleteLotComment",{lotId:o,lotCommentId:n},e=>{var t;e.success?(m=e.lotComments,u()):bulmaJS.alert({title:"Error Removing Comment",message:null!==(t=e.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}},contextualColorName:"warning"})}function u(){var e,t;const o=document.querySelector("#container--lotComments");if(0===m.length)return void(o.innerHTML='
',l.querySelector(".button--edit").addEventListener("click",d),l.querySelector(".button--delete").addEventListener("click",c),n.querySelector("tbody").append(l)}o.innerHTML="",o.append(n)}delete exports.lotComments,n||(document.querySelector("#lotComments--add").addEventListener("click",function(){let e;function n(o){o.preventDefault(),cityssm.postJSON(t.urlPrefix+"/lots/doAddLotComment",o.currentTarget,t=>{t.success&&(m=t.lotComments,u(),e())})}cityssm.openHtmlModal("lot-addComment",{onshow(e){t.populateAliases(e),e.querySelector("#lotCommentAdd--lotId").value=o,e.querySelector("form").addEventListener("submit",n)},onshown(t,o){bulmaJS.toggleHtmlClipped(),e=o,t.querySelector("#lotCommentAdd--lotComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#lotComments--add").focus()}})}),u())})();
\ No newline at end of file
diff --git a/public/javascripts/lotOccupancyEdit.min.js b/public/javascripts/lotOccupancyEdit.min.js
index 6c1a1ba8..7effc82e 100644
--- a/public/javascripts/lotOccupancyEdit.min.js
+++ b/public/javascripts/lotOccupancyEdit.min.js
@@ -1 +1 @@
-"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e,t,c,n,o;const a=exports.los,s=document.querySelector("#lotOccupancy--lotOccupancyId").value,l=""===s;let r=l;const u=document.querySelector("#form--lotOccupancy");u.addEventListener("submit",e=>{e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/"+(l?"doCreateLotOccupancy":"doUpdateLotOccupancy"),u,e=>{var t;e.success?(a.clearUnsavedChanges(),l||r?window.location.href=a.getLotOccupancyURL(e.lotOccupancyId,!0,!0):bulmaJS.alert({message:`${a.escapedAliases.Occupancy} Updated Successfully`,contextualColorName:"success"})):bulmaJS.alert({title:"Error Saving "+a.escapedAliases.Occupancy,message:null!==(t=e.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})});const i=u.querySelectorAll("input, select");for(const e of i)e.addEventListener("change",a.setUnsavedChanges);function d(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doCopyLotOccupancy",{lotOccupancyId:s},e=>{var t;e.success?(cityssm.disableNavBlocker(),window.location.href=a.getLotOccupancyURL(e.lotOccupancyId,!0)):bulmaJS.alert({title:"Error Copying Record",message:null!==(t=e.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}null===(C=document.querySelector("#button--copyLotOccupancy"))||void 0===C||C.addEventListener("click",e=>{e.preventDefault(),a.hasUnsavedChanges()?bulmaJS.alert({title:"Unsaved Changes",message:"Please save all unsaved changes before continuing.",contextualColorName:"warning"}):bulmaJS.confirm({title:`Copy ${a.escapedAliases.Occupancy} Record as New`,message:"Are you sure you want to copy this record to a new record?",contextualColorName:"info",okButton:{text:"Yes, Copy",callbackFunction:d}})}),null===(e=document.querySelector("#button--deleteLotOccupancy"))||void 0===e||e.addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:`Delete ${a.escapedAliases.Occupancy} Record`,message:"Are you sure you want to delete this record?",contextualColorName:"warning",okButton:{text:"Yes, Delete",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancy",{lotOccupancyId:s},e=>{var t;e.success?(cityssm.disableNavBlocker(),window.location.href=a.getLotOccupancyURL()):bulmaJS.alert({title:"Error Deleting Record",message:null!==(t=e.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}),null===(t=document.querySelector("#button--createWorkOrder"))||void 0===t||t.addEventListener("click",e=>{let t;function c(e){e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/workOrders/doCreateWorkOrder",e.currentTarget,e=>{e.success?(t(),bulmaJS.confirm({title:"Work Order Created Successfully",message:"Would you like to open the work order now?",contextualColorName:"success",okButton:{text:"Yes, Open the Work Order",callbackFunction:()=>{window.location.href=a.getWorkOrderURL(e.workOrderId,!0)}}})):bulmaJS.alert({title:"Error Creating Work Order",message:e.errorMessage,contextualColorName:"danger"})})}e.preventDefault(),cityssm.openHtmlModal("lotOccupancy-createWorkOrder",{onshow(e){var t;e.querySelector("#workOrderCreate--lotOccupancyId").value=s,e.querySelector("#workOrderCreate--workOrderOpenDateString").value=cityssm.dateToString(new Date);const c=e.querySelector("#workOrderCreate--workOrderTypeId"),n=exports.workOrderTypes;1===n.length&&(c.innerHTML="");for(const e of n){const n=document.createElement("option");n.value=e.workOrderTypeId.toString(),n.textContent=null!==(t=e.workOrderType)&&void 0!==t?t:"",c.append(n)}},onshown(e,n){var o;t=n,bulmaJS.toggleHtmlClipped(),e.querySelector("#workOrderCreate--workOrderTypeId").focus(),null===(o=e.querySelector("form"))||void 0===o||o.addEventListener("submit",c)},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#button--createWorkOrder").focus()}})});const p=document.querySelector("#lotOccupancy--occupancyTypeId");if(l){const e=document.querySelector("#container--lotOccupancyFields");p.addEventListener("change",()=>{""!==p.value?cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doGetOccupancyTypeFields",{occupancyTypeId:p.value},t=>{var c,n;if(0===t.occupancyTypeFields.length)return void(e.innerHTML=`
\n
There are no additional fields for this ${a.escapedAliases.occupancy} type.
\n
`);e.innerHTML="";let o="";for(const a of t.occupancyTypeFields){o+=","+a.occupancyTypeFieldId.toString();const t="lotOccupancyFieldValue_"+a.occupancyTypeFieldId.toString(),s="lotOccupancy--"+t,l=document.createElement("div");if(l.className="field",l.innerHTML=``,l.querySelector("label").textContent=a.occupancyTypeField,""===(null!==(c=a.occupancyTypeFieldValues)&&void 0!==c?c:"")){const e=document.createElement("input");e.className="input",e.id=s,e.name=t,e.type="text",e.required=a.isRequired,e.minLength=a.minimumLength,e.maxLength=a.maximumLength,""!==(null!==(n=a.pattern)&&void 0!==n?n:"")&&(e.pattern=a.pattern),l.querySelector(".control").append(e)}else{l.querySelector(".control").innerHTML=`
\n \n
`;const e=l.querySelector("select");e.required=a.isRequired;const c=a.occupancyTypeFieldValues.split("\n");for(const t of c){const c=document.createElement("option");c.value=t,c.textContent=t,e.append(c)}}console.log(l),e.append(l)}e.insertAdjacentHTML("beforeend",``)}):e.innerHTML=`
\n
Select the ${a.escapedAliases.occupancy} type to load the available fields.
\n
`})}else{const e=p.value;p.addEventListener("change",()=>{p.value!==e&&bulmaJS.confirm({title:"Confirm Change",message:`Are you sure you want to change the ${a.escapedAliases.occupancy} type?\n\n This change affects the additional fields associated with this record, and may also affect the available fees.`,contextualColorName:"warning",okButton:{text:"Yes, Keep the Change",callbackFunction:()=>{r=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{p.value=e}}})})}const m=document.querySelector("#lotOccupancy--lotName");m.addEventListener("click",e=>{const t=e.currentTarget.value;let c,n,o,s;function l(e,t){document.querySelector("#lotOccupancy--lotId").value=e.toString(),document.querySelector("#lotOccupancy--lotName").value=t,a.setUnsavedChanges(),c()}function r(e){e.preventDefault();const t=e.currentTarget;l(t.dataset.lotId,t.dataset.lotName)}function u(){s.innerHTML=a.getLoadingParagraphHTML("Searching..."),cityssm.postJSON(a.urlPrefix+"/lots/doSearchLots",o,e=>{var t,c;if(0===e.count)return void(s.innerHTML='
\n
No results.
\n
');const n=document.createElement("div");n.className="panel";for(const o of e.lots){const e=document.createElement("a");e.className="panel-block is-block",e.href="#",e.dataset.lotId=o.lotId.toString(),e.dataset.lotName=o.lotName,e.innerHTML='
',e.querySelector(".button--edit").addEventListener("click",g),e.querySelector(".button--delete").addEventListener("click",h),a.querySelector("tbody").append(e)}o.innerHTML="",o.append(a)}var C;delete exports.lotOccupancyComments,null===(C=document.querySelector("#button--addComment"))||void 0===C||C.addEventListener("click",()=>{let t,c;function n(n){n.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyComment",t,t=>{var n;t.success?(e=t.lotOccupancyComments,c(),S()):bulmaJS.alert({title:"Error Adding Comment",message:null!==(n=t.errorMessage)&&void 0!==n?n:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-addComment",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyId").value=s},onshown(e,o){bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyComment").focus(),(t=e.querySelector("form")).addEventListener("submit",n),c=o},onremoved:()=>{bulmaJS.toggleHtmlClipped(),document.querySelector("#button--addComment").focus()}})}),S(),Object.defineProperty(exports,"__esModule",{value:!0});let t=exports.lotOccupancyFees;delete exports.lotOccupancyFees;const c=document.querySelector("#container--lotOccupancyFees");function b(){let e=0;for(const c of t)e+=(c.feeAmount+c.taxAmount)*c.quantity;return e}function T(e){const c=e.currentTarget.closest(".container--lotOccupancyFee").dataset.feeId;bulmaJS.confirm({title:"Delete Fee",message:"Are you sure you want to delete this fee?",contextualColorName:"warning",okButton:{text:"Yes, Delete Fee",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyFee",{lotOccupancyId:s,feeId:c},e=>{var c;const n=e;n.success?(t=n.lotOccupancyFees,x()):bulmaJS.alert({title:"Error Deleting Fee",message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}}})}function x(){var e,n,o;if(0===t.length)return c.innerHTML='
\n
There are no fees associated with this record.
\n
',void q();c.innerHTML='
\n
\n
Fee
\n
Unit Cost
\n
×
\n
Quantity
\n
equals
\n
Total
\n
Options
\n
\n \n
\n
Subtotal
\n
\n
\n
\n
Tax
\n
\n
\n
\n
Grand Total
\n
\n
\n
';let a=0,s=0;for(const l of t){const t=document.createElement("tr");t.className="container--lotOccupancyFee",t.dataset.feeId=l.feeId.toString(),t.dataset.includeQuantity=null!==(e=l.includeQuantity)&&void 0!==e&&e?"1":"0",t.innerHTML='
';let p=!1;for(const t of n.fees){if(null!==c.querySelector(`.container--lotOccupancyFee[data-fee-id='${t.feeId}'][data-include-quantity='0']`))continue;let o=!0;const m=((null!==(a=n.feeCategory)&&void 0!==a?a:"")+" "+(null!==(s=t.feeName)&&void 0!==s?s:"")+" "+(null!==(l=t.feeDescription)&&void 0!==l?l:"")).toLowerCase();for(const e of d)if(!m.includes(e)){o=!1;break}if(!o)continue;p=!0;const y=document.createElement("a");y.className="panel-block is-block container--fee",y.dataset.feeId=t.feeId.toString(),y.dataset.feeCategoryId=n.feeCategoryId.toString(),y.href="#",y.innerHTML=""+cityssm.escapeHTML(null!==(u=t.feeName)&&void 0!==u?u:"")+" "+cityssm.escapeHTML(null!==(i=t.feeDescription)&&void 0!==i?i:"").replace(/\n/g," ")+"",y.addEventListener("click",r),e.querySelector(".panel").append(y)}p&&o.append(e)}}cityssm.openHtmlModal("lotOccupancy-addFee",{onshow(t){n=t.querySelector("#feeSelect--feeName"),o=t.querySelector("#resultsContainer--feeSelect"),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doGetFees",{lotOccupancyId:s},t=>{e=t.feeCategories,n.disabled=!1,n.addEventListener("keyup",u),n.focus(),u()})},onshown(){bulmaJS.toggleHtmlClipped()},onhidden(){x()},onremoved(){bulmaJS.toggleHtmlClipped()}})});let n=exports.lotOccupancyTransactions;delete exports.lotOccupancyTransactions;const o=document.querySelector("#container--lotOccupancyTransactions");function L(e){const t=e.currentTarget.closest(".container--lotOccupancyTransaction").dataset.transactionIndex;bulmaJS.confirm({title:"Delete Trasnaction",message:"Are you sure you want to delete this transaction?",contextualColorName:"warning",okButton:{text:"Yes, Delete Transaction",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyTransaction",{lotOccupancyId:s,transactionIndex:t},e=>{var t;const c=e;c.success?(n=c.lotOccupancyTransactions,q()):bulmaJS.alert({title:"Error Deleting Transaction",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function q(){var e,c,s;if(0===n.length)return void(o.innerHTML='
There are no transactions associated with this record.
');o.innerHTML=`
\n
\n
Date
\n
${a.escapedAliases.ExternalReceiptNumber}
\n
Amount
\n
Options
\n
\n \n
\n
Transaction Total
\n
\n
\n
\n
`;let l=0;for(const t of n){l+=t.transactionAmount;const n=document.createElement("tr");n.className="container--lotOccupancyTransaction",n.dataset.transactionIndex=t.transactionIndex.toString(),n.innerHTML="
")}document.querySelector("#button--addTransaction").addEventListener("click",()=>{let e;function t(t){t.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyTransaction",t.currentTarget,t=>{var c;const o=t;o.success?(n=o.lotOccupancyTransactions,e(),q()):bulmaJS.confirm({title:"Error Adding Transaction",message:null!==(c=o.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-addTransaction",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyTransactionAdd--lotOccupancyId").value=s.toString();const t=b(),c=function(){let e=0;for(const t of n)e+=t.transactionAmount;return e}(),o=e.querySelector("#lotOccupancyTransactionAdd--transactionAmount");o.min=(-1*c).toFixed(2),o.max=Math.max(t-c,0).toFixed(2),o.value=Math.max(t-c,0).toFixed(2)},onshown(c,n){bulmaJS.toggleHtmlClipped(),e=n,c.querySelector("form").addEventListener("submit",t)},onremoved(){bulmaJS.toggleHtmlClipped()}})}),x()}})();
\ No newline at end of file
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e,t,c,n,o;const a=exports.los,s=document.querySelector("#lotOccupancy--lotOccupancyId").value,l=""===s;let r=l;function u(){var e;a.setUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--lotOccupancy']"))||void 0===e||e.classList.remove("is-light")}function i(){var e;a.clearUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--lotOccupancy']"))||void 0===e||e.classList.add("is-light")}const d=document.querySelector("#form--lotOccupancy");d.addEventListener("submit",e=>{e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/"+(l?"doCreateLotOccupancy":"doUpdateLotOccupancy"),d,e=>{var t;const c=e;c.success?(i(),l||r?window.location.href=a.getLotOccupancyURL(c.lotOccupancyId,!0,!0):bulmaJS.alert({message:`${a.escapedAliases.Occupancy} Updated Successfully`,contextualColorName:"success"})):bulmaJS.alert({title:"Error Saving "+a.escapedAliases.Occupancy,message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})});const p=d.querySelectorAll("input, select");for(const e of p)e.addEventListener("change",u);function m(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doCopyLotOccupancy",{lotOccupancyId:s},e=>{var t;const c=e;c.success?(i(),window.location.href=a.getLotOccupancyURL(c.lotOccupancyId,!0)):bulmaJS.alert({title:"Error Copying Record",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}null===(T=document.querySelector("#button--copyLotOccupancy"))||void 0===T||T.addEventListener("click",e=>{e.preventDefault(),a.hasUnsavedChanges()?bulmaJS.alert({title:"Unsaved Changes",message:"Please save all unsaved changes before continuing.",contextualColorName:"warning"}):bulmaJS.confirm({title:`Copy ${a.escapedAliases.Occupancy} Record as New`,message:"Are you sure you want to copy this record to a new record?",contextualColorName:"info",okButton:{text:"Yes, Copy",callbackFunction:m}})}),null===(e=document.querySelector("#button--deleteLotOccupancy"))||void 0===e||e.addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:`Delete ${a.escapedAliases.Occupancy} Record`,message:"Are you sure you want to delete this record?",contextualColorName:"warning",okButton:{text:"Yes, Delete",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancy",{lotOccupancyId:s},e=>{var t;const c=e;c.success?(i(),window.location.href=a.getLotOccupancyURL()):bulmaJS.alert({title:"Error Deleting Record",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}),null===(t=document.querySelector("#button--createWorkOrder"))||void 0===t||t.addEventListener("click",e=>{let t;function c(e){e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/workOrders/doCreateWorkOrder",e.currentTarget,e=>{const c=e;c.success?(t(),bulmaJS.confirm({title:"Work Order Created Successfully",message:"Would you like to open the work order now?",contextualColorName:"success",okButton:{text:"Yes, Open the Work Order",callbackFunction:()=>{window.location.href=a.getWorkOrderURL(c.workOrderId,!0)}}})):bulmaJS.alert({title:"Error Creating Work Order",message:c.errorMessage,contextualColorName:"danger"})})}e.preventDefault(),cityssm.openHtmlModal("lotOccupancy-createWorkOrder",{onshow(e){var t;e.querySelector("#workOrderCreate--lotOccupancyId").value=s,e.querySelector("#workOrderCreate--workOrderOpenDateString").value=cityssm.dateToString(new Date);const c=e.querySelector("#workOrderCreate--workOrderTypeId"),n=exports.workOrderTypes;1===n.length&&(c.innerHTML="");for(const e of n){const n=document.createElement("option");n.value=e.workOrderTypeId.toString(),n.textContent=null!==(t=e.workOrderType)&&void 0!==t?t:"",c.append(n)}},onshown(e,n){var o;t=n,bulmaJS.toggleHtmlClipped(),e.querySelector("#workOrderCreate--workOrderTypeId").focus(),null===(o=e.querySelector("form"))||void 0===o||o.addEventListener("submit",c)},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#button--createWorkOrder").focus()}})});const y=document.querySelector("#lotOccupancy--occupancyTypeId");if(l){const e=document.querySelector("#container--lotOccupancyFields");y.addEventListener("change",()=>{""!==y.value?cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doGetOccupancyTypeFields",{occupancyTypeId:y.value},t=>{var c,n;const o=t;if(0===o.occupancyTypeFields.length)return void(e.innerHTML=`
\n
There are no additional fields for this ${a.escapedAliases.occupancy} type.
\n
`);e.innerHTML="";let s="";for(const t of o.occupancyTypeFields){s+=","+t.occupancyTypeFieldId.toString();const o="lotOccupancyFieldValue_"+t.occupancyTypeFieldId.toString(),a="lotOccupancy--"+o,l=document.createElement("div");if(l.className="field",l.innerHTML=``,l.querySelector("label").textContent=t.occupancyTypeField,""===(null!==(c=t.occupancyTypeFieldValues)&&void 0!==c?c:"")){const e=document.createElement("input");e.className="input",e.id=a,e.name=o,e.type="text",e.required=t.isRequired,e.minLength=t.minimumLength,e.maxLength=t.maximumLength,""!==(null!==(n=t.pattern)&&void 0!==n?n:"")&&(e.pattern=t.pattern),l.querySelector(".control").append(e)}else{l.querySelector(".control").innerHTML=`
\n \n
`;const e=l.querySelector("select");e.required=t.isRequired;const c=t.occupancyTypeFieldValues.split("\n");for(const t of c){const c=document.createElement("option");c.value=t,c.textContent=t,e.append(c)}}console.log(l),e.append(l)}e.insertAdjacentHTML("beforeend",``)}):e.innerHTML=`
\n
Select the ${a.escapedAliases.occupancy} type to load the available fields.
\n
`})}else{const e=y.value;y.addEventListener("change",()=>{y.value!==e&&bulmaJS.confirm({title:"Confirm Change",message:`Are you sure you want to change the ${a.escapedAliases.occupancy} type?\n\n This change affects the additional fields associated with this record, and may also affect the available fees.`,contextualColorName:"warning",okButton:{text:"Yes, Keep the Change",callbackFunction:()=>{r=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{y.value=e}}})})}const v=document.querySelector("#lotOccupancy--lotName");v.addEventListener("click",e=>{const t=e.currentTarget.value;let c,n,o,s;function l(e,t){document.querySelector("#lotOccupancy--lotId").value=e.toString(),document.querySelector("#lotOccupancy--lotName").value=t,a.setUnsavedChanges(),c()}function r(e){e.preventDefault();const t=e.currentTarget;l(t.dataset.lotId,t.dataset.lotName)}function u(){s.innerHTML=a.getLoadingParagraphHTML("Searching..."),cityssm.postJSON(a.urlPrefix+"/lots/doSearchLots",o,e=>{var t,c;const n=e;if(0===n.count)return void(s.innerHTML='
\n
No results.
\n
');const o=document.createElement("div");o.className="panel";for(const e of n.lots){const n=document.createElement("a");n.className="panel-block is-block",n.href="#",n.dataset.lotId=e.lotId.toString(),n.dataset.lotName=e.lotName,n.innerHTML='
',e.querySelector(".button--edit").addEventListener("click",S),e.querySelector(".button--delete").addEventListener("click",b),a.querySelector("tbody").append(e)}o.innerHTML="",o.append(a)}var T;delete exports.lotOccupancyComments,null===(T=document.querySelector("#button--addComment"))||void 0===T||T.addEventListener("click",()=>{let t,c;function n(n){n.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyComment",t,t=>{var n;t.success?(e=t.lotOccupancyComments,c(),C()):bulmaJS.alert({title:"Error Adding Comment",message:null!==(n=t.errorMessage)&&void 0!==n?n:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-addComment",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyId").value=s},onshown(e,o){bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyComment").focus(),(t=e.querySelector("form")).addEventListener("submit",n),c=o},onremoved:()=>{bulmaJS.toggleHtmlClipped(),document.querySelector("#button--addComment").focus()}})}),C(),Object.defineProperty(exports,"__esModule",{value:!0});let t=exports.lotOccupancyFees;delete exports.lotOccupancyFees;const c=document.querySelector("#container--lotOccupancyFees");function x(){let e=0;for(const c of t)e+=(c.feeAmount+c.taxAmount)*c.quantity;return e}function L(e){const c=e.currentTarget.closest(".container--lotOccupancyFee").dataset.feeId;bulmaJS.confirm({title:"Delete Fee",message:"Are you sure you want to delete this fee?",contextualColorName:"warning",okButton:{text:"Yes, Delete Fee",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyFee",{lotOccupancyId:s,feeId:c},e=>{var c;const n=e;n.success?(t=n.lotOccupancyFees,q()):bulmaJS.alert({title:"Error Deleting Fee",message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}}})}function q(){var e,n,o;if(0===t.length)return c.innerHTML='
\n
There are no fees associated with this record.
\n
',void E();c.innerHTML='
\n
\n
Fee
\n
Unit Cost
\n
×
\n
Quantity
\n
equals
\n
Total
\n
Options
\n
\n \n
\n
Subtotal
\n
\n
\n
\n
Tax
\n
\n
\n
\n
Grand Total
\n
\n
\n
';let a=0,s=0;for(const l of t){const t=document.createElement("tr");t.className="container--lotOccupancyFee",t.dataset.feeId=l.feeId.toString(),t.dataset.includeQuantity=null!==(e=l.includeQuantity)&&void 0!==e&&e?"1":"0",t.innerHTML='
';let p=!1;for(const t of n.fees){if(null!==c.querySelector(`.container--lotOccupancyFee[data-fee-id='${t.feeId}'][data-include-quantity='0']`))continue;let o=!0;const m=((null!==(a=n.feeCategory)&&void 0!==a?a:"")+" "+(null!==(s=t.feeName)&&void 0!==s?s:"")+" "+(null!==(l=t.feeDescription)&&void 0!==l?l:"")).toLowerCase();for(const e of d)if(!m.includes(e)){o=!1;break}if(!o)continue;p=!0;const y=document.createElement("a");y.className="panel-block is-block container--fee",y.dataset.feeId=t.feeId.toString(),y.dataset.feeCategoryId=n.feeCategoryId.toString(),y.href="#",y.innerHTML=""+cityssm.escapeHTML(null!==(u=t.feeName)&&void 0!==u?u:"")+" "+cityssm.escapeHTML(null!==(i=t.feeDescription)&&void 0!==i?i:"").replace(/\n/g," ")+"",y.addEventListener("click",r),e.querySelector(".panel").append(y)}p&&o.append(e)}}cityssm.openHtmlModal("lotOccupancy-addFee",{onshow(t){n=t.querySelector("#feeSelect--feeName"),o=t.querySelector("#resultsContainer--feeSelect"),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doGetFees",{lotOccupancyId:s},t=>{e=t.feeCategories,n.disabled=!1,n.addEventListener("keyup",u),n.focus(),u()})},onshown(){bulmaJS.toggleHtmlClipped()},onhidden(){q()},onremoved(){bulmaJS.toggleHtmlClipped()}})});let n=exports.lotOccupancyTransactions;delete exports.lotOccupancyTransactions;const o=document.querySelector("#container--lotOccupancyTransactions");function N(e){const t=e.currentTarget.closest(".container--lotOccupancyTransaction").dataset.transactionIndex;bulmaJS.confirm({title:"Delete Trasnaction",message:"Are you sure you want to delete this transaction?",contextualColorName:"warning",okButton:{text:"Yes, Delete Transaction",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyTransaction",{lotOccupancyId:s,transactionIndex:t},e=>{var t;const c=e;c.success?(n=c.lotOccupancyTransactions,E()):bulmaJS.alert({title:"Error Deleting Transaction",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function E(){var e,c,s;if(0===n.length)return void(o.innerHTML='
There are no transactions associated with this record.
');o.innerHTML=`
\n
\n
Date
\n
${a.escapedAliases.ExternalReceiptNumber}
\n
Amount
\n
Options
\n
\n \n
\n
Transaction Total
\n
\n
\n
\n
`;let l=0;for(const t of n){l+=t.transactionAmount;const n=document.createElement("tr");n.className="container--lotOccupancyTransaction",n.dataset.transactionIndex=t.transactionIndex.toString(),n.innerHTML="
")}document.querySelector("#button--addTransaction").addEventListener("click",()=>{let e;function t(t){t.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyTransaction",t.currentTarget,t=>{var c;const o=t;o.success?(n=o.lotOccupancyTransactions,e(),E()):bulmaJS.confirm({title:"Error Adding Transaction",message:null!==(c=o.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-addTransaction",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyTransactionAdd--lotOccupancyId").value=s.toString();const t=x(),c=function(){let e=0;for(const t of n)e+=t.transactionAmount;return e}(),o=e.querySelector("#lotOccupancyTransactionAdd--transactionAmount");o.min=(-1*c).toFixed(2),o.max=Math.max(t-c,0).toFixed(2),o.value=Math.max(t-c,0).toFixed(2)},onshown(c,n){bulmaJS.toggleHtmlClipped(),e=n,c.querySelector("form").addEventListener("submit",t)},onremoved(){bulmaJS.toggleHtmlClipped()}})}),q()}})();
\ No newline at end of file
diff --git a/public/javascripts/mapEdit.min.js b/public/javascripts/mapEdit.min.js
index 951c3b37..c7ab0ad9 100644
--- a/public/javascripts/mapEdit.min.js
+++ b/public/javascripts/mapEdit.min.js
@@ -1 +1 @@
-"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e;const a=exports.los,t=document.querySelector("#map--mapId").value,s=""===t,l=document.querySelector("#form--map");l.addEventListener("submit",function(e){e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/maps/"+(s?"doCreateMap":"doUpdateMap"),l,e=>{var t;e.success?(cityssm.disableNavBlocker(),s?window.location.href=a.getMapURL(e.mapId,!0):bulmaJS.alert({message:a.escapedAliases.Map+" Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+a.escapedAliases.Map,message:null!==(t=e.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})});const o=l.querySelectorAll("input, select");for(const e of o)e.addEventListener("change",cityssm.enableNavBlocker);null===(e=document.querySelector("#button--deleteMap"))||void 0===e||e.addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:"Delete "+a.escapedAliases.Map,message:`Are you sure you want to delete this ${a.escapedAliases.map} and all related ${a.escapedAliases.lots}?`,contextualColorName:"warning",okButton:{text:`Yes, Delete ${a.escapedAliases.Map}`,callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/maps/doDeleteMap",{mapId:t},e=>{var t;e.success?window.location.href=a.getMapURL():bulmaJS.alert({title:"Error Deleting "+a.escapedAliases.Map,message:null!==(t=e.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})})})();
\ No newline at end of file
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e;const t=exports.los,a=document.querySelector("#map--mapId").value,s=""===a,o=document.querySelector("#form--map");function l(){var e;t.setUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--map']"))||void 0===e||e.classList.remove("is-light")}o.addEventListener("submit",function(e){e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/maps/"+(s?"doCreateMap":"doUpdateMap"),o,e=>{var a;const o=e;o.success?(function(){var e;t.clearUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--map']"))||void 0===e||e.classList.add("is-light")}(),s?window.location.href=t.getMapURL(o.mapId,!0):bulmaJS.alert({message:t.escapedAliases.Map+" Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+t.escapedAliases.Map,message:null!==(a=o.errorMessage)&&void 0!==a?a:"",contextualColorName:"danger"})})});const r=o.querySelectorAll("input, select");for(const e of r)e.addEventListener("change",l);null===(e=document.querySelector("#button--deleteMap"))||void 0===e||e.addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:"Delete "+t.escapedAliases.Map,message:`Are you sure you want to delete this ${t.escapedAliases.map} and all related ${t.escapedAliases.lots}?`,contextualColorName:"warning",okButton:{text:`Yes, Delete ${t.escapedAliases.Map}`,callbackFunction:function(){cityssm.postJSON(t.urlPrefix+"/maps/doDeleteMap",{mapId:a},e=>{var a;const s=e;s.success?window.location.href=t.getMapURL():bulmaJS.alert({title:"Error Deleting "+t.escapedAliases.Map,message:null!==(a=s.errorMessage)&&void 0!==a?a:"",contextualColorName:"danger"})})}}})})})();
\ No newline at end of file
diff --git a/public/javascripts/workOrderEdit.min.js b/public/javascripts/workOrderEdit.min.js
index fbf32bb2..6e68f7df 100644
--- a/public/javascripts/workOrderEdit.min.js
+++ b/public/javascripts/workOrderEdit.min.js
@@ -1 +1 @@
-"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e;const t=exports.los,o=document.querySelector("#workOrderEdit--workOrderId").value,r=""===o,s=document.querySelector("#form--workOrderEdit");t.initializeDatePickers(s.querySelector("#workOrderEdit--workOrderOpenDateString").closest(".field")),t.initializeUnlockFieldButtons(s),s.addEventListener("submit",e=>{e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/workOrders/"+(r?"doCreateWorkOrder":"doUpdateWorkOrder"),e.currentTarget,e=>{var o;e.success?(cityssm.disableNavBlocker(),r?window.location.href=t.getWorkOrderURL(e.workOrderId,!0):bulmaJS.alert({message:"Work Order Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order",message:null!==(o=e.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})});const n=s.querySelectorAll("input, select");for(const e of n)e.addEventListener("change",cityssm.enableNavBlocker);function a(){cityssm.postJSON(t.urlPrefix+"/workOrders/doCloseWorkOrder",{workOrderId:o},e=>{var r;e.success?window.location.href=t.getWorkOrderURL(o):bulmaJS.alert({title:"Error Closing Work Order",message:null!==(r=e.errorMessage)&&void 0!==r?r:"",contextualColorName:"danger"})})}function l(){cityssm.postJSON(t.urlPrefix+"/workOrders/doDeleteWorkOrder",{workOrderId:o},e=>{var o;e.success?window.location.href=t.urlPrefix+"/workOrders":bulmaJS.alert({title:"Error Deleting Work Order",message:null!==(o=e.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})}let c;if(null===(g=document.querySelector("#button--closeWorkOrder"))||void 0===g||g.addEventListener("click",()=>{c.some(e=>!e.workOrderMilestoneCompletionDate)?bulmaJS.alert({title:"Outstanding Milestones",message:"You cannot close a work order with outstanding milestones.\n 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:a}})}),null===(i=document.querySelector("#button--deleteWorkOrder"))||void 0===i||i.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:l}})}),!r){var i;Object.defineProperty(exports,"__esModule",{value:!0});let e=exports.workOrderLots;delete exports.workOrderLots;let r=exports.workOrderLotOccupancies;function d(e){const s=e.currentTarget.closest(".container--lotOccupancy").dataset.lotOccupancyId;bulmaJS.confirm({title:`Delete ${t.escapedAliases.Occupancy} Relationship`,message:`Are you sure you want to remove the relationship to this ${t.escapedAliases.occupancy} record from this work order? Note that the record will remain.`,contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:function(){cityssm.postJSON(t.urlPrefix+"/workOrders/doDeleteWorkOrderLotOccupancy",{workOrderId:o,lotOccupancyId:s},e=>{var t;const o=e;o.success?(r=o.workOrderLotOccupancies,O()):bulmaJS.alert({title:"Error Deleting Relationship",message:null!==(t=o.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function u(r,s){cityssm.postJSON(t.urlPrefix+"/workOrders/doAddWorkOrderLot",{workOrderId:o,lotId:r},o=>{var r;const n=o;n.success?(e=n.workOrderLots,O()):bulmaJS.alert({title:`Error Adding ${t.escapedAliases.Lot}`,message:null!==(r=n.errorMessage)&&void 0!==r?r:"",contextualColorName:"danger"}),void 0!==s&&s(n.success)})}function m(e){u(e.currentTarget.dataset.lotId)}function p(r){const s=Number.parseInt(r.currentTarget.closest(".container--lot").dataset.lotId,10),n=e.find(e=>e.lotId===s);let a;function l(o){o.preventDefault(),cityssm.postJSON(t.urlPrefix+"/workOrders/doUpdateLotStatus",o.currentTarget,t=>{var o;const r=t;r.success?(e=r.workOrderLots,O(),a()):bulmaJS.alert({title:"Error Deleting Relationship",message:null!==(o=r.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lot-editLotStatus",{onshow(e){t.populateAliases(e),e.querySelector("#lotStatusEdit--lotId").value=s.toString(),e.querySelector("#lotStatusEdit--lotName").value=n.lotName;const r=e.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()),e.querySelector("form").insertAdjacentHTML("beforeend",``)},onshown(e,t){a=t,bulmaJS.toggleHtmlClipped(),e.querySelector("form").addEventListener("submit",l)},onremoved(){bulmaJS.toggleHtmlClipped()}})}function y(r){const s=r.currentTarget.closest(".container--lot").dataset.lotId;bulmaJS.confirm({title:`Delete ${t.escapedAliases.Occupancy} Relationship`,message:`Are you sure you want to remove the relationship to this ${t.escapedAliases.occupancy} record from this work order? Note that the record will remain.`,contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:function(){cityssm.postJSON(t.urlPrefix+"/workOrders/doDeleteWorkOrderLot",{workOrderId:o,lotId:s},t=>{var o;const r=t;r.success?(e=r.workOrderLots,O()):bulmaJS.alert({title:"Error Deleting Relationship",message:null!==(o=r.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})}}})}function O(){!function(){var o,s,n,a;const l=document.querySelector("#container--lotOccupancies");if(document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent=r.length.toString(),0===r.length)return void(l.innerHTML=`
\n
There are no ${t.escapedAliases.occupancies} associated with this work order.
\n
`);l.innerHTML=`
\n
\n
\n
${t.escapedAliases.Occupancy} Type
\n
${t.escapedAliases.Lot}
\n
${t.escapedAliases.OccupancyStartDate}
\n
End Date
\n
${t.escapedAliases.Occupants}
\n
\n
\n \n
`;const c=cityssm.dateToString(new Date);for(const i of r){const r=document.createElement("tr");r.className="container--lotOccupancy",r.dataset.lotOccupancyId=i.lotOccupancyId.toString();const u=!(i.occupancyEndDate&&i.occupancyEndDateStringi.lotId===e.lotId);r.innerHTML='
`;for(const e of n.lotOccupancies){const n=document.createElement("tr");n.className="container--lotOccupancy",n.dataset.lotOccupancyId=e.lotOccupancyId.toString(),n.innerHTML=`
"+(e.occupancyEndDate?e.occupancyEndDateString:'(No End Date)')+"
"+(0===e.lotOccupancyOccupants.length?`(No ${cityssm.escapeHTML(t.escapedAliases.Occupants)})`:cityssm.escapeHTML(e.lotOccupancyOccupants[0].occupantName+" "+e.lotOccupancyOccupants[0].occupantFamilyName)+(e.lotOccupancyOccupants.length>1?" plus "+(e.lotOccupancyOccupants.length-1):""))+"
',s.querySelector(".button--edit").addEventListener("click",k),s.querySelector(".button--delete").addEventListener("click",f),r.querySelector("tbody").append(s)}o.innerHTML="",o.append(r)}function v(e){var t;e.success?(c=e.workOrderMilestones,I()):bulmaJS.alert({title:"Error Reopening Milestone",message:null!==(t=e.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})}function M(e){e.preventDefault();const r=cityssm.dateToString(new Date),s=Number.parseInt(e.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),n=c.find(e=>e.workOrderMilestoneId===s);bulmaJS.confirm({title:"Complete Milestone",message:"Are you sure you want to complete this milestone?"+(""!==n.workOrderMilestoneDateString&&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:function(){cityssm.postJSON(t.urlPrefix+"/workOrders/doCompleteWorkOrderMilestone",{workOrderId:o,workOrderMilestoneId:s},v)}}})}function L(e){e.preventDefault();const r=e.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:function(){cityssm.postJSON(t.urlPrefix+"/workOrders/doReopenWorkOrderMilestone",{workOrderId:o,workOrderMilestoneId:r},v)}}})}function C(e){e.preventDefault();const r=e.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:function(){cityssm.postJSON(t.urlPrefix+"/workOrders/doDeleteWorkOrderMilestone",{workOrderMilestoneId:r,workOrderId:o},v)}}})}function T(e){e.preventDefault();const r=Number.parseInt(e.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),s=c.find(e=>e.workOrderMilestoneId===r);let n;function a(e){e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/workOrders/doUpdateWorkOrderMilestone",e.currentTarget,e=>{v(e),e.success&&n()})}cityssm.openHtmlModal("workOrder-editMilestone",{onshow(e){e.querySelector("#milestoneEdit--workOrderId").value=o,e.querySelector("#milestoneEdit--workOrderMilestoneId").value=s.workOrderMilestoneId.toString();const t=e.querySelector("#milestoneEdit--workOrderMilestoneTypeId");let r=!1;for(const e of exports.workOrderMilestoneTypes){const o=document.createElement("option");o.value=e.workOrderMilestoneTypeId.toString(),o.textContent=e.workOrderMilestoneType,e.workOrderMilestoneTypeId===s.workOrderMilestoneTypeId&&(o.selected=!0,r=!0),t.append(o)}if(!r&&s.workOrderMilestoneTypeId){const e=document.createElement("option");e.value=s.workOrderMilestoneTypeId.toString(),e.textContent=s.workOrderMilestoneType,e.selected=!0,t.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(e,o){n=o,bulmaJS.toggleHtmlClipped(),t.initializeDatePickers(e),e.querySelector("form").addEventListener("submit",a)},onremoved(){bulmaJS.toggleHtmlClipped()}})}function I(){var e,t,o,r,s;const n=document.querySelector("#panel--milestones"),a=n.querySelectorAll(".panel-block");for(const e of a)e.remove();for(const a of c){const l=document.createElement("div");l.className="panel-block is-block container--milestone",l.dataset.workOrderMilestoneId=a.workOrderMilestoneId.toString(),l.innerHTML='
'+(a.workOrderMilestoneCompletionDate?'':'')+'
'+(a.workOrderMilestoneTypeId?""+cityssm.escapeHTML(null!==(e=a.workOrderMilestoneType)&&void 0!==e?e:"")+" ":"")+(0===a.workOrderMilestoneDate?'(No Set Date)':a.workOrderMilestoneDateString)+(a.workOrderMilestoneTime?" "+a.workOrderMilestoneTimeString:"")+' '+cityssm.escapeHTML(null!==(t=a.workOrderMilestoneDescription)&&void 0!==t?t:"")+'
',null===(o=l.querySelector(".button--reopenMilestone"))||void 0===o||o.addEventListener("click",L),null===(r=l.querySelector(".button--editMilestone"))||void 0===r||r.addEventListener("click",T),null===(s=l.querySelector(".button--completeMilestone"))||void 0===s||s.addEventListener("click",M),l.querySelector(".button--deleteMilestone").addEventListener("click",C),n.append(l)}bulmaJS.init(n)}delete exports.workOrderComments,null===(g=document.querySelector("#workOrderComments--add"))||void 0===g||g.addEventListener("click",function(){let e;function r(o){o.preventDefault(),cityssm.postJSON(t.urlPrefix+"/workOrders/doAddWorkOrderComment",o.currentTarget,t=>{t.success&&(w=t.workOrderComments,b(),e())})}cityssm.openHtmlModal("workOrder-addComment",{onshow(e){t.populateAliases(e),e.querySelector("#workOrderCommentAdd--workOrderId").value=o,e.querySelector("form").addEventListener("submit",r)},onshown(t,o){bulmaJS.toggleHtmlClipped(),e=o,t.querySelector("#workOrderCommentAdd--workOrderComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#workOrderComments--add").focus()}})}),r||b(),r||(c=exports.workOrderMilestones,delete exports.workOrderMilestones,I(),null===(e=document.querySelector("#button--addMilestone"))||void 0===e||e.addEventListener("click",()=>{let e,r,s;function n(o){o&&o.preventDefault();const n=cityssm.dateToString(new Date);function a(){cityssm.postJSON(t.urlPrefix+"/workOrders/doAddWorkOrderMilestone",r,e=>{v(e),e.success&&s()})}const l=e.querySelector("#milestoneAdd--workOrderMilestoneDateString").value;""!==l&&l{var e;const t=exports.los,o=document.querySelector("#workOrderEdit--workOrderId").value,r=""===o,s=document.querySelector("#form--workOrderEdit");function n(){var e;t.setUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--workOrderEdit']"))||void 0===e||e.classList.remove("is-light")}function a(){var e;t.clearUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--workOrderEdit']"))||void 0===e||e.classList.add("is-light")}t.initializeDatePickers(s.querySelector("#workOrderEdit--workOrderOpenDateString").closest(".field")),t.initializeUnlockFieldButtons(s),s.addEventListener("submit",e=>{e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/workOrders/"+(r?"doCreateWorkOrder":"doUpdateWorkOrder"),e.currentTarget,e=>{var o;const s=e;s.success?(a(),r?window.location.href=t.getWorkOrderURL(s.workOrderId,!0):bulmaJS.alert({message:"Work Order Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order",message:null!==(o=s.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})});const l=s.querySelectorAll("input, select, textarea");for(const e of l)e.addEventListener("change",n);function c(){cityssm.postJSON(t.urlPrefix+"/workOrders/doCloseWorkOrder",{workOrderId:o},e=>{var r;const s=e;s.success?(a(),window.location.href=t.getWorkOrderURL(o)):bulmaJS.alert({title:"Error Closing Work Order",message:null!==(r=s.errorMessage)&&void 0!==r?r:"",contextualColorName:"danger"})})}function i(){cityssm.postJSON(t.urlPrefix+"/workOrders/doDeleteWorkOrder",{workOrderId:o},e=>{var o;const r=e;r.success?(a(),window.location.href=t.urlPrefix+"/workOrders"):bulmaJS.alert({title:"Error Deleting Work Order",message:null!==(o=r.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})}let d;if(null===(k=document.querySelector("#button--closeWorkOrder"))||void 0===k||k.addEventListener("click",()=>{d.some(e=>!e.workOrderMilestoneCompletionDate)?bulmaJS.alert({title:"Outstanding Milestones",message:"You cannot close a work order with outstanding milestones.\n Either complete the outstanding milestones, or remove them from the work order.",contextualColorName:"warning"}):bulmaJS.confirm({title:"Close Work Order",message:t.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:t.hasUnsavedChanges()?"warning":"info",okButton:{text:"Yes, Close Work Order",callbackFunction:c}})}),null===(u=document.querySelector("#button--deleteWorkOrder"))||void 0===u||u.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:i}})}),!r){var u;Object.defineProperty(exports,"__esModule",{value:!0});let e=exports.workOrderLots;delete exports.workOrderLots;let r=exports.workOrderLotOccupancies;function m(e){const s=e.currentTarget.closest(".container--lotOccupancy").dataset.lotOccupancyId;bulmaJS.confirm({title:`Delete ${t.escapedAliases.Occupancy} Relationship`,message:`Are you sure you want to remove the relationship to this ${t.escapedAliases.occupancy} record from this work order? Note that the record will remain.`,contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:function(){cityssm.postJSON(t.urlPrefix+"/workOrders/doDeleteWorkOrderLotOccupancy",{workOrderId:o,lotOccupancyId:s},e=>{var t;const o=e;o.success?(r=o.workOrderLotOccupancies,g()):bulmaJS.alert({title:"Error Deleting Relationship",message:null!==(t=o.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function p(r,s){cityssm.postJSON(t.urlPrefix+"/workOrders/doAddWorkOrderLot",{workOrderId:o,lotId:r},o=>{var r;const n=o;n.success?(e=n.workOrderLots,g()):bulmaJS.alert({title:`Error Adding ${t.escapedAliases.Lot}`,message:null!==(r=n.errorMessage)&&void 0!==r?r:"",contextualColorName:"danger"}),void 0!==s&&s(n.success)})}function y(e){p(e.currentTarget.dataset.lotId)}function O(r){const s=Number.parseInt(r.currentTarget.closest(".container--lot").dataset.lotId,10),n=e.find(e=>e.lotId===s);let a;function l(o){o.preventDefault(),cityssm.postJSON(t.urlPrefix+"/workOrders/doUpdateLotStatus",o.currentTarget,t=>{var o;const r=t;r.success?(e=r.workOrderLots,g(),a()):bulmaJS.alert({title:"Error Deleting Relationship",message:null!==(o=r.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lot-editLotStatus",{onshow(e){t.populateAliases(e),e.querySelector("#lotStatusEdit--lotId").value=s.toString(),e.querySelector("#lotStatusEdit--lotName").value=n.lotName;const r=e.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()),e.querySelector("form").insertAdjacentHTML("beforeend",``)},onshown(e,t){a=t,bulmaJS.toggleHtmlClipped(),e.querySelector("form").addEventListener("submit",l)},onremoved(){bulmaJS.toggleHtmlClipped()}})}function h(r){const s=r.currentTarget.closest(".container--lot").dataset.lotId;bulmaJS.confirm({title:`Delete ${t.escapedAliases.Occupancy} Relationship`,message:`Are you sure you want to remove the relationship to this ${t.escapedAliases.occupancy} record from this work order? Note that the record will remain.`,contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:function(){cityssm.postJSON(t.urlPrefix+"/workOrders/doDeleteWorkOrderLot",{workOrderId:o,lotId:s},t=>{var o;const r=t;r.success?(e=r.workOrderLots,g()):bulmaJS.alert({title:"Error Deleting Relationship",message:null!==(o=r.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})}}})}function g(){!function(){var o,s,n,a;const l=document.querySelector("#container--lotOccupancies");if(document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent=r.length.toString(),0===r.length)return void(l.innerHTML=`
\n
There are no ${t.escapedAliases.occupancies} associated with this work order.
\n
`);l.innerHTML=`
\n
\n
\n
${t.escapedAliases.Occupancy} Type
\n
${t.escapedAliases.Lot}
\n
${t.escapedAliases.OccupancyStartDate}
\n
End Date
\n
${t.escapedAliases.Occupants}
\n
\n
\n \n
`;const c=cityssm.dateToString(new Date);for(const i of r){const r=document.createElement("tr");r.className="container--lotOccupancy",r.dataset.lotOccupancyId=i.lotOccupancyId.toString();const d=!(i.occupancyEndDate&&i.occupancyEndDateStringi.lotId===e.lotId);r.innerHTML='
`;for(const e of n.lotOccupancies){const n=document.createElement("tr");n.className="container--lotOccupancy",n.dataset.lotOccupancyId=e.lotOccupancyId.toString(),n.innerHTML=`
"+(e.occupancyEndDate?e.occupancyEndDateString:'(No End Date)')+"
"+(0===e.lotOccupancyOccupants.length?`(No ${cityssm.escapeHTML(t.escapedAliases.Occupants)})`:cityssm.escapeHTML(e.lotOccupancyOccupants[0].occupantName+" "+e.lotOccupancyOccupants[0].occupantFamilyName)+(e.lotOccupancyOccupants.length>1?" plus "+(e.lotOccupancyOccupants.length-1):""))+"
',s.querySelector(".button--edit").addEventListener("click",b),s.querySelector(".button--delete").addEventListener("click",v),r.querySelector("tbody").append(s)}o.innerHTML="",o.append(r)}function L(e){var t;const o=e;o.success?(d=o.workOrderMilestones,E()):bulmaJS.alert({title:"Error Reopening Milestone",message:null!==(t=o.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})}function C(e){e.preventDefault();const r=cityssm.dateToString(new Date),s=Number.parseInt(e.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),n=d.find(e=>e.workOrderMilestoneId===s);bulmaJS.confirm({title:"Complete Milestone",message:"Are you sure you want to complete this milestone?"+(""!==n.workOrderMilestoneDateString&&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:function(){cityssm.postJSON(t.urlPrefix+"/workOrders/doCompleteWorkOrderMilestone",{workOrderId:o,workOrderMilestoneId:s},L)}}})}function T(e){e.preventDefault();const r=e.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:function(){cityssm.postJSON(t.urlPrefix+"/workOrders/doReopenWorkOrderMilestone",{workOrderId:o,workOrderMilestoneId:r},L)}}})}function I(e){e.preventDefault();const r=e.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:function(){cityssm.postJSON(t.urlPrefix+"/workOrders/doDeleteWorkOrderMilestone",{workOrderMilestoneId:r,workOrderId:o},L)}}})}function x(e){e.preventDefault();const r=Number.parseInt(e.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),s=d.find(e=>e.workOrderMilestoneId===r);let n;function a(e){e.preventDefault(),cityssm.postJSON(t.urlPrefix+"/workOrders/doUpdateWorkOrderMilestone",e.currentTarget,e=>{L(e),e.success&&n()})}cityssm.openHtmlModal("workOrder-editMilestone",{onshow(e){e.querySelector("#milestoneEdit--workOrderId").value=o,e.querySelector("#milestoneEdit--workOrderMilestoneId").value=s.workOrderMilestoneId.toString();const t=e.querySelector("#milestoneEdit--workOrderMilestoneTypeId");let r=!1;for(const e of exports.workOrderMilestoneTypes){const o=document.createElement("option");o.value=e.workOrderMilestoneTypeId.toString(),o.textContent=e.workOrderMilestoneType,e.workOrderMilestoneTypeId===s.workOrderMilestoneTypeId&&(o.selected=!0,r=!0),t.append(o)}if(!r&&s.workOrderMilestoneTypeId){const e=document.createElement("option");e.value=s.workOrderMilestoneTypeId.toString(),e.textContent=s.workOrderMilestoneType,e.selected=!0,t.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(e,o){n=o,bulmaJS.toggleHtmlClipped(),t.initializeDatePickers(e),e.querySelector("form").addEventListener("submit",a)},onremoved(){bulmaJS.toggleHtmlClipped()}})}function E(){var e,t,o,r,s;const n=document.querySelector("#panel--milestones"),a=n.querySelectorAll(".panel-block");for(const e of a)e.remove();for(const a of d){const l=document.createElement("div");l.className="panel-block is-block container--milestone",l.dataset.workOrderMilestoneId=a.workOrderMilestoneId.toString(),l.innerHTML='
'+(a.workOrderMilestoneCompletionDate?'':'')+'
'+(a.workOrderMilestoneTypeId?""+cityssm.escapeHTML(null!==(e=a.workOrderMilestoneType)&&void 0!==e?e:"")+" ":"")+(0===a.workOrderMilestoneDate?'(No Set Date)':a.workOrderMilestoneDateString)+(a.workOrderMilestoneTime?" "+a.workOrderMilestoneTimeString:"")+' '+cityssm.escapeHTML(null!==(t=a.workOrderMilestoneDescription)&&void 0!==t?t:"")+'