time pickers

deepsource-autofix-76c6eb20
Dan Gowans 2022-09-23 14:09:53 -04:00
parent 0c0a565bdb
commit a594b81dd5
20 changed files with 762 additions and 863 deletions

View File

@ -179,7 +179,8 @@ span.button.is-static {
.datetimepicker-clear-button {
transform: none;
margin-right: 0.5rem;
margin-right: 0.25rem;
margin-top: 0.25rem;
}
}

View File

@ -102,6 +102,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
},
onshown: (modalElement, closeModalFunction) => {
bulmaJS.toggleHtmlClipped();
los.initializeDatePickers(modalElement);
los.initializeTimePickers(modalElement);
modalElement.querySelector("#lotCommentEdit--lotComment").focus();
editFormElement = modalElement.querySelector("form");
editFormElement.addEventListener("submit", editComment);

View File

@ -164,6 +164,9 @@ declare const bulmaJS: BulmaJS;
onshown: (modalElement, closeModalFunction) => {
bulmaJS.toggleHtmlClipped();
los.initializeDatePickers(modalElement);
los.initializeTimePickers(modalElement);
(
modalElement.querySelector("#lotCommentEdit--lotComment") as HTMLTextAreaElement
).focus();

View File

@ -35,8 +35,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
else {
bulmaJS.alert({
message: exports.aliases.occupancy +
" Updated Successfully",
message: exports.aliases.occupancy + " Updated Successfully",
contextualColorName: "success"
});
}
@ -54,7 +53,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
for (const formInputElement of formInputElements) {
formInputElement.addEventListener("change", setUnsavedChanges);
}
los.initializeDatePickers(formElement);
if (!isCreate) {
document
.querySelector("#button--deleteLotOccupancy")
@ -67,9 +65,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
if (responseJSON.success) {
cityssm.disableNavBlocker();
window.location.href =
urlPrefix +
"/lotOccupancies?t=" +
Date.now();
urlPrefix + "/lotOccupancies?t=" + Date.now();
}
else {
bulmaJS.alert({
@ -119,10 +115,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
lotOccupancyFieldsContainerElement.innerHTML = "";
let occupancyTypeFieldIds = "";
for (const occupancyTypeField of responseJSON.occupancyTypeFields) {
occupancyTypeFieldIds +=
"," + occupancyTypeField.occupancyTypeFieldId;
const fieldName = "lotOccupancyFieldValue_" +
occupancyTypeField.occupancyTypeFieldId;
occupancyTypeFieldIds += "," + occupancyTypeField.occupancyTypeFieldId;
const fieldName = "lotOccupancyFieldValue_" + occupancyTypeField.occupancyTypeFieldId;
const fieldId = "lotOccupancy--" + fieldName;
const fieldElement = document.createElement("div");
fieldElement.className = "field";
@ -139,20 +133,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
inputElement.id = fieldId;
inputElement.name = fieldName;
inputElement.type = "text";
inputElement.required =
occupancyTypeField.isRequired;
inputElement.minLength =
occupancyTypeField.minimumLength;
inputElement.maxLength =
occupancyTypeField.maximumLength;
if (occupancyTypeField.pattern &&
occupancyTypeField.pattern !== "") {
inputElement.pattern =
occupancyTypeField.pattern;
inputElement.required = occupancyTypeField.isRequired;
inputElement.minLength = occupancyTypeField.minimumLength;
inputElement.maxLength = occupancyTypeField.maximumLength;
if (occupancyTypeField.pattern && occupancyTypeField.pattern !== "") {
inputElement.pattern = occupancyTypeField.pattern;
}
fieldElement
.querySelector(".control")
.append(inputElement);
fieldElement.querySelector(".control").append(inputElement);
}
else {
fieldElement.querySelector(".control").innerHTML =
@ -201,8 +188,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
cancelButton: {
text: "Revert the Change",
callbackFunction: () => {
occupancyTypeIdElement.value =
originalOccupancyTypeId;
occupancyTypeIdElement.value = originalOccupancyTypeId;
}
}
});
@ -211,16 +197,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
const lotNameElement = document.querySelector("#lotOccupancy--lotName");
lotNameElement.addEventListener("click", (clickEvent) => {
const currentLotName = clickEvent.currentTarget
.value;
const currentLotName = clickEvent.currentTarget.value;
let lotSelectCloseModalFunction;
let lotSelectFormElement;
let lotSelectResultsElement;
const selectLot = (clickEvent) => {
clickEvent.preventDefault();
const selectedLotElement = clickEvent.currentTarget;
document.querySelector("#lotOccupancy--lotId").value = selectedLotElement.dataset.lotId;
document.querySelector("#lotOccupancy--lotName").value = selectedLotElement.dataset.lotName;
document.querySelector("#lotOccupancy--lotId").value =
selectedLotElement.dataset.lotId;
document.querySelector("#lotOccupancy--lotName").value =
selectedLotElement.dataset.lotName;
setUnsavedChanges();
lotSelectCloseModalFunction();
};
@ -261,9 +248,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
cityssm.escapeHTML(lot.lotStatus) +
"<br />" +
'<span class="is-size-7">' +
(lot.lotOccupancyCount > 0
? "Currently Occupied"
: "") +
(lot.lotOccupancyCount > 0 ? "Currently Occupied" : "") +
"</span>" +
"</div>") +
"</div>";
@ -282,7 +267,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
bulmaJS.toggleHtmlClipped();
lotSelectCloseModalFunction = closeModalFunction;
const lotNameFilterElement = modalElement.querySelector("#lotSelect--lotName");
if (document.querySelector("#lotOccupancy--lotId").value !== "") {
if (document.querySelector("#lotOccupancy--lotId").value !==
"") {
lotNameFilterElement.value = currentLotName;
}
lotNameFilterElement.focus();
@ -292,8 +278,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
if (currentLotName !== "") {
occupancyStatusFilterElement.value = "";
}
lotSelectFormElement =
modalElement.querySelector("#form--lotSelect");
lotSelectFormElement = modalElement.querySelector("#form--lotSelect");
lotSelectResultsElement = modalElement.querySelector("#resultsContainer--lotSelect");
lotSelectFormElement.addEventListener("submit", (submitEvent) => {
submitEvent.preventDefault();
@ -305,25 +290,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
});
document
.querySelector(".is-lot-view-button")
.addEventListener("click", () => {
document.querySelector(".is-lot-view-button").addEventListener("click", () => {
const lotId = document.querySelector("#lotOccupancy--lotId").value;
if (lotId) {
window.open(urlPrefix + "/lots/" + lotId);
}
else {
bulmaJS.alert({
message: "No " +
exports.aliases.lot.toLowerCase() +
" selected.",
message: "No " + exports.aliases.lot.toLowerCase() + " selected.",
contextualColorName: "info"
});
}
});
document
.querySelector(".is-clear-lot-button")
.addEventListener("click", () => {
document.querySelector(".is-clear-lot-button").addEventListener("click", () => {
if (lotNameElement.disabled) {
bulmaJS.alert({
message: "You need to unlock the field before clearing it.",
@ -336,21 +315,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
setUnsavedChanges();
}
});
los.initializeDatePickers(formElement);
document
.querySelector("#lotOccupancy--occupancyStartDateString")
.addEventListener("change", () => {
document.querySelector("#lotOccupancy--occupancyEndDateString").min = document.querySelector("#lotOccupancy--occupancyStartDateString").value;
const endDatePicker = document.querySelector("#lotOccupancy--occupancyEndDateString")
.bulmaCalendar.datePicker;
endDatePicker.min = document.querySelector("#lotOccupancy--occupancyStartDateString").value;
endDatePicker.refresh();
});
los.initializeUnlockFieldButtons(formElement);
if (!isCreate) {
let lotOccupancyOccupants = exports.lotOccupancyOccupants;
delete exports.lotOccupancyOccupants;
const openEditLotOccupancyOccupant = (clickEvent) => {
const lotOccupantIndex = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset
.lotOccupantIndex, 10);
const lotOccupantIndex = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset.lotOccupantIndex, 10);
const lotOccupancyOccupant = lotOccupancyOccupants.find((currentLotOccupancyOccupant) => {
return (currentLotOccupancyOccupant.lotOccupantIndex ===
lotOccupantIndex);
return currentLotOccupancyOccupant.lotOccupantIndex === lotOccupantIndex;
});
let editFormElement;
let editCloseModalFunction;
@ -358,15 +339,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
submitEvent.preventDefault();
cityssm.postJSON(urlPrefix + "/lotOccupancies/doUpdateLotOccupancyOccupant", editFormElement, (responseJSON) => {
if (responseJSON.success) {
lotOccupancyOccupants =
responseJSON.lotOccupancyOccupants;
lotOccupancyOccupants = responseJSON.lotOccupancyOccupants;
editCloseModalFunction();
renderLotOccupancyOccupants();
}
else {
bulmaJS.alert({
title: "Error Updating " +
exports.aliases.occupant,
title: "Error Updating " + exports.aliases.occupant,
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
@ -382,10 +361,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
let lotOccupantTypeSelected = false;
for (const lotOccupantType of exports.lotOccupantTypes) {
const optionElement = document.createElement("option");
optionElement.value =
lotOccupantType.lotOccupantTypeId.toString();
optionElement.textContent =
lotOccupantType.lotOccupantType;
optionElement.value = lotOccupantType.lotOccupantTypeId.toString();
optionElement.textContent = lotOccupantType.lotOccupantType;
if (lotOccupantType.lotOccupantTypeId ===
lotOccupancyOccupant.lotOccupantTypeId) {
optionElement.selected = true;
@ -395,10 +372,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
if (!lotOccupantTypeSelected) {
const optionElement = document.createElement("option");
optionElement.value =
lotOccupancyOccupant.lotOccupantTypeId.toString();
optionElement.textContent =
lotOccupancyOccupant.lotOccupantType;
optionElement.value = lotOccupancyOccupant.lotOccupantTypeId.toString();
optionElement.textContent = lotOccupancyOccupant.lotOccupantType;
optionElement.selected = true;
lotOccupantTypeSelectElement.append(optionElement);
}
@ -423,21 +398,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
});
};
const deleteLotOccupancyOccupant = (clickEvent) => {
const lotOccupantIndex = clickEvent.currentTarget.closest("tr").dataset.lotOccupantIndex;
const lotOccupantIndex = clickEvent.currentTarget.closest("tr").dataset
.lotOccupantIndex;
const doDelete = () => {
cityssm.postJSON(urlPrefix + "/lotOccupancies/doDeleteLotOccupancyOccupant", {
lotOccupancyId,
lotOccupantIndex
}, (responseJSON) => {
if (responseJSON.success) {
lotOccupancyOccupants =
responseJSON.lotOccupancyOccupants;
lotOccupancyOccupants = responseJSON.lotOccupancyOccupants;
renderLotOccupancyOccupants();
}
else {
bulmaJS.alert({
title: "Error Removing " +
exports.aliases.occupant,
title: "Error Removing " + exports.aliases.occupant,
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
@ -469,8 +443,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
return;
}
const tableElement = document.createElement("table");
tableElement.className =
"table is-fullwidth is-striped is-hoverable";
tableElement.className = "table is-fullwidth is-striped is-hoverable";
tableElement.innerHTML =
"<thead><tr>" +
"<th>" +
@ -492,9 +465,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
"<td>" +
cityssm.escapeHTML(lotOccupancyOccupant.lotOccupantType) +
"</td>" +
("<td>" +
cityssm.escapeHTML(lotOccupancyOccupant.occupantName) +
"</td>") +
("<td>" + cityssm.escapeHTML(lotOccupancyOccupant.occupantName) + "</td>") +
("<td>" +
cityssm.escapeHTML(lotOccupancyOccupant.occupantAddress1) +
"<br />" +
@ -534,24 +505,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
occupantsContainer.append(tableElement);
};
document
.querySelector("#button--addOccupant")
.addEventListener("click", () => {
document.querySelector("#button--addOccupant").addEventListener("click", () => {
let addFormElement;
let addCloseModalFunction;
const addOccupant = (submitEvent) => {
submitEvent.preventDefault();
cityssm.postJSON(urlPrefix + "/lotOccupancies/doAddLotOccupancyOccupant", addFormElement, (responseJSON) => {
if (responseJSON.success) {
lotOccupancyOccupants =
responseJSON.lotOccupancyOccupants;
lotOccupancyOccupants = responseJSON.lotOccupancyOccupants;
addCloseModalFunction();
renderLotOccupancyOccupants();
}
else {
bulmaJS.alert({
title: "Error Adding " +
exports.aliases.occupant,
title: "Error Adding " + exports.aliases.occupant,
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
@ -565,10 +532,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
const lotOccupantTypeSelectElement = modalElement.querySelector("#lotOccupancyOccupantAdd--lotOccupantTypeId");
for (const lotOccupantType of exports.lotOccupantTypes) {
const optionElement = document.createElement("option");
optionElement.value =
lotOccupantType.lotOccupantTypeId.toString();
optionElement.textContent =
lotOccupantType.lotOccupantType;
optionElement.value = lotOccupantType.lotOccupantTypeId.toString();
optionElement.textContent = lotOccupantType.lotOccupantType;
lotOccupantTypeSelectElement.append(optionElement);
}
modalElement.querySelector("#lotOccupancyOccupantAdd--occupantCity").value = exports.occupantCityDefault;
@ -595,8 +560,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
const lotOccupancyCommentId = Number.parseInt(clickEvent.currentTarget.closest("tr").dataset
.lotOccupancyCommentId, 10);
const lotOccupancyComment = lotOccupancyComments.find((currentLotOccupancyComment) => {
return (currentLotOccupancyComment.lotOccupancyCommentId ===
lotOccupancyCommentId);
return currentLotOccupancyComment.lotOccupancyCommentId === lotOccupancyCommentId;
});
let editFormElement;
let editCloseModalFunction;
@ -604,8 +568,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
submitEvent.preventDefault();
cityssm.postJSON(urlPrefix + "/lotOccupancies/doUpdateLotOccupancyComment", editFormElement, (responseJSON) => {
if (responseJSON.success) {
lotOccupancyComments =
responseJSON.lotOccupancyComments;
lotOccupancyComments = responseJSON.lotOccupancyComments;
editCloseModalFunction();
renderLotOccupancyComments();
}
@ -629,6 +592,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
},
onshown: (modalElement, closeModalFunction) => {
bulmaJS.toggleHtmlClipped();
los.initializeDatePickers(modalElement);
los.initializeTimePickers(modalElement);
modalElement.querySelector("#lotOccupancyCommentEdit--lotOccupancyComment").focus();
editFormElement = modalElement.querySelector("form");
editFormElement.addEventListener("submit", editComment);
@ -648,8 +613,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
lotOccupancyCommentId
}, (responseJSON) => {
if (responseJSON.success) {
lotOccupancyComments =
responseJSON.lotOccupancyComments;
lotOccupancyComments = responseJSON.lotOccupancyComments;
renderLotOccupancyComments();
}
else {
@ -681,8 +645,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
return;
}
const tableElement = document.createElement("table");
tableElement.className =
"table is-fullwidth is-striped is-hoverable";
tableElement.className = "table is-fullwidth is-striped is-hoverable";
tableElement.innerHTML =
"<thead><tr>" +
"<th>Commentor</th>" +
@ -703,8 +666,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
lotOccupancyComment.lotOccupancyCommentDateString +
(lotOccupancyComment.lotOccupancyCommentTime === 0
? ""
: " " +
lotOccupancyComment.lotOccupancyCommentTimeString) +
: " " + lotOccupancyComment.lotOccupancyCommentTimeString) +
"</td>" +
"<td>" +
cityssm.escapeHTML(lotOccupancyComment.lotOccupancyComment) +
@ -731,17 +693,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
containerElement.innerHTML = "";
containerElement.append(tableElement);
};
document
.querySelector("#button--addComment")
.addEventListener("click", () => {
document.querySelector("#button--addComment").addEventListener("click", () => {
let addFormElement;
let addCloseModalFunction;
const addComment = (submitEvent) => {
submitEvent.preventDefault();
cityssm.postJSON(urlPrefix + "/lotOccupancies/doAddLotOccupancyComment", addFormElement, (responseJSON) => {
if (responseJSON.success) {
lotOccupancyComments =
responseJSON.lotOccupancyComments;
lotOccupancyComments = responseJSON.lotOccupancyComments;
addCloseModalFunction();
renderLotOccupancyComments();
}
@ -848,10 +807,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
for (const lotOccupancyFee of lotOccupancyFees) {
const tableRowElement = document.createElement("tr");
tableRowElement.className = "container--lotOccupancyFee";
tableRowElement.dataset.feeId =
lotOccupancyFee.feeId.toString();
tableRowElement.dataset.includeQuantity =
lotOccupancyFee.includeQuantity ? "1" : "0";
tableRowElement.dataset.feeId = lotOccupancyFee.feeId.toString();
tableRowElement.dataset.includeQuantity = lotOccupancyFee.includeQuantity
? "1"
: "0";
tableRowElement.innerHTML =
'<td colspan="' +
(lotOccupancyFee.quantity === 1 ? "5" : "1") +
@ -879,22 +838,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
tableRowElement
.querySelector("button")
.addEventListener("click", deleteLotOccupancyFee);
lotOccupancyFeesContainerElement
.querySelector("tbody")
.append(tableRowElement);
feeAmountTotal +=
lotOccupancyFee.feeAmount * lotOccupancyFee.quantity;
taxAmountTotal +=
lotOccupancyFee.taxAmount * lotOccupancyFee.quantity;
lotOccupancyFeesContainerElement.querySelector("tbody").append(tableRowElement);
feeAmountTotal += lotOccupancyFee.feeAmount * lotOccupancyFee.quantity;
taxAmountTotal += lotOccupancyFee.taxAmount * lotOccupancyFee.quantity;
}
lotOccupancyFeesContainerElement.querySelector("#lotOccupancyFees--feeAmountTotal").textContent = "$" + feeAmountTotal.toFixed(2);
lotOccupancyFeesContainerElement.querySelector("#lotOccupancyFees--taxAmountTotal").textContent = "$" + taxAmountTotal.toFixed(2);
lotOccupancyFeesContainerElement.querySelector("#lotOccupancyFees--grandTotal").textContent = "$" + (feeAmountTotal + taxAmountTotal).toFixed(2);
renderLotOccupancyTransactions();
};
document
.querySelector("#button--addFee")
.addEventListener("click", () => {
document.querySelector("#button--addFee").addEventListener("click", () => {
if (hasUnsavedChanges) {
bulmaJS.alert({
message: "Please save all unsaved changes before adding fees.",
@ -912,8 +865,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
quantity
}, (responseJSON) => {
if (responseJSON.success) {
lotOccupancyFees =
responseJSON.lotOccupancyFees;
lotOccupancyFees = responseJSON.lotOccupancyFees;
renderLotOccupancyFees();
filterFees();
}
@ -952,8 +904,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
const feeId = Number.parseInt(clickEvent.currentTarget.dataset.feeId, 10);
const feeCategoryId = Number.parseInt(clickEvent.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId, 10);
const feeCategory = feeCategories.find((currentFeeCategory) => {
return (currentFeeCategory.feeCategoryId ===
feeCategoryId);
return currentFeeCategory.feeCategoryId === feeCategoryId;
});
const fee = feeCategory.fees.find((currentFee) => {
return currentFee.feeId === feeId;
@ -966,15 +917,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
};
const filterFees = () => {
const filterStringPieces = feeFilterElement.value
.trim()
.toLowerCase()
.split(" ");
const filterStringPieces = feeFilterElement.value.trim().toLowerCase().split(" ");
feeFilterResultsElement.innerHTML = "";
for (const feeCategory of feeCategories) {
const categoryContainerElement = document.createElement("div");
categoryContainerElement.className =
"container--feeCategory";
categoryContainerElement.className = "container--feeCategory";
categoryContainerElement.dataset.feeCategoryId =
feeCategory.feeCategoryId.toString();
categoryContainerElement.innerHTML =
@ -991,9 +938,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
let includeFee = true;
for (const filterStringPiece of filterStringPieces) {
if (!fee.feeName
.toLowerCase()
.includes(filterStringPiece)) {
if (!fee.feeName.toLowerCase().includes(filterStringPiece)) {
includeFee = false;
break;
}
@ -1003,24 +948,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
hasFees = true;
const panelBlockElement = document.createElement("a");
panelBlockElement.className =
"panel-block is-block container--fee";
panelBlockElement.dataset.feeId =
fee.feeId.toString();
panelBlockElement.className = "panel-block is-block container--fee";
panelBlockElement.dataset.feeId = fee.feeId.toString();
panelBlockElement.href = "#";
panelBlockElement.innerHTML =
"<strong>" +
cityssm.escapeHTML(fee.feeName) +
"</strong><br />" +
"<small>" +
cityssm
.escapeHTML(fee.feeDescription)
.replace(/\n/g, "<br />") +
cityssm.escapeHTML(fee.feeDescription).replace(/\n/g, "<br />") +
"</small>";
panelBlockElement.addEventListener("click", tryAddFee);
categoryContainerElement
.querySelector(".panel")
.append(panelBlockElement);
categoryContainerElement.querySelector(".panel").append(panelBlockElement);
}
if (hasFees) {
feeFilterResultsElement.append(categoryContainerElement);
@ -1058,22 +997,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
const getTransactionGrandTotal = () => {
let transactionGrandTotal = 0;
for (const lotOccupancyTransaction of lotOccupancyTransactions) {
transactionGrandTotal +=
lotOccupancyTransaction.transactionAmount;
transactionGrandTotal += lotOccupancyTransaction.transactionAmount;
}
return transactionGrandTotal;
};
const deleteLotOccupancyTransaction = (clickEvent) => {
const transactionIndex = clickEvent.currentTarget.closest(".container--lotOccupancyTransaction").dataset.transactionIndex;
const doDelete = () => {
cityssm.postJSON(urlPrefix +
"/lotOccupancies/doDeleteLotOccupancyTransaction", {
cityssm.postJSON(urlPrefix + "/lotOccupancies/doDeleteLotOccupancyTransaction", {
lotOccupancyId,
transactionIndex
}, (responseJSON) => {
if (responseJSON.success) {
lotOccupancyTransactions =
responseJSON.lotOccupancyTransactions;
lotOccupancyTransactions = responseJSON.lotOccupancyTransactions;
renderLotOccupancyTransactions();
}
else {
@ -1124,11 +1060,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
"</table>";
let transactionGrandTotal = 0;
for (const lotOccupancyTransaction of lotOccupancyTransactions) {
transactionGrandTotal +=
lotOccupancyTransaction.transactionAmount;
transactionGrandTotal += lotOccupancyTransaction.transactionAmount;
const tableRowElement = document.createElement("tr");
tableRowElement.className =
"container--lotOccupancyTransaction";
tableRowElement.className = "container--lotOccupancyTransaction";
tableRowElement.dataset.transactionIndex =
lotOccupancyTransaction.transactionIndex.toString();
tableRowElement.innerHTML =
@ -1172,17 +1106,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
"</div>");
}
};
document
.querySelector("#button--addTransaction")
.addEventListener("click", () => {
document.querySelector("#button--addTransaction").addEventListener("click", () => {
let addCloseModalFunction;
const doAddTransaction = (submitEvent) => {
submitEvent.preventDefault();
cityssm.postJSON(urlPrefix +
"/lotOccupancies/doAddLotOccupancyTransaction", submitEvent.currentTarget, (responseJSON) => {
cityssm.postJSON(urlPrefix + "/lotOccupancies/doAddLotOccupancyTransaction", submitEvent.currentTarget, (responseJSON) => {
if (responseJSON.success) {
lotOccupancyTransactions =
responseJSON.lotOccupancyTransactions;
lotOccupancyTransactions = responseJSON.lotOccupancyTransactions;
addCloseModalFunction();
renderLotOccupancyTransactions();
}
@ -1209,9 +1139,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
onshown: (modalElement, closeModalFunction) => {
bulmaJS.toggleHtmlClipped();
addCloseModalFunction = closeModalFunction;
modalElement
.querySelector("form")
.addEventListener("submit", doAddTransaction);
modalElement.querySelector("form").addEventListener("submit", doAddTransaction);
},
onremoved: () => {
bulmaJS.toggleHtmlClipped();

View File

@ -16,9 +16,7 @@ declare const bulmaJS: BulmaJS;
const urlPrefix = document.querySelector("main").dataset.urlPrefix;
const lotOccupancyId = (
document.querySelector(
"#lotOccupancy--lotOccupancyId"
) as HTMLInputElement
document.querySelector("#lotOccupancy--lotOccupancyId") as HTMLInputElement
).value;
const isCreate = lotOccupancyId === "";
@ -41,9 +39,7 @@ declare const bulmaJS: BulmaJS;
cityssm.disableNavBlocker();
};
const formElement = document.querySelector(
"#form--lotOccupancy"
) as HTMLFormElement;
const formElement = document.querySelector("#form--lotOccupancy") as HTMLFormElement;
formElement.addEventListener("submit", (formEvent) => {
formEvent.preventDefault();
@ -70,9 +66,7 @@ declare const bulmaJS: BulmaJS;
Date.now();
} else {
bulmaJS.alert({
message:
exports.aliases.occupancy +
" Updated Successfully",
message: exports.aliases.occupancy + " Updated Successfully",
contextualColorName: "success"
});
}
@ -93,8 +87,6 @@ declare const bulmaJS: BulmaJS;
formInputElement.addEventListener("change", setUnsavedChanges);
}
los.initializeDatePickers(formElement);
if (!isCreate) {
document
.querySelector("#button--deleteLotOccupancy")
@ -107,16 +99,11 @@ declare const bulmaJS: BulmaJS;
{
lotOccupancyId
},
(responseJSON: {
success: boolean;
errorMessage?: string;
}) => {
(responseJSON: { success: boolean; errorMessage?: string }) => {
if (responseJSON.success) {
cityssm.disableNavBlocker();
window.location.href =
urlPrefix +
"/lotOccupancies?t=" +
Date.now();
urlPrefix + "/lotOccupancies?t=" + Date.now();
} else {
bulmaJS.alert({
title: "Error Deleting Record",
@ -168,9 +155,7 @@ declare const bulmaJS: BulmaJS;
{
occupancyTypeId: occupancyTypeIdElement.value
},
(responseJSON: {
occupancyTypeFields: recordTypes.OccupancyTypeField[];
}) => {
(responseJSON: { occupancyTypeFields: recordTypes.OccupancyTypeField[] }) => {
if (responseJSON.occupancyTypeFields.length === 0) {
lotOccupancyFieldsContainerElement.innerHTML =
'<div class="message is-info">' +
@ -187,12 +172,10 @@ declare const bulmaJS: BulmaJS;
let occupancyTypeFieldIds = "";
for (const occupancyTypeField of responseJSON.occupancyTypeFields) {
occupancyTypeFieldIds +=
"," + occupancyTypeField.occupancyTypeFieldId;
occupancyTypeFieldIds += "," + occupancyTypeField.occupancyTypeFieldId;
const fieldName =
"lotOccupancyFieldValue_" +
occupancyTypeField.occupancyTypeFieldId;
"lotOccupancyFieldValue_" + occupancyTypeField.occupancyTypeFieldId;
const fieldId = "lotOccupancy--" + fieldName;
@ -207,11 +190,8 @@ declare const bulmaJS: BulmaJS;
fieldElement.querySelector("label").textContent =
occupancyTypeField.occupancyTypeField;
if (
occupancyTypeField.occupancyTypeFieldValues === ""
) {
const inputElement =
document.createElement("input");
if (occupancyTypeField.occupancyTypeFieldValues === "") {
const inputElement = document.createElement("input");
inputElement.className = "input";
@ -221,24 +201,15 @@ declare const bulmaJS: BulmaJS;
inputElement.type = "text";
inputElement.required =
occupancyTypeField.isRequired;
inputElement.minLength =
occupancyTypeField.minimumLength;
inputElement.maxLength =
occupancyTypeField.maximumLength;
inputElement.required = occupancyTypeField.isRequired;
inputElement.minLength = occupancyTypeField.minimumLength;
inputElement.maxLength = occupancyTypeField.maximumLength;
if (
occupancyTypeField.pattern &&
occupancyTypeField.pattern !== ""
) {
inputElement.pattern =
occupancyTypeField.pattern;
if (occupancyTypeField.pattern && occupancyTypeField.pattern !== "") {
inputElement.pattern = occupancyTypeField.pattern;
}
fieldElement
.querySelector(".control")
.append(inputElement);
fieldElement.querySelector(".control").append(inputElement);
} else {
fieldElement.querySelector(".control").innerHTML =
'<div class="select is-fullwidth"><select id="' +
@ -252,7 +223,8 @@ declare const bulmaJS: BulmaJS;
fieldElement.querySelector("select").required =
occupancyTypeField.isRequired;
const optionValues = occupancyTypeField.occupancyTypeFieldValues.split("\n");
const optionValues =
occupancyTypeField.occupancyTypeFieldValues.split("\n");
for (const optionValue of optionValues) {
const optionElement = document.createElement("option");
@ -296,8 +268,7 @@ declare const bulmaJS: BulmaJS;
cancelButton: {
text: "Revert the Change",
callbackFunction: () => {
occupancyTypeIdElement.value =
originalOccupancyTypeId;
occupancyTypeIdElement.value = originalOccupancyTypeId;
}
}
});
@ -307,13 +278,10 @@ declare const bulmaJS: BulmaJS;
// Lot Selector
const lotNameElement = document.querySelector(
"#lotOccupancy--lotName"
) as HTMLInputElement;
const lotNameElement = document.querySelector("#lotOccupancy--lotName") as HTMLInputElement;
lotNameElement.addEventListener("click", (clickEvent) => {
const currentLotName = (clickEvent.currentTarget as HTMLInputElement)
.value;
const currentLotName = (clickEvent.currentTarget as HTMLInputElement).value;
let lotSelectCloseModalFunction: () => void;
@ -325,16 +293,10 @@ declare const bulmaJS: BulmaJS;
const selectedLotElement = clickEvent.currentTarget as HTMLElement;
(
document.querySelector(
"#lotOccupancy--lotId"
) as HTMLInputElement
).value = selectedLotElement.dataset.lotId;
(
document.querySelector(
"#lotOccupancy--lotName"
) as HTMLInputElement
).value = selectedLotElement.dataset.lotName;
(document.querySelector("#lotOccupancy--lotId") as HTMLInputElement).value =
selectedLotElement.dataset.lotId;
(document.querySelector("#lotOccupancy--lotName") as HTMLInputElement).value =
selectedLotElement.dataset.lotName;
setUnsavedChanges();
@ -387,9 +349,7 @@ declare const bulmaJS: BulmaJS;
cityssm.escapeHTML(lot.lotStatus as string) +
"<br />" +
'<span class="is-size-7">' +
(lot.lotOccupancyCount > 0
? "Currently Occupied"
: "") +
(lot.lotOccupancyCount > 0 ? "Currently Occupied" : "") +
"</span>" +
"</div>") +
"</div>";
@ -419,11 +379,8 @@ declare const bulmaJS: BulmaJS;
) as HTMLInputElement;
if (
(
document.querySelector(
"#lotOccupancy--lotId"
) as HTMLInputElement
).value !== ""
(document.querySelector("#lotOccupancy--lotId") as HTMLInputElement).value !==
""
) {
lotNameFilterElement.value = currentLotName;
}
@ -434,27 +391,20 @@ declare const bulmaJS: BulmaJS;
const occupancyStatusFilterElement = modalElement.querySelector(
"#lotSelect--occupancyStatus"
) as HTMLSelectElement;
occupancyStatusFilterElement.addEventListener(
"change",
searchLots
);
occupancyStatusFilterElement.addEventListener("change", searchLots);
if (currentLotName !== "") {
occupancyStatusFilterElement.value = "";
}
lotSelectFormElement =
modalElement.querySelector("#form--lotSelect");
lotSelectFormElement = modalElement.querySelector("#form--lotSelect");
lotSelectResultsElement = modalElement.querySelector(
"#resultsContainer--lotSelect"
);
lotSelectFormElement.addEventListener(
"submit",
(submitEvent) => {
lotSelectFormElement.addEventListener("submit", (submitEvent) => {
submitEvent.preventDefault();
}
);
});
searchLots();
},
@ -464,31 +414,20 @@ declare const bulmaJS: BulmaJS;
});
});
document
.querySelector(".is-lot-view-button")
.addEventListener("click", () => {
const lotId = (
document.querySelector(
"#lotOccupancy--lotId"
) as HTMLInputElement
).value;
document.querySelector(".is-lot-view-button").addEventListener("click", () => {
const lotId = (document.querySelector("#lotOccupancy--lotId") as HTMLInputElement).value;
if (lotId) {
window.open(urlPrefix + "/lots/" + lotId);
} else {
bulmaJS.alert({
message:
"No " +
exports.aliases.lot.toLowerCase() +
" selected.",
message: "No " + exports.aliases.lot.toLowerCase() + " selected.",
contextualColorName: "info"
});
}
});
document
.querySelector(".is-clear-lot-button")
.addEventListener("click", () => {
document.querySelector(".is-clear-lot-button").addEventListener("click", () => {
if (lotNameElement.disabled) {
bulmaJS.alert({
message: "You need to unlock the field before clearing it.",
@ -496,29 +435,28 @@ declare const bulmaJS: BulmaJS;
});
} else {
lotNameElement.value = "(No " + exports.aliases.lot + ")";
(
document.querySelector(
"#lotOccupancy--lotId"
) as HTMLInputElement
).value = "";
(document.querySelector("#lotOccupancy--lotId") as HTMLInputElement).value = "";
setUnsavedChanges();
}
});
// Start Date
los.initializeDatePickers(formElement);
document
.querySelector("#lotOccupancy--occupancyStartDateString")
.addEventListener("change", () => {
(
document.querySelector(
"#lotOccupancy--occupancyEndDateString"
) as HTMLInputElement
).min = (
const endDatePicker = document.querySelector("#lotOccupancy--occupancyEndDateString")
.bulmaCalendar.datePicker;
endDatePicker.min = (
document.querySelector(
"#lotOccupancy--occupancyStartDateString"
) as HTMLInputElement
).value;
endDatePicker.refresh();
});
los.initializeUnlockFieldButtons(formElement);
@ -534,17 +472,13 @@ declare const bulmaJS: BulmaJS;
const openEditLotOccupancyOccupant = (clickEvent: Event) => {
const lotOccupantIndex = Number.parseInt(
(clickEvent.currentTarget as HTMLElement).closest("tr").dataset
.lotOccupantIndex,
(clickEvent.currentTarget as HTMLElement).closest("tr").dataset.lotOccupantIndex,
10
);
const lotOccupancyOccupant = lotOccupancyOccupants.find(
(currentLotOccupancyOccupant) => {
return (
currentLotOccupancyOccupant.lotOccupantIndex ===
lotOccupantIndex
);
return currentLotOccupancyOccupant.lotOccupantIndex === lotOccupantIndex;
}
);
@ -563,15 +497,12 @@ declare const bulmaJS: BulmaJS;
lotOccupancyOccupants?: recordTypes.LotOccupancyOccupant[];
}) => {
if (responseJSON.success) {
lotOccupancyOccupants =
responseJSON.lotOccupancyOccupants;
lotOccupancyOccupants = responseJSON.lotOccupancyOccupants;
editCloseModalFunction();
renderLotOccupancyOccupants();
} else {
bulmaJS.alert({
title:
"Error Updating " +
exports.aliases.occupant,
title: "Error Updating " + exports.aliases.occupant,
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
@ -595,8 +526,7 @@ declare const bulmaJS: BulmaJS;
) as HTMLInputElement
).value = lotOccupantIndex.toString();
const lotOccupantTypeSelectElement =
modalElement.querySelector(
const lotOccupantTypeSelectElement = modalElement.querySelector(
"#lotOccupancyOccupantEdit--lotOccupantTypeId"
) as HTMLSelectElement;
@ -604,10 +534,8 @@ declare const bulmaJS: BulmaJS;
for (const lotOccupantType of exports.lotOccupantTypes as recordTypes.LotOccupantType[]) {
const optionElement = document.createElement("option");
optionElement.value =
lotOccupantType.lotOccupantTypeId.toString();
optionElement.textContent =
lotOccupantType.lotOccupantType;
optionElement.value = lotOccupantType.lotOccupantTypeId.toString();
optionElement.textContent = lotOccupantType.lotOccupantType;
if (
lotOccupantType.lotOccupantTypeId ===
@ -623,10 +551,8 @@ declare const bulmaJS: BulmaJS;
if (!lotOccupantTypeSelected) {
const optionElement = document.createElement("option");
optionElement.value =
lotOccupancyOccupant.lotOccupantTypeId.toString();
optionElement.textContent =
lotOccupancyOccupant.lotOccupantType as string;
optionElement.value = lotOccupancyOccupant.lotOccupantTypeId.toString();
optionElement.textContent = lotOccupancyOccupant.lotOccupantType as string;
optionElement.selected = true;
lotOccupantTypeSelectElement.append(optionElement);
@ -689,9 +615,8 @@ declare const bulmaJS: BulmaJS;
};
const deleteLotOccupancyOccupant = (clickEvent: Event) => {
const lotOccupantIndex = (
clickEvent.currentTarget as HTMLElement
).closest("tr").dataset.lotOccupantIndex;
const lotOccupantIndex = (clickEvent.currentTarget as HTMLElement).closest("tr").dataset
.lotOccupantIndex;
const doDelete = () => {
cityssm.postJSON(
@ -706,14 +631,11 @@ declare const bulmaJS: BulmaJS;
lotOccupancyOccupants: recordTypes.LotOccupancyOccupant[];
}) => {
if (responseJSON.success) {
lotOccupancyOccupants =
responseJSON.lotOccupancyOccupants;
lotOccupancyOccupants = responseJSON.lotOccupancyOccupants;
renderLotOccupancyOccupants();
} else {
bulmaJS.alert({
title:
"Error Removing " +
exports.aliases.occupant,
title: "Error Removing " + exports.aliases.occupant,
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
@ -755,8 +677,7 @@ declare const bulmaJS: BulmaJS;
}
const tableElement = document.createElement("table");
tableElement.className =
"table is-fullwidth is-striped is-hoverable";
tableElement.className = "table is-fullwidth is-striped is-hoverable";
tableElement.innerHTML =
"<thead><tr>" +
@ -779,40 +700,24 @@ declare const bulmaJS: BulmaJS;
tableRowElement.innerHTML =
"<td>" +
cityssm.escapeHTML(
lotOccupancyOccupant.lotOccupantType as string
) +
cityssm.escapeHTML(lotOccupancyOccupant.lotOccupantType as string) +
"</td>" +
("<td>" + cityssm.escapeHTML(lotOccupancyOccupant.occupantName) + "</td>") +
("<td>" +
cityssm.escapeHTML(lotOccupancyOccupant.occupantName) +
"</td>") +
("<td>" +
cityssm.escapeHTML(
lotOccupancyOccupant.occupantAddress1
) +
cityssm.escapeHTML(lotOccupancyOccupant.occupantAddress1) +
"<br />" +
(lotOccupancyOccupant.occupantAddress2
? cityssm.escapeHTML(
lotOccupancyOccupant.occupantAddress2
) + "<br />"
? cityssm.escapeHTML(lotOccupancyOccupant.occupantAddress2) + "<br />"
: "") +
(lotOccupancyOccupant.occupantCity
? cityssm.escapeHTML(
lotOccupancyOccupant.occupantCity
) + ", "
? cityssm.escapeHTML(lotOccupancyOccupant.occupantCity) + ", "
: "") +
cityssm.escapeHTML(
lotOccupancyOccupant.occupantProvince
) +
cityssm.escapeHTML(lotOccupancyOccupant.occupantProvince) +
"<br />" +
cityssm.escapeHTML(
lotOccupancyOccupant.occupantPostalCode
) +
cityssm.escapeHTML(lotOccupancyOccupant.occupantPostalCode) +
"</td>") +
("<td>" +
cityssm.escapeHTML(
lotOccupancyOccupant.occupantPhoneNumber
) +
cityssm.escapeHTML(lotOccupancyOccupant.occupantPhoneNumber) +
"</td>") +
('<td class="is-hidden-print">' +
'<div class="buttons are-small is-justify-content-end">' +
@ -841,9 +746,7 @@ declare const bulmaJS: BulmaJS;
occupantsContainer.append(tableElement);
};
document
.querySelector("#button--addOccupant")
.addEventListener("click", () => {
document.querySelector("#button--addOccupant").addEventListener("click", () => {
let addFormElement: HTMLFormElement;
let addCloseModalFunction: () => void;
@ -859,15 +762,12 @@ declare const bulmaJS: BulmaJS;
lotOccupancyOccupants?: recordTypes.LotOccupancyOccupant[];
}) => {
if (responseJSON.success) {
lotOccupancyOccupants =
responseJSON.lotOccupancyOccupants;
lotOccupancyOccupants = responseJSON.lotOccupancyOccupants;
addCloseModalFunction();
renderLotOccupancyOccupants();
} else {
bulmaJS.alert({
title:
"Error Adding " +
exports.aliases.occupant,
title: "Error Adding " + exports.aliases.occupant,
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
@ -886,18 +786,14 @@ declare const bulmaJS: BulmaJS;
) as HTMLInputElement
).value = lotOccupancyId;
const lotOccupantTypeSelectElement =
modalElement.querySelector(
const lotOccupantTypeSelectElement = modalElement.querySelector(
"#lotOccupancyOccupantAdd--lotOccupantTypeId"
) as HTMLSelectElement;
for (const lotOccupantType of exports.lotOccupantTypes as recordTypes.LotOccupantType[]) {
const optionElement =
document.createElement("option");
optionElement.value =
lotOccupantType.lotOccupantTypeId.toString();
optionElement.textContent =
lotOccupantType.lotOccupantType;
const optionElement = document.createElement("option");
optionElement.value = lotOccupantType.lotOccupantTypeId.toString();
optionElement.textContent = lotOccupantType.lotOccupantType;
lotOccupantTypeSelectElement.append(optionElement);
}
@ -940,8 +836,7 @@ declare const bulmaJS: BulmaJS;
*/
if (!isCreate) {
let lotOccupancyComments: recordTypes.LotOccupancyComment[] =
exports.lotOccupancyComments;
let lotOccupancyComments: recordTypes.LotOccupancyComment[] = exports.lotOccupancyComments;
delete exports.lotOccupancyComments;
const openEditLotOccupancyComment = (clickEvent: Event) => {
@ -951,14 +846,9 @@ declare const bulmaJS: BulmaJS;
10
);
const lotOccupancyComment = lotOccupancyComments.find(
(currentLotOccupancyComment) => {
return (
currentLotOccupancyComment.lotOccupancyCommentId ===
lotOccupancyCommentId
);
}
);
const lotOccupancyComment = lotOccupancyComments.find((currentLotOccupancyComment) => {
return currentLotOccupancyComment.lotOccupancyCommentId === lotOccupancyCommentId;
});
let editFormElement: HTMLFormElement;
let editCloseModalFunction: () => void;
@ -975,8 +865,7 @@ declare const bulmaJS: BulmaJS;
lotOccupancyComments?: recordTypes.LotOccupancyComment[];
}) => {
if (responseJSON.success) {
lotOccupancyComments =
responseJSON.lotOccupancyComments;
lotOccupancyComments = responseJSON.lotOccupancyComments;
editCloseModalFunction();
renderLotOccupancyComments();
} else {
@ -1024,6 +913,9 @@ declare const bulmaJS: BulmaJS;
onshown: (modalElement, closeModalFunction) => {
bulmaJS.toggleHtmlClipped();
los.initializeDatePickers(modalElement);
los.initializeTimePickers(modalElement);
(
modalElement.querySelector(
"#lotOccupancyCommentEdit--lotOccupancyComment"
@ -1061,8 +953,7 @@ declare const bulmaJS: BulmaJS;
lotOccupancyComments: recordTypes.LotOccupancyComment[];
}) => {
if (responseJSON.success) {
lotOccupancyComments =
responseJSON.lotOccupancyComments;
lotOccupancyComments = responseJSON.lotOccupancyComments;
renderLotOccupancyComments();
} else {
bulmaJS.alert({
@ -1100,8 +991,7 @@ declare const bulmaJS: BulmaJS;
}
const tableElement = document.createElement("table");
tableElement.className =
"table is-fullwidth is-striped is-hoverable";
tableElement.className = "table is-fullwidth is-striped is-hoverable";
tableElement.innerHTML =
"<thead><tr>" +
"<th>Commentor</th>" +
@ -1118,21 +1008,16 @@ declare const bulmaJS: BulmaJS;
tableRowElement.innerHTML =
"<td>" +
cityssm.escapeHTML(
lotOccupancyComment.recordCreate_userName
) +
cityssm.escapeHTML(lotOccupancyComment.recordCreate_userName) +
"</td>" +
"<td>" +
lotOccupancyComment.lotOccupancyCommentDateString +
(lotOccupancyComment.lotOccupancyCommentTime === 0
? ""
: " " +
lotOccupancyComment.lotOccupancyCommentTimeString) +
: " " + lotOccupancyComment.lotOccupancyCommentTimeString) +
"</td>" +
"<td>" +
cityssm.escapeHTML(
lotOccupancyComment.lotOccupancyComment
) +
cityssm.escapeHTML(lotOccupancyComment.lotOccupancyComment) +
"</td>" +
('<td class="is-hidden-print">' +
'<div class="buttons are-small is-justify-content-end">' +
@ -1160,9 +1045,7 @@ declare const bulmaJS: BulmaJS;
containerElement.append(tableElement);
};
document
.querySelector("#button--addComment")
.addEventListener("click", () => {
document.querySelector("#button--addComment").addEventListener("click", () => {
let addFormElement: HTMLFormElement;
let addCloseModalFunction: () => void;
@ -1178,8 +1061,7 @@ declare const bulmaJS: BulmaJS;
lotOccupancyComments?: recordTypes.LotOccupancyComment[];
}) => {
if (responseJSON.success) {
lotOccupancyComments =
responseJSON.lotOccupancyComments;
lotOccupancyComments = responseJSON.lotOccupancyComments;
addCloseModalFunction();
renderLotOccupancyComments();
} else {
@ -1231,8 +1113,7 @@ declare const bulmaJS: BulmaJS;
*/
if (!isCreate) {
let lotOccupancyFees: recordTypes.LotOccupancyFee[] =
exports.lotOccupancyFees;
let lotOccupancyFees: recordTypes.LotOccupancyFee[] = exports.lotOccupancyFees;
delete exports.lotOccupancyFees;
const lotOccupancyFeesContainerElement = document.querySelector(
@ -1332,10 +1213,10 @@ declare const bulmaJS: BulmaJS;
for (const lotOccupancyFee of lotOccupancyFees) {
const tableRowElement = document.createElement("tr");
tableRowElement.className = "container--lotOccupancyFee";
tableRowElement.dataset.feeId =
lotOccupancyFee.feeId.toString();
tableRowElement.dataset.includeQuantity =
lotOccupancyFee.includeQuantity ? "1" : "0";
tableRowElement.dataset.feeId = lotOccupancyFee.feeId.toString();
tableRowElement.dataset.includeQuantity = lotOccupancyFee.includeQuantity
? "1"
: "0";
tableRowElement.innerHTML =
'<td colspan="' +
@ -1354,9 +1235,7 @@ declare const bulmaJS: BulmaJS;
"</td>" +
"<td>=</td>") +
'<td class="has-text-right">$' +
(
lotOccupancyFee.feeAmount * lotOccupancyFee.quantity
).toFixed(2) +
(lotOccupancyFee.feeAmount * lotOccupancyFee.quantity).toFixed(2) +
"</td>" +
('<td class="is-hidden-print">' +
'<button class="button is-small is-danger is-light" data-tooltip="Delete Fee" type="button">' +
@ -1368,14 +1247,10 @@ declare const bulmaJS: BulmaJS;
.querySelector("button")
.addEventListener("click", deleteLotOccupancyFee);
lotOccupancyFeesContainerElement
.querySelector("tbody")
.append(tableRowElement);
lotOccupancyFeesContainerElement.querySelector("tbody").append(tableRowElement);
feeAmountTotal +=
lotOccupancyFee.feeAmount * lotOccupancyFee.quantity;
taxAmountTotal +=
lotOccupancyFee.taxAmount * lotOccupancyFee.quantity;
feeAmountTotal += lotOccupancyFee.feeAmount * lotOccupancyFee.quantity;
taxAmountTotal += lotOccupancyFee.taxAmount * lotOccupancyFee.quantity;
}
(
@ -1397,13 +1272,10 @@ declare const bulmaJS: BulmaJS;
renderLotOccupancyTransactions();
};
document
.querySelector("#button--addFee")
.addEventListener("click", () => {
document.querySelector("#button--addFee").addEventListener("click", () => {
if (hasUnsavedChanges) {
bulmaJS.alert({
message:
"Please save all unsaved changes before adding fees.",
message: "Please save all unsaved changes before adding fees.",
contextualColorName: "warning"
});
return;
@ -1414,10 +1286,7 @@ declare const bulmaJS: BulmaJS;
let feeFilterElement: HTMLInputElement;
let feeFilterResultsElement: HTMLElement;
const doAddFee = (
feeId: number,
quantity: number | string = 1
) => {
const doAddFee = (feeId: number, quantity: number | string = 1) => {
cityssm.postJSON(
urlPrefix + "/lotOccupancies/doAddLotOccupancyFee",
{
@ -1431,8 +1300,7 @@ declare const bulmaJS: BulmaJS;
lotOccupancyFees?: recordTypes.LotOccupancyFee[];
}) => {
if (responseJSON.success) {
lotOccupancyFees =
responseJSON.lotOccupancyFees;
lotOccupancyFees = responseJSON.lotOccupancyFees;
renderLotOccupancyFees();
filterFees();
} else {
@ -1492,14 +1360,9 @@ declare const bulmaJS: BulmaJS;
10
);
const feeCategory = feeCategories.find(
(currentFeeCategory) => {
return (
currentFeeCategory.feeCategoryId ===
feeCategoryId
);
}
);
const feeCategory = feeCategories.find((currentFeeCategory) => {
return currentFeeCategory.feeCategoryId === feeCategoryId;
});
const fee = feeCategory.fees.find((currentFee) => {
return currentFee.feeId === feeId;
@ -1513,18 +1376,13 @@ declare const bulmaJS: BulmaJS;
};
const filterFees = () => {
const filterStringPieces = feeFilterElement.value
.trim()
.toLowerCase()
.split(" ");
const filterStringPieces = feeFilterElement.value.trim().toLowerCase().split(" ");
feeFilterResultsElement.innerHTML = "";
for (const feeCategory of feeCategories) {
const categoryContainerElement =
document.createElement("div");
categoryContainerElement.className =
"container--feeCategory";
const categoryContainerElement = document.createElement("div");
categoryContainerElement.className = "container--feeCategory";
categoryContainerElement.dataset.feeCategoryId =
feeCategory.feeCategoryId.toString();
categoryContainerElement.innerHTML =
@ -1549,11 +1407,7 @@ declare const bulmaJS: BulmaJS;
let includeFee = true;
for (const filterStringPiece of filterStringPieces) {
if (
!fee.feeName
.toLowerCase()
.includes(filterStringPiece)
) {
if (!fee.feeName.toLowerCase().includes(filterStringPiece)) {
includeFee = false;
break;
}
@ -1565,12 +1419,9 @@ declare const bulmaJS: BulmaJS;
hasFees = true;
const panelBlockElement =
document.createElement("a");
panelBlockElement.className =
"panel-block is-block container--fee";
panelBlockElement.dataset.feeId =
fee.feeId.toString();
const panelBlockElement = document.createElement("a");
panelBlockElement.className = "panel-block is-block container--fee";
panelBlockElement.dataset.feeId = fee.feeId.toString();
panelBlockElement.href = "#";
panelBlockElement.innerHTML =
@ -1578,34 +1429,23 @@ declare const bulmaJS: BulmaJS;
cityssm.escapeHTML(fee.feeName) +
"</strong><br />" +
"<small>" +
cityssm
.escapeHTML(fee.feeDescription)
.replace(/\n/g, "<br />") +
cityssm.escapeHTML(fee.feeDescription).replace(/\n/g, "<br />") +
"</small>";
panelBlockElement.addEventListener(
"click",
tryAddFee
);
panelBlockElement.addEventListener("click", tryAddFee);
categoryContainerElement
.querySelector(".panel")
.append(panelBlockElement);
categoryContainerElement.querySelector(".panel").append(panelBlockElement);
}
if (hasFees) {
feeFilterResultsElement.append(
categoryContainerElement
);
feeFilterResultsElement.append(categoryContainerElement);
}
}
};
cityssm.openHtmlModal("lotOccupancy-addFee", {
onshow: (modalElement) => {
feeFilterElement = modalElement.querySelector(
"#feeSelect--feeName"
);
feeFilterElement = modalElement.querySelector("#feeSelect--feeName");
feeFilterResultsElement = modalElement.querySelector(
"#resultsContainer--feeSelect"
);
@ -1615,16 +1455,11 @@ declare const bulmaJS: BulmaJS;
{
lotOccupancyId
},
(responseJSON: {
feeCategories: recordTypes.FeeCategory[];
}) => {
(responseJSON: { feeCategories: recordTypes.FeeCategory[] }) => {
feeCategories = responseJSON.feeCategories;
feeFilterElement.disabled = false;
feeFilterElement.addEventListener(
"keyup",
filterFees
);
feeFilterElement.addEventListener("keyup", filterFees);
feeFilterElement.focus();
filterFees();
@ -1655,8 +1490,7 @@ declare const bulmaJS: BulmaJS;
let transactionGrandTotal = 0;
for (const lotOccupancyTransaction of lotOccupancyTransactions) {
transactionGrandTotal +=
lotOccupancyTransaction.transactionAmount;
transactionGrandTotal += lotOccupancyTransaction.transactionAmount;
}
return transactionGrandTotal;
@ -1671,8 +1505,7 @@ declare const bulmaJS: BulmaJS;
const doDelete = () => {
cityssm.postJSON(
urlPrefix +
"/lotOccupancies/doDeleteLotOccupancyTransaction",
urlPrefix + "/lotOccupancies/doDeleteLotOccupancyTransaction",
{
lotOccupancyId,
transactionIndex
@ -1683,8 +1516,7 @@ declare const bulmaJS: BulmaJS;
lotOccupancyTransactions?: recordTypes.LotOccupancyTransaction[];
}) => {
if (responseJSON.success) {
lotOccupancyTransactions =
responseJSON.lotOccupancyTransactions;
lotOccupancyTransactions = responseJSON.lotOccupancyTransactions;
renderLotOccupancyTransactions();
} else {
bulmaJS.alert({
@ -1741,12 +1573,10 @@ declare const bulmaJS: BulmaJS;
let transactionGrandTotal = 0;
for (const lotOccupancyTransaction of lotOccupancyTransactions) {
transactionGrandTotal +=
lotOccupancyTransaction.transactionAmount;
transactionGrandTotal += lotOccupancyTransaction.transactionAmount;
const tableRowElement = document.createElement("tr");
tableRowElement.className =
"container--lotOccupancyTransaction";
tableRowElement.className = "container--lotOccupancyTransaction";
tableRowElement.dataset.transactionIndex =
lotOccupancyTransaction.transactionIndex.toString();
@ -1755,14 +1585,10 @@ declare const bulmaJS: BulmaJS;
lotOccupancyTransaction.transactionDateString +
"</td>" +
("<td>" +
cityssm.escapeHTML(
lotOccupancyTransaction.externalReceiptNumber
) +
cityssm.escapeHTML(lotOccupancyTransaction.externalReceiptNumber) +
"<br />" +
"<small>" +
cityssm.escapeHTML(
lotOccupancyTransaction.transactionNote
) +
cityssm.escapeHTML(lotOccupancyTransaction.transactionNote) +
"</small>" +
"</td>") +
('<td class="has-text-right">$' +
@ -1808,17 +1634,14 @@ declare const bulmaJS: BulmaJS;
}
};
document
.querySelector("#button--addTransaction")
.addEventListener("click", () => {
document.querySelector("#button--addTransaction").addEventListener("click", () => {
let addCloseModalFunction: () => void;
const doAddTransaction = (submitEvent: SubmitEvent) => {
submitEvent.preventDefault();
cityssm.postJSON(
urlPrefix +
"/lotOccupancies/doAddLotOccupancyTransaction",
urlPrefix + "/lotOccupancies/doAddLotOccupancyTransaction",
submitEvent.currentTarget,
(responseJSON: {
success: boolean;
@ -1826,8 +1649,7 @@ declare const bulmaJS: BulmaJS;
lotOccupancyTransactions?: recordTypes.LotOccupancyTransaction[];
}) => {
if (responseJSON.success) {
lotOccupancyTransactions =
responseJSON.lotOccupancyTransactions;
lotOccupancyTransactions = responseJSON.lotOccupancyTransactions;
addCloseModalFunction();
renderLotOccupancyTransactions();
} else {
@ -1852,17 +1674,13 @@ declare const bulmaJS: BulmaJS;
).value = lotOccupancyId.toString();
const feeGrandTotal = getFeeGrandTotal();
const transactionGrandTotal =
getTransactionGrandTotal();
const transactionGrandTotal = getTransactionGrandTotal();
const transactionAmountElement =
modalElement.querySelector(
const transactionAmountElement = modalElement.querySelector(
"#lotOccupancyTransactionAdd--transactionAmount"
) as HTMLInputElement;
transactionAmountElement.min = (
-1 * transactionGrandTotal
).toFixed(2);
transactionAmountElement.min = (-1 * transactionGrandTotal).toFixed(2);
transactionAmountElement.max = Math.max(
feeGrandTotal - transactionGrandTotal,
0
@ -1877,9 +1695,7 @@ declare const bulmaJS: BulmaJS;
addCloseModalFunction = closeModalFunction;
modalElement
.querySelector("form")
.addEventListener("submit", doAddTransaction);
modalElement.querySelector("form").addEventListener("submit", doAddTransaction);
},
onremoved: () => {
bulmaJS.toggleHtmlClipped();

View File

@ -43,9 +43,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
};
const datePickerBaseOptions = {
type: "date",
dateFormat: "yyyy-MM-dd",
showFooter: false,
color: "info"
color: "info",
displayMode: "dialog"
};
const initializeDatePickers = (containerElement) => {
const dateElements = containerElement.querySelectorAll("input[type='date']");
@ -64,7 +66,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
cal.on("save", () => {
dateElement.dispatchEvent(new Event("change"));
});
const clearButtonElement = containerElement.querySelector("#" + cal._id + " .datetimepicker-clear-button");
const datepickerElement = containerElement.querySelector("#" + cal._id);
const datePickerNavButtonElements = datepickerElement.querySelectorAll(".datepicker-nav button.is-text");
for (const datePickerNavButtonElement of datePickerNavButtonElements) {
datePickerNavButtonElement.classList.add("is-" + datePickerBaseOptions.color);
datePickerNavButtonElement.classList.remove("is-text");
}
const clearButtonElement = datepickerElement.querySelector(".datetimepicker-clear-button");
if (clearButtonElement) {
if (dateElement.required) {
clearButtonElement.remove();
@ -72,7 +80,44 @@ Object.defineProperty(exports, "__esModule", { value: true });
else {
clearButtonElement.dataset.tooltip = "Clear";
clearButtonElement.innerHTML =
'<i class="fas fa-times" aria-hidden="true"></i>';
'<span class="has-text-weight-bold" aria-hidden="true">&times;</span>';
}
}
}
};
const timePickerBaseOptions = {
type: "time",
timeFormat: "hh:mm",
color: "info",
displayMode: "dialog",
validateLabel: "Set Time",
minuteSteps: 1
};
const initializeTimePickers = (containerElement) => {
const timeElements = containerElement.querySelectorAll("input[type='time']");
for (const timeElement of timeElements) {
const timePickerOptions = Object.assign({}, timePickerBaseOptions);
if (timeElement.required) {
timePickerOptions.showClearButton = false;
}
const cal = exports.bulmaCalendar.attach(timeElement, timePickerOptions)[0];
cal.on("save", () => {
timeElement.dispatchEvent(new Event("change"));
});
const timePickerElement = containerElement.querySelector("#" + cal._id);
const timePickerCancelButtonElement = timePickerElement.querySelector(".datetimepicker-footer-cancel");
if (timePickerCancelButtonElement) {
timePickerCancelButtonElement.remove();
}
const clearButtonElement = timePickerElement.querySelector(".datetimepicker-clear-button");
if (clearButtonElement) {
if (timeElement.required) {
clearButtonElement.remove();
}
else {
clearButtonElement.dataset.tooltip = "Clear";
clearButtonElement.innerHTML =
'<span class="has-text-weight-bold" aria-hidden="true">&times;</span>';
}
}
}
@ -122,6 +167,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
highlightMap,
initializeUnlockFieldButtons,
initializeDatePickers,
initializeTimePickers,
populateAliases,
getRandomColor
};

View File

@ -74,9 +74,11 @@ declare const cityssm: cityssmGlobal;
};
const datePickerBaseOptions: BulmaCalendarOptions = {
type: "date",
dateFormat: "yyyy-MM-dd",
showFooter: false,
color: "info"
color: "info",
displayMode: "dialog"
};
const initializeDatePickers = (containerElement: HTMLElement) => {
@ -108,9 +110,25 @@ declare const cityssm: cityssmGlobal;
dateElement.dispatchEvent(new Event("change"));
});
// style the clear button
const clearButtonElement = containerElement.querySelector(
"#" + cal._id + " .datetimepicker-clear-button"
// Get the datepicker container element
const datepickerElement = containerElement.querySelector("#" + cal._id) as HTMLElement;
// Override the previous and next month button styles
const datePickerNavButtonElements = datepickerElement.querySelectorAll(
".datepicker-nav button.is-text"
);
for (const datePickerNavButtonElement of datePickerNavButtonElements) {
datePickerNavButtonElement.classList.add("is-" + datePickerBaseOptions.color);
datePickerNavButtonElement.classList.remove("is-text");
}
// Override the clear button style
const clearButtonElement = datepickerElement.querySelector(
".datetimepicker-clear-button"
) as HTMLElement;
if (clearButtonElement) {
@ -119,7 +137,66 @@ declare const cityssm: cityssmGlobal;
} else {
clearButtonElement.dataset.tooltip = "Clear";
clearButtonElement.innerHTML =
'<i class="fas fa-times" aria-hidden="true"></i>';
'<span class="has-text-weight-bold" aria-hidden="true">&times;</span>';
}
}
}
};
const timePickerBaseOptions: BulmaCalendarOptions = {
type: "time",
timeFormat: "hh:mm",
color: "info",
displayMode: "dialog",
validateLabel: "Set Time",
minuteSteps: 1
};
const initializeTimePickers = (containerElement: HTMLElement) => {
const timeElements = containerElement.querySelectorAll(
"input[type='time']"
) as NodeListOf<HTMLInputElement>;
for (const timeElement of timeElements) {
const timePickerOptions = Object.assign({}, timePickerBaseOptions);
if (timeElement.required) {
timePickerOptions.showClearButton = false;
}
const cal = exports.bulmaCalendar.attach(timeElement, timePickerOptions)[0];
// trigger change event on original element
cal.on("save", () => {
timeElement.dispatchEvent(new Event("change"));
});
// Get the datepicker container element
const timePickerElement = containerElement.querySelector("#" + cal._id) as HTMLElement;
// Remove "cancel" button
const timePickerCancelButtonElement = timePickerElement.querySelector(
".datetimepicker-footer-cancel"
);
if (timePickerCancelButtonElement) {
timePickerCancelButtonElement.remove();
}
// Override the clear button style
const clearButtonElement = timePickerElement.querySelector(
".datetimepicker-clear-button"
) as HTMLElement;
if (clearButtonElement) {
if (timeElement.required) {
clearButtonElement.remove();
} else {
clearButtonElement.dataset.tooltip = "Clear";
clearButtonElement.innerHTML =
'<span class="has-text-weight-bold" aria-hidden="true">&times;</span>';
}
}
}
@ -187,6 +264,7 @@ declare const cityssm: cityssmGlobal;
highlightMap,
initializeUnlockFieldButtons,
initializeDatePickers,
initializeTimePickers,
populateAliases,
getRandomColor
};

View File

@ -812,8 +812,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
},
onshown: (modalElement, closeModalFunction) => {
editCloseModalFunction = closeModalFunction;
los.initializeDatePickers(modalElement);
bulmaJS.toggleHtmlClipped();
los.initializeDatePickers(modalElement);
los.initializeTimePickers(modalElement);
modalElement
.querySelector("form")
.addEventListener("submit", doEdit);
@ -963,6 +964,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
addModalElement = modalElement;
addCloseModalFunction = closeModalFunction;
los.initializeDatePickers(modalElement);
los.initializeTimePickers(modalElement);
bulmaJS.toggleHtmlClipped();
modalElement
.querySelector("form")

View File

@ -1196,9 +1196,11 @@ declare const bulmaJS: BulmaJS;
onshown: (modalElement, closeModalFunction) => {
editCloseModalFunction = closeModalFunction;
los.initializeDatePickers(modalElement);
bulmaJS.toggleHtmlClipped();
los.initializeDatePickers(modalElement);
los.initializeTimePickers(modalElement);
modalElement
.querySelector("form")
.addEventListener("submit", doEdit);
@ -1407,6 +1409,7 @@ declare const bulmaJS: BulmaJS;
addCloseModalFunction = closeModalFunction;
los.initializeDatePickers(modalElement);
los.initializeTimePickers(modalElement);
bulmaJS.toggleHtmlClipped();

View File

@ -21,16 +21,22 @@
<div class="column">
<div class="field">
<label class="label" for="lotCommentEdit--lotCommentDateString">Comment Date</label>
<div class="control">
<div class="control has-icons-left">
<input class="input" id="lotCommentEdit--lotCommentDateString" name="lotCommentDateString" type="date" required />
<span class="icon is-left">
<i class="fas fa-calendar" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="lotCommentEdit--lotCommentTimeString">Comment Time</label>
<div class="control">
<div class="control has-icons-left">
<input class="input" id="lotCommentEdit--lotCommentTimeString" name="lotCommentTimeString" type="time" required />
<span class="icon is-left">
<i class="fas fa-clock" aria-hidden="true"></i>
</span>
</div>
</div>
</div>

View File

@ -21,16 +21,22 @@
<div class="column">
<div class="field">
<label class="label" for="lotOccupancyCommentEdit--lotOccupancyCommentDateString">Comment Date</label>
<div class="control">
<div class="control has-icons-left">
<input class="input" id="lotOccupancyCommentEdit--lotOccupancyCommentDateString" name="lotOccupancyCommentDateString" type="date" required />
<span class="icon is-left">
<i class="fas fa-calendar" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="lotOccupancyCommentEdit--lotOccupancyCommentTimeString">Comment Time</label>
<div class="control">
<div class="control has-icons-left">
<input class="input" id="lotOccupancyCommentEdit--lotOccupancyCommentTimeString" name="lotOccupancyCommentTimeString" type="time" required />
<span class="icon is-left">
<i class="fas fa-clock" aria-hidden="true"></i>
</span>
</div>
</div>
</div>

View File

@ -36,8 +36,11 @@
<div class="column">
<div class="field">
<label class="label" for="milestoneAdd--workOrderMilestoneTimeString">Milestone Time</label>
<div class="control">
<div class="control has-icons-left">
<input class="input" id="milestoneAdd--workOrderMilestoneTimeString" name="workOrderMilestoneTimeString" type="time" />
<span class="icon is-left">
<i class="fas fa-clock" aria-hidden="true"></i>
</span>
</div>
</div>
</div>

View File

@ -37,8 +37,11 @@
<div class="column">
<div class="field">
<label class="label" for="milestoneEdit--workOrderMilestoneTimeString">Milestone Time</label>
<div class="control">
<div class="control has-icons-left">
<input class="input" id="milestoneEdit--workOrderMilestoneTimeString" name="workOrderMilestoneTimeString" type="time" />
<span class="icon is-left">
<i class="fas fa-clock" aria-hidden="true"></i>
</span>
</div>
</div>
</div>

View File

@ -1 +1 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const t=exports.los,e=document.querySelector("main").dataset.urlPrefix,o=document.querySelector("#lot--lotId").value,l=""===o,s=document.querySelector("#form--lot");s.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e+"/lots/"+(l?"doCreateLot":"doUpdateLot"),s,t=>{t.success?l?window.location.href=e+"/lots/"+t.lotId+"/edit":bulmaJS.alert({message:exports.aliases.lot+" Updated Successfully",contextualColorName:"success"}):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot,message:t.errorMessage,contextualColorName:"danger"})})}),t.initializeUnlockFieldButtons(s),l||document.querySelector("#button--deleteLot").addEventListener("click",t=>{t.preventDefault();bulmaJS.confirm({title:"Delete "+exports.aliases.lot,message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+"?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot,callbackFunction:()=>{cityssm.postJSON(e+"/lots/doDeleteLot",{lotId:o},t=>{t.success?(cityssm.disableNavBlocker(),window.location.href=e+"/lots/?t="+Date.now()):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot,message:t.errorMessage,contextualColorName:"danger"})})}}})});let n=exports.lotComments;delete exports.lotComments;const r=l=>{const s=Number.parseInt(l.currentTarget.closest("tr").dataset.lotCommentId,10),r=n.find(t=>t.lotCommentId===s);let a,i;const d=t=>{t.preventDefault(),cityssm.postJSON(e+"/lots/doUpdateLotComment",a,t=>{t.success?(n=t.lotComments,i(),m()):bulmaJS.alert({title:"Error Updating Comment",message:t.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("lot-editComment",{onshow:e=>{t.populateAliases(e),e.querySelector("#lotCommentEdit--lotId").value=o,e.querySelector("#lotCommentEdit--lotCommentId").value=s.toString(),e.querySelector("#lotCommentEdit--lotComment").value=r.lotComment,e.querySelector("#lotCommentEdit--lotCommentDateString").value=r.lotCommentDateString,e.querySelector("#lotCommentEdit--lotCommentTimeString").value=r.lotCommentTimeString},onshown:(t,e)=>{bulmaJS.toggleHtmlClipped(),t.querySelector("#lotCommentEdit--lotComment").focus(),(a=t.querySelector("form")).addEventListener("submit",d),i=e},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},a=t=>{const l=Number.parseInt(t.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:()=>{cityssm.postJSON(e+"/lots/doDeleteLotComment",{lotId:o,lotCommentId:l},t=>{t.success?(n=t.lotComments,m()):bulmaJS.alert({title:"Error Removing Comment",message:t.errorMessage,contextualColorName:"danger"})})}},contextualColorName:"warning"})},m=()=>{const t=document.querySelector("#container--lotComments");if(0===n.length)return void(t.innerHTML='<div class="message is-info"><p class="message-body">There are no comments to display.</p></div>');const e=document.createElement("table");e.className="table is-fullwidth is-striped is-hoverable",e.innerHTML='<thead><tr><th>Commentor</th><th>Comment Date</th><th>Comment</th><th class="is-hidden-print"><span class="is-sr-only">Options</span></th></tr></thead><tbody></tbody>';for(const t of n){const o=document.createElement("tr");o.dataset.lotCommentId=t.lotCommentId.toString(),o.innerHTML="<td>"+cityssm.escapeHTML(t.recordCreate_userName)+"</td><td>"+t.lotCommentDateString+(0===t.lotCommentTime?"":" "+t.lotCommentTimeString)+"</td><td>"+cityssm.escapeHTML(t.lotComment)+'</td><td class="is-hidden-print"><div class="buttons are-small is-justify-content-end"><button class="button is-primary button--edit" type="button"><span class="icon is-small"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span> <span>Edit</span></button><button class="button is-light is-danger button--delete" data-tooltip="Delete Comment" type="button" aria-label="Delete"><i class="fas fa-trash" aria-hidden="true"></i></button></div></td>',o.querySelector(".button--edit").addEventListener("click",r),o.querySelector(".button--delete").addEventListener("click",a),e.querySelector("tbody").append(o)}t.innerHTML="",t.append(e)},i=()=>{let l;const s=t=>{t.preventDefault(),cityssm.postJSON(e+"/lots/doAddLotComment",t.currentTarget,t=>{t.success&&(n=t.lotComments,m(),l())})};cityssm.openHtmlModal("lot-addComment",{onshow(e){t.populateAliases(e),e.querySelector("#lotCommentAdd--lotId").value=o,e.querySelector("form").addEventListener("submit",s)},onshown(t,e){bulmaJS.toggleHtmlClipped(),l=e,t.querySelector("#lotCommentAdd--lotComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#lotComments--add").focus()}})};l||(document.querySelector("#lotComments--add").addEventListener("click",i),m())})();
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const t=exports.los,e=document.querySelector("main").dataset.urlPrefix,o=document.querySelector("#lot--lotId").value,l=""===o,s=document.querySelector("#form--lot");s.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e+"/lots/"+(l?"doCreateLot":"doUpdateLot"),s,t=>{t.success?l?window.location.href=e+"/lots/"+t.lotId+"/edit":bulmaJS.alert({message:exports.aliases.lot+" Updated Successfully",contextualColorName:"success"}):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot,message:t.errorMessage,contextualColorName:"danger"})})}),t.initializeUnlockFieldButtons(s),l||document.querySelector("#button--deleteLot").addEventListener("click",t=>{t.preventDefault();bulmaJS.confirm({title:"Delete "+exports.aliases.lot,message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+"?",contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot,callbackFunction:()=>{cityssm.postJSON(e+"/lots/doDeleteLot",{lotId:o},t=>{t.success?(cityssm.disableNavBlocker(),window.location.href=e+"/lots/?t="+Date.now()):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot,message:t.errorMessage,contextualColorName:"danger"})})}}})});let n=exports.lotComments;delete exports.lotComments;const r=l=>{const s=Number.parseInt(l.currentTarget.closest("tr").dataset.lotCommentId,10),r=n.find(t=>t.lotCommentId===s);let a,i;const d=t=>{t.preventDefault(),cityssm.postJSON(e+"/lots/doUpdateLotComment",a,t=>{t.success?(n=t.lotComments,i(),m()):bulmaJS.alert({title:"Error Updating Comment",message:t.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("lot-editComment",{onshow:e=>{t.populateAliases(e),e.querySelector("#lotCommentEdit--lotId").value=o,e.querySelector("#lotCommentEdit--lotCommentId").value=s.toString(),e.querySelector("#lotCommentEdit--lotComment").value=r.lotComment,e.querySelector("#lotCommentEdit--lotCommentDateString").value=r.lotCommentDateString,e.querySelector("#lotCommentEdit--lotCommentTimeString").value=r.lotCommentTimeString},onshown:(e,o)=>{bulmaJS.toggleHtmlClipped(),t.initializeDatePickers(e),t.initializeTimePickers(e),e.querySelector("#lotCommentEdit--lotComment").focus(),(a=e.querySelector("form")).addEventListener("submit",d),i=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},a=t=>{const l=Number.parseInt(t.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:()=>{cityssm.postJSON(e+"/lots/doDeleteLotComment",{lotId:o,lotCommentId:l},t=>{t.success?(n=t.lotComments,m()):bulmaJS.alert({title:"Error Removing Comment",message:t.errorMessage,contextualColorName:"danger"})})}},contextualColorName:"warning"})},m=()=>{const t=document.querySelector("#container--lotComments");if(0===n.length)return void(t.innerHTML='<div class="message is-info"><p class="message-body">There are no comments to display.</p></div>');const e=document.createElement("table");e.className="table is-fullwidth is-striped is-hoverable",e.innerHTML='<thead><tr><th>Commentor</th><th>Comment Date</th><th>Comment</th><th class="is-hidden-print"><span class="is-sr-only">Options</span></th></tr></thead><tbody></tbody>';for(const t of n){const o=document.createElement("tr");o.dataset.lotCommentId=t.lotCommentId.toString(),o.innerHTML="<td>"+cityssm.escapeHTML(t.recordCreate_userName)+"</td><td>"+t.lotCommentDateString+(0===t.lotCommentTime?"":" "+t.lotCommentTimeString)+"</td><td>"+cityssm.escapeHTML(t.lotComment)+'</td><td class="is-hidden-print"><div class="buttons are-small is-justify-content-end"><button class="button is-primary button--edit" type="button"><span class="icon is-small"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span> <span>Edit</span></button><button class="button is-light is-danger button--delete" data-tooltip="Delete Comment" type="button" aria-label="Delete"><i class="fas fa-trash" aria-hidden="true"></i></button></div></td>',o.querySelector(".button--edit").addEventListener("click",r),o.querySelector(".button--delete").addEventListener("click",a),e.querySelector("tbody").append(o)}t.innerHTML="",t.append(e)},i=()=>{let l;const s=t=>{t.preventDefault(),cityssm.postJSON(e+"/lots/doAddLotComment",t.currentTarget,t=>{t.success&&(n=t.lotComments,m(),l())})};cityssm.openHtmlModal("lot-addComment",{onshow(e){t.populateAliases(e),e.querySelector("#lotCommentAdd--lotId").value=o,e.querySelector("form").addEventListener("submit",s)},onshown(t,e){bulmaJS.toggleHtmlClipped(),l=e,t.querySelector("#lotCommentAdd--lotComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#lotComments--add").focus()}})};l||(document.querySelector("#lotComments--add").addEventListener("click",i),m())})();

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=e=>{const t=e.currentTarget.closest(".field").querySelector("input, select");if(t.classList.remove("is-readonly"),"INPUT"===t.tagName)t.readOnly=!1,t.disabled=!1;else{const e=t.querySelectorAll("option");for(const t of e)t.disabled=!1}t.focus()},t={dateFormat:"yyyy-MM-dd",showFooter:!1,color:"info"},o=["red","green","orange","blue","pink","yellow","purple"],a=["bright","light","dark"],s={highlightMap:(e,t,o)=>{let a,s=t;for(;!(a=e.querySelector("#"+s))&&s.includes("-");)s=s.slice(0,Math.max(0,s.lastIndexOf("-")));if(a){a.style.fill=null,a.classList.add("highlight","is-"+o);const e=a.querySelectorAll("path");for(const t of e)t.style.fill=null}},initializeUnlockFieldButtons:t=>{const o=t.querySelectorAll(".is-unlock-field-button");for(const t of o)t.addEventListener("click",e)},initializeDatePickers:e=>{const o=e.querySelectorAll("input[type='date']");for(const a of o){const o=Object.assign({},t);a.required&&(o.showClearButton=!1),a.min&&(o.minDate=cityssm.dateStringToDate(a.min)),a.max&&(o.maxDate=cityssm.dateStringToDate(a.max));const s=exports.bulmaCalendar.attach(a,o)[0];s.on("save",()=>{a.dispatchEvent(new Event("change"))});const l=e.querySelector("#"+s._id+" .datetimepicker-clear-button");l&&(a.required?l.remove():(l.dataset.tooltip="Clear",l.innerHTML='<i class="fas fa-times" aria-hidden="true"></i>'))}},populateAliases:e=>{const t=e.querySelectorAll(".alias");for(const e of t)switch(e.dataset.alias){case"Lot":e.textContent=exports.aliases.lot;break;case"lot":e.textContent=exports.aliases.lot.toLowerCase();break;case"Occupancy":e.textContent=exports.aliases.occupancy;break;case"occupancy":e.textContent=exports.aliases.occupancy.toLowerCase();break;case"Occupant":e.textContent=exports.aliases.occupant;break;case"occupant":e.textContent=exports.aliases.occupant.toLowerCase();break;case"ExternalReceiptNumber":e.textContent=exports.aliases.externalReceiptNumber}},getRandomColor:e=>{let t=e;return t.length<2&&(t+="a1"),exports.randomColor({seed:t+t,hue:o[t.codePointAt(t.length-1)%o.length],luminosity:a[t.codePointAt(t.length-2)%a.length]})}};exports.los=s})();
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=e=>{const t=e.currentTarget.closest(".field").querySelector("input, select");if(t.classList.remove("is-readonly"),"INPUT"===t.tagName)t.readOnly=!1,t.disabled=!1;else{const e=t.querySelectorAll("option");for(const t of e)t.disabled=!1}t.focus()},t={type:"date",dateFormat:"yyyy-MM-dd",showFooter:!1,color:"info",displayMode:"dialog"},o={type:"time",timeFormat:"hh:mm",color:"info",displayMode:"dialog",validateLabel:"Set Time",minuteSteps:1},a=["red","green","orange","blue","pink","yellow","purple"],s=["bright","light","dark"],l={highlightMap:(e,t,o)=>{let a,s=t;for(;!(a=e.querySelector("#"+s))&&s.includes("-");)s=s.slice(0,Math.max(0,s.lastIndexOf("-")));if(a){a.style.fill=null,a.classList.add("highlight","is-"+o);const e=a.querySelectorAll("path");for(const t of e)t.style.fill=null}},initializeUnlockFieldButtons:t=>{const o=t.querySelectorAll(".is-unlock-field-button");for(const t of o)t.addEventListener("click",e)},initializeDatePickers:e=>{const o=e.querySelectorAll("input[type='date']");for(const a of o){const o=Object.assign({},t);a.required&&(o.showClearButton=!1),a.min&&(o.minDate=cityssm.dateStringToDate(a.min)),a.max&&(o.maxDate=cityssm.dateStringToDate(a.max));const s=exports.bulmaCalendar.attach(a,o)[0];s.on("save",()=>{a.dispatchEvent(new Event("change"))});const l=e.querySelector("#"+s._id),r=l.querySelectorAll(".datepicker-nav button.is-text");for(const e of r)e.classList.add("is-"+t.color),e.classList.remove("is-text");const n=l.querySelector(".datetimepicker-clear-button");n&&(a.required?n.remove():(n.dataset.tooltip="Clear",n.innerHTML='<span class="has-text-weight-bold" aria-hidden="true">&times;</span>'))}},initializeTimePickers:e=>{const t=e.querySelectorAll("input[type='time']");for(const a of t){const t=Object.assign({},o);a.required&&(t.showClearButton=!1);const s=exports.bulmaCalendar.attach(a,t)[0];s.on("save",()=>{a.dispatchEvent(new Event("change"))});const l=e.querySelector("#"+s._id),r=l.querySelector(".datetimepicker-footer-cancel");r&&r.remove();const n=l.querySelector(".datetimepicker-clear-button");n&&(a.required?n.remove():(n.dataset.tooltip="Clear",n.innerHTML='<span class="has-text-weight-bold" aria-hidden="true">&times;</span>'))}},populateAliases:e=>{const t=e.querySelectorAll(".alias");for(const e of t)switch(e.dataset.alias){case"Lot":e.textContent=exports.aliases.lot;break;case"lot":e.textContent=exports.aliases.lot.toLowerCase();break;case"Occupancy":e.textContent=exports.aliases.occupancy;break;case"occupancy":e.textContent=exports.aliases.occupancy.toLowerCase();break;case"Occupant":e.textContent=exports.aliases.occupant;break;case"occupant":e.textContent=exports.aliases.occupant.toLowerCase();break;case"ExternalReceiptNumber":e.textContent=exports.aliases.externalReceiptNumber}},getRandomColor:e=>{let t=e;return t.length<2&&(t+="a1"),exports.randomColor({seed:t+t,hue:a[t.codePointAt(t.length-1)%a.length],luminosity:s[t.codePointAt(t.length-2)%s.length]})}};exports.los=l})();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,7 @@
export interface LOS {
highlightMap: (mapContainerElement: HTMLElement, mapKey: string, contextualClass: "success" | "danger") => void;
initializeDatePickers: (containerElement: HTMLElement) => void;
initializeTimePickers: (containerElement: HTMLElement) => void;
initializeUnlockFieldButtons: (containerElement: HTMLElement) => void;
populateAliases: (containerElement: HTMLElement) => void;
getRandomColor: (seedString: string) => string;

View File

@ -5,6 +5,7 @@ export interface LOS {
contextualClass: "success" | "danger"
) => void;
initializeDatePickers: (containerElement: HTMLElement) => void;
initializeTimePickers: (containerElement: HTMLElement) => void;
initializeUnlockFieldButtons: (containerElement: HTMLElement) => void;
populateAliases: (containerElement: HTMLElement) => void;
getRandomColor: (seedString: string) => string;