Add Business Term status

This commit is contained in:
CIEF ACC1
2023-10-10 05:23:03 +00:00
parent c27858b932
commit 5d9f357837
@@ -1,3 +1,23 @@
-- VARIABLES
{% set var_service_type = [
'1688 PAYMENT',
'1 DAY TRANSFER',
'3 DAYS TRANSFER',
'Enterprise to Enterprise 公打公'] %}
{% set var_working_days_including_base_date = [
'add_1_working_day_included_base_date',
'add_1_working_day_included_base_date',
'add_3_working_day_included_base_date',
'add_7_working_day_included_base_date'] %}
{% set var_working_days_excluding_base_date = [
'add_1_working_day_excluded_base_date',
'add_1_working_day_excluded_base_date',
'add_3_working_day_excluded_base_date',
'add_7_working_day_excluded_base_date'] %}
-- IMPORT
WITH orders AS (
SELECT * FROM {{ ref('fct_exchange__transaction_orders') }}
@@ -25,6 +45,8 @@ fct_and_dim_joins AS (
orders.booking_id,
orders.booking_marking_id,
orders.company_id,
orders.transaction_status,
orders.document_status,
companies.name AS company_name,
companies.company_marking_id AS company_marking_id,
@@ -40,6 +62,7 @@ fct_and_dim_joins AS (
companies.has_wallet AS company_has_wallet,
companies.latitude AS company_latitude,
companies.longitude AS company_longitude,
companies.company_created_datetime AS company_created_datetime,
orders.user_id,
orders.bank_id,
@@ -91,63 +114,56 @@ fct_and_dim_joins AS (
-- 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')
{% for (loop_service_type, working_day_with_base_date, working_day_without_base_date) in zip(var_service_type, var_working_days_including_base_date, var_working_days_excluding_base_date) %}
WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '{{loop_service_type}}' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) < 16
THEN TO_TIMESTAMP(order_created_dates.{{working_day_with_base_date}} || ' 23:59:59 +08:00')
WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '{{loop_service_type}}' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) >= 16
THEN TO_TIMESTAMP(order_created_dates.{{working_day_without_base_date}} || ' 23:59:59 +08:00')
{% endfor %}
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')
ELSE NULL
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')
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 || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING )
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 || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING )
{% for (loop_service_type, working_day_with_base_date, working_day_without_base_date) in zip(var_service_type, var_working_days_including_base_date, var_working_days_excluding_base_date) %}
WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '{{loop_service_type}}' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) < 16
THEN TO_TIMESTAMP(order_created_dates.{{working_day_with_base_date}} || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING )
WHEN orders.order_created_datetime >= '2023-01-01' AND orders.service_type = '{{loop_service_type}}' AND DATE_PART(HOUR, orders.order_pending_verification_datetime) >= 16
THEN TO_TIMESTAMP(order_created_dates.{{working_day_without_base_date}} || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING )
{% endfor %}
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 || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING )
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 || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING )
ELSE NULL
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 || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING )
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 || ' ' || (orders.order_pending_verification_datetime::TIME)::STRING )
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
-- On-time boolean is null when order is not complete
WHEN account_verified_payment_datetime IS NULL THEN NULL
WHEN estimated_order_delivery_datetime_website_sla > orders.operation_uploaded_bank_slip_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
-- On-time boolean is null when order is not complete
WHEN account_verified_payment_datetime IS NULL THEN NULL
WHEN estimated_order_delivery_datetime_customer_expectation > orders.operation_uploaded_bank_slip_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,
@@ -169,6 +185,8 @@ fct_and_dim_joins AS (
orders.cost_tax_rm,
orders.cost_service_charge_rm,
orders.total_cost_value_rm,
orders.purchase_order_number,
orders.invoice_number,
orders.cost_created_datetime,
orders.cost_pending_submission_datetime,
orders.cost_pending_verification_datetime,
@@ -176,6 +194,19 @@ fct_and_dim_joins AS (
orders.cost_completed_datetime,
orders.cost_rejected_datetime,
orders.customer_made_booking_datetime,
orders.customer_placed_order_datetime,
orders.customer_made_payment_datetime,
orders.account_verified_payment_datetime,
orders.first_white_form_generated_datetime,
orders.last_white_form_generated_datetime,
orders.operation_uploaded_bank_slip_datetime,
orders.first_purchase_order_uploaded_datetime,
orders.last_purchase_order_uploaded_datetime,
orders.operation_generated_invoice_datetime,
orders.account_rejected_payment_datetime,
orders.next_order_created_datetime,
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
FROM orders
@@ -218,6 +249,8 @@ final__rep_exchange__daily_orders AS (
-- dimensions
company_name,
supplier_company_name,
transaction_status,
document_status,
fix_currency_name,
quote_currency_name,
base_currency_name,
@@ -253,6 +286,8 @@ final__rep_exchange__daily_orders AS (
is_first_time_booking_user_completed,
is_on_time_delivery_website_sla,
is_on_time_delivery_customer_expectation,
purchase_order_number,
invoice_number,
-- measures
order_base_to_quote_currency_exchange_rate,
@@ -279,6 +314,7 @@ final__rep_exchange__daily_orders AS (
estimate_booking_value_rm,
-- date/times
company_created_datetime,
order_created_datetime,
order_created_week,
order_expected_expired_datetime,
@@ -289,7 +325,6 @@ final__rep_exchange__daily_orders AS (
order_rejected_datetime,
order_suspended_datetime,
order_expired_datetime,
next_order_created_datetime,
cost_created_datetime,
cost_pending_submission_datetime,
cost_pending_verification_datetime,
@@ -302,6 +337,19 @@ final__rep_exchange__daily_orders AS (
booking_suspended_datetime,
estimated_order_delivery_datetime_website_sla,
estimated_order_delivery_datetime_customer_expectation,
customer_made_booking_datetime,
customer_placed_order_datetime,
customer_made_payment_datetime,
account_verified_payment_datetime,
first_white_form_generated_datetime,
last_white_form_generated_datetime,
operation_uploaded_bank_slip_datetime,
first_purchase_order_uploaded_datetime,
last_purchase_order_uploaded_datetime,
operation_generated_invoice_datetime,
account_rejected_payment_datetime,
next_order_created_datetime,
-- metadata
_dbt_ran_datetime
@@ -310,4 +358,4 @@ final__rep_exchange__daily_orders AS (
)
SELECT * FROM final__rep_exchange__daily_orders
SELECT * FROM final__rep_exchange__daily_orders