diff --git a/lib/customers.js b/lib/customers.js index b92a110d..3757ad7a 100644 --- a/lib/customers.js +++ b/lib/customers.js @@ -451,33 +451,33 @@ function batch () { * @returns {array} Array of customers with it's transactions aggregations */ function getCustomersList (phone = null, name = null, address = null, id = null) { - const sql = `select id, authorized_override, days_suspended, is_suspended, front_camera_path, front_camera_override, + const sql = `SELECT id, authorized_override, days_suspended, is_suspended, front_camera_path, front_camera_override, phone, sms_override, id_card_data, id_card_data_override, id_card_data_expiration, id_card_photo_path, id_card_photo_override, us_ssn, us_ssn_override, sanctions, sanctions_at, - sanctions_override, total_txs, total_spent, created as last_active, fiat as last_tx_fiat, - fiat_code as last_tx_fiat_code, tx_class as last_tx_class - from ( - select c.id, c.authorized_override, - greatest(0, date_part('day', c.suspended_until - now())) as days_suspended, - c.suspended_until > now() as is_suspended, + sanctions_override, total_txs, total_spent, created AS last_active, fiat AS last_tx_fiat, + fiat_code AS last_tx_fiat_code, tx_class AS last_tx_class + FROM ( + SELECT c.id, c.authorized_override, + greatest(0, date_part('day', c.suspended_until - now())) AS days_suspended, + c.suspended_until > now() AS is_suspended, c.front_camera_path, c.front_camera_override, c.phone, c.sms_override, c.id_card_data, c.id_card_data_override, c.id_card_data_expiration, c.id_card_photo_path, c.id_card_photo_override, c.us_ssn, c.us_ssn_override, c.sanctions, c.sanctions_at, c.sanctions_override, t.tx_class, t.fiat, t.fiat_code, t.created, - row_number() over (partition by c.id order by t.created desc) as rn, - sum(case when t.id is not null then 1 else 0 end) over (partition by c.id) as total_txs, - coalesce(sum(t.fiat) over (partition by c.id), 0) as total_spent - from customers c left outer join ( - select 'cashIn' as tx_class, id, fiat, fiat_code, created, customer_id - from cash_in_txs where send_confirmed = true union - select 'cashOut' as tx_class, id, fiat, fiat_code, created, customer_id - from cash_out_txs where confirmed_at is not null) t on c.id = t.customer_id - where c.id != $1 - ) as cl where rn = 1 - and ($3 is null or phone = $3) - and ($4 is null or concat(id_card_data::json->>'firstName', ' ', id_card_data::json->>'lastName') = $4) - and ($5 is null or id_card_data::json->>'address' = $5) - and ($6 is null or id_card_data::json->>'documentNumber' = $6) + row_number() OVER (partition by c.id order by t.created desc) AS rn, + sum(CASE WHEN t.id IS NOT NULL THEN 1 ELSE 0 END) OVER (partition by c.id) AS total_txs, + coalesce(sum(t.fiat) OVER (partition by c.id), 0) AS total_spent + FROM customers c LEFT OUTER JOIN ( + SELECT 'cashIn' AS tx_class, id, fiat, fiat_code, created, customer_id + FROM cash_in_txs WHERE send_confirmed = true UNION + SELECT 'cashOut' AS tx_class, id, fiat, fiat_code, created, customer_id + FROM cash_out_txs WHERE confirmed_at IS NOT NULL) t ON c.id = t.customer_id + WHERE c.id != $1 + ) AS cl WHERE rn = 1 + AND ($3 IS NULL OR phone = $3) + AND ($4 IS NULL OR concat(id_card_data::json->>'firstName', ' ', id_card_data::json->>'lastName') = $4 OR id_card_data::json->>'firstName' = $4 OR id_card_data::json->>'lastName' = $4) + AND ($5 IS NULL OR id_card_data::json->>'address' = $5) + AND ($6 IS NULL OR id_card_data::json->>'documentNumber' = $6) limit $2` return db.any(sql, [ anonymous.uuid, NUM_RESULTS, phone, name, address, id ]) .then(customers => Promise.all(_.map(customer => { diff --git a/lib/new-admin/filters.js b/lib/new-admin/filters.js index ce3bb954..fd9d8f79 100644 --- a/lib/new-admin/filters.js +++ b/lib/new-admin/filters.js @@ -3,7 +3,7 @@ const cashInTx = require('../cash-in/cash-in-tx') const { CASH_OUT_TRANSACTION_STATES } = require('../cash-out/cash-out-helper') function transaction() { - const sql = `SELECT distinct * FROM ( + const sql = `SELECT DISTINCT * FROM ( SELECT 'type' AS type, 'Cash In' AS value UNION SELECT 'type' AS type, 'Cash Out' AS value UNION SELECT 'machine' AS type, name AS value FROM devices d INNER JOIN cash_in_txs t ON d.device_id = t.device_id UNION @@ -28,11 +28,13 @@ function transaction() { } function customer() { - const sql = `select distinct * from ( - select 'phone' as type, phone as value from customers where phone is not null union - select 'name' as type, concat(id_card_data::json->>'firstName', ' ', id_card_data::json->>'lastName') as value from customers where concat(id_card_data::json->>'firstName', ' ', id_card_data::json->>'lastName') is not null union - select 'address' as type, id_card_data::json->>'address' as value from customers where id_card_data::json->>'address' is not null union - select 'id' as type, id_card_data::json->>'documentNumber' as value from customers where id_card_data::json->>'documentNumber' is not null + const sql = `SELECT DISTINCT * FROM ( + SELECT 'phone' AS type, phone AS value FROM customers WHERE phone IS NOT NULL UNION + SELECT 'name' AS type, id_card_data::json->>'firstName' AS value FROM customers WHERE id_card_data::json->>'firstName' IS NOT NULL AND id_card_data::json->>'lastName' IS NULL UNION + SELECT 'name' AS type, id_card_data::json->>'lastName' AS value FROM customers WHERE id_card_data::json->>'firstName' IS NULL AND id_card_data::json->>'lastName' IS NOT NULL UNION + SELECT 'name' AS type, concat(id_card_data::json->>'firstName', ' ', id_card_data::json->>'lastName') AS value FROM customers WHERE id_card_data::json->>'firstName' IS NOT NULL AND id_card_data::json->>'lastName' IS NOT NULL UNION + SELECT 'address' as type, id_card_data::json->>'address' AS value FROM customers WHERE id_card_data::json->>'address' IS NOT NULL UNION + SELECT 'id' AS type, id_card_data::json->>'documentNumber' AS value FROM customers WHERE id_card_data::json->>'documentNumber' IS NOT NULL ) f` return db.any(sql) diff --git a/new-lamassu-admin/src/pages/Customers/Customers.js b/new-lamassu-admin/src/pages/Customers/Customers.js index c597bb85..a6c8a17f 100644 --- a/new-lamassu-admin/src/pages/Customers/Customers.js +++ b/new-lamassu-admin/src/pages/Customers/Customers.js @@ -30,9 +30,14 @@ const GET_CUSTOMER_FILTERS = gql` ` const GET_CUSTOMERS = gql` - { + query configAndCustomers( + $phone: String + $name: String + $address: String + $id: String + ) { config - customers { + customers(phone: $phone, name: $name, address: $address, id: $id) { id idCardData phone @@ -102,6 +107,13 @@ const Customers = () => { id: filtersObject.id }) + console.log({ + phone: filtersObject.phone, + name: filtersObject.name, + address: filtersObject.address, + id: filtersObject.id + }) + refetch && refetch() }