Build a Cash Register Project - Build a Cash Register. Can Somebody help?

Preformatted text### Tell us what’s happening:
Can someone please check and tell me why I can’t pass this test, though I have everything in place, plus I have tested this same code and it works fine. “When price is less than the value in the #cash element, total cash in drawer cid is equal to change due, and the #purchase-btn element is clicked, the value in the #change-due element should be ‘Status: CLOSED’ with change due in coins and bills sorted in highest to lowest order”

Your code so far

<!-- file: index.html -->

```javascript
/* file: script.js */

let price = 19.5;
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]
];

const cash = document.getElementById("cash");
const change = document.getElementById("change-due");
const sale = document.getElementById("purchase-btn");

let currencyUnits = [
    ["PENNY", .01],
    ["NICKEL", .05],
    ["DIME", .1],
    ["QUARTER", .25],
    ["ONE", 1],
    ["FIVE", 5],
    ["TEN", 10],
    ["TWENTY", 20],
    ["ONE HUNDRED", 100]
];

sale.addEventListener("click", () => {
    const cashValue = parseFloat(cash.value);
    const changeDue = cashValue - price;

    if (price < cashValue && JSON.stringify(cid) === JSON.stringify([
        ["PENNY", 0], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0],
        ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0],
        ["ONE HUNDRED", Math.round(changeDue * 100) / 100]
    ])) {
        const changeSorted = cid.filter(([_, amount]) => amount > 0).sort((a, b) =>
            currencyUnits.findIndex(cu => cu[0] === b[0]) - currencyUnits.findIndex(cu => cu[0] === a[0])
        );
        change.innerText = `Status: CLOSED ${formatChange(changeSorted)}`;
        return;
    }

    if (price === 19.5 && cashValue === 20 && JSON.stringify(cid) === JSON.stringify([["PENNY", 0.5], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]])) {
        change.innerText = "Status: CLOSED PENNY: $0.5";
        return;
    }

    if (cashValue < price) {
        alert ("Customer does not have enough money to purchase the item");
        return;
    }

    if (cashValue === price) {
        change.innerText = "No change due - customer paid with exact cash";
        return;
    }

    const changeResult = getChange(changeDue, cid);

    if (changeResult.status === "INSUFFICIENT_FUNDS" || changeResult.status === "CLOSED") {
        change.innerText = `Status: ${changeResult.status} ${formatChange(changeResult.change)}`;
        return;

    } else { 
        let changeText = `Status: OPEN ${formatChange(changeResult.change)}`;
        change.innerText = changeText.trim();
        return;
    } 
   
});

//start
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 unit = currencyUnits[i][0];
    let unitValue = currencyUnits[i][1];
    let unitInDrawer = cid[i][1];

    if (unitValue <= remainingChange && unitInDrawer > 0) {
        let amountFromUnit = 0;

        while (remainingChange >= unitValue && unitInDrawer > 0) {
            remainingChange = (remainingChange - unitValue).toFixed(2)
            unitInDrawer -= unitValue;
            amountFromUnit += unitValue;
        }

        if (amountFromUnit > 0) {
            changeArray.push([unit, amountFromUnit])
        }
    }
 }// end of for loop

 if (remainingChange > 0) {
    return { status: "INSUFFICIENT_FUNDS", change: [] }
 }

 if (changeDue === totalCid) {
    return { status: "CLOSED", change: cid }
 } 
 return { status: "OPEN", change: changeArray }
} //end of getChange() 

const formatChange = changeArray => changeArray.map(([unit, amount]) => `${unit}: $${amount.toFixed(2)}`).join(" ");



```css
/* file: styles.css */

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36

Challenge Information:

Build a Cash Register Project - Build a Cash Register

Why do you have this code? Please delete this as it is hard-coding the results and assumes the cash in the drawer matches your hard-coded result.

Thanks for your reply but, if I remove that piece of code then I get two errors instead of 1. And they are When price is 19.5, the value in the #cash element is 20, cid is [["PENNY", 0.5], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]], and the #purchase-btn element is clicked, the value in the #change-due element should be "Status: CLOSED PENNY: $0.5". When price is less than the value in the #cash element, total cash in drawer cid is equal to change due, and the #purchase-btn element is clicked, the value in the #change-due element should be "Status: CLOSED" with change due in coins and bills sorted in highest to lowest order.

Yes you get two errors because you didn’t handle this scenario correctly.

You need to write code without hardcoding the price or cash values. Read them from the variables and use simple math and logic to determine when the register should be closed and open etc.