widana

Laporan Penjualan

Jul 23rd, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION rpt.r_report_sales(character varying, bigint, bigint, character varying, character varying)
  2.   RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5.     pRefHeader              REFCURSOR := 'refHeader';
  6.     pRefDetail              REFCURSOR := 'refDetail';
  7.     pSessionId              ALIAS FOR $1;
  8.     pRecordOwnerId          ALIAS FOR $2;
  9.     pSalesmanId             ALIAS FOR $3;
  10.     pStartDate              ALIAS FOR $4;
  11.     pEndDate                ALIAS FOR $5;
  12.    
  13.     vEmpty                  CHARACTER VARYING := '';
  14.     vNo                     CHARACTER VARYING := 'N';
  15.     vYes                    CHARACTER VARYING := 'Y';
  16.     vFilterRecordOwner      character varying := '';
  17.     vFilterSalesman         character varying := '';
  18.    
  19.     vPosDocTypeId           BIGINT := 390;
  20.     vEmptyId                BIGINT := -99;
  21.  
  22. BEGIN
  23.  
  24.     OPEN pRefHeader FOR
  25.         SELECT pStartDate AS date_from, pEndDate AS date_to, f_get_record_owner_name(pRecordOwnerId) AS record_owner_name,
  26.             f_get_salesman_name(pSalesmanId) AS salesman_name;
  27.     RETURN NEXT pRefHeader;
  28.    
  29.     IF pRecordOwnerId <> vEmptyId THEN
  30.         vFilterRecordOwner := ' AND A.record_owner_id = '''|| pRecordOwnerId ||'''';
  31.     END IF;
  32.    
  33.     IF pSalesmanId <> vEmptyId THEN
  34.         vFilterSalesman := ' AND A.salesman_id = '''|| pSalesmanId ||'''';
  35.     END IF;
  36.    
  37.     OPEN pRefDetail FOR
  38.         EXECUTE '
  39.             SELECT A.doc_date, f_get_record_owner_name(A.record_owner_id) AS store_name, A.doc_date, f_get_salesman_name(A.salesman_id) AS salesman_name,  
  40.                 D.top_days, COALESCE(SUM(B.item_amount - B.item_discount_amount), 0) AS total_amount_sales,
  41.                 COALESCE(SUM(C.amount_total), 0) AS hpp_amount,
  42.                 COALESCE(SUM(B.item_amount - B.item_discount_amount), 0) - COALESCE(SUM(C.amount_total), 0) AS profit_amount
  43.             FROM trx_pos A
  44.             INNER JOIN trx_pos_item B ON A.pos_id = B.pos_id
  45.             INNER JOIN m_customer D ON A.customer_id = D.customer_id
  46.             LEFT JOIN in_summary_cogs C ON A.record_owner_id = C.record_owner_id
  47.                 AND substring(A.doc_date, 1, 6) = C.year_month
  48.                 AND C.product_id = B.product_id
  49.             WHERE A.doc_type_id = $1
  50.                 AND A.doc_date BETWEEN $2 AND $3
  51.                 ' || vFilterRecordOwner || vFilterSalesman || '
  52.             GROUP BY A.doc_date, A.record_owner_id, A.doc_date, D.top_days, A.salesman_id'
  53.         USING vPosDocTypeId, pStartDate, pEndDate;
  54.     RETURN NEXT pRefDetail;
  55.    
  56. END;
  57. $BODY$
  58.   LANGUAGE plpgsql VOLATILE
  59.   SET search_path = public, mstr, ptg, htg, pb, pj, batch
  60.   COST 100;
  61.   /
Add Comment
Please, Sign In to add comment