| 1 | DROP PROCEDURE IF EXISTS public.proc_suspend_overdue_accounts();
|
|---|
| 2 | DROP PROCEDURE IF EXISTS public.proc_suspend_overdue_accounts(date);
|
|---|
| 3 |
|
|---|
| 4 | CREATE PROCEDURE public.proc_suspend_overdue_accounts(p_as_of_date date DEFAULT CURRENT_DATE)
|
|---|
| 5 | LANGUAGE plpgsql
|
|---|
| 6 | AS $$
|
|---|
| 7 | DECLARE
|
|---|
| 8 | v_invoices_marked integer;
|
|---|
| 9 | v_accounts_suspended integer;
|
|---|
| 10 | v_subscriptions_suspended integer;
|
|---|
| 11 | BEGIN
|
|---|
| 12 | UPDATE public.invoices i
|
|---|
| 13 | SET status = 'overdue'
|
|---|
| 14 | WHERE i.status IN ('issued', 'partially_paid')
|
|---|
| 15 | AND i.due_date < p_as_of_date
|
|---|
| 16 | AND public.fn_get_invoice_remaining_balance(i.invoice_id) > 0.01;
|
|---|
| 17 | GET DIAGNOSTICS v_invoices_marked = ROW_COUNT;
|
|---|
| 18 |
|
|---|
| 19 | UPDATE public.accounts a
|
|---|
| 20 | SET account_status = 'suspended'
|
|---|
| 21 | WHERE a.account_status = 'active'
|
|---|
| 22 | AND EXISTS (
|
|---|
| 23 | SELECT 1 FROM public.invoices i
|
|---|
| 24 | WHERE i.account_id = a.account_id
|
|---|
| 25 | AND i.status = 'overdue'
|
|---|
| 26 | AND public.fn_get_invoice_remaining_balance(i.invoice_id) > 0.01
|
|---|
| 27 | );
|
|---|
| 28 | GET DIAGNOSTICS v_accounts_suspended = ROW_COUNT;
|
|---|
| 29 |
|
|---|
| 30 | PERFORM set_config('app.change_reason', 'Suspended automatically because account has overdue debt', true);
|
|---|
| 31 | UPDATE public.subscriptions s
|
|---|
| 32 | SET status = 'suspended'
|
|---|
| 33 | WHERE s.status = 'active'
|
|---|
| 34 | AND EXISTS (
|
|---|
| 35 | SELECT 1 FROM public.accounts a
|
|---|
| 36 | WHERE a.account_id = s.account_id AND a.account_status = 'suspended'
|
|---|
| 37 | );
|
|---|
| 38 | GET DIAGNOSTICS v_subscriptions_suspended = ROW_COUNT;
|
|---|
| 39 |
|
|---|
| 40 | RAISE NOTICE '% invoice(s) marked overdue, % account(s) and % subscription(s) suspended.',
|
|---|
| 41 | v_invoices_marked, v_accounts_suspended, v_subscriptions_suspended;
|
|---|
| 42 | END;
|
|---|
| 43 | $$;
|
|---|
| 44 |
|
|---|