Advertisement
widana

Report Rekap Stock

Jul 24th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION rpt.r_report_rekap_stock(character varying, bigint, character varying, character varying, character varying, character varying, character varying)
  2.   RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5.     pRefHeader                  REFCURSOR := 'refHeader';
  6.     pRefDetail                  REFCURSOR := 'refDetail';
  7.    
  8.     pSessionId                  ALIAS FOR $1;
  9.     pRecordOwnerId              ALIAS FOR $2;
  10.     pBrand                      ALIAS FOR $3;
  11.     pProduct                    ALIAS FOR $4;
  12.     pCategory                   ALIAS FOR $5;
  13.     pDateFrom                   ALIAS FOR $6;
  14.     pDateTo                     ALIAS FOR $7;
  15.    
  16.     vEmptyId                    bigint := -99;
  17.     vReceiveGoodsDocTypeId      bigint := 111;
  18.     vPosDocTypeId               bigint := 390;
  19.     vVoidPosDocTypeId           bigint := 391;
  20.     vAdjDocTypeId               bigint := 521;
  21.     vReturnNoteDocTypeId        bigint := 502;
  22.  
  23.     vEmpty                      character varying := '';
  24.     vNo                         character varying := 'N';
  25.     vYes                        character varying := 'Y';
  26.    
  27.     vYearMonth                  character varying := '';
  28.     vFilerProduct               character varying := '';
  29.     vFilerBrand                 character varying := '';
  30.     vFilerCategory              character varying := '';
  31.     vLastYearMonth              character varying := '';
  32.     vLastDateFrom               character varying := '';
  33.     vSaldoDateFrom              character varying := '';
  34.  
  35. BEGIN
  36.    
  37.     IF pProduct <> vEmpty THEN
  38.         vFilerProduct := ' AND ( UPPER(B.product_code) LIKE UPPER('''|| pProduct ||''') OR UPPER(B.product_name) LIKE UPPER('''|| pProduct ||''') )';
  39.     END IF;
  40.    
  41.     IF pBrand <> vEmpty THEN
  42.         vFilerBrand := ' AND UPPER(B.brand_name) LIKE  UPPER('''|| pBrand ||''')';
  43.     END IF;
  44.    
  45.     IF pCategory <> vEmpty THEN
  46.         vFilerProduct := ' AND ( UPPER(f_get_product_ctgr_code_by_product_id(B.product_id)) LIKE UPPER('''|| pCategory ||''') OR UPPER(f_get_product_ctgr_name_by_product_id(B.product_id)) LIKE UPPER('''|| pCategory ||''') )';
  47.     END IF;
  48.  
  49.     OPEN pRefHeader FOR
  50.         SELECT f_get_record_owner_name(pRecordOwnerId) AS record_owner_name, pDateFrom AS date_from, pDateTo as date_to;
  51.     RETURN NEXT pRefHeader;
  52.    
  53.    
  54.     /**
  55.      * cari terakhir bulan tahun terakhir tutup bulan sebelum atau sama dengan tanggal awal
  56.      */
  57.     SELECT COALESCE(MAX(year_month), ' ') INTO vLastYearMonth
  58.     FROM m_admin_process_ledger
  59.     WHERE record_owner_id = pRecordOwnerId AND
  60.         flag_process = vYes AND
  61.         ledger_code = 'INV' AND
  62.         year_month <= substring(pDateFrom,1,6);
  63.  
  64.     /**
  65.      * Init saldo awal berdasrkan tahun bulan yang didapat dari terakhir tutup bulan (vLastYearMonth)
  66.      */
  67.     EXECUTE '
  68.         INSERT INTO tt_rekap_saldo_qty (
  69.             session_id, record_owner_id, product_id,
  70.             init_qty, buy_qty, sell_qty, adj_qty, return_qty, void_pos_qty
  71.         )
  72.         SELECT $1, A.record_owner_id, A.product_id,
  73.             COALESCE(SUM(A.qty), 0), 0, 0, 0, 0, 0
  74.         FROM in_summary_monthly_qty A
  75.         WHERE A.year_month = $3
  76.             AND A.record_owner_id = $4
  77.         GROUP BY A.record_owner_id, A.product_id'
  78.     USING pSessionId, vEmptyId, vLastYearMonth, pRecordOwnerId;
  79.  
  80.     vSaldoDateFrom := vLastYearMonth||'01';
  81.    
  82.     SELECT TO_CHAR(TO_DATE(pDateFrom,'YYYYMMDD') + interval '-1 Day','YYYYMMDD') INTO vLastDateFrom;   
  83.    
  84.     /**
  85.      * Init Saldo awal dari log product balance stock berdasrkan awal tahun bulan dari terakhir tutup bulan
  86.      * sampai dengan tanggal awal -1 hari
  87.      */
  88.    
  89.     EXECUTE '
  90.         INSERT INTO tt_rekap_saldo_qty (
  91.             session_id, record_owner_id, product_id,
  92.             init_qty, buy_qty, sell_qty, adj_qty, return_qty, void_pos_qty
  93.         )
  94.         SELECT $1, record_owner_id, product_id,
  95.             COALESCE(SUM(qty), 0), 0, 0, 0, 0, 0
  96.         FROM in_log_product_balance_stock
  97.         WHERE record_owner_id = $2
  98.             AND ref_doc_date BETWEEN $3 AND $4
  99.         GROUP BY record_owner_id, product_id'
  100.     USING pSessionId, pRecordOwnerId, vSaldoDateFrom, vLastDateFrom;
  101.    
  102.     -- Qty Dokumen Terima Barang
  103.     EXECUTE '
  104.         INSERT INTO tt_rekap_saldo_qty (
  105.             session_id, record_owner_id, product_id,
  106.             init_qty, buy_qty, sell_qty, adj_qty, return_qty, void_pos_qty
  107.         )
  108.         SELECT $1, A.record_owner_id, A.product_id,
  109.             0, COALESCE(SUM(qty), 0), 0, 0, 0, 0
  110.         FROM in_log_product_balance_stock A
  111.         WHERE A.record_owner_id = $2
  112.             AND A.ref_doc_date BETWEEN $3 AND $4
  113.             AND A.ref_doc_type_id = $5
  114.         GROUP BY A.record_owner_id, A.product_id'
  115.     USING pSessionId, pRecordOwnerId, pDateFrom, pDateTo, vReceiveGoodsDocTypeId, vEmptyId;
  116.  
  117.     -- Qty Dokumen Penjualan (POS)
  118.     EXECUTE '
  119.         INSERT INTO tt_rekap_saldo_qty (
  120.             session_id, record_owner_id, product_id,
  121.             init_qty, buy_qty, sell_qty, adj_qty, return_qty, void_pos_qty
  122.         )
  123.         SELECT $1, A.record_owner_id, A.product_id,
  124.             0, 0, COALESCE(SUM(qty), 0), 0, 0, 0
  125.         FROM in_log_product_balance_stock A
  126.         WHERE A.record_owner_id = $2
  127.             AND A.ref_doc_date BETWEEN $3 AND $4
  128.             AND A.ref_doc_type_id = $5
  129.         GROUP BY A.record_owner_id, A.product_id'
  130.     USING pSessionId, pRecordOwnerId, pDateFrom, pDateTo, vPosDocTypeId, vEmptyId;
  131.  
  132.     -- Qty Dokumen Void Penjualan (POS)
  133.     EXECUTE '
  134.         INSERT INTO tt_rekap_saldo_qty (
  135.             session_id, record_owner_id, product_id,
  136.             init_qty, buy_qty, sell_qty, adj_qty, return_qty, void_pos_qty
  137.         )
  138.         SELECT $1, A.record_owner_id, A.product_id,
  139.             0, 0, 0, 0, 0, COALESCE(SUM(qty), 0)
  140.         FROM in_log_product_balance_stock A
  141.         WHERE A.record_owner_id = $2
  142.             AND A.ref_doc_date BETWEEN $3 AND $4
  143.             AND A.ref_doc_type_id = $5
  144.         GROUP BY A.record_owner_id, A.product_id'
  145.     USING pSessionId, pRecordOwnerId, pDateFrom, pDateTo, vVoidPosDocTypeId, vEmptyId;
  146.    
  147.     -- Qty Dokumen Adj Stock
  148.     EXECUTE '
  149.         INSERT INTO tt_rekap_saldo_qty (
  150.             session_id, record_owner_id, product_id,
  151.             init_qty, buy_qty, sell_qty, adj_qty, return_qty, void_pos_qty
  152.         )
  153.         SELECT $1, A.record_owner_id, A.product_id,
  154.             0, 0, 0, COALESCE(SUM(qty), 0), 0, 0
  155.         FROM in_log_product_balance_stock A
  156.         WHERE A.record_owner_id = $2
  157.             AND A.ref_doc_date BETWEEN $3 AND $4
  158.             AND A.ref_doc_type_id = $5
  159.         GROUP BY A.record_owner_id, A.product_id'
  160.     USING pSessionId, pRecordOwnerId, pDateFrom, pDateTo, vAdjDocTypeId, vEmptyId;
  161.  
  162.     -- Qty Dokumen Retur Barang
  163.     EXECUTE '
  164.         INSERT INTO tt_rekap_saldo_qty (
  165.             session_id, record_owner_id, product_id,
  166.             init_qty, buy_qty, sell_qty, adj_qty, return_qty, void_pos_qty
  167.         )
  168.         SELECT $1, A.record_owner_id, A.product_id,
  169.             0, 0, 0, 0, COALESCE(SUM(qty), 0), 0
  170.         FROM in_log_product_balance_stock A
  171.         WHERE A.record_owner_id = $2
  172.             AND A.ref_doc_date BETWEEN $3 AND $4
  173.             AND A.ref_doc_type_id = $5
  174.         GROUP BY A.record_owner_id, A.product_id'
  175.     USING pSessionId, pRecordOwnerId, pDateFrom, pDateTo, vReturnNoteDocTypeId, vEmptyId;
  176.    
  177.     OPEN pRefDetail FOR
  178.         EXECUTE '
  179.                 SELECT *,  init_qty+buy_qty+sell_qty+adj_qty+return_qty+void_pos_qty AS saldo_akhir, 0 AS hpp_avg
  180.                 FROM (
  181.  
  182.                     SELECT f_get_product_code(B.product_id) AS product_code, f_get_product_name(B.product_id) AS product_name, B.product_id,
  183.                         SUM(A.init_qty) AS init_qty, SUM(A.buy_qty) AS buy_qty, SUM(A.sell_qty) AS sell_qty, SUM(A.adj_qty) AS adj_qty,
  184.                         SUM(A.return_qty) AS return_qty, SUM(A.void_pos_qty) AS void_pos_qty
  185.                     FROM tt_rekap_saldo_qty A
  186.                     INNER JOIN m_product B ON A.product_id = B.product_id
  187.                     WHERE A.session_id = $1'
  188.                         || vFilerProduct || vFilerBrand || vFilerProduct ||'
  189.                     GROUP BY B.product_id
  190.                 ) Z'
  191.         USING pSessionId;
  192.     RETURN NEXT pRefDetail;
  193.    
  194.     DELETE FROM tt_rekap_saldo_qty WHERE session_id = pSessionId;
  195.    
  196. END;
  197. $BODY$
  198.   LANGUAGE plpgsql VOLATILE
  199.   SET search_path = public, mstr, ptg, htg, pb, pj, batch
  200.   COST 100;
  201.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement