From 159c5c82a85eb5393fb89b028f380d40e8aa1e4a Mon Sep 17 00:00:00 2001 From: CIEF ACC1 Date: Thu, 24 Aug 2023 04:33:02 +0000 Subject: [PATCH] replaced fct transaction orders --- .../reporting/rep_exchange__daily_orders.sql | 260 +++++++++++------- 1 file changed, 156 insertions(+), 104 deletions(-) diff --git a/models/marts/reporting/rep_exchange__daily_orders.sql b/models/marts/reporting/rep_exchange__daily_orders.sql index 6f747ca..8d3e0e9 100644 --- a/models/marts/reporting/rep_exchange__daily_orders.sql +++ b/models/marts/reporting/rep_exchange__daily_orders.sql @@ -1,16 +1,8 @@ -- IMPORT -WITH transaction_orders AS ( +WITH orders AS ( SELECT * FROM {{ ref('fct_exchange__transaction_orders') }} ), -bookings AS ( - SELECT * FROM {{ ref('fct_exchange__bookings') }} -), - -transaction_costs AS ( - SELECT * FROM {{ ref('fct_exchange__transaction_costs') }} -), - companies AS ( SELECT * FROM {{ ref('dim_exchange__companies') }} ), @@ -23,23 +15,18 @@ dates AS ( SELECT * FROM {{ ref('dim__dates') }} ), - ---LOGIC -transaction_orders_get_next_order_created_datetime AS ( - SELECT - *, - LEAD(order_created_datetime) OVER (PARTITION BY company_id ORDER BY order_created_datetime, transaction_order_id) AS next_order_created_datetime - - FROM - transaction_orders +users AS ( + SELECT * FROM {{ ref('dim_exchange__users') }} ), +--LOGIC fct_and_dim_joins AS ( SELECT - bookings.booking_id, - bookings.booking_marking_id, - bookings.company_id, + orders.booking_id, + orders.booking_marking_id, + orders.company_id, + companies.name AS company_name, companies.company_marking_id AS company_marking_id, companies.autocount_id AS company_autocount_id, companies.company_type AS company_type, @@ -54,107 +41,162 @@ fct_and_dim_joins AS ( companies.latitude AS company_latitude, companies.longitude AS company_longitude, - bookings.user_id, - bookings.bank_id, + orders.user_id, + orders.bank_id, - fix_currencies.currency_name AS fix_currency_name, + fix_currencies.currency_name AS fix_currency_name, - quote_currencies.currency_name AS quote_currency_name, + quote_currencies.currency_name AS quote_currency_name, - base_currencies.currency_name AS base_currency_name, + base_currencies.currency_name AS base_currency_name, - bookings.service_type, - bookings.status AS booking_status, - bookings.is_first_time_company AS is_first_time_booking_company, - bookings.is_first_time_company_completed AS is_first_time_booking_company_completed, - bookings.is_first_time_user AS is_first_time_booking_user, - bookings.is_first_time_user_completed AS is_first_time_booking_user_completed, - bookings.estimate_base_to_quote_currency_exchange_rate AS estimate_booking_base_to_quote_currency_exchange_rate, - bookings.estimate_quote_value AS estimate_booking_quote_value, - bookings.estimate_base_value AS estimate_booking_base_value, - bookings.estimate_value_rm AS estimate_booking_value_rm, - bookings.booking_created_datetime, - bookings.booking_approved_datetime, - bookings.booking_completed_datetime, - bookings.booking_suspended_datetime, + orders.service_type, + orders.booking_status, + orders.is_first_time_booking_company, + orders.is_first_time_booking_company_completed, + orders.is_first_time_booking_user, + orders.is_first_time_booking_user_completed, + orders.estimate_booking_base_to_quote_currency_exchange_rate, + orders.estimate_booking_quote_value, + orders.estimate_booking_base_value, + orders.estimate_booking_value_rm, + orders.booking_created_datetime, + orders.booking_approved_datetime, + orders.booking_completed_datetime, + orders.booking_suspended_datetime, - transaction_orders_get_next_order_created_datetime.transaction_order_id AS order_id, - transaction_orders_get_next_order_created_datetime.payment_method AS order_payment_method, - transaction_orders_get_next_order_created_datetime.order_status, - transaction_orders_get_next_order_created_datetime.payment_reference AS order_payment_reference, - transaction_orders_get_next_order_created_datetime.bill_number AS order_bill_number, - transaction_orders_get_next_order_created_datetime.is_first_time_company AS is_first_time_order_company, - transaction_orders_get_next_order_created_datetime.is_first_time_company_completed AS is_first_time_order_company_completed, - transaction_orders_get_next_order_created_datetime.is_first_time_user AS is_first_time_order_user, - transaction_orders_get_next_order_created_datetime.is_first_time_user_completed AS is_first_time_order_user_completed, - transaction_orders_get_next_order_created_datetime.base_to_quote_currency_exchange_rate AS order_base_to_quote_currency_exchange_rate , - transaction_orders_get_next_order_created_datetime.base_value AS order_base_value , - transaction_orders_get_next_order_created_datetime.base_service_charge AS order_base_service_charge , - transaction_orders_get_next_order_created_datetime.base_tax AS order_base_tax , - transaction_orders_get_next_order_created_datetime.quote_value AS order_quote_value , - transaction_orders_get_next_order_created_datetime.value_rm AS order_value_rm , - transaction_orders_get_next_order_created_datetime.service_charge_rm AS order_service_charge_rm , - transaction_orders_get_next_order_created_datetime.tax_rm AS order_tax_rm , - transaction_orders_get_next_order_created_datetime.total_value_rm AS total_order_value_rm, + orders.order_id, + orders.order_payment_method, + orders.order_status, + orders.order_payment_reference, + orders.order_bill_number, + orders.is_first_time_order_company, + orders.is_first_time_order_company_completed, + orders.is_first_time_order_user, + orders.is_first_time_order_user_completed, + orders.order_base_to_quote_currency_exchange_rate, + orders.order_base_value, + orders.order_base_service_charge, + orders.order_base_tax, + orders.order_quote_value, + orders.order_value_rm, + orders.order_service_charge_rm, + orders.order_tax_rm, + orders.total_order_value_rm, - transaction_orders_get_next_order_created_datetime.order_created_datetime, - order_created_dates.first_day_of_week AS order_created_week, + order_created_dates.first_day_of_week AS order_created_week, + orders.order_created_datetime, + orders.order_pending_submission_datetime, + orders.order_pending_verification_datetime, + + -- Estimated delivery datetime based on CIEF internal SLA (cutoff time 4pm) + CASE + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '1 DAY TRANSFER' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) < 16 + THEN TO_TIMESTAMP(order_created_dates.add_1_working_day_included_base_date || ' 23:59:59 +08:00') + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '1 DAY TRANSFER' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) >= 16 + THEN TO_TIMESTAMP(order_created_dates.add_1_working_day_excluded_base_date || ' 23:59:59 +08:00') - transaction_orders_get_next_order_created_datetime.order_pending_submission_datetime, - transaction_orders_get_next_order_created_datetime.order_pending_verification_datetime, - transaction_orders_get_next_order_created_datetime.order_approved_datetime, - transaction_orders_get_next_order_created_datetime.order_completed_datetime, - transaction_orders_get_next_order_created_datetime.order_rejected_datetime, - transaction_orders_get_next_order_created_datetime.order_suspended_datetime, - transaction_orders_get_next_order_created_datetime.next_order_created_datetime, + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '3 DAYS TRANSFER' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) < 16 + THEN TO_TIMESTAMP(order_created_dates.add_3_working_day_included_base_date || ' 23:59:59 +08:00') + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '3 DAYS TRANSFER' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) >= 16 + THEN TO_TIMESTAMP(order_created_dates.add_3_working_day_excluded_base_date || ' 23:59:59 +08:00') - transaction_costs.transaction_cost_id AS cost_id, - transaction_costs.bank_id AS currency_vendor_bank_id, - transaction_costs.transaction_type AS cost_transaction_type, - transaction_costs.payment_method AS cost_payment_method, - transaction_costs.status AS cost_status, - transaction_costs.payment_reference AS cost_payment_reference, - transaction_costs.bill_number AS cost_bill_number, - transaction_costs.base_value AS cost_base_value, - transaction_costs.quote_value AS cost_quote_value, - transaction_costs.base_to_quote_currency_exchange_rate AS cost_base_to_quote_currency_exchange_rate, - transaction_costs.base_tax AS cost_base_tax, - transaction_costs.base_service_charge AS cost_base_service_charge, - transaction_costs.value_rm AS cost_value_rm, - transaction_costs.tax_rm AS cost_tax_rm, - transaction_costs.service_charge_rm AS cost_service_charge_rm, - transaction_costs.total_value_rm AS total_cost_value_rm, - transaction_costs.cost_created_datetime, - transaction_costs.cost_pending_submission_datetime, - transaction_costs.cost_pending_verification_datetime, - transaction_costs.cost_approved_datetime, - transaction_costs.cost_completed_datetime, - transaction_costs.cost_rejected_datetime, + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '1688 PAYMENT' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) < 16 + THEN TO_TIMESTAMP(order_created_dates.add_1_working_day_included_base_date || ' 23:59:59 +08:00') + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '1688 PAYMENT' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) >= 16 + THEN TO_TIMESTAMP(order_created_dates.add_1_working_day_excluded_base_date || ' 23:59:59 +08:00') - '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime + ELSE null + END AS estimated_order_delivery_datetime_website_sla, + + --- Estimated delivery datetime based on customer expectation + CASE + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '1 DAY TRANSFER' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) < 16 + THEN TO_TIMESTAMP(order_created_dates.add_1_working_day_included_base_date) + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '1 DAY TRANSFER' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) >= 16 + THEN TO_TIMESTAMP(order_created_dates.add_1_working_day_excluded_base_date) + + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '3 DAYS TRANSFER' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) < 16 + THEN TO_TIMESTAMP(order_created_dates.add_3_working_day_included_base_date) + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '3 DAYS TRANSFER' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) >= 16 + THEN TO_TIMESTAMP(order_created_dates.add_3_working_day_excluded_base_date) + + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '1688 PAYMENT' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) < 16 + THEN TO_TIMESTAMP(order_created_dates.add_1_working_day_included_base_date) + WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '1688 PAYMENT' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) >= 16 + THEN TO_TIMESTAMP(order_created_dates.add_1_working_day_excluded_base_date) + + ELSE null + END AS estimated_order_delivery_datetime_customer_expectation, + + -- On time delivery boolean (CIEF internal SLA) + CASE + WHEN order_completed_datetime IS NULL THEN NULL + WHEN estimated_order_delivery_datetime_website_sla > order_completed_datetime THEN 1 + ELSE 0 + END AS is_on_time_delivery_website_sla, + + -- On time delivery boolean (Customer Expectation) + CASE + WHEN order_completed_datetime IS NULL THEN NULL + WHEN estimated_order_delivery_datetime_customer_expectation > order_completed_datetime THEN 1 + ELSE 0 + END AS is_on_time_delivery_customer_expectation, + + orders.order_approved_datetime, + orders.order_completed_datetime, + orders.order_rejected_datetime, + orders.order_suspended_datetime, + orders.next_order_created_datetime, + orders.order_expected_expired_datetime, + orders.order_expired_datetime, + + orders.cost_id, + orders.supplier_company_id, + supplier_companies.name AS supplier_company_name, + orders.currency_vendor_bank_id, + orders.cost_transaction_type, + orders.cost_payment_method, + orders.cost_status, + orders.cost_payment_reference, + orders.cost_bill_number, + orders.cost_base_value, + orders.cost_quote_value, + orders.cost_base_to_quote_currency_exchange_rate, + orders.cost_base_tax, + orders.cost_base_service_charge, + orders.cost_value_rm, + orders.cost_tax_rm, + orders.cost_service_charge_rm, + orders.total_cost_value_rm, + orders.cost_created_datetime, + orders.cost_pending_submission_datetime, + orders.cost_pending_verification_datetime, + orders.cost_approved_datetime, + orders.cost_completed_datetime, + orders.cost_rejected_datetime, + + '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime - FROM bookings - - RIGHT JOIN transaction_orders_get_next_order_created_datetime - ON (bookings.booking_id = transaction_orders_get_next_order_created_datetime.booking_id) - - LEFT JOIN transaction_costs - ON (transaction_orders_get_next_order_created_datetime.transaction_order_id = transaction_costs.transaction_order_id) + FROM orders LEFT JOIN companies - ON (bookings.company_id = companies.company_id) + ON (orders.company_id = companies.company_id) + + LEFT JOIN companies AS supplier_companies + ON (orders.supplier_company_id = supplier_companies.company_id) LEFT JOIN dates AS order_created_dates - ON (DATE(transaction_orders_get_next_order_created_datetime.order_created_datetime) = order_created_dates.date_day) + ON (DATE(orders.order_created_datetime) = order_created_dates.date_day) LEFT JOIN currencies AS fix_currencies - ON (bookings.fix_currency_id = fix_currencies.currency_id) + ON (orders.fix_currency_id = fix_currencies.currency_id) LEFT JOIN currencies AS quote_currencies - ON (bookings.quote_currency_id = quote_currencies.currency_id) + ON (orders.quote_currency_id = quote_currencies.currency_id) LEFT JOIN currencies AS base_currencies - ON (bookings.base_currency_id = base_currencies.currency_id) + ON (orders.base_currency_id = base_currencies.currency_id) ), --FINAL @@ -163,16 +205,19 @@ final__rep_exchange__daily_orders AS ( -- ids order_id, bank_id, - company_id, + company_id, company_marking_id, company_autocount_id, user_id, cost_id, + supplier_company_id, currency_vendor_bank_id, booking_id, booking_marking_id, -- dimensions + company_name, + supplier_company_name, fix_currency_name, quote_currency_name, base_currency_name, @@ -206,6 +251,8 @@ final__rep_exchange__daily_orders AS ( is_first_time_booking_company_completed, is_first_time_booking_user, is_first_time_booking_user_completed, + is_on_time_delivery_website_sla, + is_on_time_delivery_customer_expectation, -- measures order_base_to_quote_currency_exchange_rate, @@ -234,12 +281,14 @@ final__rep_exchange__daily_orders AS ( -- date/times order_created_datetime, order_created_week, + order_expected_expired_datetime, order_pending_submission_datetime, order_pending_verification_datetime, order_approved_datetime, order_completed_datetime, order_rejected_datetime, order_suspended_datetime, + order_expired_datetime, next_order_created_datetime, cost_created_datetime, cost_pending_submission_datetime, @@ -251,11 +300,14 @@ final__rep_exchange__daily_orders AS ( booking_approved_datetime, booking_completed_datetime, booking_suspended_datetime, + estimated_order_delivery_datetime_website_sla, + estimated_order_delivery_datetime_customer_expectation, -- metadata _dbt_ran_datetime FROM fct_and_dim_joins + ) -SELECT * FROM final__rep_exchange__daily_orders +SELECT * FROM final__rep_exchange__daily_orders \ No newline at end of file