MukeshKapoor25's picture
chore(database): add comprehensive database schema and migration scripts
69f2a47
-- ============================================================================
-- Views for Trade Sales Reporting
-- ============================================================================
-- View: Trade Sales Summary by Client
CREATE OR REPLACE VIEW trans.v_trade_sales_summary AS
SELECT
ts.client_id,
COUNT(DISTINCT ts.shipment_id) as total_shipments,
COUNT(DISTINCT ts.order_id) as total_orders,
COALESCE(SUM(tsi.shipped_qty), 0) as total_qty_shipped,
COUNT(DISTINCT tsi.sku) as unique_skus_shipped,
MIN(ts.shipment_date) as first_shipment_date,
MAX(ts.shipment_date) as last_shipment_date,
COUNT(DISTINCT CASE WHEN ts.status = 'shipped' THEN ts.shipment_id END) as shipped_count,
COUNT(DISTINCT CASE WHEN ts.status = 'draft' THEN ts.shipment_id END) as draft_count
FROM trans.scm_trade_shipment ts
LEFT JOIN trans.scm_trade_shipment_item tsi ON ts.shipment_id = tsi.shipment_id
GROUP BY ts.client_id;
-- View: Order Execution Status
CREATE OR REPLACE VIEW trans.v_order_execution_status AS
WITH po_summary AS (
SELECT
po_id,
SUM(ord_qty) as total_ordered_qty
FROM trans.scm_po_item
GROUP BY po_id
),
shipment_summary AS (
SELECT
poi.po_id,
SUM(tsi.shipped_qty) as total_shipped_qty,
COUNT(DISTINCT tsi.shipment_id) as shipment_count,
MAX(ts.shipment_date) as last_shipment_date
FROM trans.scm_trade_shipment_item tsi
JOIN trans.scm_po_item poi ON tsi.po_item_id = poi.po_item_id
JOIN trans.scm_trade_shipment ts ON tsi.shipment_id = ts.shipment_id
GROUP BY poi.po_id
)
SELECT
po.po_id as order_id,
po.po_no as order_no,
po.buyer_id as client_id,
po.supplier_id,
po.po_date as order_date,
COALESCE(pos.total_ordered_qty, 0) as total_ordered_qty,
COALESCE(ss.total_shipped_qty, 0) as total_shipped_qty,
COALESCE(pos.total_ordered_qty, 0) - COALESCE(ss.total_shipped_qty, 0) as pending_qty,
CASE
WHEN COALESCE(ss.total_shipped_qty, 0) = 0 THEN 'pending'
WHEN COALESCE(ss.total_shipped_qty, 0) < COALESCE(pos.total_ordered_qty, 0) THEN 'partial'
WHEN COALESCE(ss.total_shipped_qty, 0) >= COALESCE(pos.total_ordered_qty, 0) THEN 'completed'
ELSE 'pending'
END as execution_status,
COALESCE(ss.shipment_count, 0) as shipment_count,
ss.last_shipment_date
FROM trans.scm_po po
LEFT JOIN po_summary pos ON po.po_id = pos.po_id
LEFT JOIN shipment_summary ss ON po.po_id = ss.po_id
WHERE po.supplier_type = 'cnf' AND po.buyer_type = 'distributor';