feat: create a new batching function which pairs with machine value updates

refactor: abstract amount of cassettes from the cassette wizard

fix: dashboard cassettes
This commit is contained in:
Sérgio Salgado 2021-11-29 23:24:04 +00:00
parent f14674c4f3
commit ec90776d2a
9 changed files with 180 additions and 105 deletions

View file

@ -1,3 +1,4 @@
const constants = require('./constants')
const db = require('./db')
const _ = require('lodash/fp')
const uuid = require('uuid')
@ -18,6 +19,34 @@ function createCashboxBatch (deviceId, cashboxCount) {
})
}
function updateMachineWithBatch (machineContext, oldCashboxCount) {
const isValidContext = _.has(['deviceId', 'cashbox', 'cassettes'], machineContext)
const isCassetteAmountWithinRange = _.inRange(constants.CASH_OUT_MINIMUM_AMOUNT_OF_CASSETTES, constants.CASH_OUT_MAXIMUM_AMOUNT_OF_CASSETTES + 1, _.size(machineContext.cassettes))
if (!isValidContext && !isCassetteAmountWithinRange)
throw new Error('Insufficient info to create a new cashbox batch')
if (_.isEqual(0, oldCashboxCount)) throw new Error('Cashbox is empty. Cashbox batch could not be created.')
return db.tx(t => {
const deviceId = machineContext.deviceId
const batchId = uuid.v4()
const q1 = t.none(`INSERT INTO cashbox_batches (id, device_id, created, operation_type) VALUES ($1, $2, now(), 'cash-in-empty')`, [batchId, deviceId])
const q2 = t.none(`UPDATE bills SET cashbox_batch_id=$1 FROM cash_in_txs
WHERE bills.cash_in_txs_id = cash_in_txs.id AND
cash_in_txs.device_id = $2 AND
bills.cashbox_batch_id IS NULL`, [batchId, deviceId])
const q3 = t.none(`UPDATE devices SET cashbox=$1, cassette1=$2, cassette2=$3, cassette3=$4, cassette4=$5 WHERE device_id=$6`, [
machineContext.cashbox,
machineContext.cassettes[0],
machineContext.cassettes[1],
machineContext.cassettes[2],
machineContext.cassettes[3],
machineContext.deviceId
])
return t.batch([q1, q2, q3])
})
}
function getBatches () {
const sql = `
SELECT cb.id, cb.device_id, cb.created, cb.operation_type, cb.bill_count_override, cb.performed_by, json_agg(b.*) AS bills
@ -39,4 +68,4 @@ function getBillsByBatchId (id) {
return db.any(sql, [id])
}
module.exports = { createCashboxBatch, getBatches, getBillsByBatchId, editBatchById }
module.exports = { createCashboxBatch, updateMachineWithBatch, getBatches, getBillsByBatchId, editBatchById }

View file

@ -7,6 +7,8 @@ const anonymousCustomer = {
const CASSETTE_MAX_CAPACITY = 500
const CASH_OUT_MINIMUM_AMOUNT_OF_CASSETTES = 2
const CASH_OUT_MAXIMUM_AMOUNT_OF_CASSETTES = 4
const AUTHENTICATOR_ISSUER_ENTITY = 'Lamassu'
const AUTH_TOKEN_EXPIRATION_TIME = '30 minutes'
const REGISTRATION_TOKEN_EXPIRATION_TIME = '30 minutes'
@ -30,5 +32,7 @@ module.exports = {
USER_SESSIONS_TABLE_NAME,
USER_SESSIONS_CLEAR_INTERVAL,
CASH_OUT_DISPENSE_READY,
CONFIRMATION_CODE
CONFIRMATION_CODE,
CASH_OUT_MINIMUM_AMOUNT_OF_CASSETTES,
CASH_OUT_MAXIMUM_AMOUNT_OF_CASSETTES
}

View file

@ -3,6 +3,7 @@ const pgp = require('pg-promise')()
const axios = require('axios')
const uuid = require('uuid')
const batching = require('./cashbox-batches')
const db = require('./db')
const pairing = require('./pairing')
const { checkPings, checkStuckScreen } = require('./notifier')
@ -140,8 +141,15 @@ function emptyCashInBills (rec) {
}
function setCassetteBills (rec) {
const sql = 'update devices set cashbox=$1, cassette1=$2, cassette2=$3, cassette3=$4, cassette4=$5 where device_id=$6'
return db.none(sql, [rec.cashbox, rec.cassettes[0], rec.cassettes[1], rec.cassettes[2], rec.cassettes[3], rec.deviceId])
return db.oneOrNone(`SELECT cashbox FROM devices WHERE device_id=$1 LIMIT 1`, [rec.deviceId])
.then(oldCashboxValue => {
if (_.isNil(oldCashboxValue) || rec.cashbox === oldCashboxValue.cashbox) {
const sql = 'UPDATE devices SET cashbox=$1, cassette1=$2, cassette2=$3, cassette3=$4, cassette4=$5 WHERE device_id=$6'
return db.none(sql, [rec.cashbox, rec.cassettes[0], rec.cassettes[1], rec.cassettes[2], rec.cassettes[3], rec.deviceId])
}
return batching.updateMachineWithBatch({ ...rec, oldCashboxValue })
})
}
function unpair (rec) {

View file

@ -18,7 +18,8 @@ const resolvers = {
machine: (...[, { deviceId }]) => machineLoader.getMachine(deviceId)
},
Mutation: {
machineAction: (...[, { deviceId, action, cashbox, cassette1, cassette2, cassette3, cassette4, newName }, context]) => machineAction({ deviceId, action, cashbox, cassette1, cassette2, cassette3, cassette4, newName }, context)
machineAction: (...[, { deviceId, action, cashbox, cassette1, cassette2, cassette3, cassette4, newName }, context]) =>
machineAction({ deviceId, action, cashbox, cassette1, cassette2, cassette3, cassette4, newName }, context)
}
}