diff --git a/models/intermediate/int_exchange__transaction_cost_with_latest_cost_ids.sql b/models/intermediate/int_exchange__transaction_cost_with_latest_cost_ids.sql new file mode 100644 index 0000000..02a701d --- /dev/null +++ b/models/intermediate/int_exchange__transaction_cost_with_latest_cost_ids.sql @@ -0,0 +1,158 @@ +-- VARIABLES +{% set order_status = dbt_utils.get_column_values( + table=ref('stg_exchange__transaction_order_logs'), + column='status') +%} + + +-- IMPORTS +WITH transaction_cost_logs AS ( + SELECT * FROM {{ ref('stg_exchange__transaction_cost_logs') }} +), + +transaction_costs AS ( + SELECT * FROM {{ ref('stg_exchange__transaction_costs') }} +), + + +-- LOGIC +transaction_cost_status_datetime AS ( + + SELECT + transaction_cost_id, + company_id, + MIN(created_datetime) AS cost_created_datetime, + + {%- for status in order_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, + company_id + +), + +join_cost_and_logs 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, + transaction_costs.expired_datetime, + transaction_costs.deleted_datetime, + transaction_costs.created_datetime, + transaction_costs.updated_datetime, + + transaction_cost_status_datetime.company_id, + transaction_cost_status_datetime.cost_created_datetime, + transaction_cost_status_datetime.cost_completed_datetime, + transaction_cost_status_datetime.cost_pending_submission_datetime, + transaction_cost_status_datetime.cost_approved_datetime, + transaction_cost_status_datetime.cost_pending_verification_datetime, + transaction_cost_status_datetime.cost_rejected_datetime, + transaction_cost_status_datetime.cost_suspended_datetime, + transaction_cost_status_datetime.cost_expired_datetime + + FROM transaction_costs + + LEFT JOIN transaction_cost_status_datetime + ON (transaction_costs.transaction_cost_id = transaction_cost_status_datetime.transaction_cost_id) + +), + +remove_deleted_expired_costs AS ( + + SELECT + * + + FROM join_cost_and_logs + + WHERE + deleted_datetime IS NULL + AND + expired_datetime IS NULL + +), + +-- Omair mentioned a bug in system causing duplicates. Take cost with latest updated_datetime as true. +remove_system_error_duplicate_row AS ( + + SELECT + *, + ROW_NUMBER() OVER (PARTITION BY transaction_order_id ORDER BY updated_datetime DESC) AS row_number_index, + + '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime + + FROM remove_deleted_expired_costs + + QUALIFY + row_number_index = 1 + +), + + +-- FINAL +final__int_exchange__transaction_cost_get_latest_cost_ids AS ( + + SELECT + -- ids + transaction_cost_id, + transaction_order_id, + supplier_company_id, + 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, + + -- date/times + expired_datetime, + deleted_datetime, + created_datetime, + updated_datetime, + cost_created_datetime, + cost_completed_datetime, + cost_pending_submission_datetime, + cost_approved_datetime, + cost_pending_verification_datetime, + cost_rejected_datetime, + cost_suspended_datetime, + cost_expired_datetime, + + -- metadata + _dbt_ran_datetime + + FROM remove_system_error_duplicate_row + +) + +SELECT * FROM final__int_exchange__transaction_cost_get_latest_cost_ids \ No newline at end of file