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() const amountNum = amount.toNumber()
console.log('cassettes', cassettes)
const sortedCassettes = _.orderBy(cassetteMap, ['denomination'], ['desc']) const sortedCassettes = _.orderBy(cassetteMap, ['denomination'], ['desc'])
const finalDist = [] const finalDist = []

View file

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

View file

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

View file

@ -37,7 +37,6 @@ function convertField (key) {
function addDbBills (tx) { function addDbBills (tx) {
const bills = tx.bills const bills = tx.bills
console.log('tx', tx)
if (_.isEmpty(bills)) return tx if (_.isEmpty(bills)) return tx
const billsObj = { const billsObj = {
@ -55,7 +54,6 @@ function addDbBills (tx) {
} }
function toDb (tx) { function toDb (tx) {
console.log('tx1', tx)
const massager = _.flow(convertBigNumFields, addDbBills, const massager = _.flow(convertBigNumFields, addDbBills,
_.omit(['direction', 'bills']), _.mapKeys(convertField)) _.omit(['direction', 'bills']), _.mapKeys(convertField))
@ -89,7 +87,7 @@ function toObj (row) {
if (_.every(_.isNil, _.at(billFields, newObj))) return newObj if (_.every(_.isNil, _.at(billFields, newObj))) return newObj
if (_.some(_.isNil, _.at(billFields, newObj))) throw new Error('Missing cassette values') if (_.some(_.isNil, _.at(billFields, newObj))) throw new Error('Missing cassette values')
const bills = [ const billFieldsArr = [
{ {
denomination: newObj.denomination1, denomination: newObj.denomination1,
provisioned: newObj.provisioned1 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)) return _.set('bills', bills, _.omit(billFields, newObj))
} }

View file

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