Advertisement
aadddrr

cb_submit_cb_in_ar

Jun 4th, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: cb_submit_cb_in_ar(bigint, character varying, character varying)
  2.  
  3. -- DROP FUNCTION cb_submit_cb_in_ar(bigint, character varying, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION cb_submit_cb_in_ar(bigint, character varying, character varying)
  6.   RETURNS void AS
  7. $BODY$
  8. DECLARE
  9.     pTenantId           ALIAS FOR $1;
  10.     pSessionId          ALIAS FOR $2;
  11.     pProcessNo          ALIAS FOR $3;
  12.  
  13.     vProcessId              bigint;
  14.     vCBInId                 bigint;
  15.     vUserId                 bigint;
  16.     vDatetime               character varying(14);
  17.     vEmptyId                bigint;
  18.     vStatusRelease          character varying(1);
  19.     vParentOuId             bigint;
  20.     vJournalType            character varying(20);
  21.     vStatusDraft            character varying(1);
  22.     vSignDebit              character varying(1);
  23.     vSignCredit             character varying(1);
  24.     vTypeRate               character varying(3);
  25.     vActivityCOA            character varying(10);
  26.     vCashBankCOA            character varying(10);
  27.     vSystemCOA              character varying(10);
  28.     vJournalTrxId           bigint;
  29.     vCashBankId             bigint;
  30.     vDocDate                character varying(8);
  31.     vCashBankAmount         numeric;
  32.     vCurrCode               character varying(5);
  33.     vCostAmount             numeric;
  34.    
  35.     vDocJournal             DOC_JOURNAL%ROWTYPE;
  36.     vOuStructure            OU_BU_STRUCTURE%ROWTYPE;
  37.     result                  RECORD;
  38.    
  39.     BEGIN
  40.     vEmptyId    := -99;
  41.     vStatusRelease := 'R';
  42.     vParentOuId     := -99;
  43.     vStatusDraft    := 'D';
  44.     vSignDebit := 'D';
  45.     vSignCredit := 'C';
  46.     vTypeRate := 'COM';
  47.     vActivityCOA := 'ACTIVITY';
  48.     vCashBankCOA := 'CASHBANK';
  49.     vSystemCOA := 'SYSTEM';
  50.    
  51.     SELECT A.process_message_id INTO vProcessId
  52.     FROM t_process_message A
  53.     WHERE A.tenant_id = pTenantId AND
  54.         A.process_name = 'cb_submit_cb_in_ar' AND
  55.         A.process_no = pProcessNo;
  56.        
  57.     SELECT CAST(A.process_parameter_value AS bigint) INTO vCBInId
  58.     FROM t_process_parameter A
  59.     WHERE A.process_message_id = vProcessId AND
  60.         A.process_parameter_key = 'cashbankInId';
  61.    
  62.     SELECT CAST(A.process_parameter_value AS bigint) INTO vUserId
  63.     FROM t_process_parameter A
  64.     WHERE A.process_message_id = vProcessId AND
  65.         A.process_parameter_key = 'userId';
  66.  
  67.     SELECT CAST(A.process_parameter_value AS character varying(14)) INTO vDatetime
  68.     FROM t_process_parameter A
  69.     WHERE A.process_message_id = vProcessId AND
  70.         A.process_parameter_key = 'datetime';
  71.    
  72.     DELETE FROM tt_journal_trx_item_for_dlg WHERE session_id = pSessionId; 
  73.    
  74.     /*
  75.      * 1.insert/update cash/bank balance
  76.      * 2.insert saldo cashbank in ar ke module finance
  77.      * 3.update status doc cb_in_out_cashbank
  78.      * 4.create jurnal
  79.      */
  80.    
  81. -- get variable pendukung
  82. /* NK, 27 Jan 2014 diganti dengan cara pakai user defined type untuk data ou dan data doc journal
  83.     SELECT A.doc_date, f_get_parent_ou_bu(A.tenant_id, A.ou_id), f_get_journal_type(A.doc_type_id), B.cashbank_id, B.cashbank_amount, B.curr_code INTO
  84.                 vDocDate, vParentOuId, vJournalType, vCashBankId, vCashBankAmount, vCurrCode
  85.     FROM cb_in_out_cashbank A, cb_in_out_cashbank_payment B
  86.     WHERE A.in_out_cashbank_id = vCBInId AND
  87.         A.in_out_cashbank_id = B.in_out_cashbank_id
  88.     LIMIT 1;
  89. */
  90.     SELECT A.doc_date AS doc_date, f_get_ou_bu_structure(A.ou_id) AS ou, f_get_document_journal(A.doc_type_id) as doc,
  91.         B.cashbank_id AS cashbank_id, B.cashbank_amount AS cashbank_amount, B.curr_code AS curr_code
  92.     FROM cb_in_out_cashbank A,cb_in_out_cashbank_payment B
  93.     WHERE A.in_out_cashbank_id = vCBInId AND
  94.         A.in_out_cashbank_id = B.in_out_cashbank_id LIMIT 1 INTO result;
  95.  
  96.     vDocDate := result.doc_date;
  97.     vCashBankId := result.cashbank_id;
  98.     vCashBankAmount := result.cashbank_amount;
  99.     vCurrCode := result.curr_code;
  100.     vOuStructure := result.ou;
  101.     vDocJournal := result.doc;
  102.        
  103.     IF EXISTS(SELECT 1 FROM cb_in_out_cashbank_cost A WHERE A.in_out_cashbank_id = vCBInId AND A.curr_code = vCurrCode) THEN
  104.         SELECT SUM(A.cost_amount) INTO vCostAmount
  105.         FROM cb_in_out_cashbank_cost A
  106.         WHERE A.in_out_cashbank_id = vCBInId AND
  107.             A.curr_code = vCurrCode
  108.         GROUP BY A.in_out_cashbank_id;
  109.     ELSE
  110.         vCostAmount := 0;
  111.     END IF;
  112.        
  113.     INSERT INTO cb_cashbank_balance
  114.     (tenant_id, ou_id, cashbank_id, cash_bank_date,
  115.     rec_type, curr_code, amount,
  116.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  117.     SELECT A.tenant_id, D.ou_id, vCashBankId, A.doc_date,
  118.         vSignDebit, vCurrCode, 0,
  119.         0, vDatetime, vUserId, vDatetime, vUserId
  120.     FROM cb_in_out_cashbank A
  121.     INNER JOIN m_cashbank_ou D ON D.cashbank_id = vCashBankId
  122.     WHERE A.in_out_cashbank_id = vCBInId AND
  123.         NOT EXISTS (SELECT 1 FROM cb_cashbank_balance C
  124.                     WHERE A.tenant_id = C.tenant_id AND
  125.                             D.ou_id = C.ou_id AND
  126.                             C.cashbank_id = vCashBankId AND
  127.                             A.doc_date = C.cash_bank_date AND
  128.                             C.rec_type = vSignDebit);
  129.  
  130.     UPDATE cb_cashbank_balance D SET amount = D.amount + (vCashBankAmount - vCostAmount),
  131.                      version = D.version + 1, update_datetime = vDatetime, update_user_id = vUserId
  132.     FROM cb_in_out_cashbank A
  133.     INNER JOIN m_cashbank_ou C ON C.cashbank_id = vCashBankId
  134.     WHERE A.in_out_cashbank_id = vCBInId AND
  135.           D.cash_bank_date = vDocDate AND  
  136.           D.tenant_id = pTenantId AND
  137.           D.cashbank_id = vCashBankId AND
  138.           D.ou_id = C.ou_id AND
  139.           D.rec_type = vSignDebit;                             
  140.    
  141. /*
  142.  * untuk membuat saldo cash bank in ar, yang nanti akan digunakan untuk alokasi cash bank in AR
  143.  */          
  144.     INSERT INTO fi_receipt_ar_balance
  145.     (receipt_ar_balance_id, tenant_id, ou_id, doc_type_id, doc_no, doc_date,
  146.     cashbank_id, partner_id, curr_code, amount, remark,
  147.     flg_alloc, ref_alloc_id,
  148.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  149.     SELECT A.in_out_cashbank_id, A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  150.         vCashBankId, A.partner_id, vCurrCode, vCashBankAmount, A.remark,
  151.         'N', vEmptyId,
  152.         0, vDatetime, vUserId, vDatetime, vUserId
  153.     FROM cb_in_out_cashbank A
  154.     WHERE A.in_out_cashbank_id = vCBInId;
  155.        
  156. -- update cb_in_out_cashbank : status doc to R
  157.     UPDATE cb_in_out_cashbank SET status_doc = vStatusRelease, version = version + 1, update_datetime = vDatetime, update_user_id = vUserId
  158.     WHERE in_out_cashbank_id = vCBInId;
  159.  
  160.     /*
  161.      * jurnal :
  162.      * Credit activity gl
  163.      * Credit AR
  164.      * Debit cash/bank
  165.      *
  166.      * Mod by WTC, 20171127, dikarenakan OU jurnal header adalah OU BU, maka sub_ou_id yg dikirimkan ke admin journal juga ou BU
  167.      */
  168.     PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuStructure).ou_bu_id, (vOuStructure).ou_bu_id, (vDocJournal).journal_type,
  169.         (vDocJournal).ledger_code, f_get_year_month_date(A.doc_date), 'DAILY', vDatetime, vUserId)
  170.     FROM cb_in_out_cashbank A
  171.     WHERE A.in_out_cashbank_id = vCBInId;
  172.    
  173.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  174.    
  175.     INSERT INTO gl_journal_trx
  176.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  177.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  178.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  179.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  180.     SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.in_out_cashbank_id, A.doc_no, A.doc_date,
  181.         (vOuStructure).ou_bu_id, vEmptyId, vEmptyId, A.partner_id, vEmptyId, vEmptyId, A.ext_doc_no, A.ext_doc_date,
  182.         A.ref_doc_type_id, A.ref_id, A.doc_date, A.ref_curr_code, A.remark, vStatusDraft, 'DRAFT',
  183.         0, vDatetime, vUserId, vDatetime, vUserId
  184.     FROM cb_in_out_cashbank A
  185.     WHERE A.in_out_cashbank_id = vCBInId;
  186.  
  187.     INSERT INTO tt_journal_trx_item_for_dlg
  188.     (session_id, tenant_id, journal_trx_id, line_no,
  189.     ref_doc_type_id, ref_id,
  190.     partner_id, product_id, cashbank_id, ou_rc_id,
  191.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  192.     coa_id, curr_code, qty, uom_id,
  193.     amount, journal_date, type_rate,
  194.     numerator_rate, denominator_rate, journal_desc, remark, ou_branch_id, ou_sub_bu_id)
  195.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  196.         A.doc_type_id, B.in_out_cashbank_cost_id,
  197.         A.partner_id, vEmptyId, vEmptyId, B.ou_rc_id,
  198.         B.segment_id, vSignDebit, vActivityCOA, B.activity_gl_id,
  199.         E.coa_id, B.curr_code, 0, vEmptyId,
  200.         B.cost_amount, A.doc_date, vTypeRate,
  201.         1, 1, 'AR_COST_RECEIPT', B.remark, F.ou_branch_id, F.ou_sub_bu_id
  202.     FROM cb_in_out_cashbank A, cb_in_out_cashbank_cost B, m_activity_gl E, m_ou_structure F
  203.     WHERE  A.in_out_cashbank_id = vCBInId AND  
  204.         A.in_out_cashbank_id = B.in_out_cashbank_id AND
  205.         B.activity_gl_id = E.activity_gl_id AND
  206.         A.ou_id = F.ou_id;
  207.    
  208.     INSERT INTO tt_journal_trx_item_for_dlg
  209.     (session_id, tenant_id, journal_trx_id, line_no,
  210.     ref_doc_type_id, ref_id,
  211.     partner_id, product_id, cashbank_id, ou_rc_id,
  212.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  213.     coa_id, curr_code, qty, uom_id,
  214.     amount, journal_date, type_rate,
  215.     numerator_rate, denominator_rate, journal_desc, remark, ou_branch_id, ou_sub_bu_id)
  216.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  217.         A.doc_type_id, A.in_out_cashbank_id,
  218.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  219.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  220.         f_get_ar_coa_partner(A.tenant_id, A.partner_id), vCurrCode, 0, vEmptyId,
  221.         vCashBankAmount, A.doc_date, vTypeRate,
  222.         1, 1, 'AR_CASHBANK_IN', A.remark, B.ou_branch_id, B.ou_sub_bu_id
  223.     FROM cb_in_out_cashbank A, m_ou_structure B
  224.     WHERE  A.in_out_cashbank_id = vCBInId AND
  225.         A.ou_id = B.ou_id ;
  226.  
  227.     INSERT INTO tt_journal_trx_item_for_dlg
  228.     (session_id, tenant_id, journal_trx_id, line_no,
  229.     ref_doc_type_id, ref_id,
  230.     partner_id, product_id, cashbank_id, ou_rc_id,
  231.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  232.     coa_id, curr_code, qty, uom_id,
  233.     amount, journal_date, type_rate,
  234.     numerator_rate, denominator_rate, journal_desc, remark, ou_branch_id, ou_sub_bu_id)
  235.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  236.         A.doc_type_id, A.in_out_cashbank_id,
  237.         A.partner_id, vEmptyId, C.cashbank_id, vEmptyId,
  238.         vEmptyId, vSignDebit, vCashBankCOA, vEmptyId,
  239.         C.coa_id, vCurrCode, 0, vEmptyId,
  240.         (vCashBankAmount - vCostAmount), A.doc_date, vTypeRate,
  241.         1, 1, 'CASH_BANK', A.remark, E.ou_branch_id, E.ou_sub_bu_id
  242.     FROM cb_in_out_cashbank A, m_cashbank C, m_cashbank_ou D, m_ou_structure E
  243.     WHERE A.in_out_cashbank_id = vCBInId AND  
  244.         C.cashbank_id = vCashBankId AND
  245.         C.cashbank_id = D.cashbank_id AND
  246.         D.ou_id = E.ou_id ;
  247.  
  248.     INSERT INTO gl_journal_trx_item
  249.     (tenant_id, journal_trx_id, line_no,
  250.     ref_doc_type_id, ref_id,
  251.     partner_id, product_id, cashbank_id, ou_rc_id,
  252.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  253.     coa_id, curr_code, qty, uom_id,
  254.     amount, journal_date, type_rate,
  255.     numerator_rate, denominator_rate, journal_desc, remark,
  256.     "version", create_datetime, create_user_id, update_datetime, update_user_id, ou_branch_id, ou_sub_bu_id)
  257.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  258.         A.ref_doc_type_id, A.ref_id,
  259.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  260.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  261.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  262.         A.amount, A.journal_date, A.type_rate,
  263.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  264.         0, vDatetime, vUserId, vDatetime, vUserId, A.ou_branch_id, A.ou_sub_bu_id
  265.     FROM tt_journal_trx_item_for_dlg A
  266.     WHERE A.session_id = pSessionId
  267.     AND A.journal_desc IN ('AR_COST_RECEIPT', 'AR_CASHBANK_IN');
  268.    
  269.     INSERT INTO gl_journal_trx_mapping
  270.     (tenant_id, journal_trx_id, line_no,
  271.     ref_doc_type_id, ref_id,
  272.     partner_id, product_id, cashbank_id, ou_rc_id,
  273.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  274.     coa_id, curr_code, qty, uom_id,
  275.     amount, journal_date, type_rate,
  276.     numerator_rate, denominator_rate, journal_desc, remark,
  277.     "version", create_datetime, create_user_id, update_datetime, update_user_id, ou_branch_id, ou_sub_bu_id)
  278.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  279.         A.ref_doc_type_id, A.ref_id,
  280.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  281.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  282.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  283.         A.amount, A.journal_date, A.type_rate,
  284.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  285.         0, vDatetime, vUserId, vDatetime, vUserId, A.ou_branch_id, A.ou_sub_bu_id
  286.     FROM tt_journal_trx_item_for_dlg A
  287.     WHERE A.session_id = pSessionId
  288.     AND A.journal_desc = 'CASH_BANK';
  289.  
  290.     DELETE FROM tt_journal_trx_item_for_dlg WHERE session_id = pSessionId; 
  291.    
  292. END;   
  293. $BODY$
  294.   LANGUAGE plpgsql VOLATILE
  295.   COST 100;
  296. ALTER FUNCTION cb_submit_cb_in_ar(bigint, character varying, character varying)
  297.   OWNER TO sts;
  298. GRANT EXECUTE ON FUNCTION cb_submit_cb_in_ar(bigint, character varying, character varying) TO sts;
  299. GRANT EXECUTE ON FUNCTION cb_submit_cb_in_ar(bigint, character varying, character varying) TO public;
  300. GRANT EXECUTE ON FUNCTION cb_submit_cb_in_ar(bigint, character varying, character varying) TO stsdev;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement