// ========================================== // ISSUED ITEMS LOGIC (issued.js) // ========================================== $(document).ready(function () { let allIssuedData = []; let filteredIssuedData = []; let issuedCurrentPage = 1; const issuedItemsPerPage = 10; // Show 10 rows per page window.loadIssuedItems = function (btn = null) { let originalText = ""; if (btn) { originalText = $(btn).html(); $(btn).prop("disabled", true).html(' Refreshing...'); } $.ajax({ url: "includes/api/api.php?action=get_issued_items", type: "GET", cache: false, dataType: "json", success: function (res) { if (btn) $(btn).prop("disabled", false).html(originalText); if (res.status === "success") { allIssuedData = res.data; applyIssuedFilters(); } else { showAlert("Error loading issued items.", "danger"); } }, error: function() { if (btn) $(btn).prop("disabled", false).html(originalText); showAlert("Network error.", "danger"); } }); }; function applyIssuedFilters() { if ($("#searchIssuedInput").length === 0) return; // Failsafe let search = $("#searchIssuedInput").val().toLowerCase(); let dateFrom = $("#filterIssuedDateFrom").val(); let dateTo = $("#filterIssuedDateTo").val(); filteredIssuedData = allIssuedData.filter(function (txn) { let matchesSearch = txn.name.toLowerCase().includes(search) || txn.transaction_id.toString().includes(search) || (txn.description && txn.description.toLowerCase().includes(search)); // Convert dates to YYYY-MM-DD for accurate comparison let txnDate = txn.transaction_date.split(' ')[0]; let matchesDateFrom = dateFrom === "" || txnDate >= dateFrom; let matchesDateTo = dateTo === "" || txnDate <= dateTo; return matchesSearch && matchesDateFrom && matchesDateTo; }); issuedCurrentPage = 1; renderIssuedTable(); } $(document).on("keyup", "#searchIssuedInput", applyIssuedFilters); $(document).on("change", "#filterIssuedDateFrom, #filterIssuedDateTo", applyIssuedFilters); function renderIssuedTable() { let rows = ""; let totalItems = filteredIssuedData.length; let totalPages = Math.ceil(totalItems / issuedItemsPerPage) || 1; let startIndex = (issuedCurrentPage - 1) * issuedItemsPerPage; let endIndex = Math.min(startIndex + issuedItemsPerPage, totalItems); let pageData = filteredIssuedData.slice(startIndex, endIndex); if (pageData.length === 0) { rows = `