| 1 | CREATE OR REPLACE FUNCTION public.fn_get_customer_subscription_summary(p_customer_id bigint)
|
|---|
| 2 | RETURNS text
|
|---|
| 3 | LANGUAGE plpgsql
|
|---|
| 4 | STABLE
|
|---|
| 5 | AS $$
|
|---|
| 6 | DECLARE
|
|---|
| 7 | v_active_count integer;
|
|---|
| 8 | v_suspended_count integer;
|
|---|
| 9 | v_closed_count integer;
|
|---|
| 10 | v_monthly_fee numeric;
|
|---|
| 11 | BEGIN
|
|---|
| 12 | IF NOT EXISTS (SELECT 1 FROM public.customers WHERE customer_id = p_customer_id) THEN
|
|---|
| 13 | RETURN format('Customer %s does not exist.', p_customer_id);
|
|---|
| 14 | END IF;
|
|---|
| 15 |
|
|---|
| 16 | SELECT COUNT(*) FILTER (WHERE s.status = 'active'),
|
|---|
| 17 | COUNT(*) FILTER (WHERE s.status = 'suspended'),
|
|---|
| 18 | COUNT(*) FILTER (WHERE s.status IN ('cancelled', 'expired'))
|
|---|
| 19 | INTO v_active_count, v_suspended_count, v_closed_count
|
|---|
| 20 | FROM public.accounts a
|
|---|
| 21 | LEFT JOIN public.subscriptions s ON s.account_id = a.account_id
|
|---|
| 22 | WHERE a.customer_id = p_customer_id;
|
|---|
| 23 |
|
|---|
| 24 | v_monthly_fee := public.fn_get_customer_monthly_recurring_charge(p_customer_id);
|
|---|
| 25 |
|
|---|
| 26 | RETURN format(
|
|---|
| 27 | 'Active subscriptions: %s, Suspended subscriptions: %s, Ended subscriptions: %s, Monthly recurring charge: %s MKD',
|
|---|
| 28 | v_active_count, v_suspended_count, v_closed_count, v_monthly_fee
|
|---|
| 29 | );
|
|---|
| 30 | END;
|
|---|
| 31 | $$;
|
|---|
| 32 |
|
|---|