DatabaseCreation: 01 Customer subscription overview.sql

File 01 Customer subscription overview.sql, 2.4 KB (added by 231139, 10 days ago)
Line 
1DROP VIEW IF EXISTS public.v_customer_subscription_overview;
2
3CREATE VIEW public.v_customer_subscription_overview AS
4SELECT
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
34FROM public.customers c
35JOIN public.accounts a ON a.customer_id = c.customer_id
36LEFT JOIN public.billing_cycles bc ON bc.billing_cycle_id = a.billing_cycle_id
37JOIN public.subscriptions s ON s.account_id = a.account_id
38JOIN public.plans p ON p.plan_id = s.plan_id
39LEFT JOIN public.contracts con ON con.contract_id = s.contract_id
40LEFT 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
49LEFT 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
58LEFT 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