Merged PR 3646: Adding informative fields in booking tables for New Pricing

# Description

Adds informative fields to New Pricing booking-related tables. These are added into booking_to_service which is a view, and propagated and materialised as table in the `booking_service_detail` and `booking_summary`.

The new fields are:
- Date versions for relevant booking timestamps (Created, Updated, Check-in, Check-out)
- Booking Number of nights
- Ids for the Accommodation and UserProductBundle
- Program Name (aka Product Bundle Name). I dislike the fact that it's named "Product" because you can have Protection Plans in the Program as well... so I opted for a more conventional business-oriented naming, which is Program.

Added a bunch of tests + documentation.

# 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: #20809
This commit is contained in:
Oriol Roqué Paniagua 2024-11-25 15:03:38 +00:00
parent 059c92b345
commit 28114d645e
4 changed files with 170 additions and 2 deletions

View file

@ -53,6 +53,7 @@ with
'PRODUCT' as service_source, 'PRODUCT' as service_source,
bts.service_status, bts.service_status,
bts.booking_status, bts.booking_status,
bts.program_name,
ps.product_service_display_name as service_name, ps.product_service_display_name as service_name,
pstp.payment_type, pstp.payment_type,
pstp.price_base_unit, pstp.price_base_unit,
@ -94,6 +95,7 @@ with
'PROTECTION' as service_source, 'PROTECTION' as service_source,
bts.service_status, bts.service_status,
bts.booking_status, bts.booking_status,
bts.program_name,
pp.protection_display_name as service_name, pp.protection_display_name as service_name,
pptp.payment_type, pptp.payment_type,
pptp.price_base_unit, pptp.price_base_unit,
@ -135,6 +137,7 @@ with
'UNKNOWN' as service_source, 'UNKNOWN' as service_source,
bts.service_status, bts.service_status,
bts.booking_status, bts.booking_status,
bts.program_name,
bts.service_name, bts.service_name,
'UNKNOWN' as payment_type, 'UNKNOWN' as payment_type,
'UNKNOWN' as price_base_unit, 'UNKNOWN' as price_base_unit,
@ -177,6 +180,7 @@ select
service_source, service_source,
service_status, service_status,
booking_status, booking_status,
program_name,
service_name, service_name,
payment_type, payment_type,
price_base_unit, price_base_unit,

View file

@ -10,14 +10,22 @@ with
select select
bts.id_booking, bts.id_booking,
bts.id_verification_request, bts.id_verification_request,
bts.id_accommodation,
bts.id_user_product_bundle,
bts.id_deal, bts.id_deal,
bts.id_user_host, bts.id_user_host,
bts.id_user_guest, bts.id_user_guest,
bts.booking_status, bts.booking_status,
bts.program_name,
bts.booking_created_at_utc, bts.booking_created_at_utc,
bts.booking_created_date_utc,
bts.booking_updated_at_utc, bts.booking_updated_at_utc,
bts.booking_updated_date_utc,
bts.booking_check_in_at_utc, bts.booking_check_in_at_utc,
bts.booking_check_in_date_utc,
bts.booking_check_out_at_utc, bts.booking_check_out_at_utc,
bts.booking_check_out_date_utc,
bts.booking_number_of_nights,
bts.host_currency_code, bts.host_currency_code,
bts.is_user_in_new_dash, bts.is_user_in_new_dash,
bts.new_dash_version, bts.new_dash_version,
@ -101,14 +109,22 @@ inner join
group by group by
bts.id_booking, bts.id_booking,
bts.id_verification_request, bts.id_verification_request,
bts.id_accommodation,
bts.id_user_product_bundle,
bts.id_deal, bts.id_deal,
bts.id_user_host, bts.id_user_host,
bts.id_user_guest, bts.id_user_guest,
bts.booking_status, bts.booking_status,
bts.program_name,
bts.booking_created_at_utc, bts.booking_created_at_utc,
bts.booking_created_date_utc,
bts.booking_updated_at_utc, bts.booking_updated_at_utc,
bts.booking_updated_date_utc,
bts.booking_check_in_at_utc, bts.booking_check_in_at_utc,
bts.booking_check_in_date_utc,
bts.booking_check_out_at_utc, bts.booking_check_out_at_utc,
bts.booking_check_out_date_utc,
bts.booking_number_of_nights,
bts.host_currency_code, bts.host_currency_code,
bts.is_missing_id_deal, bts.is_missing_id_deal,
bts.is_user_in_new_dash, bts.is_user_in_new_dash,

View file

@ -6,10 +6,18 @@ with
stg_core__booking_view as (select * from {{ ref("stg_core__booking_view") }}), stg_core__booking_view as (select * from {{ ref("stg_core__booking_view") }}),
stg_core__booking as (select * from {{ ref("stg_core__booking") }}), stg_core__booking as (select * from {{ ref("stg_core__booking") }}),
stg_core__booking_state as (select * from {{ ref("stg_core__booking_state") }}), stg_core__booking_state as (select * from {{ ref("stg_core__booking_state") }}),
stg_core__booking_to_product_bundle as (
select * from {{ ref("stg_core__booking_to_product_bundle") }}
),
stg_core__user_product_bundle as (
select * from {{ ref("stg_core__user_product_bundle") }}
),
int_core__user_host as (select * from {{ ref("int_core__user_host") }}) int_core__user_host as (select * from {{ ref("int_core__user_host") }})
select select
bv.id_booking, bv.id_booking,
b.id_verification_request, b.id_verification_request,
b.id_accommodation,
btpb.id_user_product_bundle,
bvts.id_booking_view_to_service as id_booking_service_detail, bvts.id_booking_view_to_service as id_booking_service_detail,
bvts.id_verification, bvts.id_verification,
bvts.id_product_service, bvts.id_product_service,
@ -17,6 +25,7 @@ select
uh.id_deal, uh.id_deal,
b.id_user_host, b.id_user_host,
b.id_user_guest, b.id_user_guest,
upb.product_bundle_display_name as program_name,
bvts.service_name, bvts.service_name,
bvts.service_status, bvts.service_status,
upper(bs.booking_state) as booking_status, upper(bs.booking_state) as booking_status,
@ -24,9 +33,14 @@ select
bvts.created_at_utc as service_detail_created_at_utc, bvts.created_at_utc as service_detail_created_at_utc,
bvts.updated_at_utc as service_detail_updated_at_utc, bvts.updated_at_utc as service_detail_updated_at_utc,
b.created_at_utc as booking_created_at_utc, b.created_at_utc as booking_created_at_utc,
b.created_date_utc as booking_created_date_utc,
b.updated_at_utc as booking_updated_at_utc, b.updated_at_utc as booking_updated_at_utc,
b.updated_date_utc as booking_updated_date_utc,
b.check_in_at_utc as booking_check_in_at_utc, b.check_in_at_utc as booking_check_in_at_utc,
b.check_in_date_utc as booking_check_in_date_utc,
b.check_out_at_utc as booking_check_out_at_utc, b.check_out_at_utc as booking_check_out_at_utc,
b.check_out_date_utc as booking_check_out_date_utc,
b.check_out_date_utc - b.check_in_date_utc as booking_number_of_nights,
uh.account_currency_iso4217 as host_currency_code, uh.account_currency_iso4217 as host_currency_code,
uh.is_missing_id_deal, uh.is_missing_id_deal,
uh.is_user_in_new_dash, uh.is_user_in_new_dash,
@ -45,3 +59,10 @@ inner join stg_core__booking_view bv on bvts.id_booking_view = bv.id_booking_vie
left join stg_core__booking b on bv.id_booking = b.id_booking left join stg_core__booking b on bv.id_booking = b.id_booking
left join stg_core__booking_state bs on b.id_booking_state = bs.id_booking_state left join stg_core__booking_state bs on b.id_booking_state = bs.id_booking_state
left join int_core__user_host uh on b.id_user_host = uh.id_user_host left join int_core__user_host uh on b.id_user_host = uh.id_user_host
left join
stg_core__booking_to_product_bundle btpb
on b.id_booking = btpb.id_booking
and btpb.has_no_end_date
left join
stg_core__user_product_bundle upb
on btpb.id_user_product_bundle = upb.id_user_product_bundle

View file

@ -3223,6 +3223,23 @@ models:
The identifier of the verification request. It acts as Foreign Key to The identifier of the verification request. It acts as Foreign Key to
Verification Request table. It can be null. Verification Request table. It can be null.
- name: id_accommodation
data_type: bigint
description:
The identifier of the accommodation or listing. It acts as Foreign Key
to the Accommodation table. It cannot be null.
tests:
- not_null
- name: id_user_product_bundle
data_type: bigint
description:
The identifier of the Product Bundle, or program, that a User has applied
to the Booking. It acts as Foreign Key to the User Product Bundle table.
It cannot be null.
tests:
- not_null
- name: id_verification - name: id_verification
data_type: bigint data_type: bigint
description: | description: |
@ -3259,6 +3276,14 @@ models:
Unique identifier of the user that acts as a Guest. Unique identifier of the user that acts as a Guest.
Can be null if Superhog does not interact with the Guest. Can be null if Superhog does not interact with the Guest.
- name: program_name
data_type: string
description: |
The name of the program, or product bundle, applied to the booking.
Cannot be null.
tests:
- not_null
- name: service_name - name: service_name
data_type: string data_type: string
description: | description: |
@ -3309,6 +3334,13 @@ models:
tests: tests:
- not_null - not_null
- name: booking_created_date_utc
data_type: date
description: |
Date of when the Booking record was created in the Backend.
tests:
- not_null
- name: booking_updated_at_utc - name: booking_updated_at_utc
data_type: timestamp data_type: timestamp
description: | description: |
@ -3316,6 +3348,13 @@ models:
tests: tests:
- not_null - not_null
- name: booking_updated_date_utc
data_type: date
description: |
Date of when the Booking record was last updated in the Backend.
tests:
- not_null
- name: booking_check_in_at_utc - name: booking_check_in_at_utc
data_type: timestamp data_type: timestamp
description: | description: |
@ -3323,6 +3362,13 @@ models:
tests: tests:
- not_null - not_null
- name: booking_check_in_date_utc
data_type: timestamp
description: |
Date of the Check-in of the Booking.
tests:
- not_null
- name: booking_check_out_at_utc - name: booking_check_out_at_utc
data_type: timestamp data_type: timestamp
description: | description: |
@ -3330,6 +3376,18 @@ models:
tests: tests:
- not_null - not_null
- name: booking_check_out_date_utc
data_type: date
description: |
Date of the Check-out of the Booking.
tests:
- not_null
- name: booking_number_of_nights
data_type: integer
description: |
Number of nights between Check-in date and Check-out date.
- name: host_currency_code - name: host_currency_code
data_type: string data_type: string
description: | description: |
@ -3511,6 +3569,14 @@ models:
tests: tests:
- not_null - not_null
- name: program_name
data_type: string
description: |
The name of the program, or product bundle, applied to the booking.
Cannot be null.
tests:
- not_null
- name: service_name - name: service_name
data_type: string data_type: string
description: | description: |
@ -3691,6 +3757,23 @@ models:
The identifier of the verification request. It acts as Foreign Key to The identifier of the verification request. It acts as Foreign Key to
Verification Request table. It can be null. Verification Request table. It can be null.
- name: id_accommodation
data_type: bigint
description:
The identifier of the accommodation or listing. It acts as Foreign Key
to the Accommodation table. It cannot be null.
tests:
- not_null
- name: id_user_product_bundle
data_type: bigint
description:
The identifier of the Product Bundle, or program, that a User has applied
to the Booking. It acts as Foreign Key to the User Product Bundle table.
It cannot be null.
tests:
- not_null
- name: id_deal - name: id_deal
data_type: string data_type: string
description: | description: |
@ -3716,6 +3799,14 @@ models:
tests: tests:
- not_null - not_null
- name: program_name
data_type: string
description: |
The name of the program, or product bundle, applied to the booking.
Cannot be null.
tests:
- not_null
- name: booking_created_at_utc - name: booking_created_at_utc
data_type: timestamp data_type: timestamp
description: | description: |
@ -3724,6 +3815,14 @@ models:
tests: tests:
- not_null - not_null
- name: booking_created_date_utc
data_type: date
description: |
Date of when the Booking record was created in the Backend.
Cannot be null.
tests:
- not_null
- name: booking_updated_at_utc - name: booking_updated_at_utc
data_type: timestamp data_type: timestamp
description: | description: |
@ -3732,6 +3831,14 @@ models:
tests: tests:
- not_null - not_null
- name: booking_updated_date_utc
data_type: date
description: |
Date of when the Booking record was last updated in the Backend.
Cannot be null.
tests:
- not_null
- name: booking_check_in_at_utc - name: booking_check_in_at_utc
data_type: timestamp data_type: timestamp
description: | description: |
@ -3740,14 +3847,34 @@ models:
tests: tests:
- not_null - not_null
- name: booking_check_out_at_utc - name: booking_check_in_date_utc
data_type: timestamp data_type: timestamp
description: | description: |
Timestamp of the Check-out of the Booking. Date of the Check-in of the Booking.
Cannot be null. Cannot be null.
tests: tests:
- not_null - not_null
- name: booking_check_out_at_utc
data_type: timestamp
description: |
Timestamp of the Check-out of the Booking.
Cannot be null.
tests:
- not_null
- name: booking_check_out_date_utc
data_type: date
description: |
Date of the Check-out of the Booking.
tests:
- not_null
- name: booking_number_of_nights
data_type: integer
description: |
Number of nights between Check-in date and Check-out date.
- name: host_currency_code - name: host_currency_code
data_type: string data_type: string
description: | description: |