aadddrr

r_inventory_summary_mutation_monthly_by_sub_ctgr_product_cod

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