PO stg file

This commit is contained in:
CIEF ACC1
2023-09-29 07:36:34 +00:00
parent 6e671ca880
commit d1c0ff2319
@@ -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