Files

949 lines
27 KiB
JavaScript

const apiURL = '';
let students = [];
let Ordercount = 1;
let deleteRow = [];
function resetForm() {
const inputs = document.querySelectorAll("#myform input:not([type='submit']), #myform select");
inputs.forEach(input => {
input.value = "";
})
}
document.addEventListener('DOMContentLoaded', function () {
const navLinks = document.querySelectorAll('.nav-item .nav-link');
const activeLink = document.querySelector('.nav-item .nav-link.active');
if (activeLink) {
let html = `<h1 style='color: white;'>${activeLink.textContent}</h1>`
head.innerHTML = html;
}
navLinks.forEach(link => {
link.addEventListener('click', function (event) {
let html = `<h1 style='color: white;'>${event.target.textContent}</h1>`
head.innerHTML = html;
});
});
});
function createMoreOrderField() {
Ordercount++;
OrderList = document.getElementById('OrderListBody');
tr = document.createElement('tr');
tr.setAttribute('id', `${Ordercount}`)
tr.innerHTML =
`
<td><input type="text" class="input-cell SerialNo" disabled>
</td>
<td><input type="text" class="input-cell" id="orderProductName${Ordercount}"
placeholder="Enter Product Name" onkeyup="fillProductId(${Ordercount})"
required>
<div id="OrderSuggestion${Ordercount}">
</div>
</td>
<td><input type="text" class="input-cell" id="orderProductId${Ordercount}"
placeholder="Enter ProductId" disabled required></td>
<td><input type="text" class="input-cell" id="orderProductPrice${Ordercount}"
placeholder=" Enter Product price" disabled required></td>
<td><input type="text" class="input-cell" id="orderProductQuantity${Ordercount}"
placeholder="Enter Quantity" required
onkeyup="calculatePrice(${Ordercount}),validateQuantity(${Ordercount})"></td>
<td><input type="text" class="input-cell" id="orderTotal${Ordercount}"
placeholder="Enter Total Here" disabled required></td>
<td><button type="button" class="remove-btn" onclick="deleteDiv(${Ordercount})">Remove</button></td>
`
OrderList.appendChild(tr);
setSerialNo();
}
function deleteDiv(count) {
let divToDelete = document.getElementById(`${count}`);
// Check if the div exists
if (divToDelete && Ordercount != 1) {
divToDelete.remove();
deleteRow.push(count);
}
else {
alert(`Atleast One row is required`);
}
setSerialNo()
calculateTotal()
}
function calculateTotal() {
let total = 0;
for (let i = 1; i <= Ordercount; i++) {
totalField = document.getElementById(`orderTotal${i}`);
if (totalField) {
if (totalField.value)
total = total + parseInt(totalField.value)
}
}
document.getElementById('totalOrderValue').value = total;
}
function setSerialNo() {
const serialNos = document.querySelectorAll('.SerialNo');
let count = 1;
serialNos.forEach(serialNo => {
serialNo.value = count++;
});
}
function fillProductId(count) {
let storeId = document.getElementById('orderStoreId').value;
suggestion = document.getElementById(`OrderSuggestion${count}`);
productId = document.getElementById(`orderProductName${count}`).value
if (productId.trim() !== '') {
let url = `${apiURL}/inventory/search/${productId}/${storeId}`;
fetch(url, {
method: "GET",
headers: { "content-type": "application/json" },
})
.then(response => {
return response.json();
})
.then(data => {
showOrderSuggestion(data.product, count);
})
.catch(error => {
alert(error);
})
}
else {
suggestion.innerHTML = "";
}
}
function showOrderSuggestion(products, count) {
suggestion = document.getElementById(`OrderSuggestion${count}`);
productName = document.getElementById(`orderProductName${count}`);
productId = document.getElementById(`orderProductId${count}`);
productPrice = document.getElementById(`orderProductPrice${count}`);
quantity = document.getElementById(`orderProductQuantity${count}`);
suggestion.innerHTML = "";
for (product of products) {
div = document.createElement('div');
div.classList.add('suggestionCard');
h6 = document.createElement('h6');
h6.textContent = product.name
div.appendChild(h6);
div.addEventListener('click', (function (product) {
return function () {
quantity.value = '1';
productName.value = product.name;
productId.value = product.id;
productPrice.value = product.price;
suggestion.innerHTML = "";
calculatePrice(count);
};
})(product));
suggestion.appendChild(div);
}
}
function calculatePrice(count) {
price = document.getElementById(`orderProductPrice${count}`).value;
quantity = document.getElementById(`orderProductQuantity${count}`).value;
total = document.getElementById(`orderTotal${count}`);
total.value = (price * quantity);
calculateTotal();
}
function validateStoreId(event) {
event.preventDefault();
let now = new Date();
let year = now.getFullYear();
let month = String(now.getMonth() + 1).padStart(2, '0');
let day = String(now.getDate()).padStart(2, '0');
let hours = String(now.getHours()).padStart(2, '0');
let minutes = String(now.getMinutes()).padStart(2, '0');
let formattedDateTime = `${year}-${month}-${day}T${hours}:${minutes}`;
let dateTimeInput = document.getElementById("datetime");
dateTimeInput.value = formattedDateTime;
let submitButton = document.getElementById('submitButton');
let storeId = document.getElementById('orderStoreId');
let url = `${apiURL}/store/validate/${storeId.value}`
fetch(url, {
method: "GET",
headers: { "content-type": "application/json" },
})
.then(response => {
return response.json();
})
.then(data => {
if (data === true) {
storeId.disabled = true;
document.getElementById('displayForm').style = 'display:block';
submitButton.style = 'display:flex';
}
else {
alert("Enter correct Store id")
}
})
}
function addStore(event) {
event.preventDefault();
let storeName = document.getElementById('storeName').value;
let storeAddress1 = document.getElementById('storeAddress1').value;
let storeAddress2 = document.getElementById('storeAddress2').value;
let storeAddress3 = document.getElementById('storeAddress3').value;
let storeAddress = storeAddress1 + " " + storeAddress2 + " " + storeAddress3;
let data = { name: storeName, address: storeAddress };
let url = `${apiURL}/store`
fetch(url, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify(data)
})
.then(response => {
return response.json();
})
.then(data => {
alert(data.message);
resetForm();
})
}
function viewProduct(event) {
if (event) {
event.preventDefault();
}
let inputstoreId = document.getElementById('vstoreId');
document.getElementById('searchBar').disabled = false
document.getElementById('SearchButton').disabled = false;
document.getElementById('vstoreId').disabled = false
document.getElementById('category').disabled = false;
storeId = inputstoreId.value;
inputstoreId.disabled = true;
let url = `${apiURL}/inventory/${storeId}`;
fetch(url, {
method: "GET",
headers: { "content-type": "application/json" },
})
.then(response => {
return response.json();
})
.then(data => {
createData(data.products, storeId);
})
}
function filter() {
productName = document.getElementById('searchBar').value
category = document.getElementById('category').value;
if (category.trim() == 'Allcategory' && productName.trim().length == 0) {
viewProduct(event);
return;
}
else if (productName.trim().length == 0) {
productName = null;
}
else if (category.trim() == 'Allcategory') {
category = null;
}
let storeId = document.getElementById('vstoreId').value;
let url = `${apiURL}/inventory/filter/${category}/${productName}/${storeId}`;
fetch(url, {
method: "GET",
headers: { "content-type": "application/json" },
})
.then(response => {
return response.json();
})
.then(data => {
createData(data.product, storeId);
})
.catch(error => {
alert(error);
})
}
async function createData(products, storeId) {
const tableBody = document.getElementById('tableBody');
tableBody.innerHTML = '';
products.forEach(product => {
const row = document.createElement('tr');
const prodId = document.createElement('td');
prodId.classList.add('expandable');
prodId.textContent = product.id;
const name = document.createElement('td');
name.classList.add('expandable');
name.textContent = product.name;
const category = document.createElement('td');
category.classList.add('expandable');
category.textContent = product.category;
const price = document.createElement('td');
price.classList.add('expandable');
price.textContent = product.price;
const sku = document.createElement('td');
sku.classList.add('expandable');
sku.textContent = product.sku;
const stockLevel = document.createElement('td');
stockLevel.classList.add('expandable');
stockLevel.textContent = product.inventory[0].stockLevel;
const reviewCol = document.createElement('td');
const reviewBtn = document.createElement('button');
reviewBtn.classList.add('btn', 'btn-info');
reviewBtn.textContent = 'Reviews';
reviewBtn.addEventListener('click', () => {
window.location = `reviews.html?productId=${product.id}&storeId=${storeId}&productName=${product.name}`;
})
reviewCol.appendChild(reviewBtn);
const buttoncolumn = document.createElement('td');
const button = document.createElement('button')
button.classList.add('btn', 'btn-warning');
button.textContent = 'Edit';
button.addEventListener('click', () => {
window.location = `edit-product.html?productId=${product.id}&storeId=${storeId}&stockLevel=${product.inventory[0].stockLevel}`;
});
buttoncolumn.appendChild(button);
const buttonTable2 = document.createElement('td');
const delbutton = document.createElement('button')
delbutton.classList.add('btn', 'btn-danger');
delbutton.textContent = 'Delete';
delbutton.value = product.id;
delbutton.addEventListener('click', function () {
showModal(this.value, product.name, 2);
});
buttonTable2.appendChild(delbutton);
row.appendChild(prodId);
row.appendChild(name);
row.appendChild(category);
row.appendChild(price);
row.appendChild(sku);
row.appendChild(stockLevel);
row.appendChild(reviewCol);
row.appendChild(buttoncolumn);
row.appendChild(buttonTable2);
tableBody.appendChild(row);
});
}
function viewProductByid(productId) {
let url = `${apiURL}/product/product/${productId}`;
fetch(url, {
method: "GET",
headers: { "content-type": "application/json" },
})
.then(response => {
return response.json();
})
.then(data => {
console.log(data);
if (data.products) {
fillDetails(data.products, productId);
}
else {
alert("No data with product id: " + productId);
resetForm();
return;
}
})
.catch(error => {
alert(error);
})
}
function fillDetails(products, productId) {
let productIdDiv = document.getElementById('uproductId');
let productName = document.getElementById('uproductName');
let category = document.getElementById('ucategory');
let productPrice = document.getElementById('uproductPrice');
let SKU = document.getElementById('uSKU');
productIdDiv.value = productId;
productName.value = products.name;
category.value = products.category;
productPrice.value = products.price;
SKU.value = products.sku;
}
function updateProduct(event) {
event.preventDefault();
let productId = document.getElementById('uproductId').value;
let productName = document.getElementById('uproductName').value;
let category = document.getElementById('ucategory').value;
let productPrice = document.getElementById('uproductPrice').value;
let SKU = document.getElementById('uSKU').value;
let stockLevel = document.getElementById('ustockLevel').value;
let storeId = document.getElementById('ustoreId').value;
let ProductModel = { id: productId, name: productName, category: category, price: productPrice, sku: SKU };
let InventoryModel = { product: { id: productId }, store: { id: storeId }, stockLevel: stockLevel };
let data = { product: ProductModel, inventory: InventoryModel };
console.log(data);
let url = `${apiURL}/inventory`;
fetch(url, {
method: "PUT",
headers: { "content-type": "application/json" },
body: JSON.stringify(data)
})
.then(response => {
return response.json();
})
.then(data => {
alert(data.message);
location.href = `index.html?id=navBar3&storeid=${storeId}`;
})
}
function fillProductName() {
let productName = document.getElementById('productName').value;
if (productName.trim() != "") {
let url = `${apiURL}/product/searchProduct/${productName}`;
fetch(url, {
method: "GET",
headers: { "content-type": "application/json" },
})
.then(response => {
return response.json();
})
.then(data => {
showproductSuggestion(data.products);
})
.catch(error => {
alert(error);
})
}
else {
suggestion = document.getElementById('aStoreSuggestion');
suggestion.innerHTML = "";
}
}
function showproductSuggestion(products) {
suggestion = document.getElementById('aStoreSuggestion');
productName = document.getElementById('productName')
productId = document.getElementById('productId')
category = document.getElementById('category');
productPrice = document.getElementById('productPrice');
SKU = document.getElementById('SKU');
suggestion.innerHTML = "";
for (product of products) {
button = document.createElement('button');
button.type = 'button'
button.value = product.id;
button.innerHTML = product.name;
button.addEventListener('click', (function (product) {
return function () {
productName.value = product.name;
suggestion.innerHTML = "";
productId.value = product.id;
category.value = product.category;
productPrice.value = product.price;
SKU.value = product.sku;
};
})(product));
suggestion.appendChild(button);
}
}
function addProductToInventory(event) {
event.preventDefault();
productId = document.getElementById('productId').value;
storeId = document.getElementById('astoreId').value;
stockLevel = document.getElementById('astockLevel').value;
let data = { product: { id: productId }, store: { id: storeId }, stockLevel: stockLevel };
let url = `${apiURL}/inventory`
fetch(url, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify(data)
})
.then(response => {
return response.json();
})
.then(data => {
alert(data.message);
location.href = `index.html?id=navBar3&storeid=${storeId}`;
})
}
function viewProductList() {
let url = `${apiURL}/product`;
fetch(url, {
method: "GET",
headers: { "content-type": "application/json" },
})
.then(response => {
return response.json();
})
.then(data => {
if (data.products) {
showProductsInTable(data.products);
}
else {
alert("No data with product id: " + productId);
resetForm();
return;
}
})
.catch(error => {
alert(error);
})
}
function showProductsInTable(products) {
allProducts = document.getElementById('allProducts')
allProducts.innerHTML = "";
products.forEach(product => {
const row = document.createElement('tr');
const prodId = document.createElement('td');
prodId.classList.add('expandable');
prodId.textContent = product.id;
const name = document.createElement('td');
name.classList.add('expandable');
name.textContent = product.name;
const category = document.createElement('td');
category.classList.add('expandable');
category.textContent = product.category;
const price = document.createElement('td');
price.classList.add('expandable');
price.textContent = product.price;
const sku = document.createElement('td');
sku.classList.add('expandable');
sku.textContent = product.sku;
const buttonTable = document.createElement('td');
const button = document.createElement('button')
button.classList.add('btn', 'btn-warning');
button.value = product.id;
button.textContent = 'Edit';
button.addEventListener('click', function () {
window.location = `edit-parent-product.html?productId=${this.value}`
});
buttonTable.appendChild(button);
const buttonTable2 = document.createElement('td');
const delbutton = document.createElement('button')
delbutton.classList.add('btn', 'btn-danger');
delbutton.textContent = 'Delete';
delbutton.value = product.id;
delbutton.addEventListener('click', function () {
showModal(this.value, product.name, 1);
});
buttonTable2.appendChild(delbutton);
row.appendChild(prodId);
row.appendChild(name);
row.appendChild(category);
row.appendChild(price);
row.appendChild(sku);
row.appendChild(buttonTable);
row.appendChild(buttonTable2);
allProducts.appendChild(row);
});
}
function showModal(id, name, action) {
console.log(action);
const myModal = new bootstrap.Modal(document.getElementById('myModal'));
const modalFooter = document.getElementById('modal-footer');
text = document.getElementById('deleteProuctName');
text.innerHTML = name;
modalFooter.innerHTML = "";
button = document.createElement('button');
button.classList.add('btn', 'btn-danger')
button.textContent = 'Yes';
if (action == 1) {
button.addEventListener('click', function () {
deleteItembyId(id);
myModal.hide();
})
}
else {
button.addEventListener('click', function () {
removeFromInventory(id)
myModal.hide();
})
}
modalFooter.appendChild(button);
myModal.show();
}
function deleteItembyId(id) {
let url = `${apiURL}/product/${id}`;
fetch(url, {
method: "DELETE",
headers: { "content-type": "application/json" },
})
.then(response => {
return response.json();
})
.then(data => {
alert(data.message);
location.href = "index.html?id=navBar2";
})
.catch(error => {
alert(error);
})
}
function removeFromInventory(id) {
let url = `${apiURL}/inventory/${id}`
fetch(url, {
method: "DELETE",
headers: { "content-type": "application/json" },
})
.then(response => {
return response.json();
})
.then(data => {
alert(data.message);
viewProduct(event);
location.href = `index.html?id=navBar3&storeid=${storeId}`;
})
.catch(error => {
alert(error);
})
}
async function filterParentProduct() {
category = document.getElementById('pcategory').value;
productName = document.getElementById('ProductsearchBar').value;
if (category.trim() == 'Allcategory' && productName.trim().length == 0) {
viewProductList();
return;
}
else if(category.trim() == 'Allcategory')
{
category=null;
}
else if(productName.trim().length == 0)
{
productName=null;
}
let url = `${apiURL}/product/category/${productName}/${category}`;
fetch(url, {
method: "GET",
headers: { "content-type": "application/json" },
})
.then(response => {
return response.json();
})
.then(data => {
showProductsInTable(data.products);
})
.catch(error => {
alert(error);
})
}
function getProductByid(productId) {
let url = `${apiURL}/product/product/${productId}`;
fetch(url, {
method: "GET",
headers: { "content-type": "application/json" },
})
.then(response => {
return response.json();
})
.then(data => {
if (data.products) {
setParentProduct(data.products);
}
else {
alert("No data with product id: " + productId);
resetForm();
return;
}
})
.catch(error => {
alert(error);
})
}
function setParentProduct(product) {
document.getElementById('pproductName').value = product.name;
document.getElementById('pcategory').value = product.category;
document.getElementById('pproductPrice').value = product.price;
document.getElementById('pSKU').value = product.sku;
}
function updateParentProduct(event) {
event.preventDefault();
productId = document.getElementById('pproductId').value;
productName = document.getElementById('pproductName').value;
category = document.getElementById('pcategory').value;
price = document.getElementById('pproductPrice').value;
sku = document.getElementById('pSKU').value;
let url = `${apiURL}/product`
data = { id: productId, name: productName, category: category, price: price, sku: sku };
fetch(url, {
method: "PUT",
headers: { "content-type": "application/json" },
body: JSON.stringify(data)
})
.then(response => {
return response.json();
})
.then(data => {
alert(data.message);
location.href = "index.html?id=navBar2";
})
}
function addParentProduct(event) {
event.preventDefault();
let productName = document.getElementById('parentproductName').value;
let category = document.getElementById('parentcategory').value;
let productPrice = document.getElementById('parentproductPrice').value;
let SKU = document.getElementById('parentSKU').value;
let data = { name: productName, category: category, price: productPrice, sku: SKU };
let url = `${apiURL}/product`
fetch(url, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify(data)
})
.then(response => {
return response.json();
})
.then(data => {
alert(data.message);
location.href = "index.html?id=navBar2";
})
}
function validateQuantity(OrderNo) {
quantity = document.getElementById(`orderProductQuantity${OrderNo}`).value;
storeId = document.getElementById('orderStoreId').value;
productId = document.getElementById(`orderProductId${OrderNo}`).value;
if (!quantity || !productId || !storeId) {
return;
}
let url = `${apiURL}/inventory/validate/${quantity}/${storeId}/${productId}`
fetch(url, {
method: "GET",
headers: { "content-type": "application/json" }
})
.then(response => {
return response.json();
})
.then(data => {
if (!data) {
alert("Limited Quantity Available, Reduce quantity")
}
})
.catch(error => {
alert(error);
})
}
async function placeOrder(event) {
event.preventDefault();
let storeId = document.getElementById("orderStoreId").value;
let customerName = document.getElementById("customerName").value;
let customerEmail = document.getElementById("customerEmail").value;
let customerPhone = document.getElementById("customerPhone").value;
let datetime = document.getElementById("datetime").value;
let totalOrderValue = document.getElementById('totalOrderValue').value;
if (!totalOrderValue) {
alert("Enter atleast one product");
return
}
let purchaseProduct = [];
for (let i = 1; i <= Ordercount; i++) {
if (deleteRow.includes(i)) {
continue;
}
console.log(`orderProductName${i}`);
let orderProductName = document.getElementById(`orderProductName${i}`).value;
let orderProductId = document.getElementById(`orderProductId${i}`).value;
let orderProductPrice = document.getElementById(`orderProductPrice${i}`).value;
let orderProductQuantity = document.getElementById(`orderProductQuantity${i}`).value;
let orderProductTotal = document.getElementById(`orderTotal${i}`).value;
let data = {
name: orderProductName,
id: orderProductId,
price: orderProductPrice,
quantity: orderProductQuantity,
total: orderProductTotal
};
purchaseProduct.push(data);
}
let orderData = {
storeId: storeId,
customerName: customerName,
customerEmail: customerEmail,
customerPhone: customerPhone,
datetime: datetime,
purchaseProduct: purchaseProduct,
totalPrice: totalOrderValue
};
try {
const response = await fetch(`${apiURL}/store/placeOrder`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(orderData)
}).then(response => {
return response.json();
}).then(data => {
if (data.message) {
alert(data.message);
location.href = "index.html?id=navBar4";
}
else {
alert(data.error);
}
})
} catch (error) {
alert('Error placing order:', error);
}
}