DatabaseCreation: 08 Customer payment history.sql

File 08 Customer payment history.sql, 1.3 KB (added by 231139, 10 days ago)
Line 
1DROP VIEW IF EXISTS public.v_customer_payment_history;
2
3CREATE VIEW public.v_customer_payment_history AS
4SELECT
5 c.customer_id,
6 CASE WHEN c.customer_type = 'business' THEN c.company_name ELSE c.first_name || ' ' || c.last_name END AS customer_name,
7 a.account_number,
8 pay.payment_id,
9 pay.payment_date,
10 pay.amount AS paid_amount,
11 pay.status AS payment_status,
12 pm.method_name AS payment_method,
13 pm.provider_name,
14 i.invoice_number,
15 i.issue_date,
16 i.due_date,
17 i.total_amount AS invoice_total,
18 i.status AS invoice_status,
19 SUM(pay.amount) FILTER (WHERE pay.status = 'completed') OVER (
20 PARTITION BY pay.invoice_id ORDER BY pay.payment_date, pay.payment_id
21 ) AS cumulative_completed_payment,
22 GREATEST(
23 i.total_amount - COALESCE(SUM(pay.amount) FILTER (WHERE pay.status = 'completed') OVER (
24 PARTITION BY pay.invoice_id ORDER BY pay.payment_date, pay.payment_id
25 ), 0),
26 0
27 ) AS remaining_after_payment
28FROM public.customers c
29JOIN public.accounts a ON a.customer_id = c.customer_id
30JOIN public.payments pay ON pay.account_id = a.account_id
31LEFT JOIN public.invoices i ON i.invoice_id = pay.invoice_id
32LEFT JOIN public.payment_methods pm ON pm.payment_method_id = pay.payment_method_id;
33