diff --git a/lib/machine-loader.js b/lib/machine-loader.js index eb4f1a34..e5a933ac 100644 --- a/lib/machine-loader.js +++ b/lib/machine-loader.js @@ -238,8 +238,49 @@ function emptyMachineUnits ({ deviceId, newUnits, fiatCode }) { }) } -function refillMachineUnits ({deviceId, newUnits}) { - return Promise.resolve() +function refillMachineUnits ({ deviceId, newUnits }) { + return getMachine(deviceId) + .then(machine => { + const movedBills = _.reduce( + (acc, value) => ({ + ...acc, + [value]: { + operationName: `cash-${_.replace(/(stacker)/g, '$1-')(value)}-refill`, + delta: newUnits[value] - machine.cashUnits[value] + } + }), + {}, + _.keys(newUnits) + ) + + const operationNames = _.mapValues(it => it.operationName)(_.filter(it => Math.abs(it.delta) > 0)(_.omit(['cassette1', 'cassette2', 'cassette3', 'cassette4'], movedBills))) + const operationsToCreate = _.map(it => ({ + id: uuid.v4(), + device_id: deviceId, + operation_type: it + }))(operationNames) + + return db.tx(t => { + const q1Cols = ['id', 'device_id', 'operation_type'] + const q1= t.none(pgp.helpers.insert(operationsToCreate, q1Cols, 'cash_unit_operation')) + const q2 = t.none(`UPDATE devices SET cashbox=$1, cassette1=$2, cassette2=$3, cassette3=$4, cassette4=$5, stacker1f=$6, stacker1r=$7, stacker2f=$8, stacker2r=$9, stacker3f=$10, stacker3r=$11 WHERE device_id=$12`, [ + _.defaultTo(machine.cashUnits.cashbox, newUnits.cashbox), + _.defaultTo(machine.cashUnits.cassette1, newUnits.cassette1), + _.defaultTo(machine.cashUnits.cassette2, newUnits.cassette2), + _.defaultTo(machine.cashUnits.cassette3, newUnits.cassette3), + _.defaultTo(machine.cashUnits.cassette4, newUnits.cassette4), + _.defaultTo(machine.cashUnits.stacker1f, newUnits.stacker1f), + _.defaultTo(machine.cashUnits.stacker1r, newUnits.stacker1r), + _.defaultTo(machine.cashUnits.stacker2f, newUnits.stacker2f), + _.defaultTo(machine.cashUnits.stacker2r, newUnits.stacker2r), + _.defaultTo(machine.cashUnits.stacker3f, newUnits.stacker3f), + _.defaultTo(machine.cashUnits.stacker3r, newUnits.stacker3r), + deviceId + ]) + + return t.batch([q1, q2]) + }) + }) } function unpair (rec) { diff --git a/lib/routes/unitsRoutes.js b/lib/routes/unitsRoutes.js index 0a3d240e..b4f2659e 100644 --- a/lib/routes/unitsRoutes.js +++ b/lib/routes/unitsRoutes.js @@ -13,7 +13,7 @@ const emptyUnitUpdateCounts = (req, res, next) => { const refillUnitUpdateCounts = (req, res, next) => { const deviceId = req.deviceId - const newUnits = req.body.newUnits + const { units: newUnits } = req.body return refillMachineUnits({ deviceId, newUnits: newUnits }) .then(() => res.status(200).send({ status: 'OK' }))