Advertisement
nicmackenzie

queries

Dec 31st, 2024 (edited)
1,155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 3.66 KB | None | 0 0
  1. DELIMITER $$
  2. CREATE PROCEDURE `sp_get_dashboard_sales_by_region`(
  3.     IN duration VARCHAR(15),
  4.     IN input_date DATE
  5. )
  6. BEGIN
  7.     DECLARE current_month_start DATE;
  8.     IF duration = 'current' THEN
  9.         SET current_month_start = DATE_FORMAT(input_date, '%Y-%m-01');
  10.         SELECT
  11.             COALESCE(h.sale_area,'uncategorized') as area,
  12.             COALESCE(sum(d.net_amount),0) as 'value'
  13.         FROM
  14.             sale_headers h
  15.             join sale_details d on h.id = d.header_id
  16.         WHERE
  17.             h.sale_date between current_month_start and input_date
  18.         GROUP BY
  19.             h.sale_area;
  20.      ELSE
  21.         SELECT
  22.             COALESCE(h.sale_area,'uncategorized') as area,
  23.             COALESCE(sum(d.net_amount),0) as 'value'
  24.         FROM
  25.             sale_headers h
  26.             join sale_details d on h.id = d.header_id
  27.         WHERE
  28.             h.sale_date <= input_date
  29.         GROUP BY
  30.             h.sale_area;
  31.      END IF;
  32. END$$
  33. DELIMITER ;
  34.  
  35. DELIMITER $$
  36. CREATE PROCEDURE `sp_get_dashboard_sales_by_product`(
  37.     IN duration VARCHAR(15),
  38.     IN input_date DATE
  39. )
  40. BEGIN
  41.     DECLARE current_month_start DATE DEFAULT NULL;
  42.  
  43.     IF duration = 'current' THEN
  44.         SET current_month_start = DATE_FORMAT(input_date, '%Y-%m-01');
  45.  
  46.         SELECT
  47.             p.name AS product,
  48.             COALESCE(SUM(s.qty * -1), 0) AS `value`
  49.         FROM
  50.             stock_movements s
  51.             JOIN products p ON s.product_id = p.id
  52.         WHERE
  53.             s.transaction_date BETWEEN current_month_start AND input_date
  54.             AND s.transaction_type IN ('sale', 'invoice')
  55.         GROUP BY
  56.             p.name;
  57.  
  58.     ELSE
  59.         SELECT
  60.             p.name AS product,
  61.             COALESCE(SUM(s.qty * -1), 0) AS `value`
  62.         FROM
  63.             stock_movements s
  64.             JOIN products p ON s.product_id = p.id
  65.         WHERE
  66.             s.transaction_date <= input_date
  67.             AND s.transaction_type IN ('sale', 'invoice')
  68.         GROUP BY
  69.             p.name;
  70.     END IF;
  71. END$$
  72. DELIMITER ;
  73.  
  74. DELIMITER $$
  75. CREATE PROCEDURE `sp_get_daily_revenue_expense`(
  76.     IN duration VARCHAR(15),
  77.     IN input_date DATE
  78. )
  79. BEGIN
  80.     DECLARE start_date DATE;
  81.     DECLARE end_date DATE;
  82.  
  83.     IF duration = 'current' THEN
  84.         SET start_date = DATE_FORMAT(input_date, '%Y-%m-01');
  85.     ELSE
  86.         SET start_date = input_date - INTERVAL 90 DAY;      
  87.     END IF;
  88.  
  89.     SET end_date = input_date;  
  90.  
  91.     SELECT
  92.         dates.date AS `date`,
  93.         COALESCE(SUM(CASE WHEN l.account_type_id = 1 THEN round(l.credit/100,2) ELSE 0 END), 0) AS `revenue`,
  94.         COALESCE(SUM(CASE WHEN l.account_type_id = 2 THEN round(l.debit/100,2) ELSE 0 END), 0) AS `expense`
  95.     FROM
  96.         (
  97.             SELECT start_date + INTERVAL seq DAY AS `date`
  98.             FROM
  99.                 (SELECT @row := @row + 1 AS seq FROM
  100.                     (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
  101.                      UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
  102.                      UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a,
  103.                     (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
  104.                      UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
  105.                      UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b,
  106.                     (SELECT @row := -1) r
  107.                 ) seq_generator
  108.             WHERE start_date + INTERVAL seq DAY <= end_date
  109.         ) AS dates
  110.     LEFT JOIN ledgers l
  111.         ON l.date = dates.date
  112.     WHERE
  113.         l.deleted_at IS NULL
  114.     GROUP BY dates.date
  115.     ORDER BY dates.date;
  116. END$$
  117. DELIMITER ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement