fix: bug related with ordering the cassettes during computation
This commit is contained in:
parent
03fc35e9d1
commit
68d5f2b998
1 changed files with 6 additions and 10 deletions
|
|
@ -105,18 +105,14 @@ function plugins (settings, deviceId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function computeAvailableCassettes (cassettes, redeemableTxs) {
|
function computeAvailableCassettes (cassettes, redeemableTxs) {
|
||||||
const orderedCassettes = _.orderBy(['denomination'], ['desc'], cassettes)
|
if (_.isEmpty(redeemableTxs)) return cassettes
|
||||||
if (_.isEmpty(redeemableTxs)) return orderedCassettes
|
|
||||||
|
|
||||||
const sumTxs = (sum, tx) => {
|
const sumTxs = (sum, tx) => {
|
||||||
// cash-out-helper sends 0 as fallback value, need to filter it out as there are no '0' denominations
|
// cash-out-helper sends 0 as fallback value, need to filter it out as there are no '0' denominations
|
||||||
const bills = _.filter(it => it.denomination > 0, tx.bills)
|
const bills = _.filter(it => it.denomination > 0, tx.bills)
|
||||||
const sameDenominations = a => a[0]?.denomination === a[1]?.denomination
|
const sameDenominations = a => a[0]?.denomination === a[1]?.denomination
|
||||||
|
|
||||||
// Order cassettes and bills to make sure they match
|
const doDenominationsMatch = _.every(sameDenominations, _.zip(cassettes, bills))
|
||||||
const orderedBills = _.orderBy(['denomination'], ['desc'], bills)
|
|
||||||
|
|
||||||
const doDenominationsMatch = _.every(sameDenominations, _.zip(orderedCassettes, orderedBills))
|
|
||||||
|
|
||||||
if (!doDenominationsMatch) {
|
if (!doDenominationsMatch) {
|
||||||
throw new Error('Denominations don\'t add up, cassettes were changed.')
|
throw new Error('Denominations don\'t add up, cassettes were changed.')
|
||||||
|
|
@ -125,8 +121,8 @@ function plugins (settings, deviceId) {
|
||||||
return _.map(r => r[0] + r[1].provisioned, _.zip(sum, tx.bills))
|
return _.map(r => r[0] + r[1].provisioned, _.zip(sum, tx.bills))
|
||||||
}
|
}
|
||||||
|
|
||||||
const provisioned = _.reduce(sumTxs, _.times(_.constant(0), _.size(orderedCassettes)), redeemableTxs)
|
const provisioned = _.reduce(sumTxs, _.times(_.constant(0), _.size(cassettes)), redeemableTxs)
|
||||||
const zipped = _.zip(_.map('count', orderedCassettes), provisioned)
|
const zipped = _.zip(_.map('count', cassettes), provisioned)
|
||||||
const counts = _.map(r => r[0] - r[1], zipped)
|
const counts = _.map(r => r[0] - r[1], zipped)
|
||||||
|
|
||||||
if (_.some(_.lt(_, 0), counts)) {
|
if (_.some(_.lt(_, 0), counts)) {
|
||||||
|
|
@ -136,10 +132,10 @@ function plugins (settings, deviceId) {
|
||||||
const computedCassettes = []
|
const computedCassettes = []
|
||||||
_.forEach(it => {
|
_.forEach(it => {
|
||||||
computedCassettes.push({
|
computedCassettes.push({
|
||||||
denomination: orderedCassettes[it].denomination,
|
denomination: cassettes[it].denomination,
|
||||||
count: counts[it]
|
count: counts[it]
|
||||||
})
|
})
|
||||||
}, _.times(_.identity(), _.size(orderedCassettes)))
|
}, _.times(_.identity(), _.size(cassettes)))
|
||||||
|
|
||||||
return computedCassettes
|
return computedCassettes
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue