Skip to content

Instantly share code, notes, and snippets.

@honzapav
Last active September 9, 2024 06:02
Show Gist options
  • Save honzapav/ddba080869a4bc68fba23cc7f0e051a8 to your computer and use it in GitHub Desktop.
Save honzapav/ddba080869a4bc68fba23cc7f0e051a8 to your computer and use it in GitHub Desktop.
WITH user_contact_details AS (
SELECT
ucd.user_id,
MAX(CASE WHEN ucd.type = 'email' THEN ucd.value ELSE NULL END) AS user_contact_detail_email,
MAX(CASE WHEN ucd.type = 'phone' THEN ucd.value ELSE NULL END) AS user_contact_detail_phone
FROM
user_contact_detail ucd
GROUP BY
ucd.user_id
)
SELECT DISTINCT
-- business_case Columns
bc.id AS business_case_id,
bc.auction_id AS business_case_auction_id,
bc.user_id AS business_case_user_id,
bc.product_id AS business_case_product_id,
bc.supply_point_id AS business_case_supply_point_id,
bc.supplier_id AS business_case_old_supplier_id, -- supplier ID for historic business cases
bc.billing_details_id AS business_case_billing_details_id,
bc.is_locked AS business_case_is_locked,
bc.supplier_contract_id AS business_case_supplier_contract_id,
TO_CHAR(bc.supplier_contract_valid_from, 'DD. MM. YYYY HH24:MI') AS business_case_supplier_contract_valid_from,
TO_CHAR(bc.supply_end_date, 'DD. MM. YYYY') AS business_case_supply_end_date,
TO_CHAR(bc.supply_start_date, 'DD. MM. YYYY') AS business_case_supply_start_date,
TO_CHAR(bc.current_commitment_end_date, 'DD. MM. YYYY') AS business_case_current_commitment_end_date,
bc.supplier_product_name AS business_case_supplier_product_name,
bc.supplier_customer_id AS business_case_supplier_customer_id,
bc.dpi_active AS business_case_dpi_active,
bc.new_supply_point AS business_case_new_supply_point,
bc.customer_change AS business_case_customer_change,
bc.last_customer_type AS business_case_last_customer_type,
bc.last_customer_first_name AS business_case_last_customer_first_name,
bc.last_customer_last_name AS business_case_last_customer_last_name,
bc.last_customer_birth_date AS business_case_last_customer_birth_date,
bc.last_customer_registration_no AS business_case_last_customer_registration_no,
bc.last_customer_company AS business_case_last_customer_company,
bc.last_customer_street AS business_case_last_customer_street,
bc.last_customer_street_no AS business_case_last_customer_street_no,
bc.last_customer_city AS business_case_last_customer_city,
bc.last_customer_zip AS business_case_last_customer_zip,
bc.last_customer_country AS business_case_last_customer_country,
bc.last_customer_died AS business_case_last_customer_died,
bc.last_customer_death_certificate_document_id AS business_case_last_customer_death_certificate_document_id,
bc.last_customer_contact_phone AS business_case_last_customer_contact_phone,
bc.last_customer_contact_email AS business_case_last_customer_contact_email,
bc.transfer_meter_count_vt AS business_case_transfer_meter_count_vt,
bc.transfer_meter_count_nt AS business_case_transfer_meter_count_nt,
bc.transfer_meter_count_gas AS business_case_transfer_meter_count_gas,
bc.transfer_meter_level_document_id AS business_case_transfer_meter_level_document_id,
bc.relationship_document_id AS business_case_relationship_document_id,
bc.transfer_comment AS business_case_transfer_comment,
bc.supply_revision_document_id AS business_case_supply_revision_document_id,
bc.distributor_contract_document_id AS business_case_distributor_contract_document_id,
bc.new_supply_comment AS business_case_new_supply_comment,
bc.last_contract_notice_given AS business_case_last_contract_notice_given,
bc.last_contract_notice_accepted AS business_case_last_contract_notice_accepted,
bc.last_contract_acceptance_document_id AS business_case_last_contract_acceptance_document_id,
bc.last_supplier_id AS business_case_last_supplier_id,
bc.last_supplier_text AS business_case_last_supplier_text,
bc.last_billing_document_id AS business_case_last_billing_document_id,
TO_CHAR(bc.last_contract_commitment_date, 'DD. MM. YYYY') AS business_case_last_contract_commitment_date,
bc.last_contract_comment AS business_case_last_contract_comment,
bc.notice_attorney_document_id AS business_case_notice_attorney_document_id,
bc.circuit_breaker_amps AS business_case_circuit_breaker_amps,
bc.customer_consumption_plan_gas AS business_case_customer_consumption_plan_gas,
bc.customer_consumption_plan_vt AS business_case_customer_consumption_plan_vt,
bc.customer_consumption_plan_nt AS business_case_customer_consumption_plan_nt,
bc.payment_method AS business_case_payment_method,
bc.sipo_number AS business_case_sipo_number,
bc.bank_account_number AS business_case_bank_account_number,
bc.advance_payment_amount AS business_case_advance_payment_amount,
bc.auction_cancelled AS business_case_auction_cancelled,
TO_CHAR(bc.auction_cancelled_at, 'DD. MM. YYYY HH24:MI') AS business_case_auction_cancelled_at,
bc.auction_cancel_reason AS business_case_auction_cancel_reason,
bc.auction_cancel_comment AS business_case_auction_cancel_comment,
bc.contact_phone AS business_case_contact_phone,
bc.contact_email AS business_case_contact_email,
bc.created_by AS business_case_created_by,
TO_CHAR(bc.created_at, 'DD. MM. YYYY HH24:MI') AS business_case_created_at,
bc.last_updated_by AS business_case_last_updated_by,
bc.rate_id AS business_case_rate_id,
bc.supplier_contract_status AS business_case_supplier_contract_status,
bc.note AS business_case_note,
bc.status AS business_case_status,
TO_CHAR(bc.last_updated_at, 'DD. MM. YYYY HH24:MI') AS business_case_last_updated_at,
bc.has_continuous_metering AS business_case_has_continuous_metering,
bc.has_pv AS business_case_has_pv,
bc.is_hidden AS business_case_is_hidden,
bc.sms_otp_id AS business_case_sms_otp_id,
bc.transfer_meter_level_document2_id AS business_case_transfer_meter_level_document2_id,
bc.auction_cancel_otp_id AS business_case_auction_cancel_otp_id,
bc.circuit_breaker AS business_case_circuit_breaker,
TO_CHAR(bc.date_user_finally_submitted, 'DD. MM. YYYY HH24:MI') AS business_case_date_user_finally_submitted,
bc.bypass_customer_type_checks AS business_case_bypass_customer_type_checks,
-- business_case_billing_detail Columns
bcd.id AS business_case_billing_detail_id,
bcd.customer_type AS business_case_billing_detail_customer_type,
bcd.company_name AS business_case_billing_detail_company_name,
bcd.registration_no AS business_case_billing_detail_registration_no,
bcd.street AS business_case_billing_detail_street,
bcd.street_no AS business_case_billing_detail_street_no,
bcd.city AS business_case_billing_detail_city,
bcd.zip AS business_case_billing_detail_zip,
bcd.country AS business_case_billing_detail_country,
bcd.first_name AS business_case_billing_detail_first_name,
bcd.last_name AS business_case_billing_detail_last_name,
bcd.national_id AS business_case_billing_detail_national_id,
TO_CHAR(NULLIF(bcd.birth_date, '')::date, 'DD. MM. YYYY') AS business_case_billing_detail_birth_date,
TO_CHAR(bcd.created_at, 'DD. MM. YYYY HH24:MI') AS business_case_billing_detail_created_at,
TO_CHAR(bcd.last_updated_at, 'DD. MM. YYYY HH24:MI') AS business_case_billing_detail_last_updated_at,
bcd.original_id AS business_case_billing_detail_original_id,
bcd.migrated_from_previous_data AS business_case_billing_detail_migrated_from_previous_data,
bcd.vat_number AS business_case_billing_detail_vat_number,
bcd.is_vat_payer AS business_case_billing_detail_is_vat_payer,
bcd.self_employed AS business_case_billing_detail_self_employed,
bcd.responsible_person_first_name AS business_case_billing_detail_responsible_person_first_name,
bcd.responsible_person_last_name AS business_case_billing_detail_responsible_person_last_name,
bcd.responsible_person_role AS business_case_billing_detail_responsible_person_role,
-- supply_point Columns
sp.id AS supply_point_id,
sp.commodity AS supply_point_commodity,
sp.ean_eic AS supply_point_ean_eic,
sp.distributor_id AS supply_point_distributor_id,
sp.street AS supply_point_street,
sp.street_no AS supply_point_street_no,
sp.city AS supply_point_city,
sp.zip AS supply_point_zip,
sp.country AS supply_point_country,
TO_CHAR(sp.created_at, 'DD. MM. YYYY HH24:MI') AS supply_point_created_at,
TO_CHAR(sp.last_updated_at, 'DD. MM. YYYY HH24:MI') AS supply_point_last_updated_at,
sp.is_locked AS supply_point_is_locked,
-- rate Columns
rate.name AS rate_name,
rate.customer_type AS rate_customer_type,
rate.commodity AS rate_commodity,
rate.label AS rate_label,
rate.multitariff AS rate_multitariff,
-- user Columns
us.id AS user_id,
us.first_name AS user_first_name,
us.last_name AS user_last_name,
us.marketing_consent AS user_marketing_consent,
us.terms_consent AS user_terms_consent,
TO_CHAR(us.marketing_consent_at, 'DD. MM. YYYY HH24:MI') AS user_marketing_consent_at,
TO_CHAR(us.terms_consent_at, 'DD. MM. YYYY HH24:MI') AS user_terms_consent_at,
TO_CHAR(us.last_logged_at, 'DD. MM. YYYY HH24:MI') AS user_last_logged_at,
TO_CHAR(us.created_at, 'DD. MM. YYYY HH24:MI') AS user_created_at,
TO_CHAR(us.last_updated_at, 'DD. MM. YYYY HH24:MI') AS user_last_updated_at,
us.marketing_consent_request_dismissed AS user_marketing_consent_request_dismissed,
-- user_contact_detail Columns
ucd.user_contact_detail_email,
ucd.user_contact_detail_phone,
-- product Columns
prod.name AS product_name,
-- supplier_last Columns
suplast.name AS last_supplier_name,
-- supplier_hist Columns
suphist.name AS hist_supplier_name,
-- supplier_product Columns
supprod.name AS product_supplier_name,
-- current supplier resolution
COALESCE(supprod.name, suphist.name) AS current_supplier
FROM
business_case bc
LEFT JOIN
business_case_billing_detail bcd ON bc.billing_details_id = bcd.id
LEFT JOIN
supply_point sp ON bc.supply_point_id = sp.id
LEFT JOIN
rate ON bc.rate_id = rate.id
LEFT JOIN
"user" us ON bc.user_id = us.id
LEFT JOIN
user_contact_details ucd ON us.id = ucd.user_id
LEFT JOIN
product prod ON bc.product_id = prod.id
LEFT JOIN
supplier suplast ON bc.last_supplier_id = suplast.id -- last supplier before if transfer
LEFT JOIN
supplier suphist ON bc.supplier_id = suphist.id -- historical business cases supplir
LEFT JOIN
supplier supprod ON prod.supplier_id = supprod.id
WHERE (bc.created_at >= $1 AND bc.created_at <= $2) AND
bc.status IN (SELECT unnest($3::text[])::tdc_contract_status);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment