Advertisement
aadddrr

Query Sales Dashboard: Gross Profit

Nov 22nd, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --GetCurrentGrossProfitAmountByMonth
  2. WITH tt_cogs_price AS (
  3.     SELECT A.ou_id, B.salesman_id, SUBSTRING(A.ref_doc_date, 1, 6) AS year_month,
  4.         A.ref_item_id,
  5.         SUM(
  6.             CASE WHEN A.curr_code <> 'IDR' THEN
  7.                 CASE WHEN A.ref_doc_type_id IN (311, 312) AND A.do_receipt_item_id = -99 THEN
  8.                     A.qty_dlv_so * D.price * f_commercial_rate(10 /*(tenantId)*/, A.ref_doc_date, D.curr_code, 'IDR')
  9.                 ELSE
  10.                     -1 * A.qty_dlv_so * D.price * f_commercial_rate(10 /*(tenantId)*/, A.ref_doc_date, D.curr_code, 'IDR')
  11.                 END
  12.             ELSE
  13.                 CASE WHEN A.ref_doc_type_id IN (311, 312) AND A.do_receipt_item_id = -99 THEN
  14.                     A.qty_dlv_so * D.price
  15.                 ELSE
  16.                     -1 * A.qty_dlv_so * D.price
  17.                 END
  18.             END
  19.         ) AS cogs_amount
  20.     FROM sl_so_balance_invoice A
  21.     INNER JOIN sl_so B ON A.so_id = B.so_id
  22.     INNER JOIN sl_do_item C ON A.ref_item_id = C.do_item_id
  23.     INNER JOIN sl_so_item_purchasing D ON C.ref_id = D.so_item_id
  24.     WHERE A.ou_id = 10 --ouId
  25.         AND B.salesman_id = 2616 --salesmanId
  26.         AND SUBSTRING(A.ref_doc_date, 1, 6) = '201609' --yearMonth
  27.     GROUP BY A.ou_id, B.salesman_id, SUBSTRING(A.ref_doc_date, 1, 6), A.ref_item_id
  28. ), tt_current_sales AS (
  29.     SELECT A.ou_id, B.salesman_id, SUBSTRING(A.ref_doc_date, 1, 6) AS year_month,
  30.         A.ref_item_id,
  31.         SUM(
  32.             CASE WHEN A.curr_code <> 'IDR' THEN
  33.                 CASE WHEN A.ref_doc_type_id IN (311, 312) THEN
  34.                     A.item_amount * f_commercial_rate(10 /*(tenantId)*/, A.ref_doc_date, A.curr_code, 'IDR')
  35.                 ELSE
  36.                     -1 * A.item_amount * f_commercial_rate(10 /*(tenantId)*/, A.ref_doc_date, A.curr_code, 'IDR')
  37.                 END
  38.             ELSE
  39.                 CASE WHEN A.ref_doc_type_id IN (311, 312) THEN
  40.                     A.item_amount
  41.                 ELSE
  42.                     -1 * A.item_amount
  43.                 END
  44.             END
  45.         ) AS sales_amount
  46.     FROM sl_so_balance_invoice A
  47.     INNER JOIN sl_so B ON A.so_id = B.so_id
  48.     INNER JOIN sl_do C ON A.ref_id = C.do_id
  49.     INNER JOIN sl_so_item_purchasing D ON C.ref_id = D.so_item_id
  50.     WHERE A.ou_id = 10 --ouId
  51.         AND B.salesman_id = 2616 --salesmanId
  52.         AND SUBSTRING(A.ref_doc_date, 1, 6) = '201609' --yearMonth
  53.     GROUP BY A.ou_id, B.salesman_id, SUBSTRING(A.ref_doc_date, 1, 6), A.ref_item_id
  54. )
  55. SELECT A.ou_id, A.salesman_id, A.year_month, SUM(A.sales_amount - B.cogs_amount) AS gross_profit_amount
  56. FROM tt_current_sales A
  57. LEFT OUTER JOIN tt_cogs_price B ON A.ou_id = B.ou_id
  58.     AND A.salesman_id = B.salesman_id
  59.     AND A.year_month = B.year_month
  60.     AND A.ref_item_id = B.ref_item_id
  61. GROUP BY A.ou_id, A.salesman_id, A.year_month
  62.  
  63. --GetCurrentGrossProfitPercentageByMonth
  64. WITH tt_cogs_price AS (
  65.     SELECT A.ou_id, B.salesman_id, SUBSTRING(A.ref_doc_date, 1, 6) AS year_month,
  66.         A.ref_item_id,
  67.         SUM(
  68.             CASE WHEN A.curr_code <> 'IDR' THEN
  69.                 CASE WHEN A.ref_doc_type_id IN (311, 312) AND A.do_receipt_item_id = -99 THEN
  70.                     A.qty_dlv_so * D.price * f_commercial_rate(10 /*(tenantId)*/, A.ref_doc_date, D.curr_code, 'IDR')
  71.                 ELSE
  72.                     -1 * A.qty_dlv_so * D.price * f_commercial_rate(10 /*(tenantId)*/, A.ref_doc_date, D.curr_code, 'IDR')
  73.                 END
  74.             ELSE
  75.                 CASE WHEN A.ref_doc_type_id IN (311, 312) AND A.do_receipt_item_id = -99 THEN
  76.                     A.qty_dlv_so * D.price
  77.                 ELSE
  78.                     -1 * A.qty_dlv_so * D.price
  79.                 END
  80.             END
  81.         ) AS cogs_amount
  82.     FROM sl_so_balance_invoice A
  83.     INNER JOIN sl_so B ON A.so_id = B.so_id
  84.     INNER JOIN sl_do_item C ON A.ref_item_id = C.do_item_id
  85.     INNER JOIN sl_so_item_purchasing D ON C.ref_id = D.so_item_id
  86.     WHERE A.ou_id = 10 --ouId
  87.         AND B.salesman_id = 2616 --salesmanId
  88.         AND SUBSTRING(A.ref_doc_date, 1, 6) = '201609' --yearMonth
  89.     GROUP BY A.ou_id, B.salesman_id, SUBSTRING(A.ref_doc_date, 1, 6), A.ref_item_id
  90. ), tt_current_sales AS (
  91.     SELECT A.ou_id, B.salesman_id, SUBSTRING(A.ref_doc_date, 1, 6) AS year_month,
  92.         A.ref_item_id,
  93.         SUM(
  94.             CASE WHEN A.curr_code <> 'IDR' THEN
  95.                 CASE WHEN A.ref_doc_type_id IN (311, 312) THEN
  96.                     A.item_amount * f_commercial_rate(10 /*(tenantId)*/, A.ref_doc_date, A.curr_code, 'IDR')
  97.                 ELSE
  98.                     -1 * A.item_amount * f_commercial_rate(10 /*(tenantId)*/, A.ref_doc_date, A.curr_code, 'IDR')
  99.                 END
  100.             ELSE
  101.                 CASE WHEN A.ref_doc_type_id IN (311, 312) THEN
  102.                     A.item_amount
  103.                 ELSE
  104.                     -1 * A.item_amount
  105.                 END
  106.             END
  107.         ) AS sales_amount
  108.     FROM sl_so_balance_invoice A
  109.     INNER JOIN sl_so B ON A.so_id = B.so_id
  110.     INNER JOIN sl_do C ON A.ref_id = C.do_id
  111.     INNER JOIN sl_so_item_purchasing D ON C.ref_id = D.so_item_id
  112.     WHERE A.ou_id = 10 --ouId
  113.         AND B.salesman_id = 2616 --salesmanId
  114.         AND SUBSTRING(A.ref_doc_date, 1, 6) = '201609' --yearMonth
  115.     GROUP BY A.ou_id, B.salesman_id, SUBSTRING(A.ref_doc_date, 1, 6), A.ref_item_id
  116. )
  117. SELECT A.ou_id, A.salesman_id, A.year_month,
  118.     CASE WHEN SUM(A.sales_amount) <> 0 THEN
  119.         (SUM(A.sales_amount) - SUM(B.cogs_amount)) / SUM(A.sales_amount)
  120.     ELSE
  121.         1
  122.     END * 100 AS gross_profit_percentage
  123. FROM tt_current_sales A
  124. LEFT OUTER JOIN tt_cogs_price B ON A.ou_id = B.ou_id
  125.     AND A.salesman_id = B.salesman_id
  126.     AND A.year_month = B.year_month
  127.     AND A.ref_item_id = B.ref_item_id
  128. GROUP BY A.ou_id, A.salesman_id, A.year_month
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement