Advertisement
widana

Laporan Kartu Stock

Jul 23rd, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.16 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION rpt.r_report_kartu_stock(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.  
  8. pSessionId ALIAS FOR $1;
  9. pRecordOwnerId ALIAS FOR $2;
  10. pProductId ALIAS FOR $3;
  11. pStartDate ALIAS FOR $4;
  12. pEndDate ALIAS FOR $5;
  13.  
  14. vEmptyId bigint := -99;
  15. vBeginningQty bigint := 0;
  16. vEndQty bigint := 0;
  17. vCalculateQty bigint := 0;
  18.  
  19. vEmpty character varying := '';
  20. vNo character varying := 'N';
  21. vYes character varying := 'Y';
  22.  
  23. vYearMonth character varying := '';
  24. vFilerProduct character varying := '';
  25. vStartYearMonth character varying := '';
  26. vEndYearMonth character varying := '';
  27.  
  28. vCursorRow tt_summary_trx_document%ROWTYPE;
  29.  
  30.  
  31. BEGIN
  32.  
  33. DELETE FROM tt_monthly_summary_qty WHERE session_id = pSessionId;
  34. DELETE FROM tt_summary_trx_document WHERE session_id = pSessionId;
  35.  
  36. SELECT substring(pStartDate, 1, 6) INTO vStartYearMonth;
  37.  
  38. SELECT substring(pEndDate, 1, 6) INTO vEndYearMonth;
  39.  
  40. IF pProductId <> vEmptyId THEN
  41. vFilerProduct := ' AND A.product_id = '''|| pProductId ||'''';
  42. END IF;
  43.  
  44. OPEN pRefHeader FOR
  45. SELECT f_get_record_owner_name(pRecordOwnerId) AS record_owner_name, pStartDate AS date_from, pEndDate AS date_to,
  46. CASE WHEN pProductId <> vEmptyId THEN f_get_product_code(pProductId) ELSE 'All' END AS product_code,
  47. CASE WHEN pProductId <> vEmptyId THEN f_get_product_name(pProductId) ELSE 'All' END AS product_name;
  48. RETURN NEXT pRefHeader;
  49.  
  50. -- Stock summary beginning qty per montlhy
  51. EXECUTE '
  52. INSERT INTO tt_monthly_summary_qty(
  53. session_id, year_month, record_owner_id, beginning_qty
  54. )
  55. SELECT $4, A.year_month, A.record_owner_id, COALESCE(SUM(A.qty), 0)
  56. FROM in_summary_monthly_qty A
  57. WHERE A.record_owner_id = $1
  58. AND A.year_month >= $2
  59. AND A.year_month <= $3
  60. ' || vFilerProduct ||'
  61. GROUP BY A.year_month, A.record_owner_id'
  62. USING pRecordOwnerId, vStartYearMonth, vEndYearMonth, pSessionId;
  63.  
  64. -- Ambil Semua dokumen transaksi yang ada dalam jangka periode
  65. EXECUTE '
  66. INSERT INTO tt_summary_trx_document (
  67. session_id, record_owner_id, doc_no, doc_date, doc_desc, qty
  68. )
  69. SELECT $4, A.record_owner_id, A.ref_doc_no, A.ref_doc_date, f_get_doc_desc(A.ref_doc_type_id), COALESCE(SUM(A.qty), 0)
  70. FROM in_log_product_balance_stock A
  71. WHERE A.record_owner_id = $1
  72. AND A.ref_doc_date >= $2
  73. AND A.ref_doc_date <= $3
  74. ' || vFilerProduct ||'
  75. GROUP BY A.record_owner_id, A.ref_doc_no, A.ref_doc_date, A.ref_doc_type_id
  76. ORDER BY A.ref_doc_date ASC'
  77. USING pRecordOwnerId, pStartDate, pEndDate, pSessionId;
  78.  
  79. FOR vCursorRow IN
  80. SELECT * FROM tt_summary_trx_document WHERE session_id = pSessionId
  81. LOOP
  82. SELECT substring(vCursorRow.doc_date, 1, 6) INTO vYearMonth;
  83.  
  84. SELECT beginning_qty INTO vBeginningQty FROM tt_monthly_summary_qty WHERE session_id = pSessionId AND record_owner_id = pRecordOwnerId AND year_month = vYearMonth;
  85.  
  86. vCalculateQty := vBeginningQty+vCursorRow.qty;
  87.  
  88. INSERT INTO tt_sumary_trx_log_product_balance(
  89. session_id, doc_no, doc_date, doc_desc, beginning_qty,
  90. trx_qty, end_qty
  91. ) VALUES (pSessionId, vCursorRow.doc_no, vCursorRow.doc_date, vCursorRow.doc_desc, vBeginningQty,
  92. vCursorRow.qty, vCalculateQty);
  93.  
  94. UPDATE tt_monthly_summary_qty SET beginning_qty = vCalculateQty WHERE session_id = pSessionId AND record_owner_id = pRecordOwnerId AND year_month = vYearMonth;
  95. END LOOP;
  96.  
  97. OPEN pRefDetail FOR
  98. SELECT *
  99. FROM tt_sumary_trx_log_product_balance
  100. WHERE session_id = pSessionId;
  101. RETURN NEXT pRefDetail;
  102.  
  103. DELETE FROM tt_monthly_summary_qty WHERE session_id = pSessionId;
  104. DELETE FROM tt_summary_trx_document WHERE session_id = pSessionId;
  105.  
  106. END;
  107. $BODY$
  108. LANGUAGE plpgsql VOLATILE
  109. SET search_path = public, mstr, ptg, htg, pb, pj, batch
  110. COST 100;
  111. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement