| 1 | DROP VIEW IF EXISTS public.v_customer_subscription_overview;
|
|---|
| 2 |
|
|---|
| 3 | CREATE VIEW public.v_customer_subscription_overview AS
|
|---|
| 4 | SELECT
|
|---|
| 5 | c.customer_id,
|
|---|
| 6 | CASE
|
|---|
| 7 | WHEN c.customer_type = 'business' THEN c.company_name || ' (' || c.first_name || ' ' || c.last_name || ')'
|
|---|
| 8 | ELSE c.first_name || ' ' || c.last_name
|
|---|
| 9 | END AS customer_name,
|
|---|
| 10 | c.customer_type,
|
|---|
| 11 | c.email,
|
|---|
| 12 | a.account_id,
|
|---|
| 13 | a.account_number,
|
|---|
| 14 | a.account_status,
|
|---|
| 15 | a.current_balance,
|
|---|
| 16 | bc.cycle_name AS billing_cycle,
|
|---|
| 17 | s.subscription_id,
|
|---|
| 18 | s.subscription_number,
|
|---|
| 19 | s.status AS subscription_status,
|
|---|
| 20 | s.activation_date,
|
|---|
| 21 | s.end_date,
|
|---|
| 22 | p.plan_name,
|
|---|
| 23 | p.monthly_fee,
|
|---|
| 24 | con.contract_number,
|
|---|
| 25 | con.contract_type,
|
|---|
| 26 | con.status AS contract_status,
|
|---|
| 27 | current_sim.msisdn,
|
|---|
| 28 | current_sim.sim_type,
|
|---|
| 29 | current_device.manufacturer AS device_manufacturer,
|
|---|
| 30 | current_device.model AS device_model,
|
|---|
| 31 | current_device.device_type,
|
|---|
| 32 | COALESCE(active_addons.recurring_addon_charge, 0) AS recurring_addon_charge,
|
|---|
| 33 | p.monthly_fee + COALESCE(active_addons.recurring_addon_charge, 0) AS total_monthly_recurring_charge
|
|---|
| 34 | FROM public.customers c
|
|---|
| 35 | JOIN public.accounts a ON a.customer_id = c.customer_id
|
|---|
| 36 | LEFT JOIN public.billing_cycles bc ON bc.billing_cycle_id = a.billing_cycle_id
|
|---|
| 37 | JOIN public.subscriptions s ON s.account_id = a.account_id
|
|---|
| 38 | JOIN public.plans p ON p.plan_id = s.plan_id
|
|---|
| 39 | LEFT JOIN public.contracts con ON con.contract_id = s.contract_id
|
|---|
| 40 | LEFT JOIN LATERAL (
|
|---|
| 41 | SELECT sc.msisdn, sc.sim_type
|
|---|
| 42 | FROM public.sim_card_subscription_history ssh
|
|---|
| 43 | JOIN public.sim_cards sc ON sc.sim_id = ssh.sim_id
|
|---|
| 44 | WHERE ssh.subscription_id = s.subscription_id
|
|---|
| 45 | AND ssh.end_date IS NULL
|
|---|
| 46 | ORDER BY ssh.start_date DESC
|
|---|
| 47 | LIMIT 1
|
|---|
| 48 | ) current_sim ON TRUE
|
|---|
| 49 | LEFT JOIN LATERAL (
|
|---|
| 50 | SELECT d.manufacturer, d.model, d.device_type
|
|---|
| 51 | FROM public.device_assignments da
|
|---|
| 52 | JOIN public.devices d ON d.device_id = da.device_id
|
|---|
| 53 | WHERE da.subscription_id = s.subscription_id
|
|---|
| 54 | AND da.assigned_to IS NULL
|
|---|
| 55 | ORDER BY da.assigned_from DESC
|
|---|
| 56 | LIMIT 1
|
|---|
| 57 | ) current_device ON TRUE
|
|---|
| 58 | LEFT JOIN LATERAL (
|
|---|
| 59 | SELECT SUM(sa.price_at_activation) AS recurring_addon_charge
|
|---|
| 60 | FROM public.subscription_addons sa
|
|---|
| 61 | JOIN public.addons ad ON ad.addon_id = sa.addon_id
|
|---|
| 62 | WHERE sa.subscription_id = s.subscription_id
|
|---|
| 63 | AND sa.status = 'active'
|
|---|
| 64 | AND sa.deactivation_date IS NULL
|
|---|
| 65 | AND ad.is_recurring
|
|---|
| 66 | ) active_addons ON TRUE;
|
|---|
| 67 |
|
|---|