@accounter/server
Version:
Accounter GraphQL server
277 lines • 25.2 kB
JavaScript
export default {
name: '2025-01-29T17-31-52.add-counter-account-to-extended-transaction.sql',
run: ({ sql }) => sql `
create or replace view accounter_schema.extended_transactions
(id, charge_id, business_id, currency, debit_date, debit_timestamp, source_debit_date, event_date,
account_id, account_type, amount, current_balance, source_description, source_details, created_at,
updated_at, source_id, source_reference, source_origin, currency_rate, is_fee, charge_type, owner_id,
counter_account)
as
WITH original_transaction AS (SELECT isracard_creditcard_transactions.id::text AS raw_id,
COALESCE(isracard_creditcard_transactions.voucher_number::text,
isracard_creditcard_transactions.voucher_number_ratz::text) AS reference_number,
0 AS currency_rate,
NULL::timestamp without time zone AS debit_timestamp,
'ISRACARD'::text AS origin,
isracard_creditcard_transactions.card AS card_number,
COALESCE(isracard_creditcard_transactions.full_supplier_name_heb,
isracard_creditcard_transactions.full_supplier_name_outbound) AS source_details,
CASE
WHEN isracard_creditcard_transactions.supplier_id IS NOT NULL AND
isracard_creditcard_transactions.supplier_id <> 0
THEN isracard_creditcard_transactions.supplier_id::TEXT
ELSE isracard_creditcard_transactions.full_supplier_name_outbound END AS counter_account
FROM accounter_schema.isracard_creditcard_transactions
UNION
SELECT amex_creditcard_transactions.id::text AS raw_id,
COALESCE(amex_creditcard_transactions.voucher_number::text,
amex_creditcard_transactions.voucher_number_ratz::text) AS reference_number,
0 AS currency_rate,
NULL::timestamp without time zone AS debit_timestamp,
'AMEX'::text AS origin,
amex_creditcard_transactions.card AS card_number,
COALESCE(amex_creditcard_transactions.full_supplier_name_heb,
amex_creditcard_transactions.full_supplier_name_outbound) AS source_details,
CASE
WHEN amex_creditcard_transactions.supplier_id IS NOT NULL AND
amex_creditcard_transactions.supplier_id <> 0
THEN amex_creditcard_transactions.supplier_id::TEXT
ELSE amex_creditcard_transactions.full_supplier_name_outbound END AS counter_account
FROM accounter_schema.amex_creditcard_transactions
UNION
SELECT max_creditcard_transactions.id::text AS raw_id,
max_creditcard_transactions.arn AS reference_number,
max_creditcard_transactions.deal_data_exchange_rate AS currency_rate,
max_creditcard_transactions.payment_date +
max_creditcard_transactions.deal_data_purchase_time AS debit_timestamp,
'MAX'::text AS origin,
max_creditcard_transactions.short_card_number::integer AS card_number,
concat_ws(' | '::text, max_creditcard_transactions.merchant_name,
max_creditcard_transactions.merchant_commercial_name,
max_creditcard_transactions.comments) AS source_details,
CASE
WHEN max_creditcard_transactions.merchant_tax_id IS NOT NULL AND
max_creditcard_transactions.merchant_tax_id <> ''
THEN max_creditcard_transactions.merchant_tax_id
ELSE max_creditcard_transactions.merchant_name END AS counter_account
FROM accounter_schema.max_creditcard_transactions
UNION
SELECT poalim_ils_account_transactions.id::text AS id,
poalim_ils_account_transactions.reference_number::text AS reference_number,
0 AS currency_rate,
NULL::timestamp without time zone AS debit_timestamp,
'POALIM'::text AS origin,
NULL::integer AS card_number,
poalim_ils_account_transactions.beneficiary_details_data_message_detail AS source_details,
CASE
WHEN poalim_ils_account_transactions.contra_account_number IS NOT NULL AND
poalim_ils_account_transactions.contra_account_number <> 0 THEN CONCAT(
poalim_ils_account_transactions.contra_bank_number, '-',
poalim_ils_account_transactions.contra_branch_number, '-',
poalim_ils_account_transactions.contra_account_number) END AS counter_account
FROM accounter_schema.poalim_ils_account_transactions
UNION
SELECT poalim_eur_account_transactions.id::text AS id,
poalim_eur_account_transactions.reference_number::text AS reference_number,
poalim_eur_account_transactions.currency_rate,
NULL::timestamp without time zone AS debit_timestamp,
'POALIM'::text AS origin,
NULL::integer AS card_number,
poalim_eur_account_transactions.event_details AS source_details,
CASE
WHEN poalim_eur_account_transactions.contra_account_number IS NOT NULL AND
poalim_eur_account_transactions.contra_account_number <> 0 THEN CONCAT(
poalim_eur_account_transactions.contra_bank_number, '-',
poalim_eur_account_transactions.contra_branch_number, '-',
poalim_eur_account_transactions.contra_account_number) END AS counter_account
FROM accounter_schema.poalim_eur_account_transactions
UNION
SELECT poalim_gbp_account_transactions.id::text AS id,
poalim_gbp_account_transactions.reference_number::text AS reference_number,
poalim_gbp_account_transactions.currency_rate,
NULL::timestamp without time zone AS debit_timestamp,
'POALIM'::text AS origin,
NULL::integer AS card_number,
poalim_gbp_account_transactions.event_details AS source_details,
CASE
WHEN poalim_gbp_account_transactions.contra_account_number IS NOT NULL AND
poalim_gbp_account_transactions.contra_account_number <> 0 THEN CONCAT(
poalim_gbp_account_transactions.contra_bank_number, '-',
poalim_gbp_account_transactions.contra_branch_number, '-',
poalim_gbp_account_transactions.contra_account_number) END AS counter_account
FROM accounter_schema.poalim_gbp_account_transactions
UNION
SELECT poalim_cad_account_transactions.id::text AS id,
poalim_cad_account_transactions.reference_number::text AS reference_number,
poalim_cad_account_transactions.currency_rate,
NULL::timestamp without time zone AS debit_timestamp,
'POALIM'::text AS origin,
NULL::integer AS card_number,
poalim_cad_account_transactions.event_details AS source_details,
CASE
WHEN poalim_cad_account_transactions.contra_account_number IS NOT NULL AND
poalim_cad_account_transactions.contra_account_number <> 0 THEN CONCAT(
poalim_cad_account_transactions.contra_bank_number, '-',
poalim_cad_account_transactions.contra_branch_number, '-',
poalim_cad_account_transactions.contra_account_number) END AS counter_account
FROM accounter_schema.poalim_cad_account_transactions
UNION
SELECT poalim_usd_account_transactions.id::text AS id,
poalim_usd_account_transactions.reference_number::text AS reference_number,
poalim_usd_account_transactions.currency_rate,
NULL::timestamp without time zone AS debit_timestamp,
'POALIM'::text AS origin,
NULL::integer AS card_number,
poalim_usd_account_transactions.event_details AS source_details,
CASE
WHEN poalim_usd_account_transactions.contra_account_number IS NOT NULL AND
poalim_usd_account_transactions.contra_account_number <> 0 THEN CONCAT(
poalim_usd_account_transactions.contra_bank_number, '-',
poalim_usd_account_transactions.contra_branch_number, '-',
poalim_usd_account_transactions.contra_account_number) END AS counter_account
FROM accounter_schema.poalim_usd_account_transactions
UNION
SELECT poalim_swift_account_transactions.id::text AS id,
poalim_swift_account_transactions.reference_number,
0,
NULL::timestamp without time zone AS debit_timestamp,
'POALIM'::text AS origin,
NULL::integer AS card_number,
poalim_swift_account_transactions.charge_party_name AS source_details,
'SWIFT' AS counter_account
FROM accounter_schema.poalim_swift_account_transactions
UNION
SELECT kraken_ledger_records.ledger_id,
kraken_ledger_records.ledger_id,
CASE
WHEN kraken_trades.price IS NOT NULL THEN 1::numeric / kraken_trades.price
ELSE 0::numeric
END AS currency_rate,
kraken_ledger_records.value_date AS debit_timestamp,
'KRAKEN'::text AS origin,
NULL::integer AS card_number,
CONCAT(kraken_ledger_records.account_nickname, '_',
kraken_ledger_records.action_type) AS source_details,
CASE
WHEN accounter_schema.kraken_ledger_records.action_type = 'trade'
THEN 'KRAKEN' END AS counter_account
FROM accounter_schema.kraken_ledger_records
LEFT JOIN accounter_schema.kraken_trades
ON kraken_ledger_records.trade_ref_id = kraken_trades.trade_id
UNION
SELECT etana_account_transactions.transaction_id,
etana_account_transactions.transaction_id,
0,
NULL::timestamp without time zone AS debit_timestamp,
'ETANA'::text AS origin,
NULL::integer AS card_number,
etana_account_transactions.description AS source_details,
CASE WHEN etana_account_transactions.action_type = 'fee' THEN 'ETANA' END AS counter_account
FROM accounter_schema.etana_account_transactions
UNION
SELECT etherscan_transactions.id::text AS id,
etherscan_transactions.transaction_hash,
0,
etherscan_transactions.event_date AS debit_timestamp,
'ETHERSCAN'::text AS origin,
NULL::integer AS card_number,
CONCAT(etherscan_transactions.from_address, ' TO ',
etherscan_transactions.to_address) AS source_details,
CASE
WHEN etherscan_transactions.wallet_address =
etherscan_transactions.from_address THEN etherscan_transactions.to_address
ELSE etherscan_transactions.from_address END AS counter_account
FROM accounter_schema.etherscan_transactions
UNION
SELECT cal_creditcard_transactions.id::text AS id,
cal_creditcard_transactions.trn_int_id AS reference_number,
0 AS currency_rate,
NULL::timestamp without time zone AS debit_timestamp,
'CAL'::text AS origin,
cal_creditcard_transactions.card AS card_number,
cal_creditcard_transactions.merchant_name AS source_details,
COALESCE(cal_creditcard_transactions.merchant_id,
cal_creditcard_transactions.merchant_name) AS counter_account
FROM accounter_schema.cal_creditcard_transactions
UNION
SELECT bank_discount_transactions.id::text AS id,
bank_discount_transactions.urn AS reference_number,
0 AS currency_rate,
NULL::timestamp without time zone AS debit_timestamp,
'BANK_DISCOUNT'::text AS origin,
NULL::integer AS card_number,
bank_discount_transactions.operation_description AS source_details,
CASE
WHEN bank_discount_transactions.operation_number IS NOT NULL AND
bank_discount_transactions.operation_number <> 0 THEN CONCAT(
bank_discount_transactions.operation_bank, '-',
bank_discount_transactions.operation_branch, '-',
bank_discount_transactions.operation_number) END AS counter_account
FROM accounter_schema.bank_discount_transactions),
alt_debit_date AS (SELECT p.event_date,
p.reference_number
FROM accounter_schema.poalim_ils_account_transactions p
WHERE p.activity_type_code = 491
ORDER BY p.event_date DESC)
SELECT DISTINCT ON (t.id) t.id,
t.charge_id,
t.business_id,
t.currency,
CASE
WHEN (original_transaction.origin = 'ISRACARD'::text OR
original_transaction.origin = 'AMEX'::text) AND
t.currency = 'ILS'::accounter_schema.currency AND t.debit_date IS NULL AND
t.debit_date_override IS NULL THEN alt_debit_date.event_date
ELSE COALESCE(t.debit_date_override, t.debit_date)
END AS debit_date,
original_transaction.debit_timestamp,
t.debit_date AS source_debit_date,
t.event_date,
t.account_id,
a.type AS account_type,
t.amount,
t.current_balance,
t.source_description,
original_transaction.source_details,
t.created_at,
t.updated_at,
original_transaction.raw_id AS source_id,
original_transaction.reference_number AS source_reference,
original_transaction.origin AS source_origin,
original_transaction.currency_rate,
CASE
WHEN f.id IS NULL THEN false
ELSE true
END AS is_fee,
c.type AS charge_type,
c.owner_id,
CONCAT(original_transaction.counter_account, CASE
WHEN (f.id IS NULL OR
original_transaction.counter_account IS NULL OR
original_transaction.counter_account =
'') THEN ''
ELSE '_fee'
END)::varchar as counter_account
FROM accounter_schema.transactions t
LEFT JOIN accounter_schema.transactions_raw_list rt ON t.source_id = rt.id
LEFT JOIN accounter_schema.charges c ON c.id = t.charge_id
LEFT JOIN accounter_schema.financial_accounts a ON a.id = t.account_id
LEFT JOIN accounter_schema.transactions_fees f ON f.id = t.id
LEFT JOIN original_transaction ON original_transaction.raw_id =
COALESCE(rt.creditcard_id::text, rt.poalim_ils_id::text,
rt.poalim_eur_id::text, rt.poalim_gbp_id::text,
rt.poalim_swift_id::text, rt.poalim_usd_id::text, rt.kraken_id,
rt.etana_id, rt.etherscan_id::text, rt.amex_id::text,
rt.cal_id::text, rt.bank_discount_id::text, rt.poalim_cad_id::text,
rt.max_creditcard_id::text)
LEFT JOIN alt_debit_date ON alt_debit_date.reference_number = original_transaction.card_number AND
alt_debit_date.event_date > t.event_date AND
alt_debit_date.event_date < (t.event_date + '40 days'::interval) AND
alt_debit_date.event_date = ((SELECT min(add.event_date) AS min
FROM alt_debit_date add
WHERE add.reference_number = original_transaction.card_number
AND add.event_date > t.event_date
AND add.event_date < (t.event_date + '40 days'::interval)));
`,
};
//# sourceMappingURL=2025-01-29T17-31-52.add-counter-account-to-extended-transaction.js.map