| 1 | DROP VIEW IF EXISTS public.v_customer_payment_history;
|
|---|
| 2 |
|
|---|
| 3 | CREATE VIEW public.v_customer_payment_history AS
|
|---|
| 4 | SELECT
|
|---|
| 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
|
|---|
| 28 | FROM public.customers c
|
|---|
| 29 | JOIN public.accounts a ON a.customer_id = c.customer_id
|
|---|
| 30 | JOIN public.payments pay ON pay.account_id = a.account_id
|
|---|
| 31 | LEFT JOIN public.invoices i ON i.invoice_id = pay.invoice_id
|
|---|
| 32 | LEFT JOIN public.payment_methods pm ON pm.payment_method_id = pay.payment_method_id;
|
|---|
| 33 |
|
|---|