refactor: unify bill related queries
This commit is contained in:
parent
98a2797494
commit
e2087d0e4d
5 changed files with 40 additions and 44 deletions
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
`
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 = () => {
|
|||
<CashIn
|
||||
currency={{ code: fiatCurrency }}
|
||||
notes={value}
|
||||
total={R.sum(R.map(it => 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 && (
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue