@accounter/server
Version:
Accounter GraphQL server
104 lines (97 loc) • 4.04 kB
JavaScript
export default {
name: '2026-07-08T17-00-00.poalim-ils-trigger-fix.sql',
run: ({ sql }) => sql `
create or replace function accounter_schema.insert_poalim_ils_transaction_handler() returns trigger
language plpgsql
as
$$
DECLARE
merged_id UUID;
account_id_var UUID;
owner_id_var UUID;
charge_id_var UUID = NULL;
is_conversion BOOLEAN = false;
is_fee BOOLEAN = false;
BEGIN
-- Create merged raw transactions record:
INSERT INTO accounter_schema.transactions_raw_list (poalim_ils_id)
VALUES (NEW.id)
RETURNING id INTO merged_id;
-- get account and owner IDs
SELECT INTO account_id_var, owner_id_var id,
owner
FROM accounter_schema.financial_accounts
WHERE account_number = NEW.account_number::TEXT;
-- handle conversions
IF (NEW.text_code IN (22, 23, 861, 863)) THEN
is_conversion = true;
-- check if matching charge exists:
SELECT t.charge_id
INTO charge_id_var
FROM (SELECT currency, id, reference_number, reference_catenated_number, value_date, event_amount
FROM accounter_schema.poalim_foreign_account_transactions
WHERE activity_type_code IN (884, 957, 1058, 1966)) AS s
LEFT JOIN accounter_schema.transactions_raw_list tr
ON COALESCE(tr.poalim_ils_id, tr.poalim_foreign_id) = s.id
LEFT JOIN accounter_schema.transactions t
ON tr.id = t.source_id
WHERE t.charge_id IS NOT NULL
AND t.owner_id = owner_id_var
AND s.reference_number = NEW.reference_number
AND s.reference_catenated_number = NEW.reference_catenated_number
AND s.value_date = NEW.value_date;
END IF;
-- if no match, create new charge
IF (charge_id_var IS NULL) THEN
INSERT INTO accounter_schema.charges (owner_id, type)
VALUES (owner_id_var,
CASE WHEN is_conversion IS TRUE THEN 'CONVERSION'::accounter_schema.charge_type END)
RETURNING id INTO charge_id_var;
END IF;
-- check if new record is fee
IF (
(new.activity_type_code = 452 AND new.text_code IN (105, 547))
OR (new.activity_type_code = 473 AND new.text_code IN (378, 395, 437, 502, 602, 603, 716, 771, 774))
OR (new.activity_type_code = 471 AND new.text_code IN (615, 617))
) THEN
is_fee = true;
END IF;
-- create new transaction
INSERT INTO accounter_schema.transactions (account_id, charge_id, source_id, source_description, currency,
event_date, debit_date, amount, current_balance, source_reference,
source_origin, counter_account, is_fee, origin_key, owner_id)
VALUES (account_id_var,
charge_id_var,
merged_id,
concat_ws(' ',
new.activity_description,
new.beneficiary_details_data_party_name,
new.beneficiary_details_data_message_detail,
new.english_action_desc
),
'ILS',
new.event_date::text::date,
new.event_date::text::date,
(CASE
WHEN new.event_activity_type_code = 2 THEN (new.event_amount * -1)
ELSE new.event_amount END
),
new.current_balance,
new.reference_number::text,
'POALIM',
CASE
WHEN new.contra_account_number <> 0 THEN concat(
new.contra_bank_number, '-',
new.contra_branch_number, '-',
new.contra_account_number)
ELSE NULL::text
END,
is_fee,
NEW.id,
owner_id_var);
RETURN NEW;
END;
$$;
`,
};
//# sourceMappingURL=2026-07-08T17-00-00.poalim-ils-trigger-fix.js.map