refactor: simplify bills query building

This commit is contained in:
siiky 2025-06-23 15:27:56 +01:00
parent e83e74f9d1
commit 1331aad0ac

View file

@ -3,39 +3,42 @@ 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 WHERE = conds => (conds ? 'WHERE ' + conds : '')
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 getBills = filters => {
const deviceIDCondition = !_.isNil(filters.deviceId)
? `device_id = ${pgp.as.text(filters.deviceId)}`
: ''
const batchIDCondition = getBatchIDCondition(filters.batch)
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}
WHERE ${AND(deviceIDCondition)}
) AS cit
ON cit.id = b.cash_in_txs_id
${batchStatement(filters.batch)}
${_.isNil(batchStatement(filters.batch)) ? `WHERE` : `AND`}
b.destination_unit = 'cashbox'`
WHERE ${AND(batchIDCondition, "b.destination_unit = 'cashbox'")}`
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)}`}`
${WHERE(AND(deviceIDCondition, batchIDCondition))}`
return Promise.all([db.any(sql), db.any(sql2)]).then(
([bills, operationalBills]) =>