140 lines
5.3 KiB
JavaScript
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
|
|
});
|
|
});
|
|
});
|