diff --git a/lib/machine-loader.js b/lib/machine-loader.js
index a53fb75c..a7731533 100644
--- a/lib/machine-loader.js
+++ b/lib/machine-loader.js
@@ -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),
diff --git a/lib/new-admin/graphql/schema.js b/lib/new-admin/graphql/schema.js
index 096913d7..a81fbc84 100644
--- a/lib/new-admin/graphql/schema.js
+++ b/lib/new-admin/graphql/schema.js
@@ -79,6 +79,7 @@ const typeDefs = gql`
cassette2: Int
cassette3: Int
cassette4: Int
+ numberOfCassettes: Int
statuses: [MachineStatus]
latestEvent: MachineEvent
downloadSpeed: String
diff --git a/lib/pairing.js b/lib/pairing.js
index 5932878c..00916abe 100644
--- a/lib/pairing.js
+++ b/lib/pairing.js
@@ -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 => {
diff --git a/lib/routes.js b/lib/routes.js
index baee01ea..53c2fdf3 100644
--- a/lib/routes.js
+++ b/lib/routes.js
@@ -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' })
diff --git a/migrations/1630432869178-add-more-cassette-support.js b/migrations/1630432869178-add-more-cassette-support.js
index 3fd0c8d4..efd2e721 100644
--- a/migrations/1630432869178-add-more-cassette-support.js
+++ b/migrations/1630432869178-add-more-cassette-support.js
@@ -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()])
diff --git a/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js b/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js
index 62d043d6..c3cbe641 100644
--- a/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js
+++ b/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js
@@ -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 }) => (
-
- ),
- input: CashCassetteInput,
- inputProps: {
- decimalPlaces: 0
- }
- },
- {
- name: 'cassette2',
- header: 'Cassette 2',
- width: 265,
- stripe: true,
- view: (value, { id }) => {
- return (
-
- )
- },
- input: CashCassetteInput,
- inputProps: {
- decimalPlaces: 0
- }
- },
- {
- name: 'cassette3',
- header: 'Cassette 3',
- width: 265,
- stripe: true,
- view: (value, { id }) => {
- return (
-
- )
- },
- input: CashCassetteInput,
- inputProps: {
- decimalPlaces: 0
- }
- },
- {
- name: 'cassette4',
- header: 'Cassette 4',
- width: 265,
- stripe: true,
- view: (value, { id }) => {
- return (
-
- )
- },
- 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 ? (
+ <>>
+ ) : (
+
+ )
+ },
+ input: CashCassetteInput,
+ inputProps: {
+ decimalPlaces: 0
+ }
+ })
+ return R.add(1, it)
+ },
+ 1
+ )
+
return (
<>