DatabaseProgramming: 02 Outstanding customer balance.sql

File 02 Outstanding customer balance.sql, 658 bytes (added by 231139, 10 days ago)
Line 
1CREATE OR REPLACE FUNCTION public.fn_get_customer_outstanding_balance(p_customer_id bigint)
2RETURNS numeric
3LANGUAGE sql
4STABLE
5AS $$
6 SELECT GREATEST(COALESCE(SUM(invoice_balance), 0), 0)
7 FROM (
8 SELECT i.invoice_id,
9 i.total_amount - COALESCE(SUM(p.amount) FILTER (WHERE p.status = 'completed'), 0) AS invoice_balance
10 FROM public.accounts a
11 JOIN public.invoices i ON i.account_id = a.account_id
12 LEFT JOIN public.payments p ON p.invoice_id = i.invoice_id
13 WHERE a.customer_id = p_customer_id
14 AND i.status <> 'cancelled'
15 GROUP BY i.invoice_id, i.total_amount
16 ) balances;
17$$;
18
19