abirama62

gl_temp_posting_daily_journal_with_var

Feb 4th, 2021
1,097
106 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION gl_temp_posting_daily_journal_with_var(
  2.         bigint,
  3.         character varying,
  4.         bigint,
  5.         bigint,
  6.         character varying,
  7.         character varying,
  8.         character varying)
  9.   RETURNS void AS
  10. $BODY$
  11. DECLARE
  12.  
  13.     pTenantId           ALIAS FOR $1;
  14.     pSessionId          ALIAS FOR $2;
  15.         pOuId           ALIAS FOR $3;
  16.         pUserId         ALIAS FOR $4;
  17.         pDatetime           ALIAS FOR $5;
  18.         pLedgerCode ALIAS FOR $6;
  19.         pYearMonth    ALIAS FOR $7;
  20.  
  21.     vProcessId              bigint;
  22.     vOuId                   bigint;
  23.     vUserId                 bigint;
  24.     vYearMonth              character varying(6);
  25.     vDatetime               character varying(14);
  26.     vFlagNo                 character varying(1);
  27.     vFlagYes                character varying(1);
  28.     vStatusRelease          character varying(1);
  29.     vStatusDraft            character varying(1);  
  30.     vEmptyValue             character varying(1);
  31.     vEmptyId                bigint;
  32.     vValSubmit              integer;
  33.     vLedgerCode             character varying(10);
  34.     vJournalProcessPeriode  character varying(10);
  35.     vCurrGL                 character varying(5);
  36.     vRoudingDigit           integer;
  37.     vSignCredit             character varying(1);
  38.     vSignDebit              character varying(1);  
  39.     vSystemCOA              character varying(10)
  40.    
  41.     vLastClosingGL          character varying(8);
  42.     vPrevClosingYearMonth   character varying(8);
  43.     vUnposted               bigint;
  44.    
  45. BEGIN
  46.    
  47.     vFlagNo := 'N';
  48.     vFlagYes := 'Y';
  49.     vStatusRelease := 'R';
  50.     vStatusDraft := 'D';   
  51.     vEmptyId := -99;
  52.     vEmptyValue := ' ';
  53.     vValSubmit := 0;
  54.     vJournalProcessPeriode := 'DAILY';
  55.     vSignCredit := 'C';
  56.     vSignDebit := 'D';
  57.     vSystemCOA := 'SYSTEM';
  58.        
  59.     vOuId := pOuId;
  60.     vUserId := pUserId;
  61.     vLedgerCode := pLedgerCode;
  62.     vDatetime := pDatetime;
  63.     vYearMonth := pYearMonth;
  64.  
  65.     -- cari tutup bulan terakhir
  66.     SELECT MAX(date_year_month) INTO vLastClosingGL
  67.     FROM m_admin_process_ledger
  68.     WHERE ou_id = vOuId
  69.         AND ledger_code = 'GL'
  70.         AND status_ledger = '1';
  71.    
  72.     SELECT TO_CHAR(TO_DATE(vLastClosingGL,'YYYYMM') + interval '1 Month','YYYYMM') INTO vPrevClosingYearMonth;
  73.    
  74.     IF vLastClosingGL < vYearMonth THEN
  75.    
  76.         SELECT LEAST(vPrevClosingYearMonth, vYearMonth) INTO vPrevClosingYearMonth;
  77.        
  78.         WHILE vPrevClosingYearMonth <= vYearMonth LOOP
  79.            
  80.             SELECT SUM(B.unrelease_journal) AS unposted INTO vUnposted
  81.             FROM (
  82.                 SELECT A.ou_id, A.journal_year_month, A.ledger_code, A.journal_type,
  83.                     f_get_count_released_journal_trx(A.tenant_id, A.sub_ou_id, A.journal_year_month, A.journal_type) AS release_journal,
  84.                     f_get_count_unreleased_journal_trx(A.tenant_id, A.sub_ou_id, A.journal_year_month, A.journal_type) AS unrelease_journal
  85.                 FROM gl_admin_journal_trx A
  86.                 WHERE A.journal_process_periode = vJournalProcessPeriode
  87.                     AND A.tenant_id = pTenantId
  88.                     AND A.ou_id = vOuId
  89.                     AND A.journal_year_month = vPrevClosingYearMonth
  90.                     AND A.ledger_code = vLedgerCode
  91.                  ORDER BY A.ledger_code, A.journal_type
  92.                  ) B
  93.             GROUP BY B.ou_id, B.journal_year_month, B.ledger_code;
  94.            
  95.             IF vUnposted <> 0 THEN
  96.                 RAISE NOTICE '%',vPrevClosingYearMonth;
  97.                
  98.                 DELETE FROM tt_gl_journal_trx_item WHERE session_id = pSessionId;
  99.                 DELETE FROM tt_gl_journal_trx_mapping WHERE session_id = pSessionId;
  100.                 DELETE FROM tt_gl_admin_journal_rate WHERE session_id = pSessionId;
  101.                 DELETE FROM tt_gl_summary_journal WHERE session_id = pSessionId;
  102.                    
  103.                 PERFORM gl_reversed_sign_amount(pTenantId, vPrevClosingYearMonth);
  104.                
  105.                 /*
  106.                  * ambil parameter :
  107.                  * 1. valuta buku
  108.                  * 2. rounding nilai buku
  109.                  *
  110.                  * 1.ambil data journal yang belum dihitung rate/ diposting
  111.                  * 2.tentukan rate untuk tiap acuan tanggal jurnal nya
  112.                  * 3.tentukan nilai buku sesuai rate
  113.                  * 4.hitung summary selesih nilai Debit dan Credit, untuk dijadikan sebagai nilai Forex
  114.                  * 5.buat jurnal FOREX
  115.                  * 6.buat data catatan rate yang digunakan
  116.                  * 7.update status_doc jurnal
  117.                  * 8.update proses di admin jurnal
  118.                  *
  119.                  */
  120.                
  121.                 vCurrGL := f_get_value_system_config_by_param_code(pTenantId,'ValutaBuku');
  122.                 vRoudingDigit := CAST(f_get_value_system_config_by_param_code(pTenantId,'rounding.gl.amount') AS integer)
  123.                        
  124.                 /*
  125.                  * filter process_datetime tidak digunakan, supaya bisa support reposting
  126.                  */
  127.                 INSERT INTO tt_gl_journal_trx_item
  128.                 (session_id, journal_trx_item_id, journal_trx_id, line_no,
  129.                 sign_journal, curr_code, amount,
  130.                 journal_date, type_rate)   
  131.                 SELECT pSessionId, D.journal_trx_item_id, D.journal_trx_id, D.line_no,
  132.                     D.sign_journal, D.curr_code, D.amount,
  133.                     D.journal_date, D.type_rate
  134.                 FROM gl_admin_journal_trx A, gl_journal_trx B, dt_date C, gl_journal_trx_item D, m_ou_structure E
  135.                 WHERE A.tenant_id = pTenantId AND
  136.                     A.ou_id = vOuId AND
  137.                     A.journal_process_periode = vJournalProcessPeriode AND
  138.                     A.ledger_code = vLedgerCode AND
  139.                     A.journal_year_month = vPrevClosingYearMonth AND
  140.                     A.tenant_id = B.tenant_id AND
  141.                     A.journal_type = B.journal_type AND
  142.                     B.status_doc = vStatusDraft AND
  143.                     A.sub_ou_id = E.ou_id AND
  144.                     A.ou_id = E.ou_bu_id AND
  145.                     E.ou_bu_id = B.ou_bu_id AND
  146.                     E.ou_branch_id = B.ou_branch_id AND
  147.                     E.ou_sub_bu_id = B.ou_sub_bu_id AND
  148.                     B.doc_date = C.string_date AND
  149.                     C.year_month_date = A.journal_year_month AND
  150.                     --A.process_datetime = vEmptyValue AND
  151.                     B.journal_trx_id = D.journal_trx_id;
  152.                
  153.                 INSERT INTO tt_gl_journal_trx_mapping
  154.                 (session_id, journal_trx_mapping_id, journal_trx_id, line_no,
  155.                 sign_journal, curr_code, amount,
  156.                 journal_date, type_rate)   
  157.                 SELECT pSessionId, D.journal_trx_mapping_id, D.journal_trx_id, D.line_no,
  158.                     D.sign_journal, D.curr_code, D.amount,
  159.                     D.journal_date, D.type_rate
  160.                 FROM
  161.                     (SELECT journal_trx_id FROM tt_gl_journal_trx_item WHERE session_id = pSessionId
  162.                      GROUP BY journal_trx_id) A, gl_journal_trx_mapping D
  163.                 WHERE A.journal_trx_id = D.journal_trx_id;
  164.                
  165.                 INSERT INTO tt_gl_admin_journal_rate
  166.                 (session_id, type_rate, journal_date, curr_code, gl_curr_code, data_exchange_rate) 
  167.                 SELECT pSessionId, A.type_rate, A.journal_date, A.curr_code, vCurrGL, f_temp_get_exchange_rate(pTenantId, A.type_rate, A.journal_date, A.curr_code, vCurrGL)
  168.                 FROM (
  169.                     SELECT A.journal_date, A.type_rate, A.curr_code
  170.                     FROM tt_gl_journal_trx_item A
  171.                     WHERE A.session_id = pSessionId
  172.                     GROUP BY journal_date, type_rate, curr_code
  173.                     UNION
  174.                     SELECT A.journal_date, A.type_rate, A.curr_code
  175.                     FROM tt_gl_journal_trx_mapping A
  176.                     WHERE A.session_id = pSessionId
  177.                     GROUP BY journal_date, type_rate, curr_code) A;
  178.            
  179.                 UPDATE tt_gl_journal_trx_item SET numerator_rate = (data_exchange_rate).numerator_rate,
  180.                                                     denominator_rate = (data_exchange_rate).denominator_rate,
  181.                                                     gl_amount = ROUND(amount * (data_exchange_rate).numerator_rate / (data_exchange_rate).denominator_rate, vRoudingDigit)
  182.                 FROM tt_gl_admin_journal_rate A
  183.                 WHERE tt_gl_journal_trx_item.session_id = pSessionId AND
  184.                     tt_gl_journal_trx_item.session_id = A.session_id AND
  185.                     tt_gl_journal_trx_item.type_rate = A.type_rate AND
  186.                     tt_gl_journal_trx_item.journal_date = A.journal_date AND
  187.                     tt_gl_journal_trx_item.curr_code = A.curr_code;
  188.                
  189.                 UPDATE tt_gl_journal_trx_mapping SET numerator_rate = (data_exchange_rate).numerator_rate,
  190.                                                     denominator_rate = (data_exchange_rate).denominator_rate,
  191.                                                     gl_amount = ROUND(amount * (data_exchange_rate).numerator_rate / (data_exchange_rate).denominator_rate, vRoudingDigit)                                     
  192.                 FROM tt_gl_admin_journal_rate A
  193.                 WHERE tt_gl_journal_trx_mapping.session_id = pSessionId AND
  194.                     tt_gl_journal_trx_mapping.session_id = A.session_id AND
  195.                     tt_gl_journal_trx_mapping.type_rate = A.type_rate AND
  196.                     tt_gl_journal_trx_mapping.journal_date = A.journal_date AND
  197.                     tt_gl_journal_trx_mapping.curr_code = A.curr_code;
  198.                
  199.                 INSERT INTO tt_gl_summary_journal
  200.                 (session_id, ctgr_journal, journal_trx_id, sign_journal, gl_amount, temp_amount)
  201.                 SELECT A.session_id, 'ITEM', A.journal_trx_id, A.sign_journal, SUM(A.gl_amount), SUM(A.gl_amount)
  202.                 FROM tt_gl_journal_trx_item A
  203.                 WHERE A.session_id = pSessionId
  204.                 GROUP BY session_id, journal_trx_id, sign_journal;
  205.            
  206.                 INSERT INTO tt_gl_summary_journal
  207.                 (session_id, ctgr_journal, journal_trx_id, sign_journal, gl_amount, temp_amount)
  208.                 SELECT A.session_id, 'MAPPING', A.journal_trx_id, A.sign_journal, SUM(A.gl_amount), SUM(A.gl_amount)
  209.                 FROM tt_gl_journal_trx_mapping A
  210.                 WHERE A.session_id = pSessionId
  211.                 GROUP BY session_id, journal_trx_id, sign_journal;
  212.                
  213.                 UPDATE tt_gl_summary_journal SET temp_amount = temp_amount * -1
  214.                 WHERE sign_journal = vSignCredit AND
  215.                     session_id = pSessionId;
  216.                
  217.                 INSERT INTO tt_gl_summary_journal
  218.                 (session_id, ctgr_journal, journal_trx_id, sign_journal, gl_amount, temp_amount)
  219.                 SELECT A.session_id, 'ALL', A.journal_trx_id, vSignCredit, 0, SUM(A.temp_amount)
  220.                 FROM tt_gl_summary_journal A
  221.                 WHERE A.session_id = pSessionId
  222.                 GROUP BY A.session_id, A.journal_trx_id;
  223.                    
  224.                 UPDATE tt_gl_summary_journal SET sign_journal = vSignDebit, temp_amount = temp_amount * -1
  225.                 WHERE session_id = pSessionId AND
  226.                     ctgr_journal = 'ALL' AND
  227.                     temp_amount < 0;
  228.                
  229.                 UPDATE gl_journal_trx_item SET numerator_rate = A.numerator_rate, denominator_rate = A.denominator_rate, gl_amount = A.gl_amount, gl_curr_code = vCurrGL
  230.                 FROM tt_gl_journal_trx_item A
  231.                 WHERE A.session_id = pSessionId AND
  232.                     gl_journal_trx_item.journal_trx_item_id = A.journal_trx_item_id;
  233.            
  234.                 UPDATE gl_journal_trx_mapping SET numerator_rate = A.numerator_rate, denominator_rate = A.denominator_rate, gl_amount = A.gl_amount, gl_curr_code = vCurrGL
  235.                 FROM tt_gl_journal_trx_mapping A
  236.                 WHERE A.session_id = pSessionId AND
  237.                     gl_journal_trx_mapping.journal_trx_mapping_id = A.journal_trx_mapping_id;
  238.                
  239.                 /**
  240.                  * Insert ke gl_journal_trx_fx untuk data jurnal yang bukan valuta asing
  241.                  */
  242.                 WITH tt_gl_journal_trx_item_non_valas AS (
  243.                     SELECT A.journal_trx_id
  244.                     FROM tt_gl_journal_trx_item A
  245.                     INNER JOIN tt_gl_journal_trx_mapping B ON A.journal_trx_id = B.journal_trx_id
  246.                     WHERE A.session_id = pSessionId
  247.                         AND B.session_id = pSessionId
  248.                         AND (A.curr_code = vCurrGL AND B.curr_code = vCurrGL)
  249.                     GROUP BY A.journal_trx_id
  250.                 )
  251.                 INSERT INTO gl_journal_trx_fx
  252.                 (tenant_id, journal_trx_id, line_no, ref_doc_type_id, ref_id,  
  253.                 partner_id, product_id, cashbank_id, ou_rc_id, segmen_id,
  254.                 sign_journal, flg_source_coa, activity_gl_id, coa_id,
  255.                 curr_code, amount, journal_date, type_rate,
  256.                 numerator_rate, denominator_rate, gl_curr_code, gl_amount,  
  257.                 journal_desc, remark,
  258.                 "version", create_datetime, create_user_id, update_datetime, update_user_id)
  259.                 SELECT B.tenant_id, A.journal_trx_id, 1, vEmptyId, vEmptyId,
  260.                     vEmptyId, vEmptyId, vEmptyId, vEmptyId, vEmptyId,
  261.                     A.sign_journal, vSystemCOA, vEmptyId, f_get_system_coa_by_group_coa(B.tenant_id, 'BiayaSelisihKurs'),
  262.                     vCurrGL, A.temp_amount, B.doc_date, vEmptyValue,
  263.                     1, 1, vCurrGL, A.temp_amount,
  264.                     'FX', 'Forex',
  265.                     0, vDatetime, vUserId, vDatetime, vUserId
  266.                 FROM tt_gl_summary_journal A,
  267.                     gl_journal_trx B, tt_gl_journal_trx_item_non_valas C
  268.                 WHERE A.session_id = pSessionId AND
  269.                     A.journal_trx_id = B.journal_trx_id AND
  270.                     A.ctgr_journal = 'ALL' AND
  271.                     A.temp_amount <> 0 AND
  272.                     B.journal_trx_id = C.journal_trx_id;
  273.                
  274.                 /**
  275.                  * Insert ke gl_temp_journal_trx_fx untuk data jurnal yang valuta asing
  276.                  */
  277.                 WITH tt_gl_journal_trx_item_valas AS (
  278.                     SELECT A.journal_trx_id
  279.                     FROM tt_gl_journal_trx_item A
  280.                     INNER JOIN tt_gl_journal_trx_mapping B ON A.journal_trx_id = B.journal_trx_id
  281.                     WHERE A.session_id = pSessionId
  282.                         AND B.session_id = pSessionId
  283.                         AND (A.curr_code <> vCurrGL OR B.curr_code <> vCurrGL)
  284.                     GROUP BY A.journal_trx_id
  285.                 )
  286.                 INSERT INTO gl_temp_journal_trx_fx
  287.                 (tenant_id, journal_trx_id, line_no, ref_doc_type_id, ref_id,  
  288.                 partner_id, product_id, cashbank_id, ou_rc_id, segmen_id,
  289.                 sign_journal, flg_source_coa, activity_gl_id, coa_id,
  290.                 curr_code, amount, journal_date, type_rate,
  291.                 numerator_rate, denominator_rate, gl_curr_code, gl_amount,  
  292.                 journal_desc, remark,
  293.                 "version", create_datetime, create_user_id, update_datetime, update_user_id)
  294.                 SELECT B.tenant_id, A.journal_trx_id, 1, vEmptyId, vEmptyId,
  295.                     vEmptyId, vEmptyId, vEmptyId, vEmptyId, vEmptyId,
  296.                     A.sign_journal, vSystemCOA, vEmptyId, f_get_system_coa_by_group_coa(B.tenant_id, 'BiayaSelisihKurs'),
  297.                     vCurrGL, A.temp_amount, B.doc_date, vEmptyValue,
  298.                     1, 1, vCurrGL, A.temp_amount,
  299.                     'FX', 'Forex',
  300.                     0, vDatetime, vUserId, vDatetime, vUserId
  301.                 FROM tt_gl_summary_journal A,
  302.                     gl_journal_trx B, tt_gl_journal_trx_item_valas C
  303.                 WHERE A.session_id = pSessionId AND
  304.                     A.journal_trx_id = B.journal_trx_id AND
  305.                     A.ctgr_journal = 'ALL' AND
  306.                     A.temp_amount <> 0 AND
  307.                     B.journal_trx_id = C.journal_trx_id;
  308.                
  309.                 UPDATE gl_admin_journal_trx SET process_datetime = vDatetime, process_user_id = vUserId
  310.                 WHERE tenant_id = pTenantId AND
  311.                     ou_id = vOuId AND
  312.                     journal_process_periode = vJournalProcessPeriode AND
  313.                     ledger_code = vLedgerCode AND
  314.                     journal_year_month = vYearMonth;
  315.                    
  316.                 /**
  317.                  * Update status_doc untuk jurnal yang bukan valuta asing
  318.                  */
  319.                 UPDATE gl_journal_trx SET status_doc = vStatusRelease, version = version + 1, update_datetime = vDatetime, update_user_id = vUserId
  320.                 FROM (SELECT A.journal_trx_id
  321.                         FROM tt_gl_journal_trx_item A
  322.                         INNER JOIN tt_gl_journal_trx_mapping B ON A.journal_trx_id = B.journal_trx_id
  323.                         WHERE A.session_id = pSessionId
  324.                             AND B.session_id = pSessionId
  325.                             AND (A.curr_code = vCurrGL AND B.curr_code = vCurrGL)
  326.                         GROUP BY A.journal_trx_id) A
  327.                 WHERE gl_journal_trx.journal_trx_id = A.journal_trx_id;
  328.                
  329.                 -- ahen 10 jun 2015
  330.                 -- david, 13 Agustus 2015 : tidak bisa dipasang di sini, karena pasti tidak akan balance, bisa jadi JV belum selesai input dan FX ada yg belum terbuat
  331.                 --PERFORM gl_validate_journal(pTenantId, vOuId, pSessionId, pProcessNo, vUserId, vDatetime, vYearMonth, vJournalProcessPeriode);
  332.                
  333.                 DELETE FROM tt_gl_journal_trx_item WHERE session_id = pSessionId;
  334.                 DELETE FROM tt_gl_journal_trx_mapping WHERE session_id = pSessionId;
  335.                 DELETE FROM tt_gl_admin_journal_rate WHERE session_id = pSessionId;
  336.                 DELETE FROM tt_gl_summary_journal WHERE session_id = pSessionId;
  337.            
  338.             END IF;
  339.            
  340.             SELECT TO_CHAR(TO_DATE(vPrevClosingYearMonth,'YYYYMM') + interval '1 Month','YYYYMM') INTO vPrevClosingYearMonth;
  341.            
  342.         END LOOP;
  343.        
  344.     END IF;
  345.    
  346. END;
  347. $BODY$
  348.   LANGUAGE plpgsql VOLATILE
  349.   COST 100;
  350.   /
RAW Paste Data