aadddrr

r_inventory_summary_mutation_monthly_by_product_code

Dec 15th, 2017
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Author by Widana Nur Azis, 16 Nov 2016
  2. /**
  3.  * Modified by Adrian, Dec 15, 2017
  4.  * Menambahkan Journal Voucher untuk group COA Persediaan
  5.  * Menambahkan Cost Allocation to Product ke stock_adj_amount
  6.  */
  7.  
  8. CREATE OR REPLACE FUNCTION r_inventory_summary_mutation_monthly_by_product_code(character varying,bigint, bigint, bigint, character varying, bigint, character varying,character varying)
  9.   RETURNS SETOF refcursor AS
  10. $BODY$
  11. DECLARE
  12.     pRefHeader                  REFCURSOR := 'refHeader';
  13.     pRefDetail                  REFCURSOR := 'refDetail';
  14.     pSessionId                  ALIAS FOR $1;
  15.     pTenantId                   ALIAS FOR $2;
  16.     pUserId                     ALIAS FOR $3;
  17.     pRoleId                     ALIAS FOR $4;
  18.     pDatetime                   ALIAS FOR $5;
  19.     pOuId                       ALIAS FOR $6;
  20.     pPeriodDate                 ALIAS FOR $7;
  21.     pCodeProduct                ALIAS FOR $8;
  22.    
  23.     vDefaultDocTypeId                       integer := -99;
  24.     vDocTypeIdGr                            integer := 111;
  25.     vDocTypeIdDo                            integer := 311;
  26.     vDocTypeIdDoReceipt                     integer := 526;
  27.     vDocTypeIdRn                            integer := 502;
  28.     vDocTypeidAsq                           integer := 521;
  29.     vDocTypeIdAsa                           integer := 522;
  30.     vDocTypeIdClaimNote                     integer := 511;
  31.     vDocTypeIdCostingAllocationToProduct    integer := 528;
  32.     vEmptyString                character varying := '';
  33.    
  34.     vGroupCoaPersediaanId               integer := 13;
  35.     vGroupCoaPersediaanIdTenant11       integer := 1113;
  36.     vEmptyId                            integer := -99;
  37.     vSignJournalCredit                  character varying := 'C';
  38.     vSignJournalDebit                   character varying := 'D';
  39.    
  40. BEGIN
  41.    
  42.     -- SUM for stock_awal
  43.     INSERT INTO tt_mutasi_nilai_persediaan(
  44.             session_id,year_month,stock_awal,product_id,ctgr_product_id,sub_ctgr_product_id)
  45.             SELECT pSessionId,A.date_year_month,SUM(gl_amount),A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id
  46.             FROM in_summary_monthly_amount A
  47.             INNER JOIN m_product B USING (product_id)
  48.             WHERE A.tenant_id = pTenantId
  49.             AND A.ou_bu_id = pOuId
  50.             AND A.date_year_month = pPeriodDate
  51.             AND A.doc_type_id = vDefaultDocTypeId
  52.             GROUP BY A.date_year_month,A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id;
  53.  
  54.     -- SUM for stock_receipt
  55.     INSERT INTO tt_mutasi_nilai_persediaan(
  56.             session_id,year_month,stock_receipt,product_id,ctgr_product_id,sub_ctgr_product_id)
  57.             SELECT pSessionId,A.date_year_month,SUM(gl_amount),A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id
  58.             FROM in_summary_monthly_amount A
  59.             INNER JOIN m_product B USING (product_id)
  60.             WHERE A.tenant_id = pTenantId
  61.             AND A.ou_bu_id = pOuId
  62.             AND A.date_year_month = pPeriodDate
  63.             AND A.doc_type_id = vDocTypeIdGr
  64.             GROUP BY A.date_year_month,A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id;       
  65.  
  66.     -- SUM for stock_sales
  67.     INSERT INTO tt_mutasi_nilai_persediaan(
  68.             session_id,year_month,stock_sales,product_id,ctgr_product_id,sub_ctgr_product_id)
  69.             SELECT pSessionId,A.date_year_month,(SUM(gl_amount) * -1),A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id
  70.             FROM in_summary_monthly_amount A
  71.             INNER JOIN m_product B USING (product_id)
  72.             WHERE A.tenant_id = pTenantId
  73.             AND A.ou_bu_id = pOuId
  74.             AND A.date_year_month = pPeriodDate
  75.             AND A.doc_type_id IN ( vDocTypeIdDo, vDocTypeIdDoReceipt )
  76.             GROUP BY A.date_year_month,A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id;       
  77.  
  78.     -- SUM for stock_return_sales
  79.     INSERT INTO tt_mutasi_nilai_persediaan(
  80.             session_id,year_month,stock_return_sales,product_id,ctgr_product_id,sub_ctgr_product_id)
  81.             SELECT pSessionId,A.date_year_month,SUM(gl_amount),A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id
  82.             FROM in_summary_monthly_amount A
  83.             INNER JOIN m_product B USING (product_id)
  84.             WHERE A.tenant_id = pTenantId
  85.             AND A.ou_bu_id = pOuId
  86.             AND A.date_year_month = pPeriodDate
  87.             AND A.doc_type_id = vDocTypeIdRn
  88.             GROUP BY A.date_year_month,A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id;       
  89.  
  90.     -- SUM for stock_adj_qty
  91.     INSERT INTO tt_mutasi_nilai_persediaan(
  92.             session_id,year_month,stock_adj_qty,product_id,ctgr_product_id,sub_ctgr_product_id)
  93.             SELECT pSessionId,A.date_year_month,SUM(gl_amount),A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id
  94.             FROM in_summary_monthly_amount A
  95.             INNER JOIN m_product B USING (product_id)
  96.             WHERE A.tenant_id = pTenantId
  97.             AND A.ou_bu_id = pOuId
  98.             AND A.date_year_month = pPeriodDate
  99.             AND A.doc_type_id = vDocTypeidAsq
  100.             GROUP BY A.date_year_month,A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id;       
  101.  
  102.     -- SUM for stock_adj_amount
  103.     INSERT INTO tt_mutasi_nilai_persediaan(
  104.             session_id,year_month,stock_adj_amount,product_id,ctgr_product_id,sub_ctgr_product_id)
  105.             SELECT pSessionId,A.date_year_month,SUM(gl_amount),A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id
  106.             FROM in_summary_monthly_amount A
  107.             INNER JOIN m_product B USING (product_id)
  108.             WHERE A.tenant_id = pTenantId
  109.             AND A.ou_bu_id = pOuId
  110.             AND A.date_year_month = pPeriodDate
  111.             AND A.doc_type_id IN (vDocTypeIdAsa, vDocTypeIdCostingAllocationToProduct)
  112.             GROUP BY A.date_year_month,A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id;
  113.    
  114.     -- SUM for stock_claim_note
  115.     INSERT INTO tt_mutasi_nilai_persediaan(
  116.             session_id, year_month, stock_claim_note, product_id, ctgr_product_id, sub_ctgr_product_id)
  117.             SELECT pSessionId, A.date_year_month, SUM(gl_amount) * -1, A.product_id, B.ctgr_product_id, B.sub_ctgr_product_id
  118.             FROM in_summary_monthly_amount A
  119.             INNER JOIN m_product B USING (product_id)
  120.             WHERE A.tenant_id = pTenantId
  121.             AND A.ou_bu_id = pOuId
  122.             AND A.date_year_month = pPeriodDate
  123.             AND A.doc_type_id = vDocTypeIdClaimNote
  124.             GROUP BY A.date_year_month,A.product_id,B.ctgr_product_id,B.sub_ctgr_product_id;
  125.            
  126.     -- SUM for Journal Voucher Persediaan Debit
  127.     INSERT INTO tt_mutasi_nilai_persediaan(
  128.             session_id,year_month,stock_receipt,product_id,ctgr_product_id,sub_ctgr_product_id,journal_trx_id,coa_id)
  129.             SELECT pSessionId,SUBSTRING(B.doc_date, 1, 6),SUM(gl_amount),vEmptyId,vEmptyId,vEmptyId,A.journal_trx_id,A.coa_id
  130.             FROM vw_gl_journal_trx_details A
  131.             INNER JOIN gl_journal_trx B ON A.journal_trx_id = B.journal_trx_id
  132.             INNER JOIN m_coa C ON A.coa_id = C.coa_id
  133.             WHERE A.tenant_id = pTenantId
  134.             AND B.ou_bu_id = pOuId
  135.             AND SUBSTRING(B.doc_date, 1, 6) = pPeriodDate
  136.             AND B.doc_type_id NOT IN (
  137.                 vDefaultDocTypeId, vDocTypeIdGr, vDocTypeIdDo,
  138.                 vDocTypeIdDoReceipt, vDocTypeIdRn, vDocTypeidAsq,
  139.                 vDocTypeIdAsa, vDocTypeIdClaimNote, vDocTypeIdCostingAllocationToProduct  
  140.             )
  141.             AND C.group_coa_id IN (vGroupCoaPersediaanId, vGroupCoaPersediaanIdTenant11)
  142.             AND A.sign_journal = vSignJournalDebit
  143.             GROUP BY SUBSTRING(B.doc_date, 1, 6),A.journal_trx_id,A.coa_id;
  144.            
  145.     -- SUM for Journal Voucher Persediaan Credit
  146.     INSERT INTO tt_mutasi_nilai_persediaan(
  147.             session_id,year_month,stock_sales,product_id,ctgr_product_id,sub_ctgr_product_id,journal_trx_id,coa_id)
  148.             SELECT pSessionId,SUBSTRING(B.doc_date, 1, 6),SUM(gl_amount),vEmptyId,vEmptyId,vEmptyId,A.journal_trx_id,A.coa_id
  149.             FROM vw_gl_journal_trx_details A
  150.             INNER JOIN gl_journal_trx B ON A.journal_trx_id = B.journal_trx_id
  151.             INNER JOIN m_coa C ON A.coa_id = C.coa_id
  152.             WHERE A.tenant_id = pTenantId
  153.             AND B.ou_bu_id = pOuId
  154.             AND SUBSTRING(B.doc_date, 1, 6) = pPeriodDate
  155.             AND B.doc_type_id NOT IN (
  156.                 vDefaultDocTypeId, vDocTypeIdGr, vDocTypeIdDo,
  157.                 vDocTypeIdDoReceipt, vDocTypeIdRn, vDocTypeidAsq,
  158.                 vDocTypeIdAsa, vDocTypeIdClaimNote, vDocTypeIdCostingAllocationToProduct
  159.             )
  160.             AND C.group_coa_id IN (vGroupCoaPersediaanId, vGroupCoaPersediaanIdTenant11)
  161.             AND A.sign_journal = vSignJournalCredit
  162.             GROUP BY SUBSTRING(B.doc_date, 1, 6),A.journal_trx_id,A.coa_id;
  163.  
  164.     OPEN pRefHeader FOR
  165.         SELECT f_get_ou_name(pOuId) AS ou_name,pPeriodDate AS period,f_get_username(pUserId) AS username,f_get_role_name(pRoleId) AS role_name,pDatetime AS datetime;
  166.     RETURN NEXT pRefHeader;
  167.  
  168.    
  169.     OPEN pRefDetail FOR
  170.         SELECT A.*
  171.         FROM (
  172.             SELECT A.session_id,f_get_ctgr_product_name(A.ctgr_product_id) AS ctgr_product_name,
  173.                 f_get_sub_ctgr_product_name(A.sub_ctgr_product_id) AS sub_ctgr_product_name,
  174.                 f_get_product_code(A.product_id) AS product_code,
  175.                 f_get_product_name(A.product_id) AS product_name,
  176.                 SUM(A.stock_awal) AS stock_awal,
  177.                 SUM(A.stock_receipt) AS stock_receipt,
  178.                 SUM(A.stock_sales) AS stock_sales,
  179.                 SUM(A.stock_return_sales) AS stock_return_sales,
  180.                 SUM(A.stock_adj_qty) AS stock_adj_qty,
  181.                 SUM(A.stock_adj_amount) AS stock_adj_amount,
  182.                 SUM(A.stock_claim_note) AS stock_claim_note,
  183.                 SUM( A.stock_awal + stock_receipt - stock_sales + stock_return_sales + stock_adj_qty + stock_adj_amount - stock_claim_note )
  184.                   AS stock_akhir
  185.             FROM tt_mutasi_nilai_persediaan A
  186.             WHERE A.session_id = pSessionId AND
  187.             CASE WHEN pCodeProduct <> vEmptyString THEN UPPER(f_get_product_code(A.product_id)) LIKE UPPER('%'||pCodeProduct||'%') ELSE f_get_product_code(A.product_id) <> vEmptyString END
  188.             AND A.journal_trx_id = vEmptyId
  189.             GROUP BY A.session_id, A.year_month, A.product_id, A.sub_ctgr_product_id, A.ctgr_product_id
  190.             ORDER BY f_get_ctgr_product_name(A.ctgr_product_id), f_get_sub_ctgr_product_name(A.sub_ctgr_product_id), f_get_product_code(A.product_id)
  191.     --           A.stock_sales,A.stock_return_sales,A.stock_adj_qty,A.stock_adj_amount,A.stock_awal,A.stock_receipt;
  192.         ) A
  193.        
  194.         UNION ALL
  195.        
  196.         SELECT B.*
  197.         FROM (
  198.             SELECT A.session_id, B.doc_no AS ctgr_product_name,
  199.                 f_get_coa_desc(A.coa_id) AS sub_ctgr_product_name,
  200.                 vEmptyString AS product_code,
  201.                 vEmptyString AS product_name,  
  202.                 SUM(A.stock_awal) AS stock_awal,
  203.                 SUM(A.stock_receipt) AS stock_receipt,
  204.                 SUM(A.stock_sales) AS stock_sales,
  205.                 SUM(A.stock_return_sales) AS stock_return_sales,
  206.                 SUM(A.stock_adj_qty) AS stock_adj_qty,
  207.                 SUM(A.stock_adj_amount) AS stock_adj_amount,
  208.                 SUM(A.stock_claim_note) AS stock_claim_note,
  209.                 SUM( A.stock_awal + stock_receipt - stock_sales + stock_return_sales + stock_adj_qty + stock_adj_amount - stock_claim_note )
  210.                   AS stock_akhir
  211.             FROM tt_mutasi_nilai_persediaan A
  212.             INNER JOIN gl_journal_trx B ON A.journal_trx_id = B.journal_trx_id
  213.             WHERE A.session_id = pSessionId
  214.             AND A.journal_trx_id <> vEmptyId
  215.             GROUP BY A.session_id, A.journal_trx_id, B.doc_no, A.coa_id
  216.             ORDER BY B.doc_no, f_get_coa_desc(A.coa_id)
  217.         ) B;
  218.     RETURN NEXT pRefDetail;
  219.  
  220.     DELETE FROM tt_mutasi_nilai_persediaan WHERE session_id = pSessionId;
  221. END;
  222. $BODY$
  223.   LANGUAGE plpgsql VOLATILE
  224.   COST 100
  225.   ROWS 1000;
  226. /
Add Comment
Please, Sign In to add comment