fix: FK blocking unpair and bills tally on admin

This commit is contained in:
Rafael Taranto 2023-08-09 01:46:00 +01:00
parent 0b9a39114b
commit 33200da994
2 changed files with 39 additions and 6 deletions

View file

@ -18,6 +18,21 @@ const fullyFunctionalStatus = { label: 'Fully functional', type: 'success' }
const unresponsiveStatus = { label: 'Unresponsive', type: 'error' } const unresponsiveStatus = { label: 'Unresponsive', type: 'error' }
const stuckStatus = { label: 'Stuck', type: 'error' } const stuckStatus = { label: 'Stuck', type: 'error' }
const MACHINE_WITH_CALCULATED_FIELD_SQL = `
select d.*, emptybills + regularbills as cashbox from devices d
left join (
select count(*) as emptyBills, eub.device_id
from empty_unit_bills eub
where eub.cashbox_batch_id is null
group by eub.device_id
) as nebills on nebills.device_id = d.device_id
left join (
select count(*) as regularBills, cit.device_id from bills b
left join cash_in_txs cit on b.cash_in_txs_id = cit.id
where b.cashbox_batch_id is null and b.destination_unit = 'cashbox'
group by cit.device_id
) as nbills on nbills.device_id = d.device_id`
function toMachineObject (r) { function toMachineObject (r) {
return { return {
deviceId: r.device_id, deviceId: r.device_id,
@ -48,7 +63,8 @@ function toMachineObject (r) {
} }
function getMachines () { function getMachines () {
return db.any('SELECT * FROM devices WHERE display=TRUE ORDER BY created') const sql = `${MACHINE_WITH_CALCULATED_FIELD_SQL} where display=TRUE ORDER BY created`
return db.any(sql)
.then(rr => rr.map(toMachineObject)) .then(rr => rr.map(toMachineObject))
} }
@ -123,7 +139,8 @@ function getMachineName (machineId) {
} }
function getMachine (machineId, config) { function getMachine (machineId, config) {
const sql = 'SELECT * FROM devices WHERE device_id=$1' const sql = `${MACHINE_WITH_CALCULATED_FIELD_SQL} WHERE device_id = $1`
const queryMachine = db.oneOrNone(sql, [machineId]).then(r => { const queryMachine = db.oneOrNone(sql, [machineId]).then(r => {
if (r === null) throw new ApolloError('Resource doesn\'t exist', 'NOT_FOUND') if (r === null) throw new ApolloError('Resource doesn\'t exist', 'NOT_FOUND')
else return toMachineObject(r) else return toMachineObject(r)
@ -223,8 +240,7 @@ function emptyMachineUnits ({ deviceId, newUnits, fiatCode }) {
const q1= t.none(pgp.helpers.insert(operationsToCreate, q1Cols, 'cash_unit_operation')) const q1= t.none(pgp.helpers.insert(operationsToCreate, q1Cols, 'cash_unit_operation'))
const q2Cols = ['id', 'fiat', 'fiat_code', 'device_id'] const q2Cols = ['id', 'fiat', 'fiat_code', 'device_id']
const q2 = t.none(pgp.helpers.insert(billArr, q2Cols, 'empty_unit_bills')) const q2 = t.none(pgp.helpers.insert(billArr, q2Cols, 'empty_unit_bills'))
const q3 = 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`, [ const q3 = t.none(`UPDATE devices SET cassette1=$1, cassette2=$2, cassette3=$3, cassette4=$4, stacker1f=$5, stacker1r=$6, stacker2f=$7, stacker2r=$8, stacker3f=$9, stacker3r=$10 WHERE device_id=$11`, [
_.defaultTo(machine.cashUnits.cashbox, newUnits.cashbox),
_.defaultTo(machine.cashUnits.cassette1, newUnits.cassette1), _.defaultTo(machine.cashUnits.cassette1, newUnits.cassette1),
_.defaultTo(machine.cashUnits.cassette2, newUnits.cassette2), _.defaultTo(machine.cashUnits.cassette2, newUnits.cassette2),
_.defaultTo(machine.cashUnits.cassette3, newUnits.cassette3), _.defaultTo(machine.cashUnits.cassette3, newUnits.cassette3),
@ -273,8 +289,7 @@ function refillMachineUnits ({ deviceId, newUnits }) {
return db.tx(t => { return db.tx(t => {
const q1Cols = ['id', 'device_id', 'operation_type'] const q1Cols = ['id', 'device_id', 'operation_type']
const q1= t.none(pgp.helpers.insert(operationsToCreate, q1Cols, 'cash_unit_operation')) 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`, [ const q2 = t.none(`UPDATE devices SET cassette1=$1, cassette2=$2, cassette3=$3, cassette4=$4, stacker1f=$5, stacker1r=$6, stacker2f=$7, stacker2r=$8, stacker3f=$9, stacker3r=$10 WHERE device_id=$11`, [
_.defaultTo(machine.cashUnits.cashbox, newUnits.cashbox),
_.defaultTo(machine.cashUnits.cassette1, newUnits.cassette1), _.defaultTo(machine.cashUnits.cassette1, newUnits.cassette1),
_.defaultTo(machine.cashUnits.cassette2, newUnits.cassette2), _.defaultTo(machine.cashUnits.cassette2, newUnits.cassette2),
_.defaultTo(machine.cashUnits.cassette3, newUnits.cassette3), _.defaultTo(machine.cashUnits.cassette3, newUnits.cassette3),

View file

@ -0,0 +1,18 @@
const db = require('./db')
exports.up = function (next) {
var sql = [
'ALTER TABLE empty_unit_bills ALTER COLUMN device_id TYPE TEXT, ALTER COLUMN device_id SET NOT NULL',
'ALTER TABLE empty_unit_bills DROP CONSTRAINT empty_unit_bills_device_id_fkey',
'ALTER TABLE devices DROP COLUMN cashbox',
'CREATE INDEX ON empty_unit_bills (cashbox_batch_id)',
'CREATE INDEX ON bills (cashbox_batch_id)',
'CREATE INDEX ON bills (destination_unit)',
]
db.multi(sql, next)
}
exports.down = function (next) {
next()
}