function postPutPurchase() {
loader = $('#overlay, #loader').css('z-index', 1060);
isValid = true;
var Remarks = document.getElementById('requestorRemarks').value;
var ProjectCodeId = document.getElementById('projectCodeId').value;
const selectedItems = Object.values(selectedProductsMap);
if (selectedItems.length === 0) {
showToast('warning', 'Please select items first!', 'Approval failed', 4000);
return;
}
const requestData = selectedItems.map(item => {
const row = itemTable.rows().nodes().toArray().find(row => {
const rowData = itemTable.row(row).data();
return rowData.itemNo === item.itemNo;
});
const updatedQty = row
? parseFloat($(row).find('.editable-qty').val()) || item.qty
: item.qty;
return {
ItemCartId: item.itemCartId,
ItemNo: item.itemNo,
Qty: updatedQty
};
});
var DateNeeded = document.getElementById('dateNeeded').value;
if (!DateNeeded) {
showToast('warning', 'Please choose date needed!', 'P.R. submission failed', 4000);
confirmUpdateListener = false;
return;
}
if (RequestTypeId == 3) {
updateDepartmentId();
var ChargeTo = document.getElementById('departmentId').value;
if (!ChargeTo) {
showToast('warning', 'Please choose a department to be in charge of!', 'P.R. submission failed', 4000);
confirmUpdateListener = false;
return;
}
}
showConfirmation({
title: 'Purchasing Requisition',
message: 'Are you sure you want to proceed? This action cannot be undone.',
type: 'warning',
confirmText: 'Yes',
cancelText: 'No'
}).then((confirmed) => {
if (confirmed) {
var formData = new FormData();
var fileInput = document.getElementById('fileAttachment');
if (fileInput.files.length > 0) {
formData.append('file', fileInput.files[0]);
}
formData.append('DateNeeded', DateNeeded);
formData.append('RequestTypeId', RequestTypeId);
formData.append('ChargeTo', ChargeTo || '');
formData.append('Remarks', Remarks || '');
formData.append('ProjectCodeId', ProjectCodeId || 0);
formData.append('ItemCartIds', JSON.stringify(requestData));
$.ajax({
url: '/ItemMgmt/PostPurchRequest',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function (response) {
if (response.success) {
itemTable.ajax.reload();
$('#addDateNeeded').modal('hide');
showToast('success', 'P.R. Successfully Created!', 'Success', 4000);
var totalSelectedLabel = $('#totalSelected');
totalSelectedLabel.text('');
clearFormData();
} else {
itemTable.ajax.reload();
showToast('error', response.response, 'P.R. submission failed', 4000);
}
},
error: errorHandler,
beforeSend: function () {
loader.show();
},
complete: function () {
loader.hide();
}
});
}
});
}
function putItemDetails() {
loader = $('#overlay, #loader');
const itemPictureImageInput = document.getElementById("itemPictureImageInput");
if (itemPictureImageInput && itemPictureImageInput.files.length > 0) {
const file = itemPictureImageInput.files[0];
const allowedExtensions = ['.jpg', '.jpeg', '.png'];
const fileExtension = '.' + file.name.split('.').pop().toLowerCase();
if (!allowedExtensions.includes(fileExtension)) {
showToast('error', 'Only .jpg, .jpeg, and .png files are allowed.', 'Invalid File Type', 4000);
return;
}
const maxSizeInBytes = 2 * 1024 * 1024;
if (file.size > maxSizeInBytes) {
const fileSizeInMB = (file.size / (1024 * 1024)).toFixed(2);
showToast('error', `File size (${fileSizeInMB} MB) exceeds the 2MB limit. Please choose a smaller image.`, 'File Too Large', 4000);
return;
}
const reader = new FileReader();
reader.onload = function (event) {
sendUpdateRequest({ itemAttachPath: event.target.result }, loader);
};
reader.readAsDataURL(file);
} else {
sendUpdateRequest({ itemAttachPath: null }, loader);
}
}
function sendUpdateRequest(data, loader) {
const formElements = {
itemNo: document.getElementById('itemNo').value,
itemAttachId: document.getElementById('itemAttachId').value,
uomId: document.getElementById('uomId').value,
itemName: document.getElementById('itemName'),
itemDescription: document.getElementById('itemDescription'),
itemLocalName: document.getElementById('itemLocalName'),
uomName: document.getElementById('uomName'),
itemQty: document.getElementById('itemQty'),
itemClassId: document.getElementById('itemClassId').value,
packagingTypeId: document.getElementById('packagingTypeId').value,
prTypeId: document.getElementById('prTypeId').value,
itemColorId: document.getElementById('itemColorId').value,
itemLocalId: document.getElementById('itemLocalId').value,
isCommon: document.getElementById('isCommon').value === "true",
requestTypeId: document.getElementById('requestTypeId')
};
['itemName', 'itemDescription', 'itemLocalName', 'uomName', 'itemQty', 'requestTypeId'].forEach(id => {
formElements[id].addEventListener('input', removeErrorClass);
});
const requiredFields = [
{ element: formElements.itemName, value: formElements.itemName.value },
{ element: formElements.itemDescription, value: formElements.itemDescription.value },
{ element: formElements.itemLocalName, value: formElements.itemLocalName.value },
{ element: formElements.itemQty, value: formElements.itemQty.value, condition: value => value != 0 },
{ element: formElements.uomName, value: formElements.uomName.value },
{ element: formElements.requestTypeId, value: formElements.requestTypeId.value }
];
const isValid = requiredFields.every(field => {
const isFieldValid = field.condition ? field.condition(field.value) : !!field.value;
if (!isFieldValid) {
field.element.classList.add('error-input');
}
return isFieldValid;
});
if (!isValid) {
showToast('warning', 'Please fill the required fields!', 'Update item failed', 4000);
return;
}
const itemCategoryId = $('#ItemCategory2Id').val();
const isMDLD = document.getElementById("mdld").checked;
const submitData = {
ItemNo: formElements.itemNo,
ItemCodeId: ItemCodeId,
ItemName: formElements.itemName.value,
ItemDescription: formElements.itemDescription.value,
ItemCategoryId: itemCategoryId,
ItemLocalId: formElements.itemLocalId,
IsMDLD: isMDLD,
ItemClassId: formElements.itemClassId,
PackagingTypeId: formElements.packagingTypeId,
PRTypeId: formElements.prTypeId,
UOMId: formElements.uomId,
ItemColorId: formElements.itemColorId,
Qty: formElements.itemQty.value,
ItemAttachPath: data.itemAttachPath,
ItemAttachId: formElements.itemAttachId,
IsCommon: formElements.isCommon,
RequestTypeId: formElements.requestTypeId.value
};
showConfirmation({
title: 'Update Item Details',
message: 'Are you sure you want to update this item? This action cannot be undone.',
type: 'warning',
confirmText: 'Yes, Update',
cancelText: 'Keep Item'
}).then((confirmed) => {
if (confirmed) {
$.ajax({
url: '/ItemMgmt/PutItemDetail',
type: 'POST',
data: submitData,
success: function (response) {
if (response.success) {
clearTextModal();
fetchAndRefreshTable();
document.getElementById("itemPictureImageInput").value = '';
document.getElementById('btnAddToCart').style.display = 'block';
showToast('success', 'Updated successfully!', 'Success', 4000);
} else {
loader.hide();
isFullFilled();
showToast('error', response.response, title + ' failed', 4000);
}
},
beforeSend: function () {
loader.show();
},
complete: function () {
loader.hide();
}
});
}
});
}
function AddToCart(isUpdated) {
var loader = $('#overlay, #loader');
var ItemNo = $('#itemNo').val();
var ItemCategoryId = $('#ItemCategory2Id').val();
var ItemColorId = $('#itemColorId').val();
var PackagingTypeId = $('#packagingTypeId').val();
var ItemAttachId = $('#itemAttachId').val();
var UOMId = $('#uomId').val();
var ItemLocalId = $('#itemLocalId').val();
const message = (ItemCategoryId == 29)
? 'This item requires a PNP permit. Please coordinate with our Security Department once the PR has been created.'
: 'Do you want to add this item to your cart? Please note that this action cannot be undone.';
showConfirmation({
title: 'Item Cart',
message: message,
type: 'warning',
confirmText: 'Yes',
cancelText: 'No'
}).then((confirmed) => {
if (confirmed) {
$.ajax({
url: '/ItemMgmt/PostPutItemCart',
type: 'POST',
data: { ItemNo, ItemCategoryId, ItemColorId, PackagingTypeId, ItemAttachId, UOMId, ItemLocalId },
beforeSend: function () {
loader.show();
},
success: function (response) {
if (response.success) {
$('#viewItemDetails').modal('hide');
clearTextModal();
fetchAndRefreshTable();
if (response.cartCount !== undefined) {
const cartCountElement = document.getElementById("cartCount");
if (cartCountElement) {
cartCountElement.textContent = response.cartCount > 0 ? response.cartCount : "0";
}
}
showToast('success', 'The item has been added to your cart successfully.', 'Success', 4000);
} else {
showToast('error', response.response, title + ' failed', 4000);
}
},
error: errorHandler,
complete: function () {
loader.hide();
}
});
}
});
}
function postItem(isUpdated) {
loader = $('#overlay, #loader');
const itemNameInput = document.getElementById('ItemName');
const itemDescriptionInput = document.getElementById('ItemDescription');
const itemCategoryIdInput = document.getElementById('ItemCategoryId');
const itemCategoryInput = document.getElementById('ItemCategory');
itemNameInput.addEventListener('input', removeErrorClass);
itemDescriptionInput.addEventListener('input', removeErrorClass);
itemCategoryIdInput.addEventListener('input', removeErrorClass);
itemCategoryInput.addEventListener('input', removeErrorClass);
const ItemName = itemNameInput.value;
const ItemDescription = itemDescriptionInput.value;
const ItemCategoryId = itemCategoryIdInput.value;
if (!ItemName || !ItemDescription || !ItemCategoryId) {
showToast('warning', 'Please fill the required fields!', 'Item creation failed', 4000);
if (!ItemName) {
itemNameInput.classList.add('error-input');
}
if (!ItemDescription) {
itemDescriptionInput.classList.add('error-input');
}
if (!ItemCategoryId) {
itemCategoryInput.classList.add('error-input');
}
return;
}
showConfirmation({
title: 'Item Creation',
message: 'Are you sure you want to proceed? This action cannot be undone.',
type: 'warning',
confirmText: 'Yes',
cancelText: 'No'
}).then((confirmed) => {
if (confirmed) {
$.ajax({
url: '/ItemMgmt/PostPutItem',
type: 'POST',
data: { ItemName, ItemDescription, ItemCategoryId },
success: function (response) {
if (response.success) {
$('#addNewItem').modal('hide');
if (!isUpdated == 0) {
var data = [];
data.itemCodeId = response.itemCodeId;
viewItem(data);
clearTextModal();
fetchAndRefreshTable();
showToast('success', 'Update successfully!', 'Success', 4000);
} else {
clearTextModal();
fetchAndRefreshTable();
showToast('success', 'Item added successfully!', 'Success', 4000);
}
} else {
loader.hide();
showToast('error', response.response, title + ' failed', 4000);
}
},
beforeSend: function () {
loader.show();
},
complete: function () {
loader.hide();
}
});
}
})
}
function fetchAndRefreshTable() {
$.ajax({
url: '/ItemMgmt/GetItemList',
type: 'GET',
success: function (newResponse) {
if (newResponse && newResponse.data) {
fetchedData = newResponse.data;
itemTable.clear().rows.add(fetchedData).draw();
} else {
console.log('No data returned from server.');
}
},
error: function (xhr, error) {
console.log('Error fetching updated data:', error);
}
});
}