fix: backend dynamic bill array usage

This commit is contained in:
Sérgio Salgado 2021-09-06 19:21:57 +01:00
parent 3c1a58da4a
commit 96fa94fde6
5 changed files with 41 additions and 54 deletions

View file

@ -16,6 +16,8 @@ exports.makeChange = function makeChange (cassettes, amount) {
}))
const amountNum = amount.toNumber()
console.log('cassettes', cassettes)
const sortedCassettes = _.orderBy(cassetteMap, ['denomination'], ['desc'])
const finalDist = []
@ -25,7 +27,7 @@ exports.makeChange = function makeChange (cassettes, amount) {
while(mutableAmount >= 0) {
_.each(sortedCassettes, it => {
if (mutableAmount === 0) {
finalDist.push({provisioned: 0, denomination: it.denomination, id: uuid.v4()})
finalDist.push({ provisioned: 0, denomination: it.denomination, id: uuid.v4() })
return
}
@ -34,7 +36,7 @@ exports.makeChange = function makeChange (cassettes, amount) {
const numberOfBills = amountToSub / it.denomination
mutableAmount -= amountToSub
finalDist.push({provisioned: numberOfBills, denomination: it.denomination, id: uuid.v4()})
finalDist.push({ provisioned: numberOfBills, denomination: it.denomination, id: uuid.v4() })
return
})

View file

@ -37,22 +37,14 @@ function mapDispense (tx) {
if (_.isEmpty(bills)) return {}
return {
provisioned_1: bills[0].provisioned,
provisioned_2: bills[1].provisioned,
provisioned_3: bills[2].provisioned,
provisioned_4: bills[3].provisioned,
dispensed_1: bills[0].dispensed,
dispensed_2: bills[1].dispensed,
dispensed_3: bills[2].dispensed,
dispensed_4: bills[3].dispensed,
rejected_1: bills[0].rejected,
rejected_2: bills[1].rejected,
rejected_3: bills[2].rejected,
rejected_4: bills[3].rejected,
denomination_1: bills[0].denomination,
denomination_2: bills[1].denomination,
denomination_3: bills[2].denomination,
denomination_4: bills[3].denomination
}
const res = {}
_.forEach(it => {
res[`provisioned_${it + 1}`] = bills[it].provisioned
res[`denomination_${it + 1}`] = bills[it].denomination
res[`dispensed_${it + 1}`] = bills[it].dispensed
res[`rejected_${it + 1}`] = bills[it].rejected
}, _.times(_.identity(), _.size(bills)))
return res
}

View file

@ -111,20 +111,24 @@ function updateCassettes (t, tx) {
if (!dispenseOccurred(tx.bills)) return Promise.resolve()
const sql = `update devices set
cassette1 = cassette1 - $1,
cassette2 = cassette2 - $2,
cassette3 = cassette3 - $3,
cassette4 = cassette4 - $4
where device_id = $5
returning cassette1, cassette2, cassette3, cassette4`
${_.size(tx.bills) > 0 ? `cassette1 = cassette1 - $1` : ``}
${_.size(tx.bills) > 1 ? `, cassette2 = cassette2 - $2` : ``}
${_.size(tx.bills) > 2 ? `, cassette3 = cassette3 - $3` : ``}
${_.size(tx.bills) > 3 ? `, cassette4 = cassette4 - $4` : ``}
where device_id = $${_.size(tx.bills) + 1}
returning
${_.size(tx.bills) > 0 ? `cassette1` : ``}
${_.size(tx.bills) > 1 ? `, cassette2`: ``}
${_.size(tx.bills) > 2 ? `, cassette3` : ``}
${_.size(tx.bills) > 3 ? `, cassette4` : ``}`
const values = [
tx.bills[0]?.dispensed ?? 0 + tx.bills[0]?.rejected ?? 0,
tx.bills[1]?.dispensed ?? 0 + tx.bills[1]?.rejected ?? 0,
tx.bills[2]?.dispensed ?? 0 + tx.bills[2]?.rejected ?? 0,
tx.bills[3]?.dispensed ?? 0 + tx.bills[3]?.rejected ?? 0,
tx.deviceId
]
const values = []
_.forEach(it => values.push(
tx.bills[it].dispensed + tx.bills[it].rejected
), _.times(_.identity(), _.size(tx.bills)))
values.push(tx.deviceId)
return t.one(sql, values)
.then(r => socket.emit(_.assign(r, {op: 'cassetteUpdate', deviceId: tx.deviceId})))

View file

@ -37,7 +37,6 @@ function convertField (key) {
function addDbBills (tx) {
const bills = tx.bills
console.log('tx', tx)
if (_.isEmpty(bills)) return tx
const billsObj = {
@ -55,7 +54,6 @@ function addDbBills (tx) {
}
function toDb (tx) {
console.log('tx1', tx)
const massager = _.flow(convertBigNumFields, addDbBills,
_.omit(['direction', 'bills']), _.mapKeys(convertField))
@ -89,7 +87,7 @@ function toObj (row) {
if (_.every(_.isNil, _.at(billFields, newObj))) return newObj
if (_.some(_.isNil, _.at(billFields, newObj))) throw new Error('Missing cassette values')
const bills = [
const billFieldsArr = [
{
denomination: newObj.denomination1,
provisioned: newObj.provisioned1
@ -108,6 +106,10 @@ function toObj (row) {
}
]
// There can't be bills with denomination === 0.
// If a bill has denomination === 0, then that cassette is not set and should be filtered out.
const bills = _.filter(it => it.denomination > 0, billFieldsArr)
return _.set('bills', bills, _.omit(billFields, newObj))
}

View file

@ -70,25 +70,12 @@ function postProcess (txVector, justAuthorized, pi) {
return bills
})
.then(bills => {
const provisioned1 = bills[0].provisioned
const provisioned2 = bills[1].provisioned
const provisioned3 = bills[2].provisioned
const provisioned4 = bills[3].provisioned
const denomination1 = bills[0].denomination
const denomination2 = bills[1].denomination
const denomination3 = bills[2].denomination
const denomination4 = bills[3].denomination
const rec = {}
const rec = {
provisioned_1: provisioned1,
provisioned_2: provisioned2,
provisioned_3: provisioned3,
provisioned_4: provisioned4,
denomination_1: denomination1,
denomination_2: denomination2,
denomination_3: denomination3,
denomination_4: denomination4
}
_.forEach(it => {
rec[`provisioned_${it + 1}`] = bills[it].provisioned
rec[`denomination_${it + 1}`] = bills[it].denomination
}, _.times(_.identity(), _.size(bills)))
return cashOutActions.logAction(db, 'provisionNotes', rec, newTx)
.then(_.constant({bills}))