Advertisement
aadddrr

cb_submit_cg_realization_20170925_3

Sep 25th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: cb_submit_cg_realization(bigint, character varying, character varying)
  2. /**
  3.  * Modified by Adrian, Sep 25, 2017
  4.  * Menambahkan perhitungan cost amount pada saat update cb_cashbank_balance
  5.  */
  6.  
  7. DROP FUNCTION cb_submit_cg_realization(bigint, character varying, character varying);
  8.  
  9. CREATE OR REPLACE FUNCTION cb_submit_cg_realization(bigint, character varying, character varying)
  10.   RETURNS void AS
  11. $BODY$
  12. DECLARE
  13.     pTenantId           ALIAS FOR $1;
  14.     pSessionId          ALIAS FOR $2;
  15.     pProcessNo          ALIAS FOR $3;
  16.  
  17.     vProcessId              bigint;
  18.     vDocId                  bigint;
  19.     vUserId                 bigint;
  20.     vDatetime               character varying(14);
  21.     vEmptyId                bigint;
  22.     vStatusRelease          character varying(1);
  23.     vStatusDraft            character varying(1);
  24.     vSignDebit              character varying(1);
  25.     vSignCredit             character varying(1);
  26.     vTypeRate               character varying(3);
  27.     vActivityCOA            character varying(10);
  28.     vCashBankCOA            character varying(10);
  29.     vJournalTrxId           bigint;
  30.     vCashBankId             bigint;
  31.     vDocDate                character varying(8);
  32.     vCashBankAmount         numeric;
  33.     vStatusAccept           character varying(10);
  34.     vStatusReject           character varying(10);
  35.     vGroupCoaPiutangCekGiro character varying(20);
  36.    
  37.     vDocJournal             DOC_JOURNAL%ROWTYPE;
  38.     vOuStructure            OU_BU_STRUCTURE%ROWTYPE;
  39.     result                  RECORD;
  40.     vCostAmount             numeric;
  41.     vCBAmount               numeric;
  42.     vSystemCOA              character varying(10);
  43.    
  44.     BEGIN
  45.     vEmptyId    := -99;
  46.     vStatusRelease := 'R';
  47.     vStatusDraft    := 'D';
  48.     vSignDebit := 'D';
  49.     vSignCredit := 'C';
  50.     vTypeRate := 'COM';
  51.     vActivityCOA := 'ACTIVITY';
  52.     vCashBankCOA := 'CASHBANK';
  53.     vStatusAccept := 'ACCEPT';
  54.     vStatusReject := 'REJECT';
  55.     vGroupCoaPiutangCekGiro := 'AyatSilangCekGiro';
  56.     vSystemCOA := 'SYSTEM';
  57.    
  58.     --emptying temp table
  59.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  60.  
  61.     --get variable
  62.     SELECT A.process_message_id INTO vProcessId
  63.     FROM t_process_message A
  64.     WHERE A.tenant_id = pTenantId AND
  65.         A.process_name = 'cb_submit_cg_realization' AND
  66.         A.process_no = pProcessNo;
  67.        
  68.     SELECT CAST(A.process_parameter_value AS bigint) INTO vDocId
  69.     FROM t_process_parameter A
  70.     WHERE A.process_message_id = vProcessId AND
  71.         A.process_parameter_key = 'cashbankInId';
  72.    
  73.     SELECT CAST(A.process_parameter_value AS bigint) INTO vUserId
  74.     FROM t_process_parameter A
  75.     WHERE A.process_message_id = vProcessId AND
  76.         A.process_parameter_key = 'userId';
  77.  
  78.     SELECT CAST(A.process_parameter_value AS character varying(14)) INTO vDatetime
  79.     FROM t_process_parameter A
  80.     WHERE A.process_message_id = vProcessId AND
  81.         A.process_parameter_key = 'datetime';
  82.  
  83.     --get detail document
  84.     SELECT f_get_ou_bu_structure(A.ou_id) AS ou, f_get_document_journal(A.doc_type_id) as doc
  85.     FROM cb_in_out_cashbank A
  86.     WHERE A.in_out_cashbank_id = vDocId
  87.     LIMIT 1 INTO result;
  88.  
  89.     vOuStructure := result.ou;
  90.     vDocJournal := result.doc;
  91.    
  92.     --get cashbankId
  93.     SELECT cashbank_id INTO vCashBankId
  94.     FROM cb_cheque_giro_realization
  95.     WHERE in_out_cashbank_id = vDocId
  96.     LIMIT 1;
  97.    
  98.     --insert and then update data cashbank balance
  99.     INSERT INTO cb_cashbank_balance
  100.     (tenant_id, ou_id, cashbank_id, cash_bank_date,
  101.     rec_type, curr_code, amount,
  102.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  103.     SELECT A.tenant_id, C.ou_id, B.cashbank_id, A.doc_date,
  104.         vSignDebit, B.curr_code, 0,
  105.         0, vDatetime, vUserId, vDatetime, vUserId
  106.     FROM cb_in_out_cashbank A
  107.         INNER JOIN cb_cheque_giro_realization B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  108.         INNER JOIN m_cashbank_ou C ON B.cashbank_id = C.cashbank_id
  109.     WHERE A.in_out_cashbank_id = vDocId AND
  110.         B.realization_status = vStatusAccept AND
  111.         NOT EXISTS (SELECT 1 FROM cb_cashbank_balance D
  112.                     WHERE A.tenant_id = D.tenant_id AND
  113.                             C.ou_id = D.ou_id AND
  114.                             B.cashbank_id = D.cashbank_id AND
  115.                             A.doc_date = D.cash_bank_date AND
  116.                             D.rec_type = vSignDebit)
  117.     GROUP BY A.tenant_id, C.ou_id, B.cashbank_id, A.doc_date, B.curr_code;
  118.    
  119.     -- SUM All Cost
  120.     IF EXISTS(SELECT 1 FROM cb_in_out_cashbank_cost A WHERE A.in_out_cashbank_id = vDocId) THEN
  121.         SELECT SUM(A.cost_amount) INTO vCostAmount
  122.         FROM cb_in_out_cashbank_cost A
  123.         WHERE A.in_out_cashbank_id = vDocId;
  124.     ELSE
  125.         vCostAmount := 0;
  126.     END IF;
  127.    
  128.     WITH amount AS (
  129.         SELECT A.tenant_id, A.ou_id, A.doc_date, B.cashbank_id, SUM(B.cheque_giro_amount) AS cheque_giro_amount
  130.         FROM cb_in_out_cashbank A
  131.             INNER JOIN cb_cheque_giro_realization B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  132.         WHERE A.in_out_cashbank_id = vDocId AND
  133.             B.realization_status = vStatusAccept
  134.         GROUP BY A.tenant_id, A.ou_id, A.doc_date, B.cashbank_id
  135.     )
  136.     UPDATE cb_cashbank_balance D
  137.     SET amount = D.amount + A.cheque_giro_amount - vCostAmount,
  138.         version = D.version + 1,
  139.         update_datetime = vDatetime,
  140.         update_user_id = vUserId
  141.     FROM amount A
  142.     WHERE D.tenant_id = A.tenant_id AND
  143.           D.ou_id = A.ou_id AND
  144.           D.cashbank_id = A.cashbank_id AND
  145.           D.cash_bank_date = A.doc_date AND  
  146.           D.rec_type = vSignDebit;
  147.                    
  148.     -- update cb_in_out_cashbank : status doc to R
  149.     UPDATE cb_in_out_cashbank
  150.     SET status_doc = vStatusRelease,
  151.         version = version + 1,
  152.         update_datetime = vDatetime,
  153.         update_user_id = vUserId
  154.     WHERE in_out_cashbank_id = vDocId;
  155.    
  156.     --update data cheque/giro balance yg statusnya ACCEPT
  157.     UPDATE cb_cheque_giro_balance A
  158.     SET flg_realization = 'Y',
  159.         realization_doc_type_id = B.doc_type_id,
  160.         realization_doc_no = B.doc_no,
  161.         realization_doc_date = B.doc_date,
  162.         version = A.version + 1,
  163.         update_datetime = vDatetime,
  164.         update_user_id = vUserId,
  165.         remark = C.remark
  166.     FROM cb_in_out_cashbank B
  167.         INNER JOIN cb_cheque_giro_realization C ON B.in_out_cashbank_id = C.in_out_cashbank_id
  168.     WHERE B.in_out_cashbank_id = vDocId AND
  169.         A.cheque_giro_balance_id = C.ref_balance_id AND
  170.         C.realization_status = vStatusAccept;
  171.    
  172.     --update data cheque/giro balance yg statusnya REJECT
  173.     UPDATE cb_cheque_giro_balance A
  174.     SET flg_realization = 'N',
  175.         flg_deposit = 'N',
  176.         version = A.version + 1,
  177.         update_datetime = vDatetime,
  178.         update_user_id = vUserId,
  179.         remark = C.remark
  180.     FROM cb_in_out_cashbank B
  181.         INNER JOIN cb_cheque_giro_realization C ON B.in_out_cashbank_id = C.in_out_cashbank_id
  182.     WHERE B.in_out_cashbank_id = vDocId AND
  183.         A.cheque_giro_balance_id = C.ref_balance_id AND
  184.         C.realization_status = vStatusReject;
  185.    
  186.     /*
  187.      * jurnal :
  188.      *      Credit  CHEQUE_GIRO
  189.      * Debit        CHEQUE_GIRO_COST
  190.      * Debit        CASH_BANK
  191.      */
  192.     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)
  193.     FROM cb_in_out_cashbank A
  194.     WHERE A.in_out_cashbank_id = vDocId;
  195.    
  196.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  197.    
  198.     INSERT INTO gl_journal_trx
  199.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  200.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  201.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  202.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  203.     SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.in_out_cashbank_id, A.doc_no, A.doc_date,
  204.         (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,
  205.         A.ref_doc_type_id, A.ref_id, A.doc_date, A.ref_curr_code, A.remark, vStatusDraft, 'DRAFT',
  206.         0, vDatetime, vUserId, vDatetime, vUserId
  207.     FROM cb_in_out_cashbank A
  208.     WHERE A.in_out_cashbank_id = vDocId;
  209.  
  210.     INSERT INTO tt_journal_trx_item
  211.     (session_id, tenant_id, journal_trx_id, line_no,
  212.     ref_doc_type_id, ref_id,
  213.     partner_id, product_id, cashbank_id, ou_rc_id,
  214.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  215.     coa_id, curr_code, qty, uom_id,
  216.     amount, journal_date, type_rate,
  217.     numerator_rate, denominator_rate, journal_desc, remark)
  218.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  219.         A.doc_type_id, A.in_out_cashbank_id,
  220.         B.partner_id, vEmptyId, B.cashbank_id, vEmptyId,
  221.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  222.         f_get_system_coa_by_group_coa(A.tenant_id , vGroupCoaPiutangCekGiro), B.curr_code, 0, vEmptyId,
  223.         B.cheque_giro_amount, A.doc_date, vTypeRate,
  224.         1, 1, 'CHEQUE_GIRO', A.remark
  225.     FROM cb_in_out_cashbank A
  226.         INNER JOIN cb_cheque_giro_realization B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  227.     WHERE A.in_out_cashbank_id = vDocId AND
  228.         B.realization_status = vStatusAccept;
  229.        
  230.     INSERT INTO tt_journal_trx_item
  231.     (session_id, tenant_id, journal_trx_id, line_no,
  232.     ref_doc_type_id, ref_id,
  233.     partner_id, product_id, cashbank_id, ou_rc_id,
  234.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  235.     coa_id, curr_code, qty, uom_id,
  236.     amount, journal_date, type_rate,
  237.     numerator_rate, denominator_rate, journal_desc, remark)
  238.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  239.         A.doc_type_id, B.in_out_cashbank_cost_id,
  240.         vEmptyId, vEmptyId, vEmptyId, B.ou_rc_id,
  241.         B.segment_id, vSignDebit, vActivityCOA, B.activity_gl_id,
  242.         E.coa_id, B.curr_code, 0, vEmptyId,
  243.         B.cost_amount, A.doc_date, vTypeRate,
  244.         1, 1, 'CHEQUE_GIRO_COST', B.remark
  245.     FROM cb_in_out_cashbank A
  246.         INNER JOIN cb_in_out_cashbank_cost B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  247.         INNER JOIN m_activity_gl E ON B.activity_gl_id = E.activity_gl_id
  248.     WHERE A.in_out_cashbank_id = vDocId;
  249.    
  250.     -- SUM All CashBank for Accept Cheque/Giro
  251.     IF EXISTS(SELECT 1 FROM cb_cheque_giro_realization A WHERE A.in_out_cashbank_id = vDocId AND A.realization_status = vStatusAccept) THEN
  252.         SELECT SUM(A.cheque_giro_amount) INTO vCBAmount
  253.         FROM cb_cheque_giro_realization A
  254.         WHERE A.in_out_cashbank_id = vDocId AND
  255.             A.realization_status = vStatusAccept;
  256.     ELSE
  257.         vCBAmount := 0;
  258.     END IF;
  259.    
  260.     INSERT INTO tt_journal_trx_item
  261.     (session_id, tenant_id, journal_trx_id, line_no,
  262.     ref_doc_type_id, ref_id,
  263.     partner_id, product_id, cashbank_id, ou_rc_id,
  264.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  265.     coa_id, curr_code, qty, uom_id,
  266.     amount, journal_date, type_rate,
  267.     numerator_rate, denominator_rate, journal_desc, remark)
  268.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  269.         A.doc_type_id, A.in_out_cashbank_id,
  270.         vEmptyId, vEmptyId, B.cashbank_id, vEmptyId,
  271.         vEmptyId, vSignDebit, vCashBankCOA, vEmptyId,
  272.         B.coa_id, B.curr_code, 0, vEmptyId,
  273.         (vCBAmount - vCostAmount) AS amount, A.doc_date, vTypeRate,
  274.         1, 1, 'CASH_BANK', A.remark
  275.     FROM cb_in_out_cashbank A, m_cashbank B
  276.     WHERE A.in_out_cashbank_id = vDocId AND
  277.         B.cashbank_id = vCashBankId;
  278.  
  279.     INSERT INTO gl_journal_trx_item
  280.     (tenant_id, journal_trx_id, line_no,
  281.     ref_doc_type_id, ref_id,
  282.     partner_id, product_id, cashbank_id, ou_rc_id,
  283.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  284.     coa_id, curr_code, qty, uom_id,
  285.     amount, journal_date, type_rate,
  286.     numerator_rate, denominator_rate, journal_desc, remark,
  287.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  288.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  289.         A.ref_doc_type_id, A.ref_id,
  290.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  291.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  292.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  293.         A.amount, A.journal_date, A.type_rate,
  294.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  295.         0, vDatetime, vUserId, vDatetime, vUserId
  296.     FROM tt_journal_trx_item A
  297.     WHERE A.session_id = pSessionId
  298.     AND A.journal_desc IN ('CHEQUE_GIRO_COST', 'CASH_BANK');
  299.    
  300.     INSERT INTO gl_journal_trx_mapping
  301.     (tenant_id, journal_trx_id, line_no,
  302.     ref_doc_type_id, ref_id,
  303.     partner_id, product_id, cashbank_id, ou_rc_id,
  304.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  305.     coa_id, curr_code, qty, uom_id,
  306.     amount, journal_date, type_rate,
  307.     numerator_rate, denominator_rate, journal_desc, remark,
  308.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  309.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  310.         A.ref_doc_type_id, A.ref_id,
  311.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  312.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  313.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  314.         A.amount, A.journal_date, A.type_rate,
  315.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  316.         0, vDatetime, vUserId, vDatetime, vUserId
  317.     FROM tt_journal_trx_item A
  318.     WHERE A.session_id = pSessionId
  319.     AND A.journal_desc = 'CHEQUE_GIRO';
  320.  
  321.     --emptying temp table
  322.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId; 
  323.    
  324. END;   
  325. $BODY$
  326.   LANGUAGE plpgsql VOLATILE
  327.   COST 100;
  328.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement