Advertisement
dchrissandy

Untitled

Oct 31st, 2020
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.29 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION r_report_daily_stock_mutation(
  2. character varying,
  3. bigint,
  4. bigint,
  5. bigint,
  6. character varying,
  7. bigint,
  8. bigint,
  9. character varying,
  10. character varying)
  11. RETURNS SETOF refcursor AS
  12. $BODY$
  13. DECLARE
  14. pRefHeader REFCURSOR := 'refHeader';
  15. pRefDetail REFCURSOR := 'refDetail';
  16. pSessionId ALIAS FOR $1;
  17. pTenantId ALIAS FOR $2;
  18. pUserId ALIAS FOR $3;
  19. pRoleId ALIAS FOR $4;
  20. pDatetime ALIAS FOR $5;
  21. pOuId ALIAS FOR $6;
  22. pWarehouseId ALIAS FOR $7;
  23. pDate ALIAS FOR $8;
  24. pShowAllProduct ALIAS FOR $9;
  25.  
  26. vEmptyId bigint;
  27. vOuCodeName character varying(100);
  28. vWarehouseCodeName character varying(100);
  29. vOnlyWithStockMovement character varying(50);
  30.  
  31. vNol bigint;
  32. vDocTypeReceiveGoods bigint;
  33. vDocTypeGoodsTransferIn bigint;
  34. vDocTypeGoodsTransferInReceipt bigint;
  35. vDocTypeDeliveryOrder bigint;
  36. vDocTypeDeliveryOrderReceipt bigint;
  37. vDocTypePointOfSales bigint;
  38. vDocTypePointOfSalesVoid bigint;
  39. vDocTypeClaimNote bigint;
  40. vDocTypeReturnNote bigint;
  41. vDocTypeGoodsTransferOut bigint;
  42. vDocTypeAdjusmentStockQty bigint;
  43. vDocTypeAdjusmentStockQtyAmount bigint;
  44.  
  45. vDocTypeSaldoAwal bigint;
  46.  
  47. vAdminLedgerCodeInvQty character varying(5);
  48. vStatusLedgerDone character varying(5);
  49. vLastYearMonthProcessed character varying(30);
  50. vNextLastYearMonthProcessed character varying(30);
  51. vDateMinusOneDay character varying(30);
  52.  
  53.  
  54. BEGIN
  55.  
  56. vEmptyId := -99;
  57. vOuCodeName := 'ALL';
  58. vWarehouseCodeName := 'ALL';
  59. vOnlyWithStockMovement := 'ONLYWITHSTOCKMOVEMENT';
  60. vNol := 0;
  61.  
  62. vDocTypeReceiveGoods := 111;
  63. vDocTypeGoodsTransferIn := 535;
  64. vDocTypeDeliveryOrder := 311;
  65. vDocTypeDeliveryOrderReceipt := 526;
  66. vDocTypePointOfSales := 401;
  67. vDocTypePointOfSalesVoid := 405;
  68. vDocTypeClaimNote := 511;
  69. vDocTypeReturnNote := 502;
  70. vDocTypeGoodsTransferOut := 533;
  71. vDocTypeAdjusmentStockQty := 521;
  72. vDocTypeAdjusmentStockQtyAmount := 522;
  73. vDocTypeGoodsTransferInReceipt := 536;
  74.  
  75. vDocTypeSaldoAwal := -99;
  76.  
  77. vAdminLedgerCodeInvQty := 'INV';
  78. vStatusLedgerDone := '1';
  79. vLastYearMonthProcessed := '';
  80. vNextLastYearMonthProcessed := '';
  81. vDateMinusOneDay := '';
  82.  
  83. -- filter ou id
  84. IF(pOuId <> vEmptyId) THEN
  85. SELECT ou_code||' - '||ou_name INTO vOuCodeName
  86. FROM t_ou
  87. WHERE ou_id = pOuId;
  88. END IF;
  89.  
  90. -- filter warehouse id
  91. IF(pWarehouseId <> vEmptyId) THEN
  92. SELECT warehouse_code||' - '||warehouse_name INTO vWarehouseCodeName
  93. FROM m_warehouse
  94. WHERE warehouse_id = pWarehouseId;
  95. END IF;
  96.  
  97. -- get last year month processed
  98. SELECT COALESCE(MAX(date_year_month), '') INTO vLastYearMonthProcessed
  99. FROM m_admin_process_ledger A, m_ou_structure B
  100. WHERE A.tenant_id = pTenantId
  101. AND B.ou_id = pOuId
  102. AND B.ou_bu_id = A.ou_id
  103. AND A.ledger_code = vAdminLedgerCodeInvQty
  104. AND A.status_ledger = vStatusLedgerDone
  105. AND A.date_year_month < LEFT(pDate,6);
  106.  
  107. -- vLastYearMonthProcessed + 1 month
  108. SELECT TO_CHAR(CONCAT(vLastYearMonthProcessed,'01')::date + INTERVAL '1 month', 'YYYYMM') INTO vNextLastYearMonthProcessed;
  109.  
  110. -- H-1 pDate
  111. SELECT TO_CHAR(pDate::date - INTERVAL '1 day', 'YYYYMMDD') INTO vDateMinusOneDay; --202002
  112.  
  113.  
  114.  
  115. DELETE FROM tt_r_daily_stock_mutation WHERE session_id = pSessionId;
  116.  
  117.  
  118. -- insert saldo_awal into table temp tt_r_daily_stock_mutation from in_summary_monthly_qty
  119. INSERT INTO tt_r_daily_stock_mutation(
  120. session_id, product_id, product_code, product_name,
  121. brand, satuan, saldo_awal)
  122. SELECT pSessionId, A.product_id, f_get_product_code(A.product_id) AS product_code, f_get_product_name(A.product_id) AS product_name,
  123. '' AS brand, f_get_uom_name(A.base_uom_id) AS satuan, COALESCE(SUM(A.qty), 0) AS saldo_awal
  124. FROM in_summary_monthly_qty A
  125. WHERE A.tenant_id = pTenantId
  126. AND A.warehouse_id = pWarehouseId
  127. AND A.date_year_month = vNextLastYearMonthProcessed
  128. AND A.doc_type_id = vDocTypeSaldoAwal
  129. GROUP BY A.product_id, A.base_uom_id;
  130.  
  131. -- insert saldo_awal into table temp tt_r_daily_stock_mutation from in_log_product_balance_stock
  132. INSERT INTO tt_r_daily_stock_mutation(
  133. session_id, product_id, product_code, product_name,
  134. brand, satuan, saldo_awal)
  135. SELECT pSessionId, A.product_id, f_get_product_code(A.product_id) AS product_code, f_get_product_name(A.product_id) AS product_name,
  136. '' AS brand, f_get_uom_name(A.base_uom_id) AS satuan, COALESCE(SUM(A.qty), 0) AS saldo_awal
  137. FROM in_log_product_balance_stock A
  138. WHERE A.tenant_id = pTenantId
  139. AND A.warehouse_id = pWarehouseId
  140. AND SUBSTRING(A.doc_date, 1, 6) > vLastYearMonthProcessed
  141. AND A.doc_date <= vDateMinusOneDay
  142. GROUP BY A.product_id, A.base_uom_id;
  143.  
  144.  
  145.  
  146. -- insert qty_terima_barang table tt_r_daily_stock_mutation
  147. INSERT INTO tt_r_daily_stock_mutation(
  148. session_id, product_id, product_code, product_name,
  149. brand, satuan, qty_terima_barang)
  150. SELECT pSessionId, A.product_id, f_get_product_code(A.product_id) AS product_code, f_get_product_name(A.product_id) AS product_name,
  151. '' AS brand, f_get_uom_name(A.base_uom_id) AS satuan, SUM(A.qty) AS qty_terima_barang
  152. FROM in_log_product_balance_stock A
  153. WHERE A.tenant_id = pTenantId
  154. AND A.warehouse_id = pWarehouseId
  155. AND A.doc_type_id IN (vDocTypeReceiveGoods, vDocTypeGoodsTransferIn)
  156. AND A.doc_date = pDate
  157. GROUP BY A.product_id, A.base_uom_id;
  158.  
  159. INSERT INTO tt_r_daily_stock_mutation(
  160. session_id, product_id, product_code, product_name,
  161. brand, satuan, qty_terima_barang)
  162. SELECT pSessionId, A.product_id, f_get_product_code(A.product_id) AS product_code, f_get_product_name(A.product_id) AS product_name,
  163. '' AS brand, f_get_uom_name(A.base_uom_id) AS satuan, SUM(A.qty) AS qty_terima_barang
  164. FROM in_log_product_balance_stock A
  165. WHERE A.tenant_id = pTenantId
  166. AND A.warehouse_id = pWarehouseId
  167. AND A.doc_type_id IN (vDocTypeGoodsTransferInReceipt)
  168. AND A.qty > 0
  169. AND A.doc_date = pDate
  170. GROUP BY A.product_id, A.base_uom_id;
  171.  
  172. -- insert qty_jual table tt_r_daily_stock_mutation
  173. INSERT INTO tt_r_daily_stock_mutation(
  174. session_id, product_id, product_code, product_name,
  175. brand, satuan, qty_jual)
  176. SELECT pSessionId, A.product_id, f_get_product_code(A.product_id) AS product_code, f_get_product_name(A.product_id) AS product_name,
  177. '' AS brand, f_get_uom_name(A.base_uom_id) AS satuan, SUM(A.qty) AS qty_jual
  178. FROM in_log_product_balance_stock A
  179. WHERE A.tenant_id = pTenantId
  180. AND A.warehouse_id = pWarehouseId
  181. AND A.doc_type_id IN (vDocTypeDeliveryOrder, vDocTypeDeliveryOrderReceipt, vDocTypePointOfSales, vDocTypePointOfSalesVoid)
  182. AND A.doc_date = pDate
  183. GROUP BY A.product_id, A.base_uom_id;
  184.  
  185. -- insert qty_retur_beli table tt_r_daily_stock_mutation
  186. INSERT INTO tt_r_daily_stock_mutation(
  187. session_id, product_id, product_code, product_name,
  188. brand, satuan, qty_retur_beli)
  189. SELECT pSessionId, A.product_id, f_get_product_code(A.product_id) AS product_code, f_get_product_name(A.product_id) AS product_name,
  190. '' AS brand, f_get_uom_name(A.base_uom_id) AS satuan, SUM(A.qty) AS qty_retur_beli
  191. FROM in_log_product_balance_stock A
  192. WHERE A.tenant_id = pTenantId
  193. AND A.warehouse_id = pWarehouseId
  194. AND A.doc_type_id = vDocTypeClaimNote
  195. AND A.doc_date = pDate
  196. GROUP BY A.product_id, A.base_uom_id;
  197.  
  198. -- insert qty_retur_jual table tt_r_daily_stock_mutation
  199. INSERT INTO tt_r_daily_stock_mutation(
  200. session_id, product_id, product_code, product_name,
  201. brand, satuan, qty_retur_jual)
  202. SELECT pSessionId, A.product_id, f_get_product_code(A.product_id) AS product_code, f_get_product_name(A.product_id) AS product_name,
  203. '' AS brand, f_get_uom_name(A.base_uom_id) AS satuan, SUM(A.qty) AS qty_retur_jual
  204. FROM in_log_product_balance_stock A
  205. WHERE A.tenant_id = pTenantId
  206. AND A.warehouse_id = pWarehouseId
  207. AND A.doc_type_id = vDocTypeReturnNote
  208. AND A.doc_date = pDate
  209. GROUP BY A.product_id, A.base_uom_id;
  210.  
  211. -- insert qty_keluar_barang table tt_r_daily_stock_mutation
  212. INSERT INTO tt_r_daily_stock_mutation(
  213. session_id, product_id, product_code, product_name,
  214. brand, satuan, qty_keluar_barang)
  215. SELECT pSessionId, A.product_id, f_get_product_code(A.product_id) AS product_code, f_get_product_name(A.product_id) AS product_name,
  216. '' AS brand, f_get_uom_name(A.base_uom_id) AS satuan, SUM(A.qty) AS qty_keluar_barang
  217. FROM in_log_product_balance_stock A
  218. WHERE A.tenant_id = pTenantId
  219. AND A.warehouse_id = pWarehouseId
  220. AND A.doc_type_id = vDocTypeGoodsTransferOut
  221. AND A.doc_date = pDate
  222. GROUP BY A.product_id, A.base_uom_id;
  223.  
  224. INSERT INTO tt_r_daily_stock_mutation(
  225. session_id, product_id, product_code, product_name,
  226. brand, satuan, qty_keluar_barang)
  227. SELECT pSessionId, A.product_id, f_get_product_code(A.product_id) AS product_code, f_get_product_name(A.product_id) AS product_name,
  228. '' AS brand, f_get_uom_name(A.base_uom_id) AS satuan, SUM(A.qty) AS qty_keluar_barang
  229. FROM in_log_product_balance_stock A
  230. WHERE A.tenant_id = pTenantId
  231. AND A.warehouse_id = pWarehouseId
  232. AND A.doc_type_id = vDocTypeGoodsTransferInReceipt
  233. AND A.qty < 0
  234. AND A.doc_date = pDate
  235. GROUP BY A.product_id, A.base_uom_id;
  236.  
  237. -- insert qty_adj table tt_r_daily_stock_mutation
  238. INSERT INTO tt_r_daily_stock_mutation(
  239. session_id, product_id, product_code, product_name,
  240. brand, satuan, qty_adj)
  241. SELECT pSessionId, A.product_id, f_get_product_code(A.product_id) AS product_code, f_get_product_name(A.product_id) AS product_name,
  242. '' AS brand, f_get_uom_name(A.base_uom_id) AS satuan, SUM(A.qty) AS qty_adj
  243. FROM in_log_product_balance_stock A
  244. WHERE A.tenant_id = pTenantId
  245. AND A.warehouse_id = pWarehouseId
  246. AND A.doc_type_id IN (vDocTypeAdjusmentStockQty, vDocTypeAdjusmentStockQtyAmount)
  247. AND A.doc_date = pDate
  248. GROUP BY A.product_id, A.base_uom_id;
  249.  
  250.  
  251. OPEN pRefHeader FOR
  252. SELECT CASE WHEN pOuId = vEmptyId THEN -99 ELSE pOuId END AS ou_id, vOuCodeName AS ou_code_name,
  253. CASE WHEN pWarehouseId = vEmptyId THEN -99 ELSE pWarehouseId END AS warehouse_id, vWarehouseCodeName AS warehouse_code_name,
  254. pDatetime AS datetime, f_get_username(pUserId) AS username, pDate AS date;
  255. RETURN NEXT pRefHeader;
  256.  
  257.  
  258. IF(pShowAllProduct = vOnlyWithStockMovement) THEN
  259. OPEN pRefDetail FOR
  260. SELECT A.product_code, A.product_name,
  261. CONCAT(f_get_brand_code(B.brand_id), ' - ', f_get_brand_name(B.brand_id)) AS brand,
  262. A.satuan,
  263. SUM(A.saldo_awal) AS saldo_awal, SUM(A.qty_terima_barang) AS qty_terima_barang,
  264. SUM(A.qty_jual) AS qty_jual, SUM(A.qty_retur_beli) As qty_retur_beli,
  265. SUM(A.qty_retur_jual) AS qty_retur_jual, SUM(A.qty_keluar_barang) AS qty_keluar_barang, SUM(A.qty_adj) AS qty_adj,
  266. (SUM(A.saldo_awal) + SUM(A.qty_terima_barang) + SUM(A.qty_jual) + SUM(A.qty_retur_beli) +
  267. SUM(A.qty_retur_jual) + SUM(A.qty_keluar_barang) + SUM(A.qty_adj)) AS saldo_akhir
  268. FROM tt_r_daily_stock_mutation A
  269. INNER JOIN m_product B ON A.product_id = B.product_id
  270. GROUP BY A.product_code, A.product_name, B.brand_id, A.satuan
  271. HAVING SUM(A.qty_terima_barang) != 0 OR SUM(A.qty_jual) != 0 OR SUM(A.qty_retur_beli) != 0
  272. OR SUM(A.qty_retur_jual) != 0 OR SUM(A.qty_keluar_barang) != 0 OR SUM(A.qty_adj) != 0
  273. ORDER BY A.product_name;
  274. RETURN NEXT pRefDetail;
  275. ELSE
  276. OPEN pRefDetail FOR
  277. SELECT A.product_code, A.product_name,
  278. CONCAT(f_get_brand_code(B.brand_id), ' - ', f_get_brand_name(B.brand_id)) AS brand,
  279. A.satuan,
  280. SUM(A.saldo_awal) AS saldo_awal, SUM(A.qty_terima_barang) AS qty_terima_barang,
  281. SUM(A.qty_jual) AS qty_jual, SUM(A.qty_retur_beli) As qty_retur_beli,
  282. SUM(A.qty_retur_jual) AS qty_retur_jual, SUM(A.qty_keluar_barang) AS qty_keluar_barang, SUM(A.qty_adj) AS qty_adj,
  283. (SUM(A.saldo_awal) + SUM(A.qty_terima_barang) + SUM(A.qty_jual) + SUM(A.qty_retur_beli) +
  284. SUM(A.qty_retur_jual) + SUM(A.qty_keluar_barang) + SUM(A.qty_adj)) AS saldo_akhir
  285. FROM tt_r_daily_stock_mutation A
  286. INNER JOIN m_product B ON A.product_id = B.product_id
  287. GROUP BY A.product_code, A.product_name, B.brand_id, A.satuan
  288. ORDER BY A.product_name;
  289. RETURN NEXT pRefDetail;
  290. END IF;
  291.  
  292.  
  293. DELETE FROM tt_r_daily_stock_mutation WHERE session_id = pSessionId;
  294. END;
  295. $BODY$
  296. LANGUAGE plpgsql VOLATILE
  297. COST 100
  298. ROWS 1000;
  299. /
  300.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement