diff --git a/models/staging/exchange/stg_exchange__transaction_purchase_orders.sql b/models/staging/exchange/stg_exchange__transaction_purchase_orders.sql new file mode 100644 index 0000000..26ff2af --- /dev/null +++ b/models/staging/exchange/stg_exchange__transaction_purchase_orders.sql @@ -0,0 +1,149 @@ +/* DOCS +"IS_AUTO_GENERATED_PURCHASE_ORDER" +- 1 indicates PO auto generated by system, having prefix 'XPO' +- 0 indicates PO submitted by customer, having prefix 'PO' + +Purchase Order document does not perform currency conversion, and it is a document to be submitted by the customer. +Therefore, base currency and quote currency is the same. +The PO is based on the fix currency. + +The 'fix currency' feature enables customers to choose their primary currency when placing an order, +ensuring that it remains fixed while allowing the converted currency to fluctuate. + +Currency is converted only in invoice. + +Note to downstream user: +This table contains duplicate of booking_id, due to deleted entries. +Filter out deleted entries and select only status = 'APPROVED' for use. +*/ + +-- IMPORTS +WITH transactions AS ( + SELECT * FROM {{ ref('base_exchange__transactions') }} +), + +transaction_types AS ( + SELECT * FROM {{ ref('seed_exchange__transaction_types') }} +), + +bookings AS ( + SELECT * FROM {{ ref('base_exchange__bookings') }} +), + +payment_methods AS ( + SELECT * FROM {{ ref('seed_exchange__payment_methods') }} +), + +status AS ( + SELECT * FROM {{ ref('seed_exchange__status') }} + WHERE category = 'DEFAULT' +), + + +-- LOGIC +transactions_join_transaction_types_payment_methods_bookings_status AS ( + + SELECT + bookings.booking_marking_id, + bookings.fix_value, + bookings.fix_currency_id AS purchase_order_currency_id, + + transactions.transaction_id AS transaction_purchase_order_id, + transactions.owner_id AS booking_id, + transactions.issuer_user_id AS issuer_company_id, + transactions.receiver_user_id AS receiver_company_id, + COALESCE(transaction_types.name, transactions.transaction_type::string) AS transaction_type, + COALESCE(payment_methods.name, transactions.payment_method::string) AS payment_method, + COALESCE(status.name, transactions.status::string) AS status, + transactions.bill_number AS purchase_order_number, + transactions.base_value AS purchase_order_amount, + + transactions.expired_datetime, + transactions.deleted_datetime, + transactions.created_datetime, + transactions.updated_datetime, + + CASE + WHEN purchase_order_number LIKE 'XP%' THEN 1 ELSE 0 + END AS is_auto_generated_purchase_order + + FROM transactions + + LEFT JOIN transaction_types + ON (transactions.transaction_type = transaction_types.id) + + LEFT JOIN payment_methods + ON (transactions.payment_method = payment_methods.id) + + LEFT JOIN status + ON (transactions.status = status.id) + + LEFT JOIN bookings + ON (transactions.owner_id = bookings.booking_id) + + WHERE + transactions.owner_type = 'App\\Models\\Booking' + AND + transactions.transaction_type = '7' --PURCHASE_ORDER + +), + +remove_deleted_records AS ( + SELECT + * + FROM transactions_join_transaction_types_payment_methods_bookings_status + WHERE deleted_datetime IS NULL +), + + +remove_duplicated_records AS ( + SELECT + *, + ROW_NUMBER() OVER (PARTITION BY booking_id ORDER BY updated_datetime DESC) AS row_index, + + '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime + + FROM remove_deleted_records + + QUALIFY + row_index = 1 +), + + +-- FINAL +final__stg_exchange__purchase_orders AS ( + + SELECT + -- ids + transaction_purchase_order_id, + booking_id, + booking_marking_id, + issuer_company_id, + receiver_company_id, + purchase_order_currency_id + + -- dimensions + is_auto_generated_purchase_order, + purchase_order_number, + transaction_type, + payment_method, + status, + + -- measures + fix_value, + purchase_order_amount, + + -- date/times + deleted_datetime, + created_datetime, + expired_datetime, + updated_datetime, + + -- metadata + _dbt_ran_datetime + + FROM remove_duplicated_records + +) + +SELECT * FROM final__stg_exchange__purchase_orders \ No newline at end of file