Files
dbt_cloud/models/marts/warehouse/fct_exchange__transaction_orders.sql
T
2023-05-09 09:53:28 +00:00

158 lines
5.1 KiB
SQL

-- IMPORTS
{% set order_status = dbt_utils.get_column_values(
table=ref('stg_exchange__transaction_order_logs'),
column='status') %}
WITH transaction_orders AS (
SELECT * FROM {{ ref('int_exchange__transaction_orders_get_user_ids') }}
),
transaction_order_logs AS (
SELECT * FROM {{ ref('stg_exchange__transaction_order_logs') }}
),
-- LOGICS
transaction_order_order_status_datetime AS (
SELECT
transaction_order_id,
MIN(created_datetime) AS order_created_datetime,
{%- for status in order_status %}
MAX(CASE WHEN status = '{{status}}' THEN updated_datetime END) AS order_{{status.lower()}}_datetime {%- if not loop.last %},{% endif -%}
{% endfor %}
FROM transaction_order_logs
GROUP BY
transaction_order_id
),
transaction_orders_lists AS (
SELECT
transaction_orders.transaction_order_id,
transaction_orders.booking_id,
transaction_orders.bank_id,
transaction_orders.company_id,
transaction_orders.user_id,
transaction_orders.status AS order_status,
transaction_orders.transaction_type,
transaction_orders.payment_method,
transaction_orders.base_currency_id,
transaction_orders.quote_currency_id,
transaction_orders.base_to_quote_currency_exchange_rate,
transaction_orders.payment_reference,
transaction_orders.bill_number,
transaction_orders.expired_datetime AS order_expired_datetime,
transaction_orders.base_value,
transaction_orders.quote_value,
-- use for future if base currency id other from '1'
IFF(transaction_orders.base_currency_id = '1',
transaction_orders.base_value,
-9999999999) AS value_rm,
transaction_orders.base_tax AS base_tax,
-- use for future if base currency id other from '1'
IFF(transaction_orders.base_currency_id = '1',
transaction_orders.base_tax,
-9999999999) AS tax_rm,
transaction_orders.base_service_charge,
-- use for future if base currency id other from '1'
IFF(transaction_orders.base_currency_id = '1',
transaction_orders.base_service_charge,
-9999999999) AS service_charge_rm,
(value_rm + service_charge_rm + tax_rm) AS total_value_rm,
transaction_orders.deleted_datetime AS order_deleted_datetime,
transaction_orders.updated_datetime AS order_updated_datetime,
{% for column_name in ["company", "user"] %}
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY transaction_orders.{{column_name}}_id ORDER BY transaction_orders.created_datetime) = 1 THEN 1
ELSE 0
END AS is_first_time_{{column_name}},
CASE
WHEN transaction_orders.status = 'COMPLETED'
AND
MIN(IFF(transaction_orders.status = 'COMPLETED', transaction_orders.created_datetime, NULL))
OVER (PARTITION BY transaction_orders.{{column_name}}_id)
= transaction_orders.created_datetime
THEN 1
ELSE 0
END AS is_first_time_{{column_name}}_completed,
{% endfor %}
transaction_order_order_status_datetime.order_created_datetime,
{%- for status in order_status %}
transaction_order_order_status_datetime.order_{{status.lower()}}_datetime,
{% endfor %}
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
FROM transaction_orders
LEFT JOIN transaction_order_order_status_datetime
ON (transaction_orders.transaction_order_id = transaction_order_order_status_datetime.transaction_order_id)
),
-- FINAL
final__fct_exchange__transaction_orders AS (
SELECT
-- ids
transaction_order_id,
booking_id,
company_id,
user_id,
bank_id,
base_currency_id,
quote_currency_id,
-- dimensions
transaction_type,
payment_method,
order_status,
payment_reference,
bill_number,
is_first_time_company,
is_first_time_company_completed,
is_first_time_user,
is_first_time_user_completed,
-- measures
base_to_quote_currency_exchange_rate,
base_value,
base_service_charge,
base_tax,
quote_value,
value_rm,
service_charge_rm,
tax_rm,
total_value_rm,
-- date/times
order_expired_datetime,
order_deleted_datetime,
order_updated_datetime,
order_created_datetime,
order_pending_submission_datetime,
order_pending_verification_datetime,
order_approved_datetime,
order_completed_datetime,
order_rejected_datetime,
order_suspended_datetime,
-- metadata
_dbt_ran_datetime
FROM transaction_orders_lists
)
SELECT * FROM final__fct_exchange__transaction_orders