aadddrr

fi_submit_alloc_cashbank_ar

Jul 24th, 2017
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Modified by Adrian, Jul 24, 2017, mengubah insert ke fi_invoice_advance_ar_balance dan fi_invoice_tax_advance_ar_balance menjadi setelah invoice lunas
  2.  
  3. CREATE OR REPLACE FUNCTION fi_submit_alloc_cashbank_ar(bigint, character varying, character varying)
  4.   RETURNS void AS
  5. $BODY$
  6. DECLARE
  7.     pTenantId           ALIAS FOR $1;
  8.     pSessionId          ALIAS FOR $2;
  9.     pProcessNo          ALIAS FOR $3;
  10.  
  11.     vProcessId          bigint;
  12.     vAllocCashBankArId  bigint;
  13.     vUserId             bigint;
  14.     vInvoiceArBalanceId     bigint;
  15.     vDatetime           character varying(14);
  16.     vStatusRelease      character varying(1);
  17.     vEmptyId            bigint;
  18.     vEmptyValue         character varying(1);
  19.    
  20.     vCreditAmount           numeric;
  21.     vDocTypeCreditArId      bigint;
  22.     vCashBankInArId         bigint;
  23.     vJournalTrxId           bigint;
  24.     vDocJournal             DOC_JOURNAL%ROWTYPE;
  25.     vOuStructure            OU_BU_STRUCTURE%ROWTYPE;
  26.     result                  RECORD;
  27.    
  28.     vFlagYes            character varying(1);
  29.     vFlagNo             character varying(1);
  30.     vStatusDraft        character varying(1);  
  31.     vSignDebit          character varying(1);
  32.     vSignCredit         character varying(1);
  33.     vTypeRate           character varying(3);
  34.     vSystemCOA          character varying(10);
  35.     vActivityCOA        character varying(10);
  36.     vAllocCashBankArDate    character varying(8);
  37.     vGroupCoaPiutangCekGiro character varying(20);
  38.    
  39.     vDownPaymentDoc     bigint;
  40.     vSldDownPaymentDoc  bigint;
  41.     vAdvanceInvArDoc    bigint;
  42.     vSldAdvanceInvDoc   bigint;
  43.     vSldFakturPajakKeluaran bigint;
  44.     vZero               bigint;
  45.    
  46.     docTypeChequeGiro   bigint;
  47.     refDocTypeId        bigint;
  48.     journalDescDebit    character varying(1024);   
  49.    
  50.     vFlgForward         character varying(1);
  51.     vCount                  character varying;
  52.     nextCashbankId      bigint;
  53. BEGIN
  54.    
  55.     vStatusRelease := 'R';
  56.     vEmptyId := -99;
  57.     vEmptyValue := ' ';
  58.     vCreditAmount := 0;
  59.     vStatusDraft := 'D';
  60.     vSignDebit := 'D';
  61.     vSignCredit := 'C';
  62.     vTypeRate := 'COM';
  63.     vSystemCOA := 'SYSTEM';
  64.     vActivityCOA := 'ACTIVITY';
  65.     vFlagYes := 'Y';
  66.     vFlagNo := 'N';
  67.     vGroupCoaPiutangCekGiro := 'AyatSilangCekGiro';
  68.     docTypeChequeGiro := 624;
  69.        
  70.     vDownPaymentDoc := 242;
  71.     vSldDownPaymentDoc := 252;
  72.     vAdvanceInvArDoc := 243;
  73.     vSldAdvanceInvDoc := 254;
  74.     vSldFakturPajakKeluaran := 283;
  75.     vZero := 0;
  76.    
  77.     SELECT A.process_message_id INTO vProcessId
  78.     FROM t_process_message A
  79.     WHERE A.tenant_id = pTenantId AND
  80.         A.process_name = 'fi_submit_alloc_cashbank_ar' AND
  81.         A.process_no = pProcessNo;
  82.        
  83.     SELECT CAST(A.process_parameter_value AS bigint) INTO vAllocCashBankArId
  84.     FROM t_process_parameter A
  85.     WHERE A.process_message_id = vProcessId AND
  86.         A.process_parameter_key = 'allocCashBankArId';
  87.    
  88.     SELECT CAST(A.process_parameter_value AS bigint) INTO vUserId
  89.     FROM t_process_parameter A
  90.     WHERE A.process_message_id = vProcessId AND
  91.         A.process_parameter_key = 'userId';
  92.  
  93.     SELECT CAST(A.process_parameter_value AS character varying(14)) INTO vDatetime
  94.     FROM t_process_parameter A
  95.     WHERE A.process_message_id = vProcessId AND
  96.         A.process_parameter_key = 'datetime';
  97.  
  98.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;     
  99.        
  100. /*
  101.  * 1.update saldo receipt ar balance untuk document alloc cash bank in ar
  102.  * 2.update status fi_invoice_ar_balance, fi_invoice_tax_ar_balance untuk detail debit Ar
  103.  * 3.insert data fi_allocation_ar_balance
  104.  * 4.update workflow status allocation AR
  105.  * 5.buat data saldo down payment, untuk invoice downpayment yang digunakan untuk alloc cash bank in AR
  106.  */
  107.     SELECT A.ref_doc_type_id, A.ref_id, A.credit_amount, f_get_ou_bu_structure(A.ou_id) AS ou, f_get_document_journal(A.doc_type_id) as doc, A.doc_date  
  108.     FROM fi_allocation_ar A
  109.     WHERE A.allocation_ar_id = vAllocCashBankArId INTO result;
  110.  
  111.     vDocTypeCreditArId := result.ref_doc_type_id;
  112.     vCashBankInArId := result.ref_id;
  113.     vCreditAmount := result.credit_amount;
  114.     vOuStructure := result.ou;
  115.     vDocJournal := result.doc;
  116.     vAllocCashBankArDate := result.doc_date;
  117.    
  118.    
  119.     UPDATE fi_receipt_ar_balance SET flg_alloc = vFlagYes, ref_alloc_id = vAllocCashBankArId,
  120.                                     update_datetime = vDatetime, update_user_id = vUserId
  121.     WHERE receipt_ar_balance_id = vCashBankInArId;
  122.    
  123.     UPDATE fi_invoice_ar_balance SET payment_amount = fi_invoice_ar_balance.payment_amount + A.debit_amount,
  124.             flg_payment = CASE WHEN (amount - (fi_invoice_ar_balance.payment_amount + A.debit_amount )) <> 0 THEN 'N' ELSE 'Y' END,
  125.             update_datetime = vDatetime, update_user_id = vUserId  
  126.     FROM fi_allocation_ar_invoice A
  127.     WHERE A.allocation_ar_id = vAllocCashBankArId AND
  128.         invoice_ar_balance_id = A.ref_id AND
  129.         doc_type_id = A.ref_doc_type_id;
  130.        
  131.     UPDATE fi_invoice_tax_ar_balance SET payment_amount = fi_invoice_tax_ar_balance.payment_amount + A.debit_amount,
  132.             flg_payment = CASE WHEN (fi_invoice_tax_ar_balance.gov_tax_amount - (fi_invoice_tax_ar_balance.payment_amount + A.debit_amount )) <> 0 THEN 'N' ELSE 'Y' END,
  133.             update_datetime = vDatetime, update_user_id = vUserId
  134.     FROM fi_allocation_ar_invoice A
  135.     WHERE A.allocation_ar_id = vAllocCashBankArId AND
  136.         invoice_tax_ar_balance_id = A.ref_id AND
  137.         doc_type_id = A.ref_doc_type_id;
  138.                    
  139.     INSERT INTO fi_allocation_ar_balance
  140.     (allocation_ar_id, tenant_id, ou_id,
  141.     credit_doc_type_id, credit_doc_date, credit_id, credit_curr_code, credit_amount,
  142.     debit_doc_type_id, debit_doc_date, debit_id, debit_curr_code, debit_amount,
  143.     flg_alloc, ref_alloc_id, ref_doc_type_id, ref_doc_no, ref_doc_date,
  144.     flg_receipt, ref_receipt_id,
  145.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  146.     SELECT A.allocation_ar_id, A.tenant_id, A.ou_id,
  147.         A.ref_doc_type_id, fi_get_rate_date_invoice_ar(A.ref_doc_type_id, A.ref_id), A.ref_id, A.curr_code, B.payment_amount,
  148.         B.ref_doc_type_id, fi_get_rate_date_invoice_ar(B.ref_doc_type_id, B.ref_id), B.ref_id, B.curr_code, B.debit_amount,
  149.         'C', vEmptyId, vEmptyId, vEmptyValue, vEmptyValue,
  150.         vFlagYes, vCashBankInArId,
  151.         0, vDatetime, vUserId, vDatetime, vUserId
  152.     FROM fi_allocation_ar A, fi_allocation_ar_invoice B
  153.     WHERE A.allocation_ar_id = vAllocCashBankArId AND
  154.         A.allocation_ar_id = B.allocation_ar_id;
  155.    
  156.     UPDATE fi_allocation_ar SET status_doc = vStatusRelease, version = version + 1, update_datetime = vDatetime, update_user_id = vUserId
  157.     WHERE allocation_ar_id = vAllocCashBankArId;
  158.    
  159.     -- Modified by Putra, 11 March 2015 add next val used for function fi_insert_invoice_ar_balance_due_date and fi_insert_invoice_tax_ar_balance_due_date
  160.     SELECT nextval('fi_invoice_ar_balance_seq') INTO vInvoiceArBalanceId;
  161.    
  162.     /*
  163.      * buat saldo down payment untuk downpyament yang sudah diterima cash bank in AR nya
  164.      */
  165.     INSERT INTO fi_invoice_ar_balance
  166.     (invoice_ar_balance_id, tenant_id, ou_id, doc_type_id, invoice_ar_id,
  167.     doc_no, doc_date, ext_doc_no, ext_doc_date,
  168.     ref_doc_type_id, ref_id, partner_id, due_date,
  169.     curr_code, amount, remark, payment_amount, flg_payment,
  170.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  171.     SELECT  vInvoiceArBalanceId, B.tenant_id, B.ou_id, vSldDownPaymentDoc, B.invoice_ar_id,
  172.             B.doc_no, vAllocCashBankArDate, B.ext_doc_no, B.ext_doc_date,
  173.             B.doc_type_id, B.invoice_ar_balance_id, B.partner_id, B.doc_date,
  174.             B.curr_code, B.amount * -1, vEmptyValue, 0, 'N',
  175.             0, vDatetime, vUserId, vDatetime, vUserId
  176.     FROM fi_allocation_ar_invoice A, fi_invoice_ar_balance B
  177.     WHERE A.allocation_ar_id = vAllocCashBankArId AND
  178.         A.ref_doc_type_id = vDownPaymentDoc AND
  179.         A.ref_id = B.invoice_ar_balance_id AND
  180.         A.ref_doc_type_id = B.doc_type_id;
  181.  
  182.     /*
  183.      * Putra, 11 March 2015
  184.      * Call function for insert due_date from fi_invoice_ar_balance into fi_invoice_ar_balance_due_date
  185.      * Call function for insert due_date from fi_invoice_tax_ar_balance into fi_invoice_tax_ar_balance_due_date
  186.      * @see http://jleaf.org:8181/browse/ERPDB-211
  187.      */
  188.     PERFORM fi_insert_invoice_ar_balance_due_date(pTenantId, pSessionId, vInvoiceArBalanceId, vUserId, vDatetime);
  189.    
  190.     /*
  191.      * buat saldo advance invoice ar yang sudah diterima cash bank in AR nya
  192.      */    
  193.     /*
  194.      * NK, 14 Nov 2014 : tambah field receive_id, receive_date, sales_invoice_id, sales_invoice_date
  195.      */
  196.     /**
  197.      * amount - payment_amount harus 0
  198.      * Adrian, Jul 24, 2017
  199.      */
  200.     INSERT INTO fi_invoice_advance_ar_balance
  201.     (tenant_id, ou_id, doc_type_id, invoice_ar_id,
  202.     doc_no, doc_date, ext_doc_no, ext_doc_date,
  203.     ref_doc_type_id, ref_id, partner_id,
  204.     receive_id, receive_date, sales_invoice_id, sales_invoice_date,
  205.     curr_code, amount,
  206.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  207.     SELECT  B.tenant_id, B.ou_id, vSldAdvanceInvDoc, B.invoice_ar_id,
  208.             B.doc_no, B.doc_date, B.ext_doc_no, B.ext_doc_date,
  209.             B.doc_type_id, B.invoice_ar_balance_id, B.partner_id,
  210.             vAllocCashBankArId, vAllocCashBankArDate, vEmptyId, vEmptyValue,
  211.             B.curr_code, B.amount * -1,
  212.             0, vDatetime, vUserId, vDatetime, vUserId
  213.     FROM fi_allocation_ar_invoice A, fi_invoice_ar_balance B
  214.     WHERE A.allocation_ar_id = vAllocCashBankArId AND
  215.         A.ref_doc_type_id = vAdvanceInvArDoc AND
  216.         A.ref_id = B.invoice_ar_balance_id AND
  217.         A.ref_doc_type_id = B.doc_type_id AND
  218.         B.amount - B.payment_amount = vZero;
  219.  
  220.     /*
  221.      * NK, 17 Nov 2014 :
  222.      * tambah membuat table invoice_tax_advance_ar_balance
  223.      * WTC, 22 Jun 2015: perbaikan join fi_allocation_ar_invoice.ref_id harusnya ke fi_invoice_ar_balance.invoice_ar_balance_id,
  224.      *                   bukan ke fi_invoice_tax_ar_balance.invoice_tax_ar_balance_id
  225.      */
  226.     /**
  227.      * amount - payment_amount harus 0
  228.      * Adrian, Jul 24, 2017
  229.      */
  230.     INSERT INTO fi_invoice_tax_advance_ar_balance
  231.     (tenant_id, ou_id, doc_type_id, invoice_ar_id, partner_id,
  232.     tax_id, tax_no, tax_date, curr_code, tax_amount,
  233.     tax_curr_code, gov_tax_amount, ref_doc_type_id, ref_id,
  234.     receive_id, receive_date, sales_invoice_id, sales_invoice_date,
  235.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  236.     SELECT  B.tenant_id, B.ou_id, vSldFakturPajakKeluaran, B.invoice_ar_id, B.partner_id,
  237.             C.tax_id, C.tax_no, C.tax_date, C.curr_code, C.tax_amount * -1,
  238.             C.tax_curr_code, C.gov_tax_amount * -1, B.doc_type_id, B.invoice_ar_balance_id,
  239.             vAllocCashBankArId, vAllocCashBankArDate, vEmptyId, vEmptyValue,
  240.             0, vDatetime, vUserId, vDatetime, vUserId
  241.     FROM fi_allocation_ar_invoice A, fi_invoice_ar_balance B, fi_invoice_tax_ar_balance C
  242.     WHERE A.allocation_ar_id = vAllocCashBankArId AND
  243.         A.ref_doc_type_id = vAdvanceInvArDoc AND
  244.         A.ref_id = B.invoice_ar_balance_id AND
  245.         C.invoice_ar_balance_id = B.invoice_ar_balance_id AND
  246.         A.ref_doc_type_id = B.doc_type_id AND
  247.         B.amount - B.payment_amount = vZero;
  248.        
  249.     /*
  250.      * membuat data sl_so_balance_advance_invoice, untuk invoice uang muka ar yang digunakan untuk di alokasi terhadap cash bank in ar
  251.      * - fredi, 10 Feb 2016, http://jleaf.org:8112/issue/ERP-55
  252.      * - add gov_base_amount and gov_tax_amount
  253.      *
  254.      */
  255.     /**
  256.      * amount - payment_amount harus 0
  257.      * Adrian, Jul 24, 2017
  258.      */
  259.     INSERT INTO sl_so_balance_advance_invoice
  260.     (tenant_id, ou_id, partner_id, so_id,
  261.     ref_doc_type_id, ref_id, advance_curr_code, advance_amount,
  262.     tax_id, tax_amount, tax_percentage,
  263.     flg_invoice, flg_invoice_temp, invoice_id,
  264.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  265.     ref_doc_no, ref_doc_date, gov_tax_amount, gov_base_amount)
  266.     SELECT A.tenant_id, A.ou_id, A.partner_id, C.ref_id,
  267.         B.ref_doc_type_id, B.ref_id, C.curr_code, C.amount,
  268.         COALESCE(D.tax_id, vEmptyId), COALESCE(D.tax_amount, 0), COALESCE(E.percentage, 0),
  269.         'N', 'N', vEmptyId,
  270.         0, vDatetime, vUserId, vDatetime, vUserId,
  271.         C.doc_no, C.doc_date, COALESCE(D.gov_tax_amount, 0), COALESCE(D.gov_base_amount, 0)
  272.     FROM fi_allocation_ar A, fi_allocation_ar_invoice B, fi_invoice_ar_balance C
  273.     LEFT OUTER JOIN fi_invoice_tax_ar_balance D ON C.invoice_ar_balance_id = D.invoice_ar_balance_id
  274.     LEFT OUTER JOIN m_tax E ON D.tax_id = E.tax_id
  275.     WHERE A.allocation_ar_id =  vAllocCashBankArId AND
  276.         A.allocation_ar_id = B.allocation_ar_id AND
  277.         B.ref_doc_type_id = vAdvanceInvArDoc AND
  278.         B.ref_id = C.invoice_ar_balance_id AND
  279.         B.ref_doc_type_id = C.doc_type_id AND
  280.         C.amount - C.payment_amount = vZero;
  281.        
  282.     /*
  283.      * Agik, 23 Oct 2015
  284.      * Get RefDocTypeId dari saldo yg dialokasikan
  285.      */
  286.     SELECT doc_type_id INTO refDocTypeId
  287.     FROM fi_receipt_ar_balance
  288.     WHERE receipt_ar_balance_id = vCashBankInArId;
  289.        
  290.     /*
  291.      * membuat data transaksi jurnal :
  292.      * 1. buat admin
  293.      * 2. buat temlate jurnal
  294.      */
  295.     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)
  296.     FROM fi_allocation_ar A
  297.     WHERE A.allocation_ar_id = vAllocCashBankArId;
  298.        
  299.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  300.    
  301.     INSERT INTO gl_journal_trx
  302.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  303.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  304.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  305.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  306.     SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.allocation_ar_id, A.doc_no, A.doc_date,
  307.         (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,
  308.         A.ref_doc_type_id, A.ref_id, A.due_date, A.curr_code, A.remark, vStatusDraft, 'DRAFT',
  309.         0, vDatetime, vUserId, vDatetime, vUserId
  310.     FROM fi_allocation_ar A
  311.     WHERE A.allocation_ar_id = vAllocCashBankArId;
  312.    
  313.     /*
  314.      * journal ref doc type = Cash Bank In Ar Dokumen
  315.      * tanggal rate menggunakan tanggal Cash Bank In Ar Dokumen
  316.      */
  317.     IF refDocTypeId = docTypeChequeGiro THEN
  318.    
  319.         INSERT INTO tt_journal_trx_item
  320.         (session_id, tenant_id, journal_trx_id, line_no,
  321.         ref_doc_type_id, ref_id,
  322.         partner_id, product_id, cashbank_id, ou_rc_id,
  323.         segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  324.         coa_id, curr_code, qty, uom_id,
  325.         amount, journal_date, type_rate,
  326.         numerator_rate, denominator_rate, journal_desc, remark)
  327.         SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  328.             A.ref_doc_type_id, A.ref_id,
  329.             A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  330.             vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  331.             f_get_system_coa_by_group_coa(A.tenant_id , vGroupCoaPiutangCekGiro), A.curr_code, 0, vEmptyId,    
  332.             CASE WHEN A.flg_automatic_credit_note_ar = 'Y' THEN A.debit_amount ELSE A.credit_amount END AS amount,
  333.             fi_get_rate_date_invoice_ar(A.ref_doc_type_id, A.ref_id), vTypeRate,
  334.             1, 1, 'CHEQUE_GIRO', A.remark
  335.         FROM fi_allocation_ar A
  336.         WHERE A.allocation_ar_id = vAllocCashBankArId;
  337.  
  338.     ELSE
  339.    
  340.         INSERT INTO tt_journal_trx_item
  341.         (session_id, tenant_id, journal_trx_id, line_no,
  342.         ref_doc_type_id, ref_id,
  343.         partner_id, product_id, cashbank_id, ou_rc_id,
  344.         segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  345.         coa_id, curr_code, qty, uom_id,
  346.         amount, journal_date, type_rate,
  347.         numerator_rate, denominator_rate, journal_desc, remark)
  348.         SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  349.             A.ref_doc_type_id, A.ref_id,
  350.             A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  351.             vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  352.             f_get_ar_coa_partner(A.tenant_id, A.partner_id), A.curr_code, 0, vEmptyId,     
  353.             CASE WHEN flg_automatic_credit_note_ar = 'Y' THEN A.debit_amount ELSE A.credit_amount END AS amount,
  354.             fi_get_rate_date_invoice_ar(A.ref_doc_type_id, A.ref_id), vTypeRate,
  355.             1, 1, 'AR_CASHBANK_IN', A.remark
  356.         FROM fi_allocation_ar A
  357.         WHERE A.allocation_ar_id = vAllocCashBankArId;
  358.        
  359.     END IF;
  360.  
  361.     /*
  362.      * jurnal cost alloc cash bank in AR :
  363.      * Debit cost jika nilai cost amount < 0
  364.      * Credit cost jika nilai cost amount > 0
  365.      *
  366.      * Mod by WTC, 160912, tulis data jurnal atas cost, jika tidak mau simpan selisih amount
  367.      * untuk alokasi berikutnya.
  368.      */
  369.     INSERT INTO tt_journal_trx_item
  370.     (session_id, tenant_id, journal_trx_id, line_no,
  371.     ref_doc_type_id, ref_id,
  372.     partner_id, product_id, cashbank_id, ou_rc_id,
  373.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  374.     coa_id, curr_code, qty, uom_id,
  375.     amount, journal_date, type_rate,
  376.     numerator_rate, denominator_rate, journal_desc, remark)
  377.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  378.         A.doc_type_id, B.allocation_ar_cost_id,
  379.         A.partner_id, vEmptyId, vEmptyId, B.ou_rc_id,
  380.         B.segment_id, vSignCredit, vActivityCOA, B.activity_gl_id,
  381.         E.coa_id, B.curr_code, 0, vEmptyId,
  382.         B.cost_amount, A.doc_date, vTypeRate,
  383.         1, 1, 'AR_COST_CREDIT', B.remark
  384.     FROM fi_allocation_ar A, fi_allocation_ar_cost B, m_activity_gl E
  385.     WHERE  A.allocation_ar_id = vAllocCashBankArId AND  
  386.         A.allocation_ar_id = B.allocation_ar_id AND
  387.         B.activity_gl_id = E.activity_gl_id AND
  388.         B.cost_amount > 0 AND
  389.         A.flg_automatic_credit_note_ar = 'N';
  390.    
  391.     INSERT INTO tt_journal_trx_item
  392.     (session_id, tenant_id, journal_trx_id, line_no,
  393.     ref_doc_type_id, ref_id,
  394.     partner_id, product_id, cashbank_id, ou_rc_id,
  395.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  396.     coa_id, curr_code, qty, uom_id,
  397.     amount, journal_date, type_rate,
  398.     numerator_rate, denominator_rate, journal_desc, remark)
  399.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  400.         A.doc_type_id, B.allocation_ar_cost_id,
  401.         A.partner_id, vEmptyId, vEmptyId, B.ou_rc_id,
  402.         B.segment_id, vSignDebit, vActivityCOA, B.activity_gl_id,
  403.         E.coa_id, B.curr_code, 0, vEmptyId,
  404.         B.cost_amount * -1, A.doc_date, vTypeRate,
  405.         1, 1, 'AR_COST_DEBIT', B.remark
  406.     FROM fi_allocation_ar A, fi_allocation_ar_cost B, m_activity_gl E
  407.     WHERE  A.allocation_ar_id = vAllocCashBankArId AND  
  408.         A.allocation_ar_id = B.allocation_ar_id AND
  409.         B.activity_gl_id = E.activity_gl_id AND
  410.         B.cost_amount < 0 AND
  411.         A.flg_automatic_credit_note_ar = 'N';
  412.  
  413.     /*
  414.      * journal detail debit invoice yang dilunasi oleh credit invoice
  415.      * tanggal rate menggunakan tanggal invoice
  416.      */
  417.     INSERT INTO tt_journal_trx_item
  418.     (session_id, tenant_id, journal_trx_id, line_no,
  419.     ref_doc_type_id, ref_id,
  420.     partner_id, product_id, cashbank_id, ou_rc_id,
  421.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  422.     coa_id, curr_code, qty, uom_id,
  423.     amount, journal_date, type_rate,
  424.     numerator_rate, denominator_rate, journal_desc, remark)
  425.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  426.         B.debit_doc_type_id, B.debit_id,
  427.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  428.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  429.         f_get_ar_coa_partner(A.tenant_id, A.partner_id), B.debit_curr_code, 0, vEmptyId,
  430.         SUM(B.debit_amount), B.debit_doc_date, vTypeRate,
  431.         1, 1, 'AR_DEBIT_INVOICE', vEmptyValue
  432.     FROM fi_allocation_ar A, fi_allocation_ar_balance B
  433.     WHERE A.allocation_ar_id = vAllocCashBankArId AND
  434.         A.allocation_ar_id = B.allocation_ar_id
  435.     GROUP BY A.tenant_id, B.debit_doc_type_id, B.debit_id, A.partner_id, B.debit_curr_code, B.debit_doc_date;
  436.  
  437.     INSERT INTO gl_journal_trx_item
  438.     (tenant_id, journal_trx_id, line_no,
  439.     ref_doc_type_id, ref_id,
  440.     partner_id, product_id, cashbank_id, ou_rc_id,
  441.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  442.     coa_id, curr_code, qty, uom_id,
  443.     amount, journal_date, type_rate,
  444.     numerator_rate, denominator_rate, journal_desc, remark,
  445.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  446.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  447.         A.ref_doc_type_id, A.ref_id,
  448.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  449.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  450.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  451.         A.amount, A.journal_date, A.type_rate,
  452.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  453.         0, vDatetime, vUserId, vDatetime, vUserId
  454.     FROM tt_journal_trx_item A
  455.     WHERE A.session_id = pSessionId AND
  456.         journal_desc IN ('AR_DEBIT_INVOICE', 'AR_COST_CREDIT', 'AR_COST_DEBIT');
  457.  
  458.     INSERT INTO gl_journal_trx_mapping
  459.     (tenant_id, journal_trx_id, line_no,
  460.     ref_doc_type_id, ref_id,
  461.     partner_id, product_id, cashbank_id, ou_rc_id,
  462.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  463.     coa_id, curr_code, qty, uom_id,
  464.     amount, journal_date, type_rate,
  465.     numerator_rate, denominator_rate, journal_desc, remark,
  466.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  467.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  468.         A.ref_doc_type_id, A.ref_id,
  469.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  470.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  471.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  472.         A.amount, A.journal_date, A.type_rate,
  473.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  474.         0, vDatetime, vUserId, vDatetime, vUserId
  475.     FROM tt_journal_trx_item A
  476.     WHERE A.session_id = pSessionId AND
  477.         journal_desc IN ('AR_CASHBANK_IN', 'CHEQUE_GIRO');
  478.        
  479.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;     
  480.    
  481.     /*
  482.      * Automatic generate Credit Note AR, if flg_automatic_credit_note_ar = Y
  483.      */
  484.     SELECT flg_automatic_credit_note_ar INTO vFlgForward
  485.     FROM fi_allocation_ar
  486.     WHERE allocation_ar_id = vAllocCashBankArId;
  487.    
  488.     IF vFlgForward = vFlagYes THEN
  489.         --SELECT fi_automatic_create_credit_note_from_alloc_cb_in(pSessionId, pTenantId, vAllocCashBankArId, vUserId, vDatetime) INTO vCount;
  490.    
  491.         -- get sequence cb_in_out_cashbank_seq
  492.         SELECT NEXTVAL('cb_in_out_cashbank_seq') INTO nextCashbankId;
  493.  
  494.         -- insert fi_receipt_ar_balance untuk mencatat
  495.         INSERT INTO fi_receipt_ar_balance(
  496.             receipt_ar_balance_id, tenant_id, ou_id, doc_type_id, doc_no,
  497.             doc_date, cashbank_id, partner_id, curr_code, amount, remark,
  498.             flg_alloc, ref_alloc_id, version, create_datetime, create_user_id,
  499.             update_datetime, update_user_id, ref_item_id, cheque_giro_no,
  500.             cheque_giro_date, cheque_giro_bank)
  501.         SELECT nextCashbankId, a.tenant_id, a.ou_id, a.doc_type_id, a.doc_no,
  502.             a.doc_date, a.cashbank_id, a.partner_id, a.curr_code, b.payment_amount, a.remark,
  503.             'N', -99 AS ref_alloc_id, 0 AS version, vDatetime, vUserId,  
  504.             vDatetime, vUserId, a.ref_item_id, a.cheque_giro_no,
  505.             a.cheque_giro_date, a.cheque_giro_bank
  506.         FROM fi_receipt_ar_balance a
  507.         INNER JOIN fi_allocation_ar b ON a.ref_alloc_id = b.allocation_ar_id
  508.         WHERE a.receipt_ar_balance_id = vCashBankInArId;
  509.  
  510.         UPDATE fi_receipt_ar_balance a
  511.         SET amount = b.debit_amount,
  512.         version = a.version+1
  513.         FROM fi_allocation_ar b
  514.         WHERE a.ref_alloc_id = b.allocation_ar_id
  515.         AND a.receipt_ar_balance_id = vCashBankInArId;
  516.    
  517.     END IF;
  518. END;
  519. $BODY$
  520.   LANGUAGE plpgsql VOLATILE
  521.   COST 100;
  522.   /
Add Comment
Please, Sign In to add comment