feat: add support for more than two cassettes

This commit is contained in:
Sérgio Salgado 2021-09-01 00:54:51 +01:00
parent 478af0fad0
commit 5788b6216d
13 changed files with 279 additions and 50 deletions

View file

@ -110,7 +110,14 @@ function plugins (settings, deviceId) {
const sumTxs = (sum, tx) => {
const bills = tx.bills
const sameDenominations = a => a[0].denomination === a[1].denomination
const doDenominationsMatch = _.every(sameDenominations, _.zip(cassettes, bills))
console.log('tx', tx)
console.log('cassettes', cassettes)
console.log('bills', bills)
const doDenominationsMatch = _.every(it => {
console.log('it', it)
return sameDenominations(it)
}, _.zip(cassettes, bills))
if (!doDenominationsMatch) {
throw new Error('Denominations don\'t add up, cassettes were changed.')
@ -119,7 +126,7 @@ function plugins (settings, deviceId) {
return _.map(r => r[0] + r[1].provisioned, _.zip(sum, tx.bills))
}
const provisioned = _.reduce(sumTxs, [0, 0], redeemableTxs)
const provisioned = _.reduce(sumTxs, Array(_.size(cassettes)).fill(0), redeemableTxs)
const zipped = _.zip(_.map('count', cassettes), provisioned)
const counts = _.map(r => r[0] - r[1], zipped)
@ -144,9 +151,9 @@ function plugins (settings, deviceId) {
if (!cashOutConfig.active) return Promise.resolve()
const denominations = [cashOutConfig.top, cashOutConfig.bottom]
const denominations = [cashOutConfig.cassette1, cashOutConfig.cassette2, cashOutConfig.cassette3, cashOutConfig.cassette4]
const virtualCassettes = [Math.max(cashOutConfig.top, cashOutConfig.bottom) * 2]
const virtualCassettes = [Math.max(...denominations) * 2]
return Promise.all([dbm.cassetteCounts(deviceId), cashOutHelper.redeemableTxs(deviceId, excludeTxId)])
.then(([rec, _redeemableTxs]) => {
@ -164,6 +171,14 @@ function plugins (settings, deviceId) {
{
denomination: parseInt(denominations[1], 10),
count: parseInt(counts[1], 10)
},
{
denomination: parseInt(denominations[2], 10),
count: parseInt(counts[2], 10)
},
{
denomination: parseInt(denominations[3], 10),
count: parseInt(counts[3], 10)
}
]
@ -245,6 +260,8 @@ function plugins (settings, deviceId) {
const coinsWithoutRate = _.map(mapCoinSettings, coinParams)
const areThereAvailablePromoCodes = arr[arr.length - 1] > 0
console.log('cassettes', cassettes)
return {
cassettes,
rates: buildRates(tickers),
@ -305,7 +322,7 @@ function plugins (settings, deviceId) {
function dispenseAck (tx) {
const cashOutConfig = configManager.getCashOut(deviceId, settings.config)
const cassettes = [cashOutConfig.top, cashOutConfig.bottom]
const cassettes = [cashOutConfig.cassette1, cashOutConfig.cassette2, cashOutConfig.cassette3, cashOutConfig.cassette4]
return dbm.addDispense(deviceId, tx, cassettes)
}
@ -560,8 +577,10 @@ function plugins (settings, deviceId) {
function checkDeviceCashBalances (fiatCode, device) {
const cashOutConfig = configManager.getCashOut(device.deviceId, settings.config)
const denomination1 = cashOutConfig.top
const denomination2 = cashOutConfig.bottom
const denomination1 = cashOutConfig.cassette1
const denomination2 = cashOutConfig.cassette2
const denomination3 = cashOutConfig.cassette3
const denomination4 = cashOutConfig.cassette4
const cashOutEnabled = cashOutConfig.active
const notifications = configManager.getNotifications(null, device.deviceId, settings.config)
@ -601,7 +620,31 @@ function plugins (settings, deviceId) {
}
: null
return _.compact([cashInAlert, cassette1Alert, cassette2Alert])
const cassette3Alert = cashOutEnabled && device.cassette3 < notifications.fiatBalanceCassette3
? {
code: 'LOW_CASH_OUT',
cassette: 3,
machineName,
deviceId: device.deviceId,
notes: device.cassette3,
denomination: denomination3,
fiatCode
}
: null
const cassette4Alert = cashOutEnabled && device.cassette4 < notifications.fiatBalanceCassette4
? {
code: 'LOW_CASH_OUT',
cassette: 4,
machineName,
deviceId: device.deviceId,
notes: device.cassette4,
denomination: denomination4,
fiatCode
}
: null
return _.compact([cashInAlert, cassette1Alert, cassette2Alert, cassette3Alert, cassette4Alert])
}
function checkCryptoBalances (fiatCode, devices) {