Merge pull request #1893 from siiky/fix/lam-1462/exclude-bills-of-unpaired-machines

LAM-1462 fix: exclude bills of unpaired machines
This commit is contained in:
Rafael Taranto 2025-06-24 09:18:13 +01:00 committed by GitHub
commit 25f7bab775
2 changed files with 50 additions and 28 deletions

View file

@ -139,10 +139,9 @@ const CashCassettes = () => {
const timezone = R.path(['config', 'locale_timezone'], data)
const bills = R.groupBy(bill => bill.deviceId)(R.path(['bills'])(data) ?? [])
const deviceIds = R.uniq(
R.map(R.prop('deviceId'))(R.path(['bills'])(data) ?? []),
)
const bills = data?.bills ?? []
const billsByDeviceID = R.groupBy(bill => bill.deviceId)(bills)
const deviceIds = R.keys(billsByDeviceID)
const cashout = data?.config && fromNamespace('cashOut')(data.config)
const locale = data?.config && fromNamespace('locale')(data.config)
const fiatCurrency = locale?.fiatCurrency
@ -195,7 +194,7 @@ const CashCassettes = () => {
const InnerCashUnitDetails = ({ it }) => (
<CashUnitDetails
machine={it}
bills={bills[it.id] ?? []}
bills={billsByDeviceID[it.id] ?? []}
currency={fiatCurrency}
config={config}
/>
@ -291,7 +290,7 @@ const CashCassettes = () => {
currencyCode={fiatCurrency}
machines={machines}
config={config}
bills={R.path(['bills'])(data)}
bills={bills}
deviceIds={deviceIds}
/>
{wizard && (

View file

@ -3,32 +3,55 @@ const pgp = require('pg-promise')()
const db = require('../../db')
const getBills = filters => {
const deviceStatement = !_.isNil(filters.deviceId)
? `WHERE device_id = ${pgp.as.text(filters.deviceId)}`
: ``
const batchStatement = filter => {
const AND = (...clauses) => clauses.filter(clause => !!clause).join(' AND ')
const getBatchIDCondition = filter => {
switch (filter) {
case 'none':
return `WHERE b.cashbox_batch_id IS NULL`
return 'b.cashbox_batch_id IS NULL'
case 'any':
return `WHERE b.cashbox_batch_id IS NOT NULL`
return 'b.cashbox_batch_id IS NOT NULL'
default:
return _.isNil(filter)
? ``
: `WHERE b.cashbox_batch_id = ${pgp.as.text(filter)}`
? ''
: `b.cashbox_batch_id = ${pgp.as.text(filter)}`
}
}
const sql = `SELECT b.id, b.fiat, b.fiat_code, b.created, b.cashbox_batch_id, cit.device_id AS device_id FROM bills b LEFT OUTER JOIN (
SELECT id, device_id FROM cash_in_txs ${deviceStatement}
) AS cit ON cit.id = b.cash_in_txs_id ${batchStatement(filters.batch)} ${_.isNil(batchStatement(filters.batch)) ? `WHERE` : `AND`} b.destination_unit = 'cashbox'`
const getBills = filters => {
const deviceIDCondition = !_.isNil(filters.deviceId)
? `device_id = ${pgp.as.text(filters.deviceId)}`
: ''
const batchIDCondition = getBatchIDCondition(filters.batch)
const sql2 = `SELECT b.id, b.fiat, b.fiat_code, b.created, b.cashbox_batch_id, b.device_id FROM empty_unit_bills b ${deviceStatement} ${!_.isNil(filters.deviceId) && !_.isNil(filters.batch) ? `AND ${_.replace('WHERE', '', batchStatement(filters.batch))}` : `${batchStatement(filters.batch)}`}`
const cashboxBills = `SELECT b.id, b.fiat, b.fiat_code, b.created, b.cashbox_batch_id, cit.device_id AS device_id
FROM bills b
LEFT OUTER JOIN (
SELECT id, device_id
FROM cash_in_txs
WHERE ${AND(
deviceIDCondition,
'device_id NOT IN (SELECT device_id FROM unpaired_devices)',
)}
) AS cit
ON cit.id = b.cash_in_txs_id
WHERE ${AND(
batchIDCondition,
"b.destination_unit = 'cashbox'",
'cit.device_id IS NOT NULL',
)}`
return Promise.all([db.any(sql), db.any(sql2)]).then(
([bills, operationalBills]) =>
_.map(_.mapKeys(_.camelCase), _.concat(bills, operationalBills)),
const recyclerBills = `SELECT b.id, b.fiat, b.fiat_code, b.created, b.cashbox_batch_id, b.device_id
FROM empty_unit_bills b
WHERE ${AND(
deviceIDCondition,
batchIDCondition,
'b.device_id NOT IN (SELECT device_id FROM unpaired_devices)',
)}`
return Promise.all([db.any(cashboxBills), db.any(recyclerBills)]).then(
([cashboxBills, recyclerBills]) =>
[].concat(cashboxBills, recyclerBills).map(_.mapKeys(_.camelCase)),
)
}