Can any one please tell if its missing or something is done wrong
.
let price = 19.5;
let cid = [
["PENNY", 0.5],
["NICKEL", 0],
["DIME", 0],
["QUARTER", 0],
["ONE", 0],
["FIVE", 0],
["TEN", 0],
["TWENTY", 0],
["ONE HUNDRED", 0]
];
const cashInput = document.getElementById("cash");
const changeOutput = document.getElementById("change-due");
const purchaseBtn = document.getElementById("purchase-btn");
const currencyUnits = [
["PENNY", 0.01],
["NICKEL", 0.05],
["DIME", 0.1],
["QUARTER", 0.25],
["ONE", 1],
["FIVE", 5],
["TEN", 10],
["TWENTY", 20],
["ONE HUNDRED", 100]
];
purchaseBtn.addEventListener("click", () => {
const cashValue = parseFloat(cashInput.value);
const changeDue = parseFloat((cashValue - price).toFixed(2));
if (cashValue < price) {
alert("Customer does not have enough money to purchase the item");
return;
}
if (cashValue === price) {
changeOutput.innerText = "No change due - customer paid with exact cash";
return;
}
const result = getChange(changeDue, cid);
if (result.status === "INSUFFICIENT_FUNDS") {
changeOutput.innerText = "Status: INSUFFICIENT_FUNDS";
} else if (result.status === "CLOSED") {
changeOutput.innerText = `Status: CLOSED, Change: ${formatChange(result.change)}`;
} else {
changeOutput.innerText = `Status: OPEN, Change: ${formatChange(result.change)}`;
}
});
const getChange = (changeDue, cid) => {
let totalCid = parseFloat(cid.reduce((sum, [_, amount]) => sum + amount, 0).toFixed(2));
if (totalCid < changeDue) {
return { status: "INSUFFICIENT_FUNDS", change: [] };
}
let changeArray = [];
let remainingChange = changeDue;
for (let i = currencyUnits.length - 1; i >= 0; i--) {
let unitName = currencyUnits[i][0];
let unitValue = currencyUnits[i][1];
let amountFromUnit = 0;
let unitInDrawer = cid[i][1];
while (unitValue <= remainingChange && unitInDrawer >= unitValue) {
remainingChange -= unitValue;
unitInDrawer -= unitValue;
amountFromUnit += unitValue;
remainingChange = parseFloat(remainingChange.toFixed(2));
}
if (amountFromUnit > 0) {
changeArray.push([unitName, amountFromUnit]);
}
}
if (remainingChange > 0) {
return { status: "INSUFFICIENT_FUNDS", change: [] };
}
if (totalCid === changeDue) {
return { status: "CLOSED", change: changeArray };
}
return { status: "OPEN", change: changeArray };
};
const formatChange = (changeArray) => {
return changeArray.map(([unit, amount]) => `${unit}: $${amount.toFixed(2)}`).join(", ");
};