Merge branch 'lee_build_exchange_rate_fact' into 'main'

Redefine order/cost value formual + Redefine on-time boolean logic

See merge request cief-data/dbt_cloud!35
This commit is contained in:
Yam ZhengLim
2024-03-12 16:23:59 +00:00
11 changed files with 190 additions and 130 deletions
@@ -30,7 +30,7 @@ temp_orders AS (
-- LOGIC -- LOGIC
/* /*
Some order may have multiple same cost status. This is due to the accounting department adjusting the exchange rate. Some order may have multiple same cost status. This is due to the accounting department adjusting the exchange rate.
This is particularly true for the 1688 payment, as exchange rate is amended at a later stage instead of during the initial order placement stage. This is particularly true for the 1688 payment, as the cost rate is amended at a later stage instead of during the initial order placement stage.
Thus, it is to be assumed that the datetime from first repeat occurence as the true datetime. Thus, it is to be assumed that the datetime from first repeat occurence as the true datetime.
*/ */
transaction_cost_status_datetime AS ( transaction_cost_status_datetime AS (
@@ -71,6 +71,7 @@ join_cost_and_logs AS (
transaction_costs.base_to_quote_currency_exchange_rate, transaction_costs.base_to_quote_currency_exchange_rate,
transaction_costs.base_tax, transaction_costs.base_tax,
transaction_costs.base_service_charge, transaction_costs.base_service_charge,
transaction_costs.total_base_value,
transaction_costs.expired_datetime, transaction_costs.expired_datetime,
transaction_costs.deleted_datetime, transaction_costs.deleted_datetime,
transaction_costs.created_datetime, transaction_costs.created_datetime,
@@ -100,6 +101,7 @@ join_cost_and_logs AS (
QUALIFY QUALIFY
row_number_index = 1 row_number_index = 1
), ),
remove_deleted_expired_costs AS ( remove_deleted_expired_costs AS (
@@ -157,6 +159,7 @@ temp_cte_1688_cleaning AS (
remove_system_error_duplicate_row.quote_value, remove_system_error_duplicate_row.quote_value,
remove_system_error_duplicate_row.base_to_quote_currency_exchange_rate, remove_system_error_duplicate_row.base_to_quote_currency_exchange_rate,
remove_system_error_duplicate_row.base_tax, remove_system_error_duplicate_row.base_tax,
remove_system_error_duplicate_row.total_base_value,
remove_system_error_duplicate_row.expired_datetime, remove_system_error_duplicate_row.expired_datetime,
remove_system_error_duplicate_row.deleted_datetime, remove_system_error_duplicate_row.deleted_datetime,
remove_system_error_duplicate_row.created_datetime, remove_system_error_duplicate_row.created_datetime,
@@ -231,6 +234,7 @@ final__int_exchange__transaction_cost_get_latest_cost_ids AS (
base_to_quote_currency_exchange_rate, base_to_quote_currency_exchange_rate,
base_tax, base_tax,
base_service_charge, base_service_charge,
total_base_value,
-- date/times -- date/times
expired_datetime, expired_datetime,
@@ -7,8 +7,10 @@ bookings AS (
SELECT * FROM {{ ref('stg_exchange__bookings') }} SELECT * FROM {{ ref('stg_exchange__bookings') }}
), ),
-- LOGICS -- LOGICS
transaction_orders_join_bookings AS ( transaction_orders_join_bookings AS (
SELECT SELECT
transaction_orders.*, transaction_orders.*,
bookings.user_id bookings.user_id
@@ -17,11 +19,13 @@ transaction_orders_join_bookings AS (
LEFT JOIN bookings LEFT JOIN bookings
ON (transaction_orders.booking_id = bookings.booking_id) ON (transaction_orders.booking_id = bookings.booking_id)
), ),
-- FINAL -- FINAL
final__int_exchange__transaction_orders_get_user_ids AS ( final__int_exchange__transaction_orders_get_user_ids AS (
SELECT SELECT
-- ids -- ids
transaction_order_id, transaction_order_id,
@@ -45,6 +49,7 @@ final__int_exchange__transaction_orders_get_user_ids AS (
base_to_quote_currency_exchange_rate, base_to_quote_currency_exchange_rate,
base_tax, base_tax,
base_service_charge, base_service_charge,
total_base_value,
-- date/times -- date/times
expired_datetime, expired_datetime,
@@ -56,6 +61,7 @@ final__int_exchange__transaction_orders_get_user_ids AS (
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
FROM transaction_orders_join_bookings FROM transaction_orders_join_bookings
) )
SELECT * FROM final__int_exchange__transaction_orders_get_user_ids SELECT * FROM final__int_exchange__transaction_orders_get_user_ids
@@ -27,7 +27,7 @@
-- IMPORT -- IMPORT
WITH orders AS ( WITH orders AS (
SELECT * FROM {{ ref('fct_exchange__transaction_orders') }} SELECT * FROM {{ ref('fct_exchange__transaction_orders') }}
), ),
companies AS ( companies AS (
@@ -190,10 +190,16 @@ fct_and_dim_joins AS (
CASE CASE
{% for (service_type, working_day) in service_type_work_day_dict.items() %} {% for (service_type, working_day) in service_type_work_day_dict.items() %}
WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '{{service_type}}' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) < 16 WHEN
THEN TO_TIMESTAMP(order_created_dates.{{working_day['include_base']}} || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING ) orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '{{service_type}}'
WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '{{service_type}}' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) >= 16 AND
THEN TO_TIMESTAMP(order_created_dates.{{working_day['exclude_base']}} || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING ) DATE_PART(HOUR, orders.order_pending_verification_datetime) < 16
THEN TO_TIMESTAMP(order_created_dates.{{working_day['include_base']}} || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING )
WHEN
orders.order_created_datetime >= '2023-01-01'
AND
orders.service_type = '{{service_type}}' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) >= 16
THEN TO_TIMESTAMP(order_created_dates.{{working_day['exclude_base']}} || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING )
{% endfor %} {% endfor %}
@@ -203,19 +209,21 @@ fct_and_dim_joins AS (
-- On time delivery boolean (CIEF internal SLA) -- On time delivery boolean (CIEF internal SLA)
CASE CASE
-- On-time boolean is null when order is not complete -- On-time boolean is null when order is not complete
WHEN account_verified_payment_datetime IS NULL THEN NULL WHEN service_type IN ('BA') THEN NULL
WHEN estimated_order_delivery_datetime_website_sla IS NULL THEN NULL WHEN transaction_status NOT IN ('UPLOADED_BANK_SLIP') THEN NULL
WHEN estimated_order_delivery_datetime_website_sla > orders.operation_uploaded_bank_slip_datetime THEN 1 WHEN estimated_order_delivery_datetime_website_sla > orders.operation_uploaded_bank_slip_datetime THEN 1
ELSE 0 WHEN estimated_order_delivery_datetime_website_sla < orders.operation_uploaded_bank_slip_datetime THEN 0
ELSE -999
END AS is_on_time_delivery_website_sla, END AS is_on_time_delivery_website_sla,
-- On time delivery boolean (Customer Expectation) -- On time delivery boolean (Customer Expectation)
CASE CASE
-- On-time boolean is null when order is not complete -- On-time boolean is null when order is not complete
WHEN account_verified_payment_datetime IS NULL THEN NULL WHEN service_type IN ('BA') THEN NULL
WHEN estimated_order_delivery_datetime_customer_expectation IS NULL THEN NULL WHEN transaction_status NOT IN ('UPLOADED_BANK_SLIP') THEN NULL
WHEN estimated_order_delivery_datetime_customer_expectation > orders.operation_uploaded_bank_slip_datetime THEN 1 WHEN estimated_order_delivery_datetime_customer_expectation > orders.operation_uploaded_bank_slip_datetime THEN 1
ELSE 0 WHEN estimated_order_delivery_datetime_customer_expectation < orders.operation_uploaded_bank_slip_datetime THEN 0
ELSE -999
END AS is_on_time_delivery_customer_expectation, END AS is_on_time_delivery_customer_expectation,
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
@@ -242,6 +250,7 @@ fct_and_dim_joins AS (
), ),
--FINAL --FINAL
final__rep_exchange__daily_orders AS ( final__rep_exchange__daily_orders AS (
@@ -38,6 +38,7 @@ transaction_orders AS (
-- LOGIC -- LOGIC
count_company_user AS ( count_company_user AS (
SELECT SELECT
company_id, company_id,
COUNT(user_id) AS count_user COUNT(user_id) AS count_user
@@ -45,22 +46,26 @@ count_company_user AS (
FROM companies_brg_users FROM companies_brg_users
GROUP BY company_id GROUP BY company_id
), ),
company_billing_addresses AS ( company_billing_addresses AS (
SELECT SELECT
* *
FROM company_addresses FROM company_addresses
WHERE WHERE
is_billing_address = '1' is_billing_address = 1
), ),
latest_company_upload_identity_documents AS ( latest_company_upload_identity_documents AS (
SELECT SELECT
*, *,
row_number() OVER ROW_NUMBER() OVER
(PARTITION BY company_id (PARTITION BY company_id
ORDER BY created_datetime DESC) AS latest_row_number ORDER BY created_datetime DESC) AS latest_row_number
@@ -69,14 +74,15 @@ latest_company_upload_identity_documents AS (
WHERE WHERE
document_type IN ('IDENTITY_CARD','SSM_REGISTRATION') document_type IN ('IDENTITY_CARD','SSM_REGISTRATION')
AND AND
status = 'APPROVED' status IN ('APPROVED')
QUALIFY QUALIFY
latest_row_number = '1' latest_row_number = 1
), ),
companies_rename_and_join_table AS ( companies_rename_and_join_table AS (
SELECT SELECT
companies.company_id, companies.company_id,
companies.name, companies.name,
@@ -161,19 +167,23 @@ companies_rename_and_join_table AS (
LEFT JOIN currencies LEFT JOIN currencies
ON (company_wallets.currency_id = currencies.currency_id) ON (company_wallets.currency_id = currencies.currency_id)
), ),
lifetime_value AS ( lifetime_value AS (
SELECT SELECT
companies_rename_and_join_table.*, companies_rename_and_join_table.*,
ROUND( ROUND(
ZEROIFNULL(SUM( ZEROIFNULL(SUM(
CASE CASE
WHEN transaction_orders.status in ('COMPLETED', 'APPROVED') WHEN transaction_orders.status IN ('COMPLETED', 'APPROVED')
THEN ( transaction_orders.base_value + transaction_orders.base_tax + transaction_orders.base_service_charge ) THEN transaction_orders.total_base_value
END)) END
,2) AS company_lifetime_value, ))
,2
) AS company_lifetime_value,
CASE CASE
WHEN company_lifetime_value <= {{monetary_list_lifetime[0]}} THEN 1 WHEN company_lifetime_value <= {{monetary_list_lifetime[0]}} THEN 1
@@ -256,6 +266,7 @@ lifetime_value AS (
-- FINAL -- FINAL
final__dim_exchange__companies AS ( final__dim_exchange__companies AS (
SELECT SELECT
-- ids -- ids
company_id, company_id,
@@ -11,6 +11,7 @@ transaction_cost_logs AS (
SELECT * FROM {{ ref('stg_exchange__transaction_cost_logs') }} SELECT * FROM {{ ref('stg_exchange__transaction_cost_logs') }}
), ),
-- LOGICS -- LOGICS
transaction_cost_status_datetime AS ( transaction_cost_status_datetime AS (
@@ -29,6 +30,7 @@ transaction_cost_status_datetime AS (
), ),
transaction_costs_lists AS ( transaction_costs_lists AS (
SELECT SELECT
transaction_costs.transaction_cost_id, transaction_costs.transaction_cost_id,
transaction_costs.transaction_order_id, transaction_costs.transaction_order_id,
@@ -46,23 +48,24 @@ transaction_costs_lists AS (
transaction_costs.base_to_quote_currency_exchange_rate, transaction_costs.base_to_quote_currency_exchange_rate,
transaction_costs.base_tax, transaction_costs.base_tax,
transaction_costs.base_service_charge, transaction_costs.base_service_charge,
transaction_costs.total_base_value,
-- use for future if base currency id other from '1' -- use for future if base currency id other from '1'
IFF(transaction_costs.base_currency_id = '1', IFF(transaction_costs.base_currency_id = '1',
transaction_costs.base_value, transaction_costs.base_value,
-9999999999) AS value_rm, -9999999999) AS value_rm,
-- use for future if base currency id other from '1' -- use for future if base currency id other from '1'
IFF(transaction_costs.base_currency_id = '1', IFF(transaction_costs.base_currency_id = '1',
transaction_costs.base_tax, transaction_costs.base_tax,
-9999999999) AS tax_rm, -9999999999) AS tax_rm,
-- use for future if base currency id other from '1' -- use for future if base currency id other from '1'
IFF(transaction_costs.base_currency_id = '1', IFF(transaction_costs.base_currency_id = '1',
transaction_costs.base_service_charge, transaction_costs.base_service_charge,
-9999999999) AS service_charge_rm, -9999999999) AS service_charge_rm,
(value_rm - service_charge_rm - tax_rm) AS total_value_rm, (value_rm + service_charge_rm + tax_rm) AS total_value_rm,
transaction_costs.expired_datetime, transaction_costs.expired_datetime,
transaction_costs.deleted_datetime, transaction_costs.deleted_datetime,
@@ -70,6 +73,7 @@ transaction_costs_lists AS (
transaction_costs.updated_datetime, transaction_costs.updated_datetime,
transaction_cost_status_datetime.cost_created_datetime, transaction_cost_status_datetime.cost_created_datetime,
{%- for status in cost_status %} {%- for status in cost_status %}
transaction_cost_status_datetime.cost_{{status.lower()}}_datetime, transaction_cost_status_datetime.cost_{{status.lower()}}_datetime,
{% endfor %} {% endfor %}
@@ -80,11 +84,13 @@ transaction_costs_lists AS (
LEFT JOIN transaction_cost_status_datetime LEFT JOIN transaction_cost_status_datetime
ON (transaction_costs.transaction_cost_id = transaction_cost_status_datetime.transaction_cost_id) ON (transaction_costs.transaction_cost_id = transaction_cost_status_datetime.transaction_cost_id)
), ),
-- FINAL -- FINAL
final__fct_exchange__transaction_costs AS ( final__fct_exchange__transaction_costs AS (
SELECT SELECT
-- ids -- ids
transaction_cost_id, transaction_cost_id,
@@ -110,6 +116,7 @@ final__fct_exchange__transaction_costs AS (
value_rm, value_rm,
tax_rm, tax_rm,
service_charge_rm, service_charge_rm,
total_base_value,
total_value_rm, total_value_rm,
-- date/times -- date/times
@@ -129,6 +136,7 @@ final__fct_exchange__transaction_costs AS (
_dbt_ran_datetime _dbt_ran_datetime
FROM transaction_costs_lists FROM transaction_costs_lists
) )
SELECT * FROM final__fct_exchange__transaction_costs SELECT * FROM final__fct_exchange__transaction_costs
@@ -46,16 +46,19 @@ order_logs_join_bookings AS (
SELECT SELECT
transaction_order_logs.*, transaction_order_logs.*,
bookings.service_type, bookings.service_type,
ROW_NUMBER() OVER (PARTITION BY transaction_order_id ROW_NUMBER() OVER (
PARTITION BY transaction_order_id
ORDER BY ORDER BY
transaction_order_logs.updated_datetime DESC, transaction_order_logs.updated_datetime DESC,
transaction_order_logs.transaction_order_id DESC, transaction_order_logs.transaction_order_id DESC,
transaction_order_logs.transaction_order_log_id DESC) AS rank_index transaction_order_logs.transaction_order_log_id DESC
) AS rank_index
FROM transaction_order_logs FROM transaction_order_logs
LEFT JOIN bookings LEFT JOIN bookings
ON (transaction_order_logs.booking_id = bookings.booking_id) ON (transaction_order_logs.booking_id = bookings.booking_id)
), ),
transaction_order_order_status_datetime AS ( transaction_order_order_status_datetime AS (
@@ -69,12 +72,15 @@ transaction_order_order_status_datetime AS (
MIN(created_datetime) AS order_created_datetime, MIN(created_datetime) AS order_created_datetime,
{%- for status in order_status %} {%- for status in order_status %}
{% if status != 'APPROVED' %} {% if status != 'APPROVED' %}
MAX(CASE WHEN status = '{{status}}' THEN updated_datetime END) AS order_{{status.lower()}}_datetime MAX(CASE WHEN status = '{{status}}' THEN updated_datetime END) AS order_{{status.lower()}}_datetime
{% else %} {% else %}
MIN(CASE WHEN status = '{{status}}' THEN updated_datetime END) AS order_{{status.lower()}}_datetime MIN(CASE WHEN status = '{{status}}' THEN updated_datetime END) AS order_{{status.lower()}}_datetime
{% endif %} {% endif %}
{%- if not loop.last %},{% endif -%} {%- if not loop.last %},{% endif -%}
{% endfor %} {% endfor %}
FROM order_logs_join_bookings FROM order_logs_join_bookings
@@ -83,6 +89,7 @@ transaction_order_order_status_datetime AS (
transaction_order_id, transaction_order_id,
payment_method, payment_method,
service_type service_type
), ),
transaction_order_datetime_imputation AS ( transaction_order_datetime_imputation AS (
@@ -96,7 +103,7 @@ transaction_order_datetime_imputation AS (
order_created_datetime AS new_order_created_datetime, order_created_datetime AS new_order_created_datetime,
order_rejected_datetime AS new_order_rejected_datetime, order_rejected_datetime AS new_order_rejected_datetime,
order_suspended_datetime AS new_order_suspended_datetime, order_suspended_datetime AS new_order_suspended_datetime,
order_expired_datetime AS new_order_expired_datetime, order_expired_datetime AS new_order_expired_datetime,
order_refunded_datetime AS new_order_refunded_datetime, order_refunded_datetime AS new_order_refunded_datetime,
-- imputation for ORDER_PENDING_SUBMISSION DATETIME -- imputation for ORDER_PENDING_SUBMISSION DATETIME
@@ -224,44 +231,56 @@ transaction_orders_lists AS (
transaction_orders.bill_number, transaction_orders.bill_number,
transaction_orders.base_value, transaction_orders.base_value,
transaction_orders.quote_value, transaction_orders.quote_value,
transaction_orders.total_base_value,
-- use for future if base currency id other from '1' -- use for future if base currency id other from '1'
IFF(transaction_orders.base_currency_id = '1', IFF(transaction_orders.base_currency_id = '1',
transaction_orders.base_value, transaction_orders.base_value,
-9999999999) AS value_rm, -9999999999) AS base_value_rm,
transaction_orders.base_tax AS base_tax, transaction_orders.base_tax AS base_tax,
-- use for future if base currency id other from '1' -- use for future if base currency id other from '1'
IFF(transaction_orders.base_currency_id = '1', IFF(transaction_orders.base_currency_id = '1',
transaction_orders.base_tax, transaction_orders.base_tax,
-9999999999) AS tax_rm, -9999999999) AS tax_rm,
transaction_orders.base_service_charge, transaction_orders.base_service_charge,
-- use for future if base currency id other from '1' -- use for future if base currency id other from '1'
IFF(transaction_orders.base_currency_id = '1', IFF(transaction_orders.base_currency_id = '1',
transaction_orders.base_service_charge, transaction_orders.base_service_charge,
-9999999999) AS service_charge_rm, -9999999999) AS service_charge_rm,
(value_rm - service_charge_rm - tax_rm) AS total_value_rm, (base_value_rm + service_charge_rm + tax_rm) AS total_base_value_rm,
transaction_orders.expired_datetime AS order_expected_expired_datetime, transaction_orders.expired_datetime AS order_expected_expired_datetime,
transaction_orders.deleted_datetime AS order_deleted_datetime, transaction_orders.deleted_datetime AS order_deleted_datetime,
transaction_orders.updated_datetime AS order_updated_datetime, transaction_orders.updated_datetime AS order_updated_datetime,
{% for column_name in ["company", "user"] %} {% for column_name in ["company", "user"] %}
CASE CASE
WHEN ROW_NUMBER() OVER (PARTITION BY transaction_orders.{{column_name}}_id ORDER BY transaction_orders.created_datetime, transaction_orders.transaction_order_id) = 1 THEN 1 WHEN
ELSE 0 ROW_NUMBER() OVER (
END AS is_first_time_{{column_name}}, PARTITION BY transaction_orders.{{column_name}}_id
ORDER BY
transaction_orders.created_datetime,
transaction_orders.transaction_order_id
) = 1
THEN 1
ELSE 0
END AS is_first_time_{{column_name}},
CASE CASE
WHEN transaction_orders.status = 'COMPLETED' WHEN
AND transaction_orders.status = 'COMPLETED'
MIN(IFF(transaction_orders.status = 'COMPLETED', transaction_orders.created_datetime, NULL)) AND
OVER (PARTITION BY transaction_orders.{{column_name}}_id) MIN(IFF(transaction_orders.status = 'COMPLETED', transaction_orders.created_datetime, NULL)) OVER (
= transaction_orders.created_datetime PARTITION BY transaction_orders.{{column_name}}_id
THEN 1 ) = transaction_orders.created_datetime
ELSE 0 THEN 1
END AS is_first_time_{{column_name}}_completed, ELSE 0
END AS is_first_time_{{column_name}}_completed,
{% endfor %} {% endfor %}
transaction_order_datetime_imputation.new_order_created_datetime AS order_created_datetime, transaction_order_datetime_imputation.new_order_created_datetime AS order_created_datetime,
@@ -271,9 +290,12 @@ transaction_orders_lists AS (
transaction_order_datetime_imputation.new_order_{{status.lower()}}_datetime AS order_{{status.lower()}}_datetime, transaction_order_datetime_imputation.new_order_{{status.lower()}}_datetime AS order_{{status.lower()}}_datetime,
{% endfor %} {% endfor %}
LEAD(transaction_order_datetime_imputation.new_order_created_datetime) OVER LEAD(transaction_order_datetime_imputation.new_order_created_datetime) OVER (
(PARTITION BY company_id ORDER BY transaction_order_datetime_imputation.new_order_created_datetime, PARTITION BY company_id
transaction_order_datetime_imputation.transaction_order_id) AS next_order_created_datetime ORDER BY
transaction_order_datetime_imputation.new_order_created_datetime,
transaction_order_datetime_imputation.transaction_order_id
) AS next_order_created_datetime
FROM transaction_orders FROM transaction_orders
@@ -319,7 +341,7 @@ transaction_costs_lists AS (
base_service_charge, base_service_charge,
-9999999999) AS service_charge_rm, -9999999999) AS service_charge_rm,
(value_rm - service_charge_rm - tax_rm) AS total_value_rm, (value_rm + service_charge_rm + tax_rm) AS total_value_rm,
expired_datetime, expired_datetime,
deleted_datetime, deleted_datetime,
@@ -407,15 +429,17 @@ bookings_orders_costs_join AS (
transaction_orders_lists.is_first_time_company_completed AS is_first_time_order_company_completed, transaction_orders_lists.is_first_time_company_completed AS is_first_time_order_company_completed,
transaction_orders_lists.is_first_time_user AS is_first_time_order_user, transaction_orders_lists.is_first_time_user AS is_first_time_order_user,
transaction_orders_lists.is_first_time_user_completed AS is_first_time_order_user_completed, transaction_orders_lists.is_first_time_user_completed AS is_first_time_order_user_completed,
transaction_orders_lists.base_to_quote_currency_exchange_rate AS order_base_to_quote_currency_exchange_rate ,
transaction_orders_lists.base_value AS order_base_value , transaction_orders_lists.base_to_quote_currency_exchange_rate AS order_base_to_quote_currency_exchange_rate,
transaction_orders_lists.base_service_charge AS order_base_service_charge , transaction_orders_lists.base_value AS order_base_value,
transaction_orders_lists.base_tax AS order_base_tax , transaction_orders_lists.base_service_charge AS order_base_service_charge,
transaction_orders_lists.quote_value AS order_quote_value , transaction_orders_lists.base_tax AS order_base_tax,
transaction_orders_lists.value_rm AS order_value_rm , transaction_orders_lists.quote_value AS order_quote_value,
transaction_orders_lists.service_charge_rm AS order_service_charge_rm , transaction_orders_lists.base_value_rm AS order_value_rm,
transaction_orders_lists.tax_rm AS order_tax_rm , transaction_orders_lists.service_charge_rm AS order_service_charge_rm,
transaction_orders_lists.total_value_rm AS total_order_value_rm, transaction_orders_lists.tax_rm AS order_tax_rm,
transaction_orders_lists.total_base_value_rm AS total_order_value_rm,
transaction_orders_lists.order_created_datetime, transaction_orders_lists.order_created_datetime,
transaction_orders_lists.order_deleted_datetime, transaction_orders_lists.order_deleted_datetime,
transaction_orders_lists.order_pending_submission_datetime, transaction_orders_lists.order_pending_submission_datetime,
@@ -478,6 +502,7 @@ purchase_orders_invoices_join AS (
CASE CASE
WHEN order_status NOT IN ('REJECTED', 'SUSPENDED', 'EXPIRED') THEN purchase_orders.purchase_order_number WHEN order_status NOT IN ('REJECTED', 'SUSPENDED', 'EXPIRED') THEN purchase_orders.purchase_order_number
END AS purchase_order_number, END AS purchase_order_number,
CASE CASE
WHEN order_status NOT IN ('REJECTED', 'SUSPENDED', 'EXPIRED') THEN purchase_orders.status WHEN order_status NOT IN ('REJECTED', 'SUSPENDED', 'EXPIRED') THEN purchase_orders.status
END AS purchase_order_status, END AS purchase_order_status,
@@ -485,6 +510,7 @@ purchase_orders_invoices_join AS (
CASE CASE
WHEN cost_status IN ('APPROVED') THEN invoices.invoice_number WHEN cost_status IN ('APPROVED') THEN invoices.invoice_number
END AS invoice_number, END AS invoice_number,
CASE CASE
WHEN cost_status IN ('APPROVED') THEN invoices.status WHEN cost_status IN ('APPROVED') THEN invoices.status
END AS invoice_status END AS invoice_status
@@ -23,32 +23,36 @@ status AS (
-- LOGIC -- LOGIC
transactions_generate_transaction_log_id AS ( transactions_generate_transaction_log_id AS (
SELECT SELECT
MD5_NUMBER_LOWER64(CONCAT(transaction_id, created_datetime)) AS transaction_log_id, MD5_NUMBER_LOWER64(CONCAT(transaction_id, created_datetime)) AS transaction_log_id,
* *
FROM transactions FROM transactions
), ),
transaction_arch_logs_union_transactions AS ( transaction_arch_logs_union_transactions AS (
SELECT * FROM transactions_generate_transaction_log_id SELECT * FROM transactions_generate_transaction_log_id
UNION UNION
SELECT * FROM transaction_arch_logs SELECT * FROM transaction_arch_logs
), ),
union_transaction_rename_column_and_column_value AS ( union_transaction_rename_column_and_column_value AS (
SELECT SELECT
transaction_arch_logs_union_transactions.transaction_log_id AS transaction_cost_log_id, transaction_arch_logs_union_transactions.transaction_log_id AS transaction_cost_log_id,
transaction_arch_logs_union_transactions.transaction_id AS transaction_cost_id, transaction_arch_logs_union_transactions.transaction_id AS transaction_cost_id,
IFF(transaction_arch_logs_union_transactions.owner_type = 'App\\Models\\Transaction', IFF(transaction_arch_logs_union_transactions.owner_type = 'App\\Models\\Transaction',
transaction_arch_logs_union_transactions.owner_id, transaction_arch_logs_union_transactions.owner_id,
null) AS transaction_order_id, null) AS transaction_order_id,
COALESCE(transaction_types.name, transaction_arch_logs_union_transactions.transaction_type::string) AS transaction_type, COALESCE(transaction_types.name, transaction_arch_logs_union_transactions.transaction_type::string) AS transaction_type,
transaction_arch_logs_union_transactions.issuer_user_id AS supplier_company_id, transaction_arch_logs_union_transactions.issuer_user_id AS supplier_company_id,
transaction_arch_logs_union_transactions.receiver_user_id AS company_id, transaction_arch_logs_union_transactions.receiver_user_id AS company_id,
transaction_arch_logs_union_transactions.recipient_bank_id, transaction_arch_logs_union_transactions.recipient_bank_id,
@@ -58,23 +62,22 @@ union_transaction_rename_column_and_column_value AS (
transaction_arch_logs_union_transactions.payment_reference, transaction_arch_logs_union_transactions.payment_reference,
transaction_arch_logs_union_transactions.bill_number, transaction_arch_logs_union_transactions.bill_number,
transaction_arch_logs_union_transactions.base_currency_id,
transaction_arch_logs_union_transactions.quote_currency_id,
transaction_arch_logs_union_transactions.base_value, transaction_arch_logs_union_transactions.base_value,
transaction_arch_logs_union_transactions.quote_value, transaction_arch_logs_union_transactions.quote_value,
transaction_arch_logs_union_transactions.base_currency_id,
transaction_arch_logs_union_transactions.quote_currency_id,
transaction_arch_logs_union_transactions.base_to_quote_currency_exchange_rate, transaction_arch_logs_union_transactions.base_to_quote_currency_exchange_rate,
transaction_arch_logs_union_transactions.base_tax, transaction_arch_logs_union_transactions.base_tax,
transaction_arch_logs_union_transactions.base_service_charge, transaction_arch_logs_union_transactions.base_service_charge,
transaction_arch_logs_union_transactions.expired_datetime, ( transaction_arch_logs_union_transactions.base_value + transaction_arch_logs_union_transactions.base_service_charge ) AS total_base_value,
COALESCE(status.name, transaction_arch_logs_union_transactions.status::string) AS status, COALESCE(status.name, transaction_arch_logs_union_transactions.status::string) AS status,
transaction_arch_logs_union_transactions.expired_datetime,
transaction_arch_logs_union_transactions.deleted_datetime, transaction_arch_logs_union_transactions.deleted_datetime,
transaction_arch_logs_union_transactions.created_datetime, transaction_arch_logs_union_transactions.created_datetime,
transaction_arch_logs_union_transactions.updated_datetime, transaction_arch_logs_union_transactions.updated_datetime,
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
FROM transaction_arch_logs_union_transactions FROM transaction_arch_logs_union_transactions
@@ -87,12 +90,12 @@ union_transaction_rename_column_and_column_value AS (
LEFT JOIN status LEFT JOIN status
ON (transaction_arch_logs_union_transactions.status = status.id) ON (transaction_arch_logs_union_transactions.status = status.id)
WHERE WHERE
transaction_arch_logs_union_transactions.owner_type = 'App\\Models\\Transaction' transaction_arch_logs_union_transactions.owner_type = 'App\\Models\\Transaction'
AND AND
transaction_arch_logs_union_transactions.transaction_type = '3' --BILL transaction_arch_logs_union_transactions.transaction_type = '3' --BILL
), ),
@@ -123,6 +126,7 @@ final__stg_exchange__transaction_log_costs AS (
base_to_quote_currency_exchange_rate, base_to_quote_currency_exchange_rate,
base_tax, base_tax,
base_service_charge, base_service_charge,
total_base_value,
-- date/times -- date/times
expired_datetime, expired_datetime,
@@ -21,37 +21,32 @@ status AS (
transactions_join_transaction_types_payment_methods_currencies_status AS ( transactions_join_transaction_types_payment_methods_currencies_status AS (
SELECT SELECT
transactions.transaction_id AS transaction_cost_id, transactions.transaction_id AS transaction_cost_id,
IFF(transactions.owner_type = 'App\\Models\\Transaction', transactions.owner_id, null) AS transaction_order_id, transactions.issuer_user_id AS supplier_company_id,
COALESCE(transaction_types.name, transactions.transaction_type::string) AS transaction_type,
transactions.issuer_user_id AS supplier_company_id,
transactions.recipient_bank_id AS bank_id, transactions.recipient_bank_id AS bank_id,
COALESCE(payment_methods.name, transactions.payment_method::string) AS payment_method,
COALESCE(payment_methods.name, transactions.payment_method::string) AS payment_method, COALESCE(transaction_types.name, transactions.transaction_type::string) AS transaction_type,
IFF(transactions.owner_type = 'App\\Models\\Transaction', transactions.owner_id, null) AS transaction_order_id,
transactions.payment_reference, transactions.payment_reference,
transactions.bill_number, transactions.bill_number,
transactions.base_value,
transactions.quote_value,
transactions.base_currency_id, transactions.base_currency_id,
transactions.quote_currency_id, transactions.quote_currency_id,
transactions.base_to_quote_currency_exchange_rate, transactions.base_to_quote_currency_exchange_rate,
transactions.base_tax, transactions.base_tax,
transactions.base_service_charge, transactions.base_service_charge,
transactions.base_value,
transactions.expired_datetime, transactions.quote_value,
( transactions.base_value + transactions.base_service_charge ) AS total_base_value,
COALESCE(status.name, transactions.status::string) AS status, COALESCE(status.name, transactions.status::string) AS status,
transactions.expired_datetime,
transactions.deleted_datetime, transactions.deleted_datetime,
transactions.created_datetime, transactions.created_datetime,
transactions.updated_datetime, transactions.updated_datetime,
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
FROM transactions FROM transactions
@@ -65,7 +60,6 @@ transactions_join_transaction_types_payment_methods_currencies_status AS (
LEFT JOIN status LEFT JOIN status
ON (transactions.status = status.id) ON (transactions.status = status.id)
WHERE WHERE
transactions.owner_type = 'App\\Models\\Transaction' transactions.owner_type = 'App\\Models\\Transaction'
AND AND
@@ -95,10 +89,11 @@ final__stg_exchange__transaction_costs AS (
-- measures -- measures
base_value, base_value,
quote_value,
base_to_quote_currency_exchange_rate, base_to_quote_currency_exchange_rate,
quote_value,
base_tax, base_tax,
base_service_charge, base_service_charge,
total_base_value,
-- date/times -- date/times
expired_datetime, expired_datetime,
@@ -110,6 +105,7 @@ final__stg_exchange__transaction_costs AS (
_dbt_ran_datetime _dbt_ran_datetime
FROM transactions_join_transaction_types_payment_methods_currencies_status FROM transactions_join_transaction_types_payment_methods_currencies_status
) )
SELECT * FROM final__stg_exchange__transaction_costs SELECT * FROM final__stg_exchange__transaction_costs
@@ -47,11 +47,12 @@ transactions_join_transaction_types_payment_methods_bookings_status AS (
COALESCE(payment_methods.name, transactions.payment_method::string) AS payment_method, COALESCE(payment_methods.name, transactions.payment_method::string) AS payment_method,
COALESCE(status.name, transactions.status::string) AS status, COALESCE(status.name, transactions.status::string) AS status,
transactions.bill_number AS invoice_number, transactions.bill_number AS invoice_number,
transactions.base_value, ( transactions.quote_value / transactions.base_to_quote_currency_exchange_rate ) AS base_value,
transactions.quote_value, transactions.quote_value,
transactions.base_to_quote_currency_exchange_rate, transactions.base_to_quote_currency_exchange_rate,
transactions.base_tax, transactions.base_tax,
transactions.base_service_charge, transactions.base_service_charge,
(( transactions.quote_value / transactions.base_to_quote_currency_exchange_rate ) + transactions.base_service_charge ) AS total_base_value,
transactions.expired_datetime, transactions.expired_datetime,
transactions.deleted_datetime, transactions.deleted_datetime,
@@ -80,6 +81,7 @@ transactions_join_transaction_types_payment_methods_bookings_status AS (
), ),
remove_deleted_records AS ( remove_deleted_records AS (
SELECT SELECT
* *
FROM transactions_join_transaction_types_payment_methods_bookings_status FROM transactions_join_transaction_types_payment_methods_bookings_status
@@ -88,9 +90,10 @@ remove_deleted_records AS (
), ),
remove_duplicated_records AS ( remove_duplicated_records AS (
SELECT SELECT
*, *,
ROW_NUMBER() OVER (PARTITION BY booking_id ORDER BY updated_datetime DESC) AS row_index, ROW_NUMBER() OVER (PARTITION BY booking_id ORDER BY updated_datetime DESC) AS row_index,
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
@@ -98,6 +101,7 @@ remove_duplicated_records AS (
QUALIFY QUALIFY
row_index = 1 row_index = 1
), ),
@@ -128,6 +132,7 @@ final__stg_exchange__invoices AS (
base_to_quote_currency_exchange_rate, base_to_quote_currency_exchange_rate,
base_tax, base_tax,
base_service_charge, base_service_charge,
total_base_value,
-- date/times -- date/times
deleted_datetime, deleted_datetime,
@@ -29,19 +29,17 @@ transactions_generate_transaction_log_id AS (
FROM transactions FROM transactions
), ),
transaction_arch_logs_union_transactions AS ( transaction_arch_logs_union_transactions AS (
SELECT * FROM transactions_generate_transaction_log_id SELECT * FROM transactions_generate_transaction_log_id
UNION UNION
SELECT * FROM transaction_arch_logs SELECT * FROM transaction_arch_logs
), ),
union_transaction_rename_column_and_column_value AS ( union_transaction_rename_column_and_column_value AS (
SELECT SELECT
transaction_arch_logs_union_transactions.transaction_log_id AS transaction_order_log_id, transaction_arch_logs_union_transactions.transaction_log_id AS transaction_order_log_id,
transaction_arch_logs_union_transactions.transaction_id AS transaction_order_id, transaction_arch_logs_union_transactions.transaction_id AS transaction_order_id,
IFF(transaction_arch_logs_union_transactions.owner_type = 'App\\Models\\Booking', IFF(transaction_arch_logs_union_transactions.owner_type = 'App\\Models\\Booking',
transaction_arch_logs_union_transactions.owner_id, transaction_arch_logs_union_transactions.owner_id,
@@ -49,16 +47,15 @@ union_transaction_rename_column_and_column_value AS (
COALESCE(transaction_types.name, transaction_arch_logs_union_transactions.transaction_type::string) AS transaction_type, COALESCE(transaction_types.name, transaction_arch_logs_union_transactions.transaction_type::string) AS transaction_type,
transaction_arch_logs_union_transactions.receiver_user_id AS company_id, transaction_arch_logs_union_transactions.receiver_user_id AS company_id,
transaction_arch_logs_union_transactions.recipient_bank_id, transaction_arch_logs_union_transactions.recipient_bank_id,
COALESCE(payment_methods.name, transaction_arch_logs_union_transactions.payment_method::string) AS payment_method, COALESCE(payment_methods.name, transaction_arch_logs_union_transactions.payment_method::string) AS payment_method,
transaction_arch_logs_union_transactions.payment_reference, transaction_arch_logs_union_transactions.payment_reference,
transaction_arch_logs_union_transactions.bill_number, transaction_arch_logs_union_transactions.bill_number,
transaction_arch_logs_union_transactions.base_value, ( transaction_arch_logs_union_transactions.base_value - transaction_arch_logs_union_transactions.base_service_charge ) AS base_value,
transaction_arch_logs_union_transactions.quote_value, transaction_arch_logs_union_transactions.quote_value,
transaction_arch_logs_union_transactions.base_currency_id, transaction_arch_logs_union_transactions.base_currency_id,
@@ -68,14 +65,16 @@ union_transaction_rename_column_and_column_value AS (
transaction_arch_logs_union_transactions.base_to_quote_currency_exchange_rate, transaction_arch_logs_union_transactions.base_to_quote_currency_exchange_rate,
transaction_arch_logs_union_transactions.base_tax, transaction_arch_logs_union_transactions.base_tax,
transaction_arch_logs_union_transactions.base_service_charge, transaction_arch_logs_union_transactions.base_service_charge,
transaction_arch_logs_union_transactions.expired_datetime, transaction_arch_logs_union_transactions.base_value AS total_base_value,
COALESCE(status.name, transaction_arch_logs_union_transactions.status::string) AS status, COALESCE(status.name, transaction_arch_logs_union_transactions.status::string) AS status,
transaction_arch_logs_union_transactions.expired_datetime,
transaction_arch_logs_union_transactions.deleted_datetime, transaction_arch_logs_union_transactions.deleted_datetime,
transaction_arch_logs_union_transactions.created_datetime, transaction_arch_logs_union_transactions.created_datetime,
transaction_arch_logs_union_transactions.updated_datetime, transaction_arch_logs_union_transactions.updated_datetime,
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
FROM transaction_arch_logs_union_transactions FROM transaction_arch_logs_union_transactions
@@ -88,11 +87,11 @@ union_transaction_rename_column_and_column_value AS (
LEFT JOIN status LEFT JOIN status
ON (transaction_arch_logs_union_transactions.status = status.id) ON (transaction_arch_logs_union_transactions.status = status.id)
WHERE WHERE
transaction_arch_logs_union_transactions.owner_type = 'App\\Models\\Booking' transaction_arch_logs_union_transactions.owner_type = 'App\\Models\\Booking'
AND AND
transaction_arch_logs_union_transactions.transaction_type = '1' --PAYMENT transaction_arch_logs_union_transactions.transaction_type = '1' --PAYMENT
), ),
-- FINAL -- FINAL
@@ -121,6 +120,7 @@ final__stg_exchange__transaction_order_logs AS (
base_to_quote_currency_exchange_rate, base_to_quote_currency_exchange_rate,
base_tax, base_tax,
base_service_charge, base_service_charge,
total_base_value,
-- date/times -- date/times
expired_datetime, expired_datetime,
@@ -1,7 +1,3 @@
-- change name for final__stg_exchange__transaction_costs
-- @todo
-- @yam
-- IMPORTS -- IMPORTS
WITH transactions AS ( WITH transactions AS (
SELECT * FROM {{ ref('base_exchange__transactions') }} SELECT * FROM {{ ref('base_exchange__transactions') }}
@@ -25,37 +21,32 @@ status AS (
transactions_join_transaction_types_payment_methods_status AS ( transactions_join_transaction_types_payment_methods_status AS (
SELECT SELECT
transactions.transaction_id AS transaction_order_id, transactions.transaction_id AS transaction_order_id,
IFF(transactions.owner_type = 'App\\Models\\Booking', transactions.owner_id, null) AS booking_id, transactions.receiver_user_id AS company_id,
COALESCE(transaction_types.name, transactions.transaction_type::string) AS transaction_type,
transactions.receiver_user_id AS company_id,
transactions.recipient_bank_id AS bank_id, transactions.recipient_bank_id AS bank_id,
COALESCE(payment_methods.name, transactions.payment_method::string) AS payment_method,
COALESCE(payment_methods.name, transactions.payment_method::string) AS payment_method, COALESCE(transaction_types.name, transactions.transaction_type::string) AS transaction_type,
IFF(transactions.owner_type = 'App\\Models\\Booking', transactions.owner_id, null) AS booking_id,
transactions.payment_reference, transactions.payment_reference,
transactions.bill_number, transactions.bill_number,
transactions.base_value,
transactions.quote_value,
transactions.base_currency_id, transactions.base_currency_id,
transactions.quote_currency_id, transactions.quote_currency_id,
transactions.base_to_quote_currency_exchange_rate, transactions.base_to_quote_currency_exchange_rate,
transactions.base_tax, transactions.base_tax,
transactions.base_service_charge, transactions.base_service_charge,
( transactions.base_value - transactions.base_service_charge ) AS base_value, -- Tax not implemented in CIEF yet.
transactions.base_value AS total_base_value,
transactions.quote_value,
COALESCE(status.name, transactions.status::string) AS status,
transactions.expired_datetime, transactions.expired_datetime,
COALESCE(status.name, transactions.status::string) AS status,
transactions.deleted_datetime, transactions.deleted_datetime,
transactions.created_datetime, transactions.created_datetime,
transactions.updated_datetime, transactions.updated_datetime,
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
FROM transactions FROM transactions
@@ -69,17 +60,16 @@ transactions_join_transaction_types_payment_methods_status AS (
LEFT JOIN status LEFT JOIN status
ON (transactions.status = status.id) ON (transactions.status = status.id)
WHERE WHERE
transactions.owner_type = 'App\\Models\\Booking' transactions.owner_type = 'App\\Models\\Booking'
AND AND
transactions.transaction_type = '1' --PAYMENT transactions.transaction_type = '1' --PAYMENT
), ),
-- FINAL -- FINAL
final__stg_exchange__transaction_costs AS ( final__stg_exchange__transaction_orders AS (
SELECT SELECT
-- ids -- ids
@@ -99,10 +89,11 @@ final__stg_exchange__transaction_costs AS (
-- measures -- measures
base_value, base_value,
quote_value,
base_to_quote_currency_exchange_rate, base_to_quote_currency_exchange_rate,
quote_value,
base_tax, base_tax,
base_service_charge, base_service_charge,
total_base_value,
-- date/times -- date/times
expired_datetime, expired_datetime,
@@ -115,6 +106,6 @@ final__stg_exchange__transaction_costs AS (
FROM transactions_join_transaction_types_payment_methods_status FROM transactions_join_transaction_types_payment_methods_status
) )
SELECT * FROM final__stg_exchange__transaction_costs SELECT * FROM final__stg_exchange__transaction_orders