Alerter / query_seller_sale.py
Ninad077's picture
Upload 2 files
5a2e857 verified
queries = {
"query_seller_net_data": """
WITH seller_net_data AS (
SELECT
company_id,
company_name,
ordering_channel,
segement_code,
sales_channel,
settlement_model,
settlement_model_code,
order_type,
order_date,
fiscal_year,
bag_id,
settlement_type,
recon_status,
return_window_date,
payout_window_date,
expected_payout_date,
sett_no,
sett_id,
mrp,
seller_discounts,
store_discount_amount,
bca,
product_gst_perc,
round(vog,2) as vog,
tds_on_bca,
tcs_on_vog,
seller_fees,
seller_tender_value,
round(seller_net_collection,2) as seller_net_collection,
ROUND(mrp - seller_discounts - store_discount_amount,2) AS bca_cc,
ROUND(bca - (mrp - seller_discounts - store_discount_amount),2) AS diff_bca_cc,
ROUND((mrp - seller_discounts - store_discount_amount) * 100 / (100 + ABS(product_gst_perc)), 2) AS vog_cc,
ROUND(vog - ROUND((mrp - seller_discounts - store_discount_amount) * 100 / (100 + ABS(product_gst_perc)), 2),2) AS diff_vog_cc,
-- TDS calculation logic
CASE
WHEN segement_code IN ("FY", "UN") AND DATE(order_date) >= '2024-10-01' THEN
ROUND((mrp - seller_discounts - store_discount_amount), 2) * 0.001
WHEN segement_code IN ("FY", "UN") AND DATE(order_date) < '2024-10-01' THEN
ROUND((mrp - seller_discounts - store_discount_amount), 2) * 0.01
ELSE 0
END AS tds_cc,
-- TCS calculation logic
CASE
WHEN segement_code IN ("FY", "UN") AND DATE(order_date) >= '2024-07-10' THEN
ROUND((mrp - seller_discounts - store_discount_amount) * 100 / (100 + ABS(product_gst_perc)), 2) * 0.005
WHEN segement_code IN ("FY", "UN") AND DATE(order_date) < '2024-07-10' THEN
ROUND((mrp - seller_discounts - store_discount_amount) * 100 / (100 + ABS(product_gst_perc)), 2) * 0.01
ELSE 0
END AS tcs_cc
FROM
`fynd-db.finance_recon_tool_asia.09_seller_net_collection_daily`
WHERE
expected_payout_date BETWEEN "{start_date}" AND "{end_date}"
),
-- Subquery to count occurrences of each bag_id and concatenation of bag_id and settlement_type
bag_con_count_data AS (
SELECT
bag_id,
settlement_type,
COUNT(*) AS bagg_count,
CONCAT(bag_id, settlement_type) AS bag_settlement_concat,
COUNT(CONCAT(bag_id, settlement_type)) AS bag_settlement_concat_count -- Count of concatenated values
FROM
seller_net_data
GROUP BY
bag_id, settlement_type
)
-- Final query
SELECT
sd.*,
ROUND((tds_cc - tds_on_bca), 2) AS diff_tds,
ROUND((tcs_cc - tcs_on_vog), 2) AS diff_tcs,
ROUND((mrp - seller_discounts - store_discount_amount - seller_tender_value + seller_fees),2) AS seller_sale_cc,
ROUND(((mrp - seller_discounts - store_discount_amount - seller_tender_value + seller_fees) - tds_cc - tcs_cc),2) AS seller_net_cc,
ROUND(((mrp - seller_discounts - store_discount_amount - seller_tender_value + seller_fees) - tds_cc - tcs_cc - seller_net_collection), 2) AS net_diff_cc,
CONCAT(sd.bag_id, ",") AS conccat, -- Concatenated bag_id
CONCAT(sd.bag_id, sd.settlement_type) AS bag_cc, -- Bag ID with settlement type
bcc.bagg_count AS bag_count, -- Count of each bag_id and settlement type
bcc.bag_settlement_concat AS bag_con, -- Concatenated bag_id and settlement_type
bcc.bag_settlement_concat_count AS bag_con_count, -- Count of concatenated values
CASE
WHEN order_type = 'COD' THEN CONCAT(company_id, '_', segement_code, '_', settlement_model_code, '_', order_type, '_V')
WHEN order_type = 'PPD' THEN CONCAT(company_id, '_', segement_code, '_', settlement_model_code, '_', order_type, '_C')
END AS ledger_name
FROM
seller_net_data sd
LEFT JOIN
bag_con_count_data bcc
ON
sd.bag_id = bcc.bag_id AND sd.settlement_type = bcc.settlement_type;
""",
"query_brand_accounting_entries": """
SELECT
DENSE_RANK() OVER (ORDER BY expected_payout_date,company_id,VOUCHERTYPENAME,sales_channel,expected_payout_date,order_type ASC) entry_code,
DATE,
Mode,
VOUCHERTYPENAME,
Narration,
DebitLedger,
AmountDebitLedger,
CreditLedger,
AmountCreditLedger
FROM (
WITH
Truth_table AS (SELECT * FROM `fynd-db.Brand_Accounting_Entries_Asia.Brand_Seller_Sale_FY25_Table`)
SELECT
expected_payout_date,
format_date('%Y%m%d', expected_payout_date) as DATE,
"Journal" as Mode,
VOUCHERTYPENAME,
CONCAT(Narration," for ", sales_channel, " for the period ",expected_payout_date ) AS Narration,
entry_Type,
order_type,
A.segement_code,
company_id,
sales_channel,
CASE WHEN seller_sales_amount > 0 AND B.ordering_channel IN ("FY", "FP", "FS", "UN", "OE","OM") AND entity = "seller" AND mop = "COD" THEN ledger_name WHEN seller_sales_amount > 0 AND B.ordering_channel IN ("FY", "FP", "FS", "UN", "OE","OM") AND entity = "seller" AND mop = "PPD" THEN ledger_name ELSE Credit_Ledger END AS DebitLedger,
CASE WHEN seller_sales_amount > 0 THEN ROUND(seller_sales_amount*-1) ELSE ROUND(seller_sales_amount) END AS AmountDebitLedger,
CASE WHEN seller_sales_amount < 0 AND B.ordering_channel IN ("FY", "FP", "FS", "UN", "OE","OM") AND entity = "seller" AND mop = "COD" THEN ledger_name WHEN seller_sales_amount < 0 AND B.ordering_channel IN ("FY", "FP", "FS", "UN", "OE","OM") AND entity = "seller" AND mop = "PPD" THEN ledger_name ELSE Credit_Ledger END AS CreditLedger,
CASE WHEN seller_sales_amount < 0 THEN ROUND(seller_sales_amount)*-1 ELSE ROUND(seller_sales_amount) END AS AmountCreditLedger
FROM
`fynd-db.Brand_Accounting_Entries_Asia.Seller_sale_Logic` AS A
LEFT JOIN
Truth_table as B
ON
A.segement_code = B.ordering_channel
AND A.entry_Type = B.Status
AND A.order_type = B.mop
WHERE
order_type = 'COD'
AND expected_payout_date BETWEEN '{start_date}' AND '{end_date}'
GROUP BY
1,2,3,4,5,6,7,8,9,10,11,12,13,14
ORDER BY
expected_payout_date,company_id,VOUCHERTYPENAME,sales_channel,order_type ASC
)
ORDER BY entry_code ASC
"""
}