Unable to edit the main post. Hence adding as a reply:
script.js
let cid = [
['PENNY', 1.01],
['NICKEL', 2.05],
['DIME', 3.1],
['QUARTER', 4.25],
['ONE', 90],
['FIVE', 55],
['TEN', 20],
['TWENTY', 60],
['ONE HUNDRED', 100]
];
// let cid = [
// ['PENNY', 0.5],
// ['NICKEL', 0],
// ['DIME', 0],
// ['QUARTER', 0],
// ['ONE', 0],
// ['FIVE', 0],
// ['TEN', 0],
// ['TWENTY', 0],
// ['ONE HUNDRED', 0]
// ];
let price = 19.5;
const changeDue = document.getElementById("change-due");
const cashGiven = document.getElementById("cash");
const purchaseAmount = document.getElementById("purchase-amount");
const purchaseButton = document.getElementById("purchase-btn");
// For calculating cash in drawer more easily
let cashInDrawer = [
{ name: 'PENNY', value: 0.01,count: 0 },
{ name: 'NICKEL', value: 0.05,count: 0 },
{ name: 'DIME', value: 0.1,count: 0 },
{ name: 'QUARTER', value: 0.25,count: 0 },
{ name: 'ONE', value: 1,count: 0 },
{ name: 'FIVE', value: 5,count: 0 },
{ name: 'TEN', value: 10,count: 0 },
{ name: 'TWENTY', value: 20,count: 0 },
{ name: 'ONE HUNDRED', value: 100,count: 0 }
]
// For storing change to be returned
let returnableChange = [
{ name: 'PENNY', value: 0.01,count: 0 },
{ name: 'NICKEL', value: 0.05,count: 0 },
{ name: 'DIME', value: 0.1,count: 0 },
{ name: 'QUARTER', value: 0.25,count: 0 },
{ name: 'ONE', value: 1,count: 0 },
{ name: 'FIVE', value: 5,count: 0 },
{ name: 'TEN', value: 10,count: 0 },
{ name: 'TWENTY', value: 20,count: 0 },
{ name: 'ONE HUNDRED', value: 100,count: 0 }
]
// sets up cashInDrawer array with values in cid array
const initCashInDrawer = () => {
for (let i = 0; i < cid.length; i++) {
let value = cid[i][1] * 100;
let denomination = cashInDrawer[i].value * 100;
let count = Math.floor(value / denomination);
cashInDrawer[i].count = count;
}
}
const countCash = (arr)=>{
let total = 0;
for (let i=0;i<arr.length;i++){
total += arr[i].value * arr[i].count * 100;
}
return total/100;
}
//Caculate returnable change and display it on change-due div
const calculateReturnableChange = () =>{
let cash = parseFloat(cashGiven.value) * 100;
let purchase = price * 100;
let returnAmount = cash - purchase;
if(cash===purchase){
changeDue.innerHTML = "<p>No change due - customer paid with exact cash<p>";
return true;
}
console.log(countCash(cashInDrawer));
if(countCash(cashInDrawer) < (returnAmount/100)){
changeDue.innerHTML = "<p>Status: INSUFFICIENT_FUNDS</p>";
return true;
}
for (let i = cashInDrawer.length-1;i>=0;i--){
while (returnAmount/100 >= cashInDrawer[i].value && cashInDrawer[i].count > 0){
returnAmount -= cashInDrawer[i].value*100;
cashInDrawer[i].count--;
returnableChange[i].count++;
}
}
if (returnAmount === 0){
let htmlOut = ``;
for (let i = returnableChange.length-1; i >=0 ; i--){
if (returnableChange[i].count > 0){
htmlOut += `<p>${returnableChange[i].name}: $${returnableChange[i].value * returnableChange[i].count}</p>`;
}
}
// console.log(countCash(cashInDrawer), countCash(returnableChange));
if(countCash(cashInDrawer) === 0){
htmlOut = "<p>Status: CLOSED</p>" + htmlOut;
}else{
htmlOut = "<p>Status: OPEN</p>" + htmlOut;
}
changeDue.innerHTML = htmlOut;
return true;
} else {
changeDue.innerHTML = `<p>Status: INSUFFICIENT_FUNDS</p>`;
return true;
}
return false;
}
// when Purchase button is clicked
purchaseButton.addEventListener("click",()=>{
initCashInDrawer();
purchaseAmount.value = price;
if(parseFloat(cashGiven.value) < price){
alert("Customer does not have enough money to purchase the item");
return false;
}
if (!calculateReturnableChange()){
changeDue.innerHTML = "Sorry, Something went wrong!";
}
})