NonInventPurchasingSystem/CPRNIMS.WebApps/wwwroot/JsFunctions/Items/ItemManagementV6.js
2026-01-20 07:44:30 +08:00

140 lines
5.3 KiB
JavaScript

function renderItembtns(data, row) {
var jsonData = JSON.stringify(row).replace(/"/g, """);
var buttonsHtml = '';
buttonsHtml += '<button onclick="viewItem(' + jsonData + ')" class="btn btn-default">' +
'<i class="fa-solid fa-eye fa-xl" style="color: #008080;" aria-hidden="true"></i>' +
'</button > ';
return buttonsHtml;
}
function refreshTable() {
itemTable.ajax.reload();
}
function clearTextModal() {
document.getElementById("ItemName").value = "";
document.getElementById("ItemDescription").value = "";
document.getElementById("ItemCategory").value = "";
document.getElementById("requestTypeId").value = "";
}
function isFullFilled() {
var itemNameInput = document.getElementById('itemName').value;
var itemDescriptionInput = document.getElementById('itemDescription').value;
var itemCategoryInput = document.getElementById('itemCategoryName').value;
var itemLocalNameInput = document.getElementById('itemLocalName').value;
var uomNameInput = document.getElementById('uomName').value;
var itemQtyInput = document.getElementById('itemQty').value;
var itemClassIdInput = document.getElementById('itemClassId').value;
var packagingTypeIdInput = document.getElementById('packagingTypeId').value;
var prTypeIdInput = document.getElementById('prTypeId').value;
var itemColorIdInput = document.getElementById('itemColorId').value;
if (!itemNameInput || !itemCategoryInput || itemQtyInput === '0' || !itemDescriptionInput ||
!itemLocalNameInput || !uomNameInput || !itemClassIdInput || !packagingTypeIdInput || !prTypeIdInput || !itemColorIdInput) {
let btnAddToCart = document.getElementById('btnAddToCart');
btnAddToCart.style.display = 'none';
}
else {
let btnAddToCart = document.getElementById('btnAddToCart');
btnAddToCart.style.display = 'block';
}
}
$(document).ready(function () {
var loader = $('#overlay, #loader');
let fetchedData = [];
let hasFetched = false; // ensures only one fetch per page load
let fetchInProgress = false; // prevents multiple calls before first finishes
let itemTable;
let cartItemCount = $('#cartItemCount').val();
$('#cartCount').text(cartItemCount);
itemTable = $('#ItemTable').DataTable({
serverSide: false,
processing: true,
deferLoading: 0,
data: [],
columns: [
{ data: 'itemNo' },
{ data: 'itemName' },
{ data: 'itemDescription' },
{ data: 'itemCategoryName' },
{
data: null,
render: function (data, type, row) {
return renderItembtns(data, row);
}
},
{ data: 'cartItemCount', visible: false },
{ data: 'createdDate', visible: false },
{ data: 'requestTypeId', visible: false }
],
order: [[0, 'desc']],
responsive: true,
language: {
emptyTable: "Type in the search box to fetch data."
}
});
// Simple debounce helper
function debounce(func, delay) {
let timer;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => func.apply(this, args), delay);
};
}
// Search handler
$('#ItemTable_filter input').unbind().on('keyup', debounce(function () {
let searchValue = $(this).val().trim();
if (searchValue.length === 0) {
itemTable.clear().draw();
return;
}
if (!hasFetched && !fetchInProgress) {
// Fetch only once on first user input
fetchInProgress = true;
loader.show();
$.ajax({
url: '/ItemMgmt/GetItemList',
type: 'GET',
success: function (response) {
fetchedData = response.data || [];
itemTable.clear().rows.add(fetchedData).draw();
hasFetched = true; // mark as fetched
},
complete: function () {
loader.hide();
fetchInProgress = false;
},
error: function (xhr, error) {
console.log('Error fetching data:', error);
}
});
} else if (hasFetched) {
// Local filtering only
let filteredData = fetchedData.filter(function (item) {
return (
item.itemCodeId.toString().includes(searchValue) ||
item.itemName.toLowerCase().includes(searchValue.toLowerCase()) ||
item.itemDescription.toLowerCase().includes(searchValue.toLowerCase()) ||
item.itemCategoryName.toLowerCase().includes(searchValue.toLowerCase())
);
});
itemTable.clear().rows.add(filteredData).draw();
}
}, 300)); // debounce delay in ms
});
document.addEventListener('DOMContentLoaded', function () {
const triggers = Array.from(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
triggers.forEach(el => {
new bootstrap.Tooltip(el, {
container: 'body', // append tooltip to body
boundary: 'window', // prevent clipping
});
});
});