From e2087d0e4d4a1f19465f8c3745a1bd14f945a482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Salgado?= Date: Thu, 23 Dec 2021 16:29:53 +0000 Subject: [PATCH] refactor: unify bill related queries --- .../graphql/resolvers/bill.resolver.js | 4 +- lib/new-admin/graphql/types/bill.type.js | 4 +- lib/new-admin/services/bills.js | 42 ++++++++----------- .../src/pages/Machines/Machines.js | 12 ++++-- .../src/pages/Maintenance/CashCassettes.js | 22 ++++++---- 5 files changed, 40 insertions(+), 44 deletions(-) diff --git a/lib/new-admin/graphql/resolvers/bill.resolver.js b/lib/new-admin/graphql/resolvers/bill.resolver.js index 0745669b..7128332b 100644 --- a/lib/new-admin/graphql/resolvers/bill.resolver.js +++ b/lib/new-admin/graphql/resolvers/bill.resolver.js @@ -2,9 +2,7 @@ const bills = require('../../services/bills') const resolvers = { Query: { - bills: () => bills.getBills(), - looseBills: () => bills.getLooseBills(), - looseBillsByMachine: (...[, { deviceId }]) => bills.getLooseBillsByMachine(deviceId) + bills: (...[, { filters }]) => bills.getBills(filters) } } diff --git a/lib/new-admin/graphql/types/bill.type.js b/lib/new-admin/graphql/types/bill.type.js index 45fcdcbc..143c6407 100644 --- a/lib/new-admin/graphql/types/bill.type.js +++ b/lib/new-admin/graphql/types/bill.type.js @@ -10,9 +10,7 @@ const typeDef = gql` } type Query { - bills: [Bill] @auth - looseBills: [Bill] @auth - looseBillsByMachine(deviceId: ID): [Bill] @auth + bills(filters: JSONObject): [Bill] @auth } ` diff --git a/lib/new-admin/services/bills.js b/lib/new-admin/services/bills.js index 7bd1ffb3..a9cc6c2b 100644 --- a/lib/new-admin/services/bills.js +++ b/lib/new-admin/services/bills.js @@ -1,37 +1,29 @@ const _ = require('lodash/fp') +const pgp = require('pg-promise')() const db = require('../../db') -// Get all bills with device id -const getBills = () => { +const getBills = filters => { + const deviceStatement = !_.isNil(filters.deviceId) ? `WHERE device_id = ${pgp.as.text(filters.deviceId)}` : `` + const batchStatement = filter => { + switch (filter) { + case 'none': + return `WHERE b.cashbox_batch_id IS NULL` + case 'any': + return `WHERE b.cashbox_batch_id IS NOT NULL` + default: + return _.isNil(filter) ? `` : `WHERE 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 - ) AS cit ON cit.id = b.cash_in_txs_id` + SELECT id, device_id FROM cash_in_txs ${deviceStatement} + ) AS cit ON cit.id = b.cash_in_txs_id ${batchStatement(filters.batch)}` return db.any(sql) .then(res => _.map(_.mapKeys(_.camelCase), res)) } -function getLooseBills () { - 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 - ) AS cit ON cit.id = b.cash_in_txs_id WHERE b.cashbox_batch_id IS NULL` - - return db.any(sql) - .then(res => _.map(_.mapKeys(_.camelCase), res)) -} - -function getLooseBillsByMachine (machineId) { - 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 WHERE device_id = $1 - ) AS cit ON cit.id = b.cash_in_txs_id WHERE b.cashbox_batch_id IS NULL` - - return db.any(sql, [machineId]) - .then(res => _.map(_.mapKeys(_.camelCase), res)) -} - module.exports = { - getBills, - getLooseBills, - getLooseBillsByMachine + getBills } diff --git a/new-lamassu-admin/src/pages/Machines/Machines.js b/new-lamassu-admin/src/pages/Machines/Machines.js index c03a483b..8e13a21f 100644 --- a/new-lamassu-admin/src/pages/Machines/Machines.js +++ b/new-lamassu-admin/src/pages/Machines/Machines.js @@ -20,7 +20,7 @@ import styles from './Machines.styles' const useStyles = makeStyles(styles) const GET_INFO = gql` - query getMachine($deviceId: ID!) { + query getMachine($deviceId: ID!, $billFilters: JSONObject) { machine(deviceId: $deviceId) { name deviceId @@ -46,7 +46,7 @@ const GET_INFO = gql` note } } - looseBillsByMachine(deviceId: $deviceId) { + bills(filters: $billFilters) { id fiat deviceId @@ -62,7 +62,11 @@ const Machines = () => { const location = useLocation() const { data, loading, refetch } = useQuery(GET_INFO, { variables: { - deviceId: getMachineID(location.pathname) + deviceId: getMachineID(location.pathname), + billFilters: { + deviceId: getMachineID(location.pathname), + batch: 'none' + } } }) @@ -72,7 +76,7 @@ const Machines = () => { const machine = R.path(['machine'])(data) ?? {} const config = R.path(['config'])(data) ?? {} - const bills = R.path(['looseBillsByMachine'])(data) ?? [] + const bills = R.path(['bills'])(data) ?? [] const machineName = R.path(['name'])(machine) ?? null const machineID = R.path(['deviceId'])(machine) ?? null diff --git a/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js b/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js index 8cac9a6a..294cb13e 100644 --- a/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js +++ b/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js @@ -63,7 +63,7 @@ const ValidationSchema = Yup.object().shape({ }) const GET_MACHINES_AND_CONFIG = gql` - query getData { + query getData($billFilters: JSONObject) { machines { name id: deviceId @@ -75,7 +75,7 @@ const GET_MACHINES_AND_CONFIG = gql` numberOfCassettes } config - looseBills { + bills(filters: $billFilters) { id fiat created @@ -125,7 +125,13 @@ const CashCassettes = () => { const [editingSchema, setEditingSchema] = useState(null) const [selectedRadio, setSelectedRadio] = useState(null) - const { data, loading: dataLoading } = useQuery(GET_MACHINES_AND_CONFIG) + const { data, loading: dataLoading } = useQuery(GET_MACHINES_AND_CONFIG, { + variables: { + billFilters: { + batch: 'none' + } + } + }) const [wizard, setWizard] = useState(false) const [machineId, setMachineId] = useState('') @@ -140,11 +146,9 @@ const CashCassettes = () => { refetchQueries: () => ['getData'] }) - const bills = R.groupBy(bill => bill.deviceId)( - R.path(['looseBills'])(data) ?? [] - ) + const bills = R.groupBy(bill => bill.deviceId)(R.path(['bills'])(data) ?? []) const deviceIds = R.uniq( - R.map(R.prop('deviceId'))(R.path(['looseBills'])(data) ?? []) + R.map(R.prop('deviceId'))(R.path(['bills'])(data) ?? []) ) const cashout = data?.config && fromNamespace('cashOut')(data.config) const locale = data?.config && fromNamespace('locale')(data.config) @@ -209,7 +213,7 @@ const CashCassettes = () => { it.fiat, bills[id]))} + total={R.sum(R.map(it => it.fiat, bills[id] ?? []))} /> ), input: NumberInput, @@ -331,7 +335,7 @@ const CashCassettes = () => { currencyCode={fiatCurrency} machines={machines} config={config} - bills={bills} + bills={R.path(['bills'])(data)} deviceIds={deviceIds} /> {wizard && (