| 1 | --======
|
|---|
| 2 | --1 active product catalog +
|
|---|
| 3 | --======
|
|---|
| 4 | SET search_path TO myschema;
|
|---|
| 5 | DROP VIEW IF EXISTS v_active_product_catalog;
|
|---|
| 6 |
|
|---|
| 7 | CREATE VIEW v_active_product_catalog AS
|
|---|
| 8 | SELECT
|
|---|
| 9 | v.variant_id,
|
|---|
| 10 | v.sku,
|
|---|
| 11 | p.name AS product_name,
|
|---|
| 12 | p.brand,
|
|---|
| 13 | c.category_name,
|
|---|
| 14 | prof.first_name || ' ' || prof.last_name AS seller_name,
|
|---|
| 15 | SUM(ii.quantity) AS seller_stock,
|
|---|
| 16 | v.price,
|
|---|
| 17 | STRING_AGG(DISTINCT wh.location, ', ') AS available_in_cities,
|
|---|
| 18 | CASE
|
|---|
| 19 | WHEN SUM(ii.quantity) >= 10 THEN 'IN_STOCK'
|
|---|
| 20 | WHEN SUM(ii.quantity) > 0 THEN 'LOW_STOCK'
|
|---|
| 21 | ELSE 'OUT_OF_STOCK'
|
|---|
| 22 | END AS stock_status
|
|---|
| 23 | FROM product_variants v
|
|---|
| 24 | JOIN products p ON v.product_id = p.product_id
|
|---|
| 25 | JOIN categories c ON p.category_id = c.category_id
|
|---|
| 26 | JOIN inventory_items ii ON v.variant_id = ii.variant_id
|
|---|
| 27 | JOIN warehouses wh ON ii.warehouse_id = wh.warehouse_id
|
|---|
| 28 | JOIN user_profiles prof ON wh.user_id = prof.user_id
|
|---|
| 29 | WHERE ii.quantity > 0
|
|---|
| 30 | GROUP BY
|
|---|
| 31 | v.variant_id,
|
|---|
| 32 | v.sku,
|
|---|
| 33 | p.name,
|
|---|
| 34 | p.brand,
|
|---|
| 35 | c.category_name,
|
|---|
| 36 | prof.user_id,
|
|---|
| 37 | prof.first_name,
|
|---|
| 38 | prof.last_name,
|
|---|
| 39 | v.price
|
|---|
| 40 | ORDER BY
|
|---|
| 41 | p.name,
|
|---|
| 42 | seller_name;
|
|---|
| 43 |
|
|---|
| 44 | --======
|
|---|
| 45 | --2 order command center full +
|
|---|
| 46 | --======
|
|---|
| 47 | DROP VIEW IF EXISTS v_order_command_center_full;
|
|---|
| 48 |
|
|---|
| 49 | CREATE VIEW v_order_command_center_full AS
|
|---|
| 50 | SELECT
|
|---|
| 51 | o.order_id,
|
|---|
| 52 | o.status AS order_status,
|
|---|
| 53 | o.order_date,
|
|---|
| 54 | cp.first_name || ' ' || cp.last_name AS customer_name,
|
|---|
| 55 | cu.email AS customer_email,
|
|---|
| 56 | o.total_amount AS order_total,
|
|---|
| 57 | sm.method_name AS shipping_via,
|
|---|
| 58 | a.city || ', ' || a.street_address AS delivery_destination,
|
|---|
| 59 | s.tracking_number,
|
|---|
| 60 | s.status AS shipment_status,
|
|---|
| 61 | cour_p.first_name || ' ' || cour_p.last_name AS assigned_courier,
|
|---|
| 62 | (SELECT string_agg(p.name || ' (Qty: ' || oi.quantity || ')', ', ')
|
|---|
| 63 | FROM ORDER_ITEMS oi
|
|---|
| 64 | JOIN PRODUCT_VARIANTS v ON oi.variant_id = v.variant_id
|
|---|
| 65 | JOIN PRODUCTS p ON v.product_id = p.product_id
|
|---|
| 66 | WHERE oi.order_id = o.order_id) AS items_ordered
|
|---|
| 67 | FROM ORDERS o
|
|---|
| 68 | JOIN USERS cu ON o.user_id = cu.user_id
|
|---|
| 69 | JOIN USER_PROFILES cp ON cu.user_id = cp.user_id
|
|---|
| 70 | JOIN SHIPPING_METHODS sm ON o.shipping_method_id = sm.method_id
|
|---|
| 71 | JOIN ADDRESSES a ON o.user_id = a.user_id AND a.is_default = true
|
|---|
| 72 | LEFT JOIN SHIPMENTS s ON o.order_id = s.order_id
|
|---|
| 73 | LEFT JOIN USER_PROFILES cour_p ON s.courier_id = cour_p.user_id
|
|---|
| 74 | WHERE o.status <> 'CART';
|
|---|
| 75 |
|
|---|
| 76 | --======
|
|---|
| 77 | --3 seller items fulfillment +
|
|---|
| 78 | --======
|
|---|
| 79 | DROP VIEW IF EXISTS v_seller_item_fulfillment;
|
|---|
| 80 |
|
|---|
| 81 | CREATE OR REPLACE VIEW v_seller_item_fulfillment AS
|
|---|
| 82 | SELECT
|
|---|
| 83 | seller_p.user_id AS seller_id,
|
|---|
| 84 | seller_p.first_name AS seller_store_name,
|
|---|
| 85 | wh.warehouse_name AS pickup_location,
|
|---|
| 86 |
|
|---|
| 87 | m.name AS product_brand,
|
|---|
| 88 |
|
|---|
| 89 | o.order_id,
|
|---|
| 90 | o.order_date,
|
|---|
| 91 | cust_p.first_name || ' ' || cust_p.last_name AS customer_name,
|
|---|
| 92 |
|
|---|
| 93 | p.name AS product_name,
|
|---|
| 94 | v.sku,
|
|---|
| 95 | oi.quantity,
|
|---|
| 96 | oi.unit_price,
|
|---|
| 97 | (oi.quantity * oi.unit_price)::numeric(12,2) AS item_total_revenue,
|
|---|
| 98 |
|
|---|
| 99 | s.status AS shipment_status,
|
|---|
| 100 | cour_p.first_name AS courier_service
|
|---|
| 101 | FROM ORDER_ITEMS oi
|
|---|
| 102 | JOIN PRODUCT_VARIANTS v ON oi.variant_id = v.variant_id
|
|---|
| 103 | JOIN PRODUCTS p ON v.product_id = p.product_id
|
|---|
| 104 | JOIN MANUFACTURERS m ON v.manufacturer_id = m.manufacturer_id
|
|---|
| 105 | JOIN ORDERS o ON oi.order_id = o.order_id
|
|---|
| 106 | JOIN USER_PROFILES cust_p ON o.user_id = cust_p.user_id
|
|---|
| 107 |
|
|---|
| 108 | LEFT JOIN SHIPMENT_ITEMS si ON oi.order_item_id = si.order_item_id
|
|---|
| 109 | LEFT JOIN PRODUCT_INSTANCES pi ON si.instance_id = pi.instance_id
|
|---|
| 110 | LEFT JOIN WAREHOUSES wh ON pi.warehouse_id = wh.warehouse_id
|
|---|
| 111 | LEFT JOIN USER_PROFILES seller_p ON wh.user_id = seller_p.user_id
|
|---|
| 112 |
|
|---|
| 113 | LEFT JOIN SHIPMENTS s ON o.order_id = s.order_id
|
|---|
| 114 | LEFT JOIN USER_PROFILES cour_p ON s.courier_id = cour_p.user_id
|
|---|
| 115 |
|
|---|
| 116 | WHERE o.status NOT IN ('CART', 'CANCELLED');
|
|---|
| 117 |
|
|---|
| 118 | --======
|
|---|
| 119 | --4 product selection matrix +
|
|---|
| 120 | --======
|
|---|
| 121 | DROP VIEW IF EXISTS v_product_selection_matrix;
|
|---|
| 122 |
|
|---|
| 123 | CREATE VIEW v_product_selection_matrix AS
|
|---|
| 124 | SELECT
|
|---|
| 125 | p.product_id,
|
|---|
| 126 | p.name AS product_model,
|
|---|
| 127 | v.variant_id,
|
|---|
| 128 | v.sku,
|
|---|
| 129 | v.price,
|
|---|
| 130 | v.stock_total,
|
|---|
| 131 | (SELECT string_agg(pa.attribute_name || ': ' || av.attr_value, ', ')
|
|---|
| 132 | FROM PRODUCT_ATTRIBUTE_VALUES av
|
|---|
| 133 | JOIN PRODUCT_ATTRIBUTES pa ON av.attribute_id = pa.attribute_id
|
|---|
| 134 | WHERE av.variant_id = v.variant_id) AS selection_specs,
|
|---|
| 135 | v.product_variant_picture_url AS image_url
|
|---|
| 136 | FROM PRODUCTS p
|
|---|
| 137 | JOIN PRODUCT_VARIANTS v ON p.product_id = v.product_id
|
|---|
| 138 | WHERE v.stock_total > 0
|
|---|
| 139 | ORDER BY p.name, v.price ASC;
|
|---|
| 140 |
|
|---|
| 141 | --======
|
|---|
| 142 | --5 product average rating +
|
|---|
| 143 | --======
|
|---|
| 144 | DROP VIEW IF EXISTS v_product_ratings_avg;
|
|---|
| 145 |
|
|---|
| 146 | CREATE VIEW v_product_ratings_avg AS
|
|---|
| 147 | SELECT
|
|---|
| 148 | p.product_id,
|
|---|
| 149 | p.name AS product_name,
|
|---|
| 150 | ROUND(AVG(r.rating), 2) AS average_rating,
|
|---|
| 151 | COUNT(r.review_id) AS total_reviews,
|
|---|
| 152 | MIN(r.rating) AS worst_rating,
|
|---|
| 153 | MAX(r.rating) AS best_rating
|
|---|
| 154 | FROM PRODUCTS p
|
|---|
| 155 | LEFT JOIN REVIEWS r ON p.product_id = r.product_id
|
|---|
| 156 | GROUP BY p.product_id, p.name;
|
|---|
| 157 |
|
|---|
| 158 | --======
|
|---|
| 159 | --6 monthly sales report +
|
|---|
| 160 | --======
|
|---|
| 161 | DROP VIEW IF EXISTS v_monthly_sales_report;
|
|---|
| 162 |
|
|---|
| 163 | CREATE VIEW v_monthly_sales_report AS
|
|---|
| 164 | SELECT
|
|---|
| 165 | TO_CHAR(order_date, 'YYYY-MM') AS sales_month,
|
|---|
| 166 | COUNT(order_id) AS total_orders,
|
|---|
| 167 | SUM(total_amount) AS gross_revenue,
|
|---|
| 168 | ROUND(AVG(total_amount), 2) AS average_order_value
|
|---|
| 169 | FROM ORDERS
|
|---|
| 170 | WHERE status IN ('PAID', 'SHIPPED', 'COMPLETED')
|
|---|
| 171 | GROUP BY sales_month
|
|---|
| 172 | ORDER BY sales_month DESC;
|
|---|
| 173 |
|
|---|
| 174 | --======
|
|---|
| 175 | --7 seller revenue report +
|
|---|
| 176 | --======
|
|---|
| 177 | DROP VIEW IF EXISTS v_seller_revenue_report;
|
|---|
| 178 |
|
|---|
| 179 | CREATE VIEW v_seller_revenue_report AS
|
|---|
| 180 | SELECT
|
|---|
| 181 | prof.user_id AS seller_id,
|
|---|
| 182 | prof.first_name AS seller_name,
|
|---|
| 183 | COUNT(DISTINCT o.order_id) AS successful_orders_count,
|
|---|
| 184 | COUNT(si.shipment_item_id) AS total_items_sold,
|
|---|
| 185 | SUM(oi.unit_price)::numeric(14,2) AS total_gross_revenue,
|
|---|
| 186 | ROUND(AVG(oi.unit_price), 2) AS avg_item_price,
|
|---|
| 187 | COUNT(DISTINCT p.product_id) AS unique_products_sold
|
|---|
| 188 | FROM user_profiles prof
|
|---|
| 189 | JOIN warehouses wh ON prof.user_id = wh.user_id
|
|---|
| 190 | JOIN product_instances pi ON wh.warehouse_id = pi.warehouse_id
|
|---|
| 191 | JOIN shipment_items si ON pi.instance_id = si.instance_id
|
|---|
| 192 | JOIN order_items oi ON si.order_item_id = oi.order_item_id
|
|---|
| 193 | JOIN orders o ON oi.order_id = o.order_id
|
|---|
| 194 | JOIN product_variants v ON oi.variant_id = v.variant_id
|
|---|
| 195 | JOIN products p ON v.product_id = p.product_id
|
|---|
| 196 | WHERE o.status IN ('PAID', 'SHIPPED', 'COMPLETED')
|
|---|
| 197 | GROUP BY prof.user_id, prof.first_name
|
|---|
| 198 | ORDER BY total_gross_revenue DESC;
|
|---|
| 199 |
|
|---|
| 200 | --======
|
|---|
| 201 | --8 active warranties -
|
|---|
| 202 | --======
|
|---|
| 203 | DROP VIEW IF EXISTS v_active_warranty_tracker;
|
|---|
| 204 | CREATE VIEW v_active_warranty_tracker AS
|
|---|
| 205 | SELECT
|
|---|
| 206 | u.email AS customer_email,
|
|---|
| 207 | prof.first_name || ' ' || prof.last_name AS customer_name,
|
|---|
| 208 | p.name AS product_name,
|
|---|
| 209 | pi.serial_number,
|
|---|
| 210 | o.order_date AS purchase_date,
|
|---|
| 211 | w.duration_months,
|
|---|
| 212 | (o.order_date + (w.duration_months || ' months')::interval)::date AS warranty_expiry_date,
|
|---|
| 213 | CASE
|
|---|
| 214 | WHEN (o.order_date + (w.duration_months || ' months')::interval) > NOW() THEN 'ACTIVE'
|
|---|
| 215 | ELSE 'EXPIRED'
|
|---|
| 216 | END AS warranty_status
|
|---|
| 217 | FROM warranties w
|
|---|
| 218 | JOIN product_instances pi ON w.instance_id = pi.instance_id
|
|---|
| 219 | JOIN shipment_items si ON pi.instance_id = si.instance_id
|
|---|
| 220 | JOIN order_items oi ON si.order_item_id = oi.order_item_id
|
|---|
| 221 | JOIN orders o ON oi.order_id = o.order_id
|
|---|
| 222 | JOIN users u ON o.user_id = u.user_id
|
|---|
| 223 | JOIN user_profiles prof ON u.user_id = prof.user_id
|
|---|
| 224 | JOIN product_variants v ON pi.variant_id = v.variant_id
|
|---|
| 225 | JOIN products p ON v.product_id = p.product_id;
|
|---|
| 226 |
|
|---|
| 227 | --======
|
|---|
| 228 | --9 inventory drift sync report +
|
|---|
| 229 | --======
|
|---|
| 230 | DROP VIEW IF EXISTS v_inventory_drift_sync_report;
|
|---|
| 231 | CREATE VIEW v_inventory_drift_sync_report AS
|
|---|
| 232 | WITH instance_counts AS (
|
|---|
| 233 | SELECT variant_id, COUNT(*) AS physical_available_count
|
|---|
| 234 | FROM product_instances
|
|---|
| 235 | WHERE status = 'AVAILABLE'
|
|---|
| 236 | GROUP BY variant_id
|
|---|
| 237 | ),
|
|---|
| 238 | warehouse_sums AS (
|
|---|
| 239 | SELECT variant_id, SUM(quantity) AS inventory_stock
|
|---|
| 240 | FROM inventory_items
|
|---|
| 241 | GROUP BY variant_id
|
|---|
| 242 | )
|
|---|
| 243 | SELECT
|
|---|
| 244 | v.variant_id,
|
|---|
| 245 | p.name AS product_name,
|
|---|
| 246 | v.sku,
|
|---|
| 247 | v.stock_total AS master_stock,
|
|---|
| 248 | COALESCE(w.inventory_stock, 0) AS aggregate_inventory_stock,
|
|---|
| 249 | COALESCE(ic.physical_available_count, 0) AS available_physical_instances,
|
|---|
| 250 | v.stock_total - COALESCE(w.inventory_stock, 0) AS master_vs_inventory_drift,
|
|---|
| 251 | COALESCE(w.inventory_stock, 0) - COALESCE(ic.physical_available_count, 0) AS inventory_vs_instance_drift
|
|---|
| 252 | FROM product_variants v
|
|---|
| 253 | JOIN products p ON v.product_id = p.product_id
|
|---|
| 254 | LEFT JOIN warehouse_sums w ON v.variant_id = w.variant_id
|
|---|
| 255 | LEFT JOIN instance_counts ic ON v.variant_id = ic.variant_id;
|
|---|
| 256 |
|
|---|
| 257 | --======
|
|---|
| 258 | --10 cart value view because CART.total_amount must remain NULL
|
|---|
| 259 | --======
|
|---|
| 260 | DROP VIEW IF EXISTS v_cart_current_value;
|
|---|
| 261 | CREATE VIEW v_cart_current_value AS
|
|---|
| 262 | SELECT
|
|---|
| 263 | o.order_id,
|
|---|
| 264 | o.user_id,
|
|---|
| 265 | COUNT(oi.order_item_id) AS cart_item_rows,
|
|---|
| 266 | SUM(oi.quantity) AS cart_total_units,
|
|---|
| 267 | SUM(oi.quantity * oi.unit_price)::numeric(12,2) AS cart_current_value
|
|---|
| 268 | FROM orders o
|
|---|
| 269 | JOIN order_items oi ON oi.order_id = o.order_id
|
|---|
| 270 | WHERE o.status = 'CART'
|
|---|
| 271 | GROUP BY o.order_id, o.user_id;
|
|---|
| 272 |
|
|---|
| 273 | --======
|
|---|
| 274 | --11 derived fulfillment status for each order item.
|
|---|
| 275 | --======
|
|---|
| 276 | DROP VIEW IF EXISTS v_order_item_fulfillment_status;
|
|---|
| 277 | CREATE VIEW v_order_item_fulfillment_status AS
|
|---|
| 278 | SELECT
|
|---|
| 279 | oi.order_item_id,
|
|---|
| 280 | oi.order_id,
|
|---|
| 281 | oi.variant_id,
|
|---|
| 282 | oi.quantity AS ordered_quantity,
|
|---|
| 283 | COUNT(si.shipment_item_id)::int AS shipped_quantity,
|
|---|
| 284 | (oi.quantity - COUNT(si.shipment_item_id))::int AS missing_quantity,
|
|---|
| 285 | CASE
|
|---|
| 286 | WHEN COUNT(si.shipment_item_id) = 0 THEN 'NOT_SHIPPED'
|
|---|
| 287 | WHEN COUNT(si.shipment_item_id) < oi.quantity THEN 'PARTIALLY_SHIPPED'
|
|---|
| 288 | ELSE 'FULLY_SHIPPED'
|
|---|
| 289 | END AS fulfillment_status
|
|---|
| 290 | FROM order_items oi
|
|---|
| 291 | LEFT JOIN shipment_items si ON si.order_item_id = oi.order_item_id
|
|---|
| 292 | GROUP BY oi.order_item_id, oi.order_id, oi.variant_id, oi.quantity;
|
|---|
| 293 |
|
|---|
| 294 | --======
|
|---|
| 295 | --12 shipment + main payment summary through order_id.
|
|---|
| 296 | --======
|
|---|
| 297 | DROP VIEW IF EXISTS v_shipment_payment_summary;
|
|---|
| 298 | CREATE VIEW v_shipment_payment_summary AS
|
|---|
| 299 | SELECT
|
|---|
| 300 | s.shipment_id,
|
|---|
| 301 | s.order_id,
|
|---|
| 302 | s.status AS shipment_status,
|
|---|
| 303 | s.tracking_number,
|
|---|
| 304 | s.shipped_date,
|
|---|
| 305 | s.estimated_arrival,
|
|---|
| 306 | s.delivered_date,
|
|---|
| 307 | s.courier_id,
|
|---|
| 308 | p.payment_id,
|
|---|
| 309 | p.payment_method,
|
|---|
| 310 | p.amount AS payment_amount,
|
|---|
| 311 | p.payment_status,
|
|---|
| 312 | p.payment_date
|
|---|
| 313 | FROM shipments s
|
|---|
| 314 | LEFT JOIN payments p ON p.order_id = s.order_id
|
|---|
| 315 | AND p.transaction_id = 'TXN-' || s.order_id || '-MAIN';
|
|---|
| 316 |
|
|---|
| 317 | --======
|
|---|
| 318 | --13 customer items for delivery +
|
|---|
| 319 | --======
|
|---|
| 320 | DROP VIEW IF EXISTS v_customer_order_tracking;
|
|---|
| 321 |
|
|---|
| 322 | CREATE VIEW v_customer_order_tracking AS
|
|---|
| 323 | SELECT
|
|---|
| 324 | o.user_id AS customer_id,
|
|---|
| 325 | o.order_id,
|
|---|
| 326 | o.order_date,
|
|---|
| 327 | o.status AS order_status,
|
|---|
| 328 | o.total_amount,
|
|---|
| 329 |
|
|---|
| 330 | (
|
|---|
| 331 | SELECT string_agg(p.name || ' (x' || oi.quantity || ')', ', ')
|
|---|
| 332 | FROM order_items oi
|
|---|
| 333 | JOIN product_variants v ON oi.variant_id = v.variant_id
|
|---|
| 334 | JOIN products p ON v.product_id = p.product_id
|
|---|
| 335 | WHERE oi.order_id = o.order_id
|
|---|
| 336 | ) AS items_list,
|
|---|
| 337 |
|
|---|
| 338 | (
|
|---|
| 339 | SELECT string_agg(DISTINCT seller_prof.first_name || ' ' || seller_prof.last_name, ' & ')
|
|---|
| 340 | FROM order_items oi
|
|---|
| 341 | JOIN shipment_items si ON si.order_item_id = oi.order_item_id
|
|---|
| 342 | JOIN product_instances pi ON pi.instance_id = si.instance_id
|
|---|
| 343 | JOIN warehouses wh ON wh.warehouse_id = pi.warehouse_id
|
|---|
| 344 | JOIN user_profiles seller_prof ON seller_prof.user_id = wh.user_id
|
|---|
| 345 | WHERE oi.order_id = o.order_id
|
|---|
| 346 | ) AS sellers,
|
|---|
| 347 |
|
|---|
| 348 | s.tracking_number,
|
|---|
| 349 | s.status AS shipping_status,
|
|---|
| 350 | c_prof.first_name || ' ' || c_prof.last_name AS courier_name,
|
|---|
| 351 | s.estimated_arrival
|
|---|
| 352 | FROM orders o
|
|---|
| 353 | LEFT JOIN shipments s ON o.order_id = s.order_id
|
|---|
| 354 | LEFT JOIN user_profiles c_prof ON s.courier_id = c_prof.user_id
|
|---|
| 355 | WHERE o.status <> 'CART'
|
|---|
| 356 | ORDER BY o.order_date DESC;
|
|---|