// ============================= // Search Permits By Subdivision // ============================= $(document).ready(function () { var $application = $("#APPLICATION_MNEMONIC").val(), $sessionStorage = JSON.parse(sessionStorage.getItem($application) || "{}"); // ================= // Process Enter Key // ================= $(document).on('keypress', function (e) { if (e.which === 13) { e.preventDefault(); $("#searchPermitsBySubdivision").submit(); } }); // -------------------- // Initialize Dropdowns // -------------------- $("#permits_per_page").val($sessionStorage.permits_per_page || "20"); // ----------- // Input Masks // ----------- $(".date-mask").inputmask({alias: "datetime", inputFormat: "mm/dd/yyyy", placeholder: "MM/DD/YYYY", showMaskOnHover: false}); // Select Pickers $(".multiple-dropdown").selectpicker({noneSelectedText: "Choose...", style: "", styleBase: "form-select form-select-sm", iconBase: "fa", actionsBox: true, selectedTextFormat: "count", virtualScroll: true, size: 10, selectOnTab: true, containter: "body", liveSearch: true}); // ------------ // Date Pickers // ------------ $("#permit_entry_start_date").datepicker({format: "mm-dd-yyyy", container: "div.permit_entry_start_date", keyboardNavigation: false, showOnFocus: false, autoclose: true, orientation: "left bottom", todayBtn: "linked", todayHighlight: true}); $("#permit_entry_end_date").datepicker({format: "mm-dd-yyyy", container: "div.permit_entry_end_date", keyboardNavigation: false, showOnFocus: false, autoclose: true, orientation: "left bottom", todayBtn: "linked", todayHighlight: true}); $("#permit_permit_start_date").datepicker({format: "mm-dd-yyyy", container: "div.permit_permit_start_date", keyboardNavigation: false, showOnFocus: false, autoclose: true, orientation: "left bottom", todayBtn: "linked", todayHighlight: true}); $("#permit_permit_end_date").datepicker({format: "mm-dd-yyyy", container: "div.permit_permit_end_date", keyboardNavigation: false, showOnFocus: false, autoclose: true, orientation: "left bottom", todayBtn: "linked", todayHighlight: true}); // --------------------- // Show Calendar Buttons // --------------------- $(".btnEntryStartDateCalendar").on("click", function (e) { e.preventDefault(); $("#permit_entry_start_date").focus().datepicker("show"); }); $(".btnEntryEndDateCalendar").on("click", function (e) { e.preventDefault(); $("#permit_entry_end_date").focus().datepicker("show"); }); $(".btnPermitStartDateCalendar").on("click", function (e) { e.preventDefault(); $("#permit_permit_start_date").focus().datepicker("show"); }); $(".btnPermitEndDateCalendar").on("click", function (e) { e.preventDefault(); $("#permit_permit_end_date").focus().datepicker("show"); }); // ---------------- // Filter the Rows. // ---------------- $("#filter").on("keyup", function () { var filter = $(this).val().toLowerCase(); $(".permit-row").hide().filter(function () { return $(this).find(".filterable").text().toLowerCase().indexOf(filter) > -1; }).show(); if ($(".permit-row:visible").length === 0) { $("#permits-table thead").hide(); $(".filter-error").removeClass("d-none"); } else { $("#permits-table thead").show(); $(".filter-error").addClass("d-none"); } }); // ------------------- // Clear Filter Button // ------------------- $(".btnClearFilter").on("click", function () { $("#filter").val("").trigger("change"); $sessionStorage.action = "PermitsBySubdivision.searchPermits"; $sessionStorage.pagination = "first"; sessionStorage.setItem($application, JSON.stringify($sessionStorage)); $("#spinner-dialog").modal("show"); formSubmit($sessionStorage); }); // --------------- // Per Page Change // --------------- $("#permits_per_page").on("change", function () { $sessionStorage.permits_per_page = $(this).val(); $sessionStorage.action = "PermitsBySubdivision.searchPermits"; $sessionStorage.pagination = "first"; sessionStorage.setItem($application, JSON.stringify($sessionStorage)); $("#spinner-dialog").modal("show"); formSubmit($sessionStorage); }); // ------------------ // Pagination Buttons // ------------------ $(".btnPagination").on("click", function () { $sessionStorage.action = "PermitsBySubdivision.searchPermits"; $sessionStorage.pagination = $(this).data("pagination"); sessionStorage.setItem($application, JSON.stringify($sessionStorage)); $("#spinner-dialog").modal("show"); formSubmit($sessionStorage); delete $sessionStorage.pagination; sessionStorage.setItem($application, JSON.stringify($sessionStorage)); }); // ==================== // Autocomplete Searchs // ==================== let subdivisionSearchTimer = null; $(".subdivision-autocomplete").on("keyup", function () { clearTimeout(subdivisionSearchTimer); let $input = $(this); let searchValue = $input.val().trim(); // optional: don't search until 2+ chars if (searchValue.length < 2) { $(".subdivision-results").empty().hide(); return; } subdivisionSearchTimer = setTimeout(function () { $.ajax({ url: "main.php", type: "GET", dataType: "json", data: { Xaction: "PermitsBySubdivision.getAutoCompleteSubdivisions", subscription_serial: $sessionStorage.subscription_serial, permit_sub_div_name: searchValue }, success: function (results) { renderSubdivisionResults(results, $input); } }); }, 250); }); $(".city-autocomplete").autoComplete({ resolverSettings: { url: "main.php?Xaction=PermitsBySubdivision.getAutoCompleteCities", queryKey: "permit_project_city", requestThrottling: 0 }, noResultsText: "No Matching Cities Found.", bootstrapVersion: "4" }); $(".street-autocomplete").autoComplete({ resolverSettings: { url: "main.php?Xaction=PermitsBySubdivision.getAutoCompleteStreets", queryKey: "permit_project_addr", requestThrottling: 0 }, noResultsText: "No Matching Streets Found.", bootstrapVersion: "4" }); // ---------------- // Display Scollbar // ---------------- $(".scrollable").scroll(function () { if ($(this).scrollTop() > 60) { $("#btnTop").fadeIn(); } else { $("#btnTop").fadeOut(); } }); // ------------- // Search Button // ------------- $(".btnSearch").on("click", function (e) { e.preventDefault(); $("#searchPermitsBySubdivision").submit(); }); // ------------- // Search Button // ------------- $(".btnReset").on("click", function (e) { e.preventDefault(); $sessionStorage.action = "PermitsBySubdivision.searchPermits"; $sessionStorage.pagination = $(this).data("pagination"); $("#spinner-dialog").modal("show"); delete $sessionStorage.pagination; delete $sessionStorage.permit_company; delete $sessionStorage.permit_county; delete $sessionStorage.permit_sub_div_name; delete $sessionStorage.permit_project_city; delete $sessionStorage.permit_project_addr; delete $sessionStorage.permit_and_or; delete $sessionStorage.permit_entry_start_date; delete $sessionStorage.permit_entry_end_date; delete $sessionStorage.permit_permit_start_date; delete $sessionStorage.permit_permit_end_date; sessionStorage.setItem($application, JSON.stringify($sessionStorage)); formSubmit($sessionStorage); }); // ------------- // Cancel Button // ------------- $(".btnCancel").on("click", function () { $sessionStorage.action = $sessionStorage.userSubscriptions || ""; sessionStorage.setItem($application, JSON.stringify($sessionStorage)); formSubmit($sessionStorage); }); // --------------- // Validate Inputs // --------------- $("#searchPermitsBySubdivision").submit(function (e) { $("#spinner-dialog").modal("show"); var permit_county = $("#permit_county"), permit_and_or = $("#permit_and_or"), permit_company = $("#permit_company"), permit_sub_div_name = $("#permit_sub_div_name"), permit_project_city = $("#permit_project_city"), permit_project_addr = $("#permit_project_addr"), permit_entry_start_date = $("#permit_entry_start_date"), permit_entry_end_date = $("#permit_entry_end_date"), permit_permit_start_date = $("#permit_permit_start_date"), permit_permit_end_date = $("#permit_permit_end_date"), form_error = $("#search-form-error"); clearInputErrors(); // Function to display errors and hide spinner function showError(message, element) { $("#spinner-dialog").modal("hide"); createInputError(form_error, message); if (element) createInputError(element, ""); return false; } // Validate required fields if ([permit_county, permit_company, permit_sub_div_name, permit_project_city, permit_project_addr, permit_entry_start_date, permit_entry_end_date, permit_permit_start_date, permit_permit_end_date].every(isBlank)) { return showError("Please provide a search criteria."); } if (isBlank(permit_entry_start_date) && !isBlank(permit_entry_end_date)) { return showError("Please provide an Entry From Date for range.", permit_entry_start_date); } if (isBlank(permit_permit_start_date) && !isBlank(permit_permit_end_date)) { return showError("Please provide a Permit From Date for range.", permit_permit_start_date); } // Validate date ranges if (permit_entry_end_date.val() && !checkEndingDate(permit_entry_start_date, permit_entry_end_date)) { return showError("Start Date must be prior to End Date"); } if (permit_permit_end_date.val() && !checkEndingDate(permit_permit_start_date, permit_permit_end_date)) { return showError("Start Date must be prior to End Date"); } e.preventDefault(); $sessionStorage.permit_company = permit_company.val(); $sessionStorage.permit_county = permit_county.val(); $sessionStorage.permit_and_or = permit_and_or.val(); $sessionStorage.permit_sub_div_name = permit_sub_div_name.val(); $sessionStorage.permit_project_city = permit_project_city.val(); $sessionStorage.permit_project_addr = permit_project_addr.val(); $sessionStorage.permit_entry_start_date = permit_entry_start_date.val(); $sessionStorage.permit_entry_end_date = permit_entry_end_date.val(); $sessionStorage.permit_permit_start_date = permit_permit_start_date.val(); $sessionStorage.permit_permit_end_date = permit_permit_end_date.val(); sessionStorage.setItem($application, JSON.stringify($sessionStorage)); formSubmit($sessionStorage); }); // ------------------- // Column Heading Sort // ------------------- if (($sessionStorage.permits_order_by || "") !== "") { $("th[data-order-by = '" + ($sessionStorage.permits_order_by || "") + "']").append(''); } $("th.sortable").on("click", function (e) { if ($(e.target).data("order-by") !== ($sessionStorage.permits_order_by || "")) { // New Column $sessionStorage.permits_order_by = $(e.target).data("order-by"); $sessionStorage.permits_order_direction = "asc"; $sessionStorage.permits_order_icon = "bi bi-arrow-up"; } else { switch ($sessionStorage.permits_order_direction) { case "" : $sessionStorage.permits_order_by = $(e.target).data("order-by"); $sessionStorage.permits_order_direction = "asc"; $sessionStorage.permits_order_icon = "bi bi-arrow-up"; break; case "asc" : $sessionStorage.permits_order_by = $(e.target).data("order-by"); $sessionStorage.permits_order_direction = "desc"; $sessionStorage.permits_order_icon = "bi bi-arrow-down"; break; case "desc" : $sessionStorage.permits_order_by = ""; $sessionStorage.permits_order_direction = ""; $sessionStorage.permits_order_icon = ""; break; } } sessionStorage.setItem($application, JSON.stringify($sessionStorage)); $("#spinner-dialog").modal("show"); formSubmit($sessionStorage); }); // ----------------- // Select All Button // ----------------- $(".btnSelectAll").on("click", function (e) { e.preventDefault(); $(".selection-checkbox:input:checkbox").prop("checked", true); $(".btnDeselectAll, .btnExportSelected").removeClass("d-none"); }); // ------------------- // Deselect All Button // ------------------- $(".btnDeselectAll").on("click", function (e) { e.preventDefault(); $(".selection-checkbox:input:checkbox").prop("checked", false); $(".btnDeselectAll, .btnExportSelected").addClass("d-none"); }); // ------------------------ // Toggle a Select Checkbox // ------------------------ $(".permit-row").on("click touch", function (e) { if (!($(e.target).hasClass("selection-area"))) { return false; } ; e.preventDefault(); e.stopPropagation(); var $this = $(e.target), checked = ($this.closest("tr").find("input[name='selected[]']").prop("checked")); // Toggle the selected Checkbox. $this.closest("tr").find("input[name='selected[]']").prop("checked", !checked); if ($("input[name='selected[]']:checked").length === 0) { $(".btnDeselectAll, .btnExportSelected").addClass("d-none"); } else { $(".btnDeselectAll, .btnExportSelected").removeClass("d-none"); } }); $("#permits-table tbody tr").on("click touch", function (e) { // If the click was on selection area (or the checkbox itself), do nothing if ($(e.target).closest(".selection-area, input[name='selected[]'], label").length) { return; } const permit_serial = $(this).data("permit-serial"); openPermitDialog(getPermitRecordDialog(permit_serial)); }); // ------------------------ // Export All Permits - PDF // ------------------------ $(".btnExportAllPDF").on("click", function (e) { e.preventDefault(); window.open("", "PrintTab"); $("input[name = 'action']", "#PrintAllPermitsBySubdivisionPDFForm").val("print"); $("input[name = 'subscription_serial']", "#PrintAllPermitsBySubdivisionPDFForm").val($sessionStorage.subscription_serial); $("#PrintAllPermitsBySubdivisionPDFForm").submit(); }); // -------------------------- // Export All Permits - Excel // -------------------------- $(".btnExportAllExcel").on("click", function (e) { $("#spinner-dialog").modal("show"); $sessionStorage.action = "Export_AllPermitsBySubdivision_Excel.export"; $sessionStorage.subscription_reference = $sessionStorage.subscription_serial; $sessionStorage.downloadReturn = "Reports.selectReport"; sessionStorage.setItem($application, JSON.stringify($sessionStorage)); // Submit in a new tab formSubmit($sessionStorage, "_blank"); // Hide spinner immediately, since the main page isn't going anywhere setTimeout(function () { $("#spinner-dialog").modal("hide"); }, 2000); // optional: add a slight delay so it feels responsive }); // ------------------------ // Export All Permits - CSV // ------------------------ $(".btnExportAllCSV").on("click", function (e) { $("#spinner-dialog").modal("show"); $sessionStorage.action = "Export_AllPermitsBySubdivision_CSV.export"; $sessionStorage.subscription_reference = $sessionStorage.subscription_serial; sessionStorage.setItem($application, JSON.stringify($sessionStorage)); // Submit in a new tab formSubmit($sessionStorage, "_blank"); // Hide spinner immediately, since the main page isn't going anywhere setTimeout(function () { $("#spinner-dialog").modal("hide"); }, 2000); // optional: add a slight delay so it feels responsive }); // ----------------------------- // Print Selected Permits Button // ----------------------------- $(".btnPrintSelected").on("click", function (e) { e.preventDefault(); window.open("", "PrintTab"); var selected = $("input[name='selected[]']:checked").map(function () { return $(this).val(); }).get(); $("input[name = 'action']", "#PrintSelectedPermitsBySubdivisionForm").val("print"); $("input[name = 'selected_permits']", "#PrintSelectedPermitsBySubdivisionForm").val(selected); $("input[name = 'subscription_serial']", "#PrintSelectedPermitsBySubdivisionForm").val($sessionStorage.subscription_serial); $("#PrintSelectedPermitsBySubdivisionForm").submit(); }); // ----------------------------- // Export Selected Permits - CSV // ----------------------------- $(".btnExportCSV").on("click", function (e) { $("#spinner-dialog").modal("show"); var selected = $("input[name='selected[]']:checked").map(function () { return $(this).val(); }).get(); console.log(selected); $sessionStorage.action = "Export_SelectedPermitsBySubdivision_CSV.export"; $sessionStorage.selected_permits = selected; $sessionStorage.subscription_reference = $sessionStorage.subscription_serial; sessionStorage.setItem($application, JSON.stringify($sessionStorage)); // Submit in a new tab formSubmit($sessionStorage, "_blank"); // Hide spinner immediately, since the main page isn't going anywhere setTimeout(function () { $("#spinner-dialog").modal("hide"); }, 2000); // optional: add a slight delay so it feels responsive }); // ------------------------------- // Export Selected Permits - Excel // ------------------------------- $(".btnExportSelectedExcel").on("click", function (e) { $("#spinner-dialog").modal("show"); var selected = $("input[name='selected[]']:checked").map(function () { return $(this).val(); }).get(); console.log(selected); $sessionStorage.action = "Export_SelectedPermitsBySubdivision_Excel.export"; $sessionStorage.subscription_reference = $sessionStorage.subscription_serial; $sessionStorage.selected_permits = selected; sessionStorage.setItem($application, JSON.stringify($sessionStorage)); // Submit in a new tab formSubmit($sessionStorage, "_blank"); // Hide spinner immediately, since the main page isn't going anywhere setTimeout(function () { $("#spinner-dialog").modal("hide"); }, 2000); // optional: add a slight delay so it feels responsive }); // ------------------- // Save Changed Inputs // ------------------- $(".autosave").on("change", function (e) { switch (e.target.type) { case "text" : $sessionStorage[e.target.name] = $(this).val(); break; case "radio" : $sessionStorage[e.target.name] = $(this).val(); break; case "checkbox" : $sessionStorage[e.target.name] = $(this).prop("checked"); break; case "select-one" : $sessionStorage[e.target.name] = $(this).val(); break; case "hidden" : $sessionStorage[e.target.name] = $(this).val(); break; default : $sessionStorage[e.target.name] = $(this).val(); break; } sessionStorage.setItem($application, JSON.stringify($sessionStorage)); }); // ---------------- // Initalize Inputs // ---------------- $.each($sessionStorage, function (name, value) { var $input = $(":input").filter("[name='" + name + "']"); if ($input.length > 0) { switch ($input.prop("type")) { case "text" : $input.val(value); break; case "radio" : $input.filter("[value=" + value + "]").prop("checked", true); break; case "checkbox" : $input.prop("checked", value); break; case "select-one" : $input.val(value); break; case "hidden" : $input.val(value); break; default : $input.val(value); break; } } }); // ------------------ // Save preset Inputs // ------------------ $("input[type=radio]:checked").trigger("change"); // ----------------- // Per Page Dropdown // ----------------- $("#permits_per_page").on("change", function () { $(".btnFind").trigger("click"); }); }); function openPermitDialog(modalHtml) { const $modal = $(modalHtml); // Remove any existing instance $("#permit-details-dialog").remove(); $("body").append($modal); const modal = new bootstrap.Modal( document.getElementById("permit-details-dialog"), {backdrop: "static", keyboard: false} ); modal.show(); } // ------------------------------------- // Returns Modal with Permit Record Data // ------------------------------------- function getPermitRecordDialog(permit_serial) { var dialog = null; $.ajax({ url: "main.php?Xaction=PermitsBySubdivision.getPermitRecordDialog", type: "POST", async: false, data: {permit_serial: permit_serial}, dataType: "html", success: function (result) { dialog = result; } }); return dialog; } function renderSubdivisionResults(results, $input) { let $dropdown = $(".subdivision-results"); if (!$dropdown.length) { $dropdown = $(""); $input.closest(".subdivision-wrapper").append($dropdown); } $dropdown.empty(); if (!results.length) { $dropdown.append("No Matching Subdivisions Found"); return; } results.forEach(function (item) { let $option = $("").text(item); $option.on("click", function () { $input.val(item); $dropdown.hide(); }); $dropdown.append($option); }); $dropdown.show(); }