Merged PR 3901: Booking Service Detail improvements
# Description Modifies Booking Service Detail table (int_core__booking_service_detail) with the following improvements: - Considers waiver or deposit service offering as Deposit Management service business type instead of Unknown - Includes Guest Payments (Waivers outside of Waiver PRO, Deposits) as chargeable services - Computes total price of Waiver PRO multiplying base unit price per number of nights # Checklist - [X] The edited models and dependants run properly with production data. - [X] The edited models are sufficiently documented. - [X] The edited models contain PK tests, and I've ran and passed them. - [X] I have checked for DRY opportunities with other models and docs. - [X] I've picked the right materialization for the affected models. # Other - [ ] Check if a full-refresh is required after this PR is merged. Related work items: #25228
This commit is contained in:
parent
5fd69b7101
commit
a51ad3dd69
1 changed files with 79 additions and 17 deletions
|
|
@ -1,4 +1,9 @@
|
||||||
{{ config(materialized="table", unique_key=["id_booking_service_detail"]) }}
|
{{ config(materialized="table", unique_key=["id_booking_service_detail"]) }}
|
||||||
|
|
||||||
|
{% set waiver_or_deposit_offered_but_not_chosen = (
|
||||||
|
"('BASIC DAMAGE DEPOSIT OR WAIVER PLUS')"
|
||||||
|
) %}
|
||||||
|
|
||||||
with
|
with
|
||||||
int_core__booking_to_service as (
|
int_core__booking_to_service as (
|
||||||
select * from {{ ref("int_core__booking_to_service") }}
|
select * from {{ ref("int_core__booking_to_service") }}
|
||||||
|
|
@ -18,14 +23,30 @@ with
|
||||||
select * from {{ ref("int_core__protection_plan_billing_item") }}
|
select * from {{ ref("int_core__protection_plan_billing_item") }}
|
||||||
),
|
),
|
||||||
int_simple_exchange_rates as (select * from {{ ref("int_simple_exchange_rates") }}),
|
int_simple_exchange_rates as (select * from {{ ref("int_simple_exchange_rates") }}),
|
||||||
|
int_core__verification_payments as (
|
||||||
|
select * from {{ ref("int_core__verification_payments", version = 2) }}
|
||||||
|
),
|
||||||
product_service_billing_aggregation as (
|
product_service_billing_aggregation as (
|
||||||
select
|
select
|
||||||
id_booking,
|
psbi.id_booking,
|
||||||
id_product_service,
|
psbi.id_product_service,
|
||||||
sum(amount_in_gbp) as service_total_price_in_gbp,
|
-- The following logic is to fix Waiver Pro being charged per night and not being stored correctly in the database.
|
||||||
min(chargeable_date_utc) as first_chargeable_date_utc,
|
-- To keep in mind, in the product service billing item it currently contains the unit price of the service, while it
|
||||||
max(chargeable_date_utc) as last_chargeable_date_utc
|
-- should already include the total price of the service.
|
||||||
from int_core__product_service_billing_item
|
sum(case
|
||||||
|
when pstp.price_base_unit = 'PER NIGHT'
|
||||||
|
then bts.booking_number_of_nights
|
||||||
|
else 1
|
||||||
|
end * psbi.amount_in_gbp) as service_total_price_in_gbp,
|
||||||
|
min(psbi.chargeable_date_utc) as first_chargeable_date_utc,
|
||||||
|
max(psbi.chargeable_date_utc) as last_chargeable_date_utc
|
||||||
|
from int_core__product_service_billing_item psbi
|
||||||
|
left join
|
||||||
|
int_core__product_service_to_price pstp
|
||||||
|
on psbi.id_product_service_to_price = pstp.id_product_service_to_price
|
||||||
|
left join
|
||||||
|
int_core__booking_to_service bts
|
||||||
|
on psbi.id_product_service_to_price = bts.id_booking_service_detail
|
||||||
group by 1, 2
|
group by 1, 2
|
||||||
),
|
),
|
||||||
protection_plan_billing_aggregation as (
|
protection_plan_billing_aggregation as (
|
||||||
|
|
@ -38,6 +59,25 @@ with
|
||||||
from int_core__protection_plan_billing_item
|
from int_core__protection_plan_billing_item
|
||||||
group by 1, 2
|
group by 1, 2
|
||||||
),
|
),
|
||||||
|
product_service_guest_payment_aggregation as (
|
||||||
|
select
|
||||||
|
bts.id_booking,
|
||||||
|
bts.id_product_service,
|
||||||
|
vp.currency as currency_code,
|
||||||
|
sum(vp.amount_without_taxes_in_txn_currency) as service_total_price_in_local_currency,
|
||||||
|
sum(vp.amount_without_taxes_in_gbp) as service_total_price_in_gbp,
|
||||||
|
min(vp.payment_paid_date_utc) as first_chargeable_date_utc,
|
||||||
|
max(vp.payment_paid_date_utc) as last_chargeable_date_utc
|
||||||
|
from int_core__booking_to_service bts
|
||||||
|
inner join
|
||||||
|
int_core__verification_payments vp
|
||||||
|
on bts.id_verification = vp.id_verification
|
||||||
|
-- We only consider 1) cases in which verification is informed and 2) payments that are paid
|
||||||
|
where bts.id_verification is not null
|
||||||
|
and upper(vp.payment_status) = {{ var("paid_payment_state") }}
|
||||||
|
and bts.id_product_service is not null
|
||||||
|
group by 1, 2, 3
|
||||||
|
),
|
||||||
applied_product_services as (
|
applied_product_services as (
|
||||||
select
|
select
|
||||||
bts.id_booking,
|
bts.id_booking,
|
||||||
|
|
@ -58,11 +98,17 @@ with
|
||||||
pstp.payment_type,
|
pstp.payment_type,
|
||||||
pstp.price_base_unit,
|
pstp.price_base_unit,
|
||||||
pstp.invoicing_trigger,
|
pstp.invoicing_trigger,
|
||||||
pstp.currency_code,
|
-- If the service has a guest payment, we use the currency of the payment.
|
||||||
pstp.amount_local_curr as service_unit_price_local_curr,
|
coalesce(psgpa.currency_code, pstp.currency_code) as currency_code,
|
||||||
psba.service_total_price_in_gbp,
|
coalesce(psgpa.service_total_price_in_local_currency,
|
||||||
psba.first_chargeable_date_utc,
|
pstp.amount_local_curr) as service_unit_price_local_curr,
|
||||||
psba.last_chargeable_date_utc,
|
-- If the service has a guest payment, we use the total price and dates of the payment.
|
||||||
|
coalesce(psgpa.service_total_price_in_gbp,
|
||||||
|
psba.service_total_price_in_gbp) as service_total_price_in_gbp,
|
||||||
|
coalesce(psgpa.first_chargeable_date_utc,
|
||||||
|
psba.first_chargeable_date_utc) as first_chargeable_date_utc,
|
||||||
|
coalesce(psgpa.last_chargeable_date_utc,
|
||||||
|
psba.last_chargeable_date_utc) as last_chargeable_date_utc,
|
||||||
bts.is_missing_host_currency_code as is_missing_currency_code,
|
bts.is_missing_host_currency_code as is_missing_currency_code,
|
||||||
bts.is_booking_cancelled,
|
bts.is_booking_cancelled,
|
||||||
(not pstp.is_default_service) as is_upgraded_service
|
(not pstp.is_default_service) as is_upgraded_service
|
||||||
|
|
@ -78,6 +124,10 @@ with
|
||||||
product_service_billing_aggregation psba
|
product_service_billing_aggregation psba
|
||||||
on bts.id_booking = psba.id_booking
|
on bts.id_booking = psba.id_booking
|
||||||
and bts.id_product_service = psba.id_product_service
|
and bts.id_product_service = psba.id_product_service
|
||||||
|
left join
|
||||||
|
product_service_guest_payment_aggregation psgpa
|
||||||
|
on bts.id_booking = psgpa.id_booking
|
||||||
|
and bts.id_product_service = psgpa.id_product_service
|
||||||
where bts.id_product_service is not null
|
where bts.id_product_service is not null
|
||||||
),
|
),
|
||||||
applied_protection_services as (
|
applied_protection_services as (
|
||||||
|
|
@ -133,8 +183,16 @@ with
|
||||||
bts.booking_check_in_at_utc,
|
bts.booking_check_in_at_utc,
|
||||||
bts.booking_check_out_at_utc,
|
bts.booking_check_out_at_utc,
|
||||||
'PLATFORM' as service_business_scope,
|
'PLATFORM' as service_business_scope,
|
||||||
'UNKNOWN' as service_business_type,
|
case
|
||||||
'UNKNOWN' as service_source,
|
when bts.service_name in {{ waiver_or_deposit_offered_but_not_chosen }}
|
||||||
|
then 'DEPOSIT_MANAGEMENT'
|
||||||
|
else 'UNKNOWN'
|
||||||
|
end as service_business_type,
|
||||||
|
case
|
||||||
|
when bts.service_name in {{ waiver_or_deposit_offered_but_not_chosen }}
|
||||||
|
then 'PRODUCT'
|
||||||
|
else 'UNKNOWN'
|
||||||
|
end as service_source,
|
||||||
bts.service_status,
|
bts.service_status,
|
||||||
bts.booking_status,
|
bts.booking_status,
|
||||||
bts.program_name,
|
bts.program_name,
|
||||||
|
|
@ -149,10 +207,14 @@ with
|
||||||
cast(null as date) as last_chargeable_date_utc,
|
cast(null as date) as last_chargeable_date_utc,
|
||||||
bts.is_missing_host_currency_code as is_missing_currency_code,
|
bts.is_missing_host_currency_code as is_missing_currency_code,
|
||||||
bts.is_booking_cancelled,
|
bts.is_booking_cancelled,
|
||||||
-- This case shouldn't occur, but the current missing
|
-- This case shouldn't occur, but the current missing cases aside of
|
||||||
-- cases are all for Basic Screening which is not an
|
-- Waiver or Deposits being offered but not yet chosen are all for Basic
|
||||||
-- upgraded service.
|
-- Screening which is not an upgraded service.
|
||||||
false as is_upgraded_service
|
case
|
||||||
|
when bts.service_name in {{ waiver_or_deposit_offered_but_not_chosen }}
|
||||||
|
then true
|
||||||
|
else false
|
||||||
|
end as is_upgraded_service
|
||||||
from int_core__booking_to_service bts
|
from int_core__booking_to_service bts
|
||||||
where bts.id_protection_plan is null and bts.id_product_service is null
|
where bts.id_protection_plan is null and bts.id_product_service is null
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue