# CASH REGISTER PROJECT problem

Been trying to complete the cash register problem for a week, and am stuck on printing all the values been deducted, maybe someone can notify me where necessary…

``````function checkCashRegister(price, cash, cid) {
var productPrice = price;
var payment = cash;
var currentCash = [...cid];
var remain = payment - productPrice;
var filterCashFlow = [];
var ChangeToGive = [];

var currency = [['PENNY',0.01],
['NICKEL',0.05],
['DIME',0.1],
['QUARTER',0.25],
['ONE',1],
['FIVE',5],
['TEN',10],
['TWENTY',20],
['HUNDRED',100]
];
//it will save current cash thats greater than the currency
for(let i=0; i<currency.length; i++){
if(remain>currency[i][1]){
filterCashFlow.push(currency[i])
}
}
filterCashFlow.reverse();
for(let i=0;i<currency.length;i++){//this is where is giving me headeach
if(remain>currency[i][1]){
if(currentCash.indexOf(currency[i])) ChangeToGive.push(currentCash[i])
}
}
ChangeToGive.reverse();
var TotalCash  = ChangeToGive.reduce((x,y)=>{return x+y[1]},0)

var status = ()=>{
return(remain > TotalCash)?"INSUFFICIENT_FUNDS":
(remain == TotalCash)?"CLOSED":
(remain < TotalCash)?"OPEN":false;
}

/*var f = currency.reduce((x,m)=>{
let fin = 0;
while(ChangeToGive[m][1] >0 && remain >= m[1]){
remain -= m[1];
console.log(ChangeToGive[m][1])
ChangeToGive[m][1] -= m[1];
m[1] += m[1];
fin += m[1]
}
if(fin>0){
x.push(m[1])
}
return x;
},[])*/

var f = ()=>{
let fin = 0;
let x = [];
if(fin ==remain){

return x;
}
for(let i=0; i <filterCashFlow.length; i++){

while(ChangeToGive[i][1] >=0){
x.push(filterCashFlow[i])
ChangeToGive[i][1] -= remain;
remain -= filterCashFlow[i][1];
filterCashFlow[i][1] += filterCashFlow[i][1];
fin += filterCashFlow[i][1]

console.log(ChangeToGive[i][1])
remain = Math.round(remain * 100) / 100;

}

}
return x;
}
function checker(){
let check;
if(status() == "INSUFFICIENT_FUNDS"){
return  check = [];
}
if(status() == "CLOSED"){
return check = currentCash;
}
if(status() == "OPEN"){
return  check = f();
}
return check;
}

// Here is your change, ma'am.
return ({status:status(),change:checker()})
}

console.log(checkCashRegister(3.26, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]))
``````

Your code is big, do you have a specific question?

look at the function f(); its suppose to iterate through filteredCashFlow, while changeToGive is >= 0, then it should add increment filteredCashFlow and minus ‘remain & ChangeToGIve’… the value is expected to output this code below =>

``````checkCashRegister(3.26, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME",
3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20],
["TWENTY", 60], ["ONE HUNDRED", 100]])
``````

I think you may want to double check the specification.

Otherwise, return `{status: "OPEN", change: [...]}` , with the change due in coins and bills, sorted in highest to lowest order, as the value of the `change` key.

does not match what you are expecting. if going by your post it looks like what you are expecting to return is an unchanged array of the imported `cid` array when the `status` is `OPEN`. Is that correct?

when the `status` returns `OPEN`, the function `f()` is to take effect…

My problem is on the function `f()` its suppose to return the `change` from the `ChangeToGive` array

take not i reversed the `changeToGive and filterCashFlow` array…
`ChangeToGive` => is the cid with index of elements in `filterCashFlow`.
`filterCashFlow` => is the `currency` starting from the immediate element lower than the change`remain`

`console.log(typeof status());` // returns undefined

you know its all in a function right

your return statement calls status(), which is supposed to return a string to store into the status property, which is then used in checker() to determine the value of change

`return ({status:status(),change:checker()})`

but status() is returning undefined for the input you have given it. not a string value or false. which means checker() is not going to function the way you are expecting. which results in an incorrect output.

sorry i figured it out and forgot to update you guys last month…
I just forgot to put the counter `let fin=0` in the iterated environment below it, right
there in the code