refactor: backport new batching function
This commit is contained in:
parent
864e5d2f88
commit
616d2d2915
5 changed files with 48 additions and 29 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
const constants = require('./constants')
|
||||||
const db = require('./db')
|
const db = require('./db')
|
||||||
const _ = require('lodash/fp')
|
const _ = require('lodash/fp')
|
||||||
const uuid = require('uuid')
|
const uuid = require('uuid')
|
||||||
|
|
@ -18,6 +19,32 @@ function createCashboxBatch (deviceId, cashboxCount) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateMachineWithBatch (machineContext, oldCashboxCount) {
|
||||||
|
if (!_.has(['deviceId', 'cashbox', 'cassettes'], machineContext) && !_.inRange(constants.CASH_OUT_MINIMUM_AMOUNT_OF_CASSETTES, constants.CASH_OUT_MAXIMUM_AMOUNT_OF_CASSETTES + 1, _.size(machineContext.cassettes)))
|
||||||
|
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 () {
|
function getBatches () {
|
||||||
const sql = `
|
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
|
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 +66,4 @@ function getBillsByBatchId (id) {
|
||||||
return db.any(sql, [id])
|
return db.any(sql, [id])
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { createCashboxBatch, getBatches, getBillsByBatchId, editBatchById }
|
module.exports = { createCashboxBatch, updateMachineWithBatch, getBatches, getBillsByBatchId, editBatchById }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,13 @@
|
||||||
|
const CASH_OUT_MINIMUM_AMOUNT_OF_CASSETTES = 2
|
||||||
|
const CASH_OUT_MAXIMUM_AMOUNT_OF_CASSETTES = 4
|
||||||
|
|
||||||
const anonymousCustomer = {
|
const anonymousCustomer = {
|
||||||
uuid: '47ac1184-8102-11e7-9079-8f13a7117867',
|
uuid: '47ac1184-8102-11e7-9079-8f13a7117867',
|
||||||
name: 'anonymous'
|
name: 'anonymous'
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {anonymousCustomer}
|
module.exports = {
|
||||||
|
CASH_OUT_MINIMUM_AMOUNT_OF_CASSETTES,
|
||||||
|
CASH_OUT_MAXIMUM_AMOUNT_OF_CASSETTES,
|
||||||
|
anonymousCustomer
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ const pgp = require('pg-promise')()
|
||||||
const axios = require('axios')
|
const axios = require('axios')
|
||||||
const uuid = require('uuid')
|
const uuid = require('uuid')
|
||||||
|
|
||||||
|
const batching = require('./cashbox-batches')
|
||||||
const db = require('./db')
|
const db = require('./db')
|
||||||
const pairing = require('./pairing')
|
const pairing = require('./pairing')
|
||||||
const { checkPings, checkStuckScreen } = require('./notifier')
|
const { checkPings, checkStuckScreen } = require('./notifier')
|
||||||
|
|
@ -139,10 +140,17 @@ function emptyCashInBills (rec) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function setCassetteBills (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.oneOrNone(`SELECT cashbox FROM devices WHERE device_id=$1 LIMIT 1`, [rec.deviceId])
|
||||||
|
.then(oldCashboxValue => {
|
||||||
|
if (_.isNil(oldCashboxValue) || rec.cashbox === oldCashboxValue) {
|
||||||
|
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.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) {
|
function unpair (rec) {
|
||||||
return pairing.unpair(rec.deviceId)
|
return pairing.unpair(rec.deviceId)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -439,7 +439,8 @@ const resolvers = {
|
||||||
bills: () => bills.getBills()
|
bills: () => bills.getBills()
|
||||||
},
|
},
|
||||||
Mutation: {
|
Mutation: {
|
||||||
machineAction: (...[, { deviceId, action, cashbox, cassette1, cassette2, cassette3, cassette4, newName }]) => machineAction({ deviceId, action, cashbox, cassette1, cassette2, cassette3, cassette4, newName }),
|
machineAction: (...[, { deviceId, action, cashbox, cassette1, cassette2, cassette3, cassette4, newName }]) =>
|
||||||
|
machineAction({ deviceId, action, cashbox, cassette1, cassette2, cassette3, cassette4, newName }),
|
||||||
createPairingTotem: (...[, { name }]) => pairing.totem(name),
|
createPairingTotem: (...[, { name }]) => pairing.totem(name),
|
||||||
saveAccounts: (...[, { accounts }]) => settingsLoader.saveAccounts(accounts),
|
saveAccounts: (...[, { accounts }]) => settingsLoader.saveAccounts(accounts),
|
||||||
// resetAccounts: (...[, { schemaVersion }]) => settingsLoader.resetAccounts(schemaVersion),
|
// resetAccounts: (...[, { schemaVersion }]) => settingsLoader.resetAccounts(schemaVersion),
|
||||||
|
|
|
||||||
|
|
@ -112,14 +112,6 @@ const SET_CASSETTE_BILLS = gql`
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
const CREATE_BATCH = gql`
|
|
||||||
mutation createBatch($deviceId: ID, $cashboxCount: Int) {
|
|
||||||
createBatch(deviceId: $deviceId, cashboxCount: $cashboxCount) {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
const CashCassettes = () => {
|
const CashCassettes = () => {
|
||||||
const classes = useStyles()
|
const classes = useStyles()
|
||||||
const [showHistory, setShowHistory] = useState(false)
|
const [showHistory, setShowHistory] = useState(false)
|
||||||
|
|
@ -133,7 +125,6 @@ const CashCassettes = () => {
|
||||||
const [setCassetteBills, { error }] = useMutation(SET_CASSETTE_BILLS, {
|
const [setCassetteBills, { error }] = useMutation(SET_CASSETTE_BILLS, {
|
||||||
refetchQueries: () => ['getData']
|
refetchQueries: () => ['getData']
|
||||||
})
|
})
|
||||||
const [createBatch] = useMutation(CREATE_BATCH)
|
|
||||||
const bills = R.groupBy(bill => bill.deviceId)(R.path(['bills'])(data) ?? [])
|
const bills = R.groupBy(bill => bill.deviceId)(R.path(['bills'])(data) ?? [])
|
||||||
const deviceIds = R.uniq(
|
const deviceIds = R.uniq(
|
||||||
R.map(R.prop('deviceId'))(R.path(['bills'])(data) ?? [])
|
R.map(R.prop('deviceId'))(R.path(['bills'])(data) ?? [])
|
||||||
|
|
@ -145,26 +136,11 @@ const CashCassettes = () => {
|
||||||
...R.map(it => it.numberOfCassettes, machines),
|
...R.map(it => it.numberOfCassettes, machines),
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
const cashboxCounts = R.reduce(
|
|
||||||
(ret, m) => R.assoc(m.id, m.cashbox, ret),
|
|
||||||
{},
|
|
||||||
machines
|
|
||||||
)
|
|
||||||
|
|
||||||
const getCashoutSettings = id => fromNamespace(id)(cashout)
|
const getCashoutSettings = id => fromNamespace(id)(cashout)
|
||||||
const isCashOutDisabled = ({ id }) => !getCashoutSettings(id).active
|
const isCashOutDisabled = ({ id }) => !getCashoutSettings(id).active
|
||||||
|
|
||||||
const onSave = (id, cashbox, cassettes) => {
|
const onSave = (id, cashbox, cassettes) => {
|
||||||
const oldCashboxCount = cashboxCounts[id]
|
|
||||||
if (cashbox < oldCashboxCount) {
|
|
||||||
createBatch({
|
|
||||||
variables: {
|
|
||||||
deviceId: id,
|
|
||||||
cashboxCount: oldCashboxCount
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return setCassetteBills({
|
return setCassetteBills({
|
||||||
variables: {
|
variables: {
|
||||||
action: 'setCassetteBills',
|
action: 'setCassetteBills',
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue