Advertisement
samuel025

cb_submit_cb_in_ar

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