Files
dbt_cloud/models/marts/warehouse/fct_exchange__transaction_costs.sql
T
2024-01-29 09:53:16 +00:00

134 lines
3.9 KiB
SQL

-- IMPORTS
{% set cost_status = dbt_utils.get_column_values(
table=ref('stg_exchange__transaction_order_logs'),
column='status') %}
WITH transaction_costs AS (
SELECT * FROM {{ ref('stg_exchange__transaction_costs') }}
),
transaction_cost_logs AS (
SELECT * FROM {{ ref('stg_exchange__transaction_cost_logs') }}
),
-- LOGICS
transaction_cost_status_datetime AS (
SELECT
transaction_cost_id,
MIN(created_datetime) AS cost_created_datetime,
{%- for status in cost_status %}
MAX(CASE WHEN status = '{{status}}' THEN updated_datetime END) AS cost_{{status.lower()}}_datetime {%- if not loop.last %},{% endif -%}
{% endfor %}
FROM transaction_cost_logs
GROUP BY
transaction_cost_id
),
transaction_costs_lists AS (
SELECT
transaction_costs.transaction_cost_id,
transaction_costs.transaction_order_id,
transaction_costs.supplier_company_id,
transaction_costs.bank_id,
transaction_costs.base_currency_id,
transaction_costs.quote_currency_id,
transaction_costs.transaction_type,
transaction_costs.payment_method,
transaction_costs.status,
transaction_costs.payment_reference,
transaction_costs.bill_number,
transaction_costs.base_value,
transaction_costs.quote_value,
transaction_costs.base_to_quote_currency_exchange_rate,
transaction_costs.base_tax,
transaction_costs.base_service_charge,
-- use for future if base currency id other from '1'
IFF(transaction_costs.base_currency_id = '1',
transaction_costs.base_value,
-9999999999) AS value_rm,
-- use for future if base currency id other from '1'
IFF(transaction_costs.base_currency_id = '1',
transaction_costs.base_tax,
-9999999999) AS tax_rm,
-- use for future if base currency id other from '1'
IFF(transaction_costs.base_currency_id = '1',
transaction_costs.base_service_charge,
-9999999999) AS service_charge_rm,
(value_rm - service_charge_rm - tax_rm) AS total_value_rm,
transaction_costs.expired_datetime,
transaction_costs.deleted_datetime,
transaction_costs.created_datetime,
transaction_costs.updated_datetime,
transaction_cost_status_datetime.cost_created_datetime,
{%- for status in cost_status %}
transaction_cost_status_datetime.cost_{{status.lower()}}_datetime,
{% endfor %}
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
FROM transaction_costs
LEFT JOIN transaction_cost_status_datetime
ON (transaction_costs.transaction_cost_id = transaction_cost_status_datetime.transaction_cost_id)
),
-- FINAL
final__fct_exchange__transaction_costs AS (
SELECT
-- ids
transaction_cost_id,
transaction_order_id,
supplier_company_id,
bank_id,
base_currency_id,
quote_currency_id,
-- dimensions
transaction_type,
payment_method,
status,
payment_reference,
bill_number,
-- measures
base_value,
quote_value,
base_to_quote_currency_exchange_rate,
base_tax,
base_service_charge,
value_rm,
tax_rm,
service_charge_rm,
total_value_rm,
-- date/times
expired_datetime,
deleted_datetime,
created_datetime,
updated_datetime,
cost_created_datetime,
cost_pending_submission_datetime,
cost_pending_verification_datetime,
cost_approved_datetime,
cost_completed_datetime,
cost_rejected_datetime,
cost_suspended_datetime
-- metadata
_dbt_ran_datetime
FROM transaction_costs_lists
)
SELECT * FROM final__fct_exchange__transaction_costs