Advertisement
aadddrr

r_report_sales_amount

Jul 19th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION r_report_sales_amount(bigint, bigint, character varying, character varying)
  2.   RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5.     vRefHeader          REFCURSOR := 'refHeader';
  6.     vRefDetail          REFCURSOR := 'refDetail';
  7.  
  8.     pTenantId           ALIAS FOR $1;
  9.     pOuId               ALIAS FOR $2;
  10.     pPeriodFrom         ALIAS FOR $3;
  11.     pPeriodTo           ALIAS FOR $4;
  12.    
  13.     vReportTitle                        character varying(50) := 'REPORT SALES AMOUNT';
  14.     vReturnSoMlmDocTypeId               bigint := 562;
  15.     vBuybackDocTypeId                   bigint := 563;
  16.  
  17. BEGIN
  18.  
  19. OPEN vRefHeader FOR
  20.     SELECT vReportTitle AS report_title, pPeriodFrom AS period_from, pPeriodTo AS period_to;
  21. RETURN NEXT vRefHeader;
  22.  
  23.  
  24. OPEN vRefDetail FOR
  25.  
  26.     WITH summary_rekap AS (
  27.     SELECT A.ref_doc_date,
  28.         SUM(
  29.             CASE WHEN A.ref_doc_type_id = 502 THEN
  30.     --      -1*(A.item_amount)
  31.             -1*(A.item_amount+COALESCE(B.tax_amount,0))
  32.             ELSE
  33.             (A.item_amount+COALESCE(B.tax_amount,0))
  34.     --      (A.item_amount)    
  35.             END
  36.         ) AS total_amount  
  37.     FROM sl_so_balance_invoice A
  38.     LEFT JOIN   sl_so_balance_invoice_tax B ON A.tenant_id = B.tenant_id
  39.         AND A.ou_id=B.ou_id
  40.         AND A.partner_id =B.partner_id
  41.         AND A.ref_doc_type_id=B.ref_doc_type_id
  42.         AND A.ref_id = B.ref_id
  43.         AND A.ref_item_id=B.ref_item_id
  44.         AND A.do_receipt_item_id=B.do_receipt_item_id
  45.     WHERE A.tenant_id = pTenantId
  46.         AND A.ou_id = pOuId
  47.         AND A.ref_doc_date BETWEEN pPeriodFrom AND pPeriodTo
  48.     GROUP BY A.ref_doc_date
  49.     UNION ALL
  50.     SELECT A.ref_doc_date,
  51.         SUM(
  52.             /*
  53.             CASE WHEN A.ref_doc_type_id IN(562,563) THEN
  54.             (-1*(A.item_amount - (A.item_amount * 0.01 * A.discount_member_percentage) - (A.item_amount * 0.01 * A.discount_member_percentage * 0.01 * A.discount_promo_percentage)))
  55.             /((100+tax_percentage)/100)
  56.             ELSE
  57.             (A.item_amount - (A.item_amount * 0.01 * A.discount_member_percentage) - (A.item_amount * 0.01 * A.discount_member_percentage * 0.01 * A.discount_promo_percentage))
  58.             /((100+tax_percentage)/100)
  59.             END
  60.             */
  61.         CASE WHEN A.ref_doc_type_id IN(562,563) THEN
  62. --          -1*((A.item_amount_member_price)-trunc(A.item_amount_member_price*A.commission_percentage/100))
  63.             -1*((A.item_amount_member_price) - A.commission_amount)
  64.         ELSE
  65. --          ((A.item_amount_member_price)-trunc(A.item_amount_member_price*A.commission_percentage/100))
  66.             ((A.item_amount_member_price) - A.commission_amount)
  67.         END
  68.         ) AS total_amount  
  69.     FROM sl_so_mlm_balance_invoice A
  70.     WHERE A.tenant_id = pTenantId
  71.         AND A.ou_id = pOuId
  72.         AND A.ref_doc_date BETWEEN pPeriodFrom AND pPeriodTo
  73.     GROUP BY A.ref_doc_date
  74.     )
  75.     SELECT A.ref_doc_date AS tanggal, SUM(A.total_amount) AS jumlah_sales
  76.     FROM summary_rekap A
  77.     WHERE A.ref_doc_date BETWEEN pPeriodFrom AND pPeriodTo
  78.     GROUP BY A.ref_doc_date
  79.     ORDER BY A.ref_doc_date;
  80.  
  81. RETURN NEXT vRefDetail;
  82.  
  83. END;
  84. $BODY$
  85.   LANGUAGE plpgsql VOLATILE
  86.   COST 100
  87.   ROWS 1000;
  88.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement