feat: receive numberOfCassettes from machine

feat: save numberOfCassettes on devices table
feat: make CashCassettes dynamic with the number of cassettes
This commit is contained in:
Sérgio Salgado 2021-09-02 15:37:10 +01:00
parent 0a3b78f75e
commit 6d6c8adabd
6 changed files with 41 additions and 83 deletions

View file

@ -25,6 +25,7 @@ function getMachines () {
cassette2: r.cassette2,
cassette3: r.cassette3,
cassette4: r.cassette4,
numberOfCassettes: r.number_of_cassettes,
version: r.version,
model: r.model,
pairedAt: new Date(r.created),

View file

@ -79,6 +79,7 @@ const typeDefs = gql`
cassette2: Int
cassette3: Int
cassette4: Int
numberOfCassettes: Int
statuses: [MachineStatus]
latestEvent: MachineEvent
downloadSpeed: String

View file

@ -20,16 +20,16 @@ function unpair (deviceId) {
return Promise.all([db.none(sql, [deviceId]), db.none(deleteMachinePings, [deviceId])])
}
function pair (token, deviceId, machineModel) {
function pair (token, deviceId, machineModel, numOfCassettes) {
return pullToken(token)
.then(r => {
if (r.expired) return false
const insertSql = `insert into devices (device_id, name) values ($1, $2)
const insertSql = `insert into devices (device_id, name, number_of_cassettes) values ($1, $2, $3)
on conflict (device_id)
do update set paired=TRUE, display=TRUE`
return db.none(insertSql, [deviceId, r.name])
return db.none(insertSql, [deviceId, r.name, numOfCassettes])
.then(() => true)
})
.catch(err => {

View file

@ -58,6 +58,7 @@ function checkHasLightning (settings) {
function poll (req, res, next) {
const machineVersion = req.query.version
const machineModel = req.query.model
const numOfCassettes = req.query.numOfCassettes
const deviceId = req.deviceId
const deviceTime = req.deviceTime
const serialNumber = req.query.sn
@ -417,8 +418,9 @@ function pair (req, res, next) {
const token = req.query.token
const deviceId = req.deviceId
const model = req.query.model
const numOfCassettes = req.query.numOfCassettes
return pairing.pair(token, deviceId, model)
return pairing.pair(token, deviceId, model, numOfCassettes)
.then(valid => {
if (valid) {
return res.json({ status: 'paired' })

View file

@ -10,7 +10,8 @@ exports.up = function (next) {
'ALTER TABLE cash_out_txs ADD COLUMN provisioned_3 INTEGER',
'ALTER TABLE cash_out_txs ADD COLUMN provisioned_4 INTEGER',
'ALTER TABLE cash_out_txs ADD COLUMN denomination_3 INTEGER',
'ALTER TABLE cash_out_txs ADD COLUMN denomination_4 INTEGER'
'ALTER TABLE cash_out_txs ADD COLUMN denomination_4 INTEGER',
'ALTER TABLE devices ADD COLUMN number_of_cassettes INTEGER NOT NULL DEFAULT 2'
]
return Promise.all([loadLatest(), getMachines()])

View file

@ -61,6 +61,7 @@ const GET_MACHINES_AND_CONFIG = gql`
cassette2
cassette3
cassette4
numberOfCassettes
}
config
}
@ -160,87 +161,39 @@ const CashCassettes = () => {
inputProps: {
decimalPlaces: 0
}
},
{
name: 'cassette1',
header: 'Cassette 1',
width: 265,
stripe: true,
view: (value, { id }) => (
<CashOut
className={classes.cashbox}
denomination={getCashoutSettings(id)?.cassette1}
currency={{ code: fiatCurrency }}
notes={value}
/>
),
input: CashCassetteInput,
inputProps: {
decimalPlaces: 0
}
},
{
name: 'cassette2',
header: 'Cassette 2',
width: 265,
stripe: true,
view: (value, { id }) => {
return (
<CashOut
className={classes.cashbox}
denomination={getCashoutSettings(id)?.cassette2}
currency={{ code: fiatCurrency }}
notes={value}
/>
)
},
input: CashCassetteInput,
inputProps: {
decimalPlaces: 0
}
},
{
name: 'cassette3',
header: 'Cassette 3',
width: 265,
stripe: true,
view: (value, { id }) => {
return (
<CashOut
className={classes.cashbox}
denomination={getCashoutSettings(id)?.cassette3}
currency={{ code: fiatCurrency }}
notes={value}
/>
)
},
input: CashCassetteInput,
inputProps: {
decimalPlaces: 0
}
},
{
name: 'cassette4',
header: 'Cassette 4',
width: 265,
stripe: true,
view: (value, { id }) => {
return (
<CashOut
className={classes.cashbox}
denomination={getCashoutSettings(id)?.cassette4}
currency={{ code: fiatCurrency }}
notes={value}
/>
)
},
input: CashCassetteInput,
inputProps: {
decimalPlaces: 0
}
}
]
R.until(
R.gt(R.__, Math.max(...R.map(it => it.numberOfCassettes, machines))),
it => {
elements.push({
name: `cassette${it}`,
header: `Cassette ${it}`,
width: 265,
stripe: true,
view: (value, { id, numberOfCassettes }) => {
return it > numberOfCassettes ? (
<></>
) : (
<CashOut
className={classes.cashbox}
denomination={getCashoutSettings(id)?.[`cassette${it}`]}
currency={{ code: fiatCurrency }}
notes={value}
/>
)
},
input: CashCassetteInput,
inputProps: {
decimalPlaces: 0
}
})
return R.add(1, it)
},
1
)
return (
<>
<TitleSection title="Cash Cassettes" />