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

275 lines
10 KiB
JavaScript

var itemTable;
let confirmUpdateListener = false;
function submitItem() {
// Get all selected checkboxes
var selectedCheckboxes = $('.selectedItem-checkbox:checked');
// Prepare data array to hold item details
var requestData = [];
// Iterate over selected checkboxes
selectedCheckboxes.each(function () {
var $row = $(this).closest('tr');
// Get the DataTable row index
var rowIndex = itemTable.row($row).index();
// Get the row data using DataTable API
var rowData = itemTable.row(rowIndex).data();
// Extract itemCartId and qty from rowData
var itemCartId = rowData.itemCartId;
var itemNo = rowData.itemNo;
var qty = $row.find('.editable-qty').val() || rowData.qty;
// Construct an object with item details
var itemData = {
itemCartId: itemCartId,
ItemNo: itemNo,
qty: qty
};
// Push itemData into requestData array
requestData.push(itemData);
});
console.log('requestData', requestData);
if (selectedCheckboxes.length <= 0) {
alert('No selected item!');
confirmUpdateListener = false;
return;
} else {
$('#addDateNeeded').modal('show');
// Set the z-index of viewApproverDetails modal
$('#addDateNeeded').css('z-index', 1060);
if (!confirmUpdateListener) {
document.getElementById('btnConfirmUpdate').addEventListener('click', function () {
var DateNeeded = document.getElementById('dateNeeded').value;
// Validate DateNeeded before showing the confirmation dialog
if (!DateNeeded) {
alert('Please choose date needed!');
confirmUpdateListener = false;
return;
}
// Show a confirmation dialog
const confirmation = confirm('Are you sure you want to proceed?');
// Log data for debugging
//console.log('DateNeeded', DateNeeded);
//console.log('requestData', requestData);
if (confirmation) {
// If all validation is passed then proceed to confirmation to backend
confirmPostPR(DateNeeded, requestData);
}
});
// Set the flag to true to indicate that the listener is attached
confirmUpdateListener = true;
}
}
}
function confirmPostPR(DateNeeded, requestData) {
var loader = $('#overlay, #loader').css('z-index', 1060);
let IsInternalRequest = true;
$.ajax({
url: '/ItemMgmt/PostPurchRequest',
type: 'POST',
data: { ItemCartIds: requestData, DateNeeded: DateNeeded, IsInternalRequest: IsInternalRequest }, // Pass requestData array to the backend
success: function (response) {
if (response.success) {
itemTable.ajax.reload();
$('#addDateNeeded').modal('hide');
alert('Successfully requested!');
var totalSelectedLabel = $('#totalSelected');
totalSelectedLabel.text('');
} else {
itemTable.ajax.reload();
alert('Failed: ' + response.response);
}
},
beforeSend: function () {
// Show the loader before making the AJAX request
loader.show();
},
complete: function () {
// Hide the loader after the AJAX request is complete (success or error)
loader.hide();
}
});
}
function renderItembtns(data, row) {
var jsonData = JSON.stringify(row).replace(/"/g, "&quot;");
var buttonsHtml = '';
// var statusNumber = parseInt(row.status, 10);
buttonsHtml += '<button onclick="deleteCartItemById(' + jsonData + ')" class="btn btn-default">' +
'<i class="fa-solid fa-trash-can fa-xl" style="color: #Ff0000;" aria-hidden="true"></i>' +
'</button > ';
return buttonsHtml;
}
$(document).ready(function () {
var loader = $('#overlay, #loader');
var submitButton = $('#btnSubmitItem');
var totalSelectedLabel = $('#totalSelected'); // Reference to the label to display the total selected count
UserRights = document.getElementById("roleRights").value;
let IsInternalRequest = true;
itemTable = $('#ItemCartTable').DataTable({
ajax: {
url: '/ItemMgmt/GetItemCart', // Replace with your API endpoint
type: 'GET',
data: { IsInternalRequest },
beforeSend: function () {
// Show the loader before making the AJAX request
loader.show();
},
complete: function () {
loader.hide();
}
},
// Check for the "No Data" response and display the message
initComplete: function () {
var api = this.api();
var data = api.ajax.json();
if (!data || !data.data || data.data === "No Data") {
// Display the "No record available" message
$('.dataTables_empty').html("No record available");
}
updateSubmitButtonVisibility();
},
columns: [
{
data: 'itemCartId',
render: function () {
return '<input type="checkbox" class="selectedItem-checkbox" />';
}
},
{ data: 'itemNo' },
{ data: 'itemName' },
{ data: 'itemCategoryName' },
{ data: 'prTypeId' },
{ data: 'qty' },
{
data: null,
render: function (data, type, row) {
return renderItembtns(data, row);
}
},
{ data: 'isActive', visible: false },
{ data: 'itemCartId', visible: false },
{ data: 'cartItemCount', visible: false },
{ data: 'createdDate', visible: false },
],
"columnDefs": [
{
"targets": [5], // Index of the 'qty' column (0-based)
"render": function (data, type, row) {
// Render the 'qty' column as an input field
return '<input type="number" class="editable-qty" style="width:60px;" value="' + data + '" />';
}
}
],
rowCallback: function (row, data) {
var cartItemCount = data.cartItemCount; // Retrieve the cart item count from the data object
var itemCount = parseInt(cartItemCount, 10); // Parse the text content as an integer
var prTypeIdCell = $('td:eq(4)', row);
var PRTypeId = prTypeIdCell.text();
var PRTypeIdNumer = parseInt(PRTypeId, 10);
// console.log('ItemCartIds', ItemCartId);
// Check if the parsed integer is a valid number
if (!isNaN(itemCount)) {
$('#cartCount').text(itemCount); // Update the cart count in the navbar
} else {
$('#cartCount').text('0'); // If the parsed integer is NaN, set the cart count to 0
}
if (!isNaN(PRTypeIdNumer)) {
if (PRTypeIdNumer === 1) {
prTypeIdCell.text('Goods').addClass('next-facilitator');
} else {
prTypeIdCell.text('Service').addClass('next-facilitator');
}
}
},
//responsive: true,
order: [[10, 'desc']],
language: {
emptyTable: "No record available"
},
error: function (xhr, error, thrown) {
console.log('DataTables error:', error);
console.log('Status:', Status);
console.log('Details:', xhr.responseText);
window.location.href = '/Home/Logout';
}
});
// Function to update the visibility of the submit button
function updateSubmitButtonVisibility() {
var isEmpty = itemTable.data().length === 0; // Check if the table is empty
// Toggle the visibility of the submit button based on whether the table is empty or not
submitButton.toggle(!isEmpty);
}
// Event handler for individual checkbox change
$('#ItemCartTable').on('change', '.selectedItem-checkbox', function () {
updateTotalSelectedCount(); // Update the total selected count
});
// Event handler for "Select All" checkbox change in the header
$('#selectAllHeaderCheckbox').on('change', function () {
var isChecked = $(this).prop('checked'); // Check if "Select All" checkbox is checked
// Check or uncheck all checkboxes in the table based on the state of "Select All" checkbox
$('.selectedItem-checkbox').prop('checked', isChecked);
updateTotalSelectedCount(); // Update the total selected count
});
function updateTotalSelectedCount() {
var totalSelected = $('.selectedItem-checkbox:checked').length; // Count the checked checkboxes
totalSelectedLabel.text(totalSelected); // Update the label with the count
}
})
function deleteCartItemById(data) {
var loader = $('#overlay, #loader');
// Check if UserName or Password is empty or null
var ItemCartId = data.itemCartId;
var ItemNo = data.itemNo;
const confirmation = confirm('Are you sure you want to proceed?');
if (confirmation) {
$.ajax({
url: '/ItemMgmt/PostPutItemCart',
type: 'POST',
data: { ItemNo, ItemCartId },
success: function (response) {
if (response.success) {
itemTable.ajax.reload();
var totalSelectedLabel = $('#totalSelected');
totalSelectedLabel.text('');
alert('Selected item deleted!');
} else {
loader.hide();
alert('Failed: ' + response.response);
}
},
beforeSend: function () {
// Show the loader before making the AJAX request
loader.show();
},
complete: function () {
// Hide the loader after the AJAX request is complete (success or error)
loader.hide();
}
});
}
}