Advertisement
aadddrr

pu_create_doc_buy_po_internal

Jun 19th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DROP FUNCTION IF EXISTS pu_create_doc_buy_po_internal(character varying, bigint, bigint, character varying);
  2.  
  3. --Modified by Adrian, Jun 19 2017
  4. --Menambahkan group by pada saat update product balance stock
  5.  
  6. CREATE OR REPLACE FUNCTION pu_create_doc_buy_po_internal(bigint, character varying, bigint, bigint, character varying)
  7.   RETURNS void AS
  8. $BODY$
  9. DECLARE
  10.     pTenantId               ALIAS FOR $1;
  11.     pSessionId              ALIAS FOR $2;
  12.     pPoInternalId           ALIAS FOR $3;
  13.     pUserId                 ALIAS FOR $4;
  14.     pDatetime               ALIAS FOR $5;
  15.  
  16.     vEmptyId                bigint;
  17.     vStatusRelease          character varying(1);
  18.     vStatusDraft            character varying(1);  
  19.     vStatusFinal            character varying(1);  
  20.     vWorkflowStatus         character varying(10);
  21.     vEmptyValue             character varying(1);
  22.     vFlgAcceptTax           character varying(1);  
  23.     vPoDocType              bigint;
  24.     vRgDocType              bigint;
  25.     vPurchInvDocType        bigint;
  26.     vPayApDocType           bigint;
  27.     vCbOutDocType           bigint;
  28.     vPoId                   bigint;
  29.     vRgId                   bigint;
  30.     vPurchInvId             bigint;
  31.     vPayApId                bigint;
  32.     vCbOutId                bigint;
  33.     vInvoiceApBalanceId     bigint;
  34.     vProductStatus          character varying(50);
  35.     vFakturPajakMasukan     bigint;
  36.     vOuBuyStructure         OU_BU_STRUCTURE%ROWTYPE;
  37.     vDocJournalRg           DOC_JOURNAL%ROWTYPE;
  38.     vDocJournalPurchInv     DOC_JOURNAL%ROWTYPE;
  39.     vDocJournalCbOut        DOC_JOURNAL%ROWTYPE;   
  40.     vJournalTrxId           bigint;
  41.     result                  RECORD;
  42.     vItemTaxAmount          numeric;
  43.     vGovTaxAmount           numeric;
  44.     vTrxCashbankBalanceId   bigint;
  45.    
  46.     vSignDebit              character varying(1);
  47.     vSignCredit             character varying(1);
  48.     vTypeRate               character varying(3);
  49.     vActivityCOA            character varying(10);
  50.     vProductCOA             character varying(10);
  51.     vSystemCOA              character varying(10);
  52.     vCashBankCOA            character varying(10);
  53.     vTaxCOA                 character varying(10)
  54.    
  55.     vPoInternalDocTypeId    bigint;
  56.     vRoundingModeNonTax     character varying(5);
  57.     vCountItemTax           integer;
  58.    
  59. BEGIN
  60.    
  61.     vEmptyId := -99;
  62.     vStatusRelease := 'R';
  63.     vStatusFinal := 'F';   
  64.     vStatusDraft := 'D';
  65.     vWorkflowStatus := 'APPROVED';
  66.     vEmptyValue := ' ';
  67.     vPoDocType := 101;
  68.     vRgDocType := 111;
  69.     vPurchInvDocType := 131;
  70.     vPayApDocType := 231;
  71.     vCbOutDocType := 611;
  72.     vFakturPajakMasukan := 221;
  73.     vSignDebit := 'D';
  74.     vSignCredit := 'C';
  75.     vTypeRate := 'COM';
  76.     vActivityCOA := 'ACTIVITY';
  77.     vProductCOA := 'PRODUCT';
  78.     vSystemCOA := 'SYSTEM';
  79.     vCashBankCOA := 'CASHBANK';
  80.     vTaxCOA := 'TAX';  
  81.     vCountItemTax := 0;
  82.    
  83.     vPoInternalDocTypeId := 151;
  84.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  85.    
  86.     /*
  87.      * WTC, 17 Jan 2015
  88.      * diganti dng membaca m_product_status
  89.      */
  90.     --vProductStatus := 'GOOD';
  91.     SELECT product_status_code INTO vProductStatus
  92.     FROM m_product_status
  93.     WHERE flg_buy = 'Y';
  94.    
  95.    
  96.    
  97.     DELETE FROM tt_pu_product_balance WHERE session_id = pSessionId;
  98.     DELETE FROM tt_pu_monthly_price_product WHERE session_id = pSessionId;
  99.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId; 
  100.    
  101.     SELECT NEXTVAL('pu_po_seq') INTO vPoId;
  102.     SELECT NEXTVAL('pu_receive_goods_seq') INTO vRgId; 
  103.     SELECT NEXTVAL('pu_invoice_seq') INTO vPurchInvId;
  104.     SELECT NEXTVAL('fi_payment_order_seq') INTO vPayAPId;
  105.     SELECT NEXTVAL('cb_in_out_cashbank_seq') INTO vCbOutId;
  106.        
  107.     SELECT f_get_ou_bu_structure(A.ou_buy_id) AS ou_buy, A.flg_accept_tax,
  108.         f_get_document_journal(vRgDocType) AS doc_rg,
  109.         f_get_document_journal(vPurchInvDocType) AS doc_inv,
  110.         f_get_document_journal(vCbOutDocType) AS doc_cb
  111.     FROM pu_po_internal A
  112.     WHERE A.po_internal_id = pPoInternalId INTO result;
  113.    
  114.     vFlgAcceptTax := result.flg_accept_tax;
  115.     vOuBuyStructure := result.ou_buy;
  116.     vDocJournalRg := result.doc_rg;
  117.     vDocJournalPurchInv := result.doc_inv;
  118.     vDocJournalCbOut := result.doc_cb;     
  119.    
  120.    
  121.     UPDATE pu_po_internal_doc_no SET ref_id = vPoId WHERE po_internal_id = pPoInternalId AND ref_doc_type_id = vPoDocType;
  122.     UPDATE pu_po_internal_doc_no SET ref_id = vRgId WHERE po_internal_id = pPoInternalId AND ref_doc_type_id = vRgDocType;
  123.     UPDATE pu_po_internal_doc_no SET ref_id = vPurchInvId WHERE po_internal_id = pPoInternalId AND ref_doc_type_id = vPurchInvDocType;
  124.     UPDATE pu_po_internal_doc_no SET ref_id = vPayApId WHERE po_internal_id = pPoInternalId AND ref_doc_type_id = vPayApDocType;
  125.     UPDATE pu_po_internal_doc_no SET ref_id = vCbOutId WHERE po_internal_id = pPoInternalId AND ref_doc_type_id = vCbOutDocType;
  126.    
  127.     /*
  128.      * menghitung total nilai tax berdasarkan nilai item
  129.      * hal ini diperlukan untuk mendapatkan nilai selisih gov tax amount thd total tax item amount,
  130.      * dimana nilai akan diadjust ke nilai item barang, untuk kondisi po internal yang tidak accept tax (FlgAcceptTax = N )
  131.      */
  132.     SELECT COUNT(*) INTO vCountItemTax
  133.     FROM pu_po_internal_item A
  134.     WHERE A.po_internal_id = pPoInternalId AND
  135.         A.tax_id <> vEmptyId;
  136.        
  137.     IF vCountItemTax > 0 THEN      
  138.         SELECT SUM(A.tax_amount)
  139.             INTO vItemTaxAmount
  140.         FROM pu_po_internal_item A
  141.         WHERE A.po_internal_id = pPoInternalId AND
  142.             A.tax_id <> vEmptyId;
  143.        
  144.         SELECT A.gov_tax_amount INTO vGovTaxAmount
  145.         FROM pu_po_internal_tax A
  146.         WHERE A.po_internal_id = pPoInternalId;
  147.        
  148.     ELSE
  149.         vItemTaxAmount := 0;
  150.         vGovTaxAmount := 0;
  151.     END IF;
  152.     /*
  153.      * buat data header PO,
  154.      * status = Release
  155.      */
  156.     INSERT INTO pu_po
  157.     (po_id, tenant_id, doc_type_id, doc_no, doc_date, ou_id,
  158.     ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  159.     partner_id, purchaser_id, warehouse_id, flg_delivery, curr_code,
  160.     add_discount_percentage, add_discount_amount, top_code, status_doc, workflow_status,
  161.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  162.     SELECT vPoId, A.tenant_id, B.ref_doc_type_id, B.ref_doc_no, A.doc_date, A.ou_buy_id,
  163.         A.ext_doc_no, A.ext_doc_date, A.ref_doc_type_id, A.ref_id, A.remark,
  164.         A.partner_sell_id, A.purchaser_id, A.warehouse_buy_id, A.flg_delivery, A.curr_code,
  165.         0, 0, 'COD', vStatusRelease, vWorkflowStatus,
  166.         0, pDatetime, pUserId, pDatetime, pUserId
  167.     FROM pu_po_internal A,  pu_po_internal_doc_no B
  168.     WHERE A.po_internal_id = pPoInternalId AND
  169.         A.po_internal_id = B.po_internal_id AND
  170.         B.ref_doc_type_id = vPoDocType;
  171.    
  172.     /*
  173.      * buat data item PO
  174.      * harus perhatikan apakah nilai pajak dari penjual diterima oleh pembeli
  175.      * arti diterima adalah , harga product tidak akan termasuk nilai pajak
  176.      * arti tidak diterima adalah, harga product akan termasuk nilai pajak
  177.      */        
  178.     IF vFlgAcceptTax = 'Y' THEN
  179.         INSERT INTO pu_po_item
  180.         (tenant_id, po_id, line_no, ref_doc_type_id, ref_id,
  181.         warehouse_id, product_id, flg_stock, curr_code, gross_price_po,
  182.         flg_tax_amount, tax_id, tax_percentage, tax_price, nett_price_po,
  183.         qty_po, po_uom_id, qty_int, base_uom_id, discount_percentage,
  184.         discount_amount, gross_item_amount, nett_item_amount, tax_amount, activity_gl_id,
  185.         product_coa_id, ou_rc_id, eta, tolerance_rcv_qty, remark,
  186.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  187.         SELECT A.tenant_id, vPoId, B.line_no, A.doc_type_id, B.po_internal_item_id,
  188.             A.warehouse_buy_id, B.product_id, 'Y', B.curr_code, B.gross_price_po,
  189.             B.flg_tax_amount, B.tax_id, B.tax_percentage, B.tax_price, B.nett_price_po,
  190.             B.qty_int, B.base_uom_id, B.qty_int, B.base_uom_id, B.discount_percentage,
  191.             B.discount_amount, B.gross_item_amount, B.nett_item_amount, B.tax_amount, vEmptyId,
  192.             f_get_product_coa_group_product(A.tenant_id, B.product_id), vEmptyId, A.doc_date, 0, B.remark,
  193.             0, pDatetime, pUserId, pDatetime, pUserId
  194.         FROM pu_po_internal A, pu_po_internal_item B
  195.         WHERE A.po_internal_id = pPoInternalId AND
  196.             A.po_internal_id = B.po_internal_id;
  197.            
  198.         INSERT INTO pu_po_tax
  199.         (tenant_id, po_id, tax_id, flg_amount,
  200.         tax_percentage, base_amount, tax_amount, remark,
  201.         version, create_datetime, create_user_id, update_datetime, update_user_id)
  202.         SELECT A.tenant_id, vPoId, A.tax_id, A.flg_amount,
  203.             A.tax_percentage, A.base_amount, A.tax_amount, A.remark,
  204.             0, pDatetime, pUserId, pDatetime, pUserId
  205.         FROM pu_po_internal_tax A
  206.         WHERE A.po_internal_id = pPoInternalId;    
  207.            
  208.     ELSE
  209.    
  210.         /*
  211.          * karena flg accept tax = N, tax id, tax percentage, tax amount dianggap tidak ada
  212.          * jika flg tax amount = Y,
  213.          *  maka nilai akan ambil apa adanya dari pu_po_internal_item
  214.          * jika flg tax amount = N,
  215.          *  maka nilai gross price = nett price, gross amount = nett amount,dimana nilai harus sudah ditambah tax percentage
  216.          *
  217.          */
  218.         INSERT INTO pu_po_item
  219.         (tenant_id, po_id, line_no, ref_doc_type_id, ref_id,
  220.         warehouse_id, product_id, flg_stock, curr_code, gross_price_po,
  221.         flg_tax_amount, tax_id, tax_percentage, tax_price, nett_price_po,
  222.         qty_po, po_uom_id, qty_int, base_uom_id, discount_percentage,
  223.         discount_amount, gross_item_amount, nett_item_amount, tax_amount, activity_gl_id,
  224.         product_coa_id, ou_rc_id, eta, tolerance_rcv_qty, remark,
  225.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  226.         SELECT A.tenant_id, vPoId, B.line_no, A.doc_type_id, B.po_internal_item_id,
  227.             A.warehouse_buy_id, B.product_id, 'Y', B.curr_code,
  228.             CASE WHEN B.flg_tax_amount = 'Y' THEN (B.gross_price_po - B.discount_amount)
  229.                 ELSE
  230.                     CASE WHEN vRoundingModeNonTax = 'RD' THEN TRUNC((B.gross_price_po - B.discount_amount) * (100 + B.tax_percentage) / 100, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, B.curr_code))
  231.                     ELSE ROUND((B.gross_price_po - B.discount_amount) * (100 + B.tax_percentage) / 100, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, B.curr_code)) END
  232.                 END,
  233.             'N', vEmptyId, 0, 0,
  234.             CASE WHEN B.flg_tax_amount = 'Y' THEN (B.gross_price_po - B.discount_amount)
  235.                 ELSE
  236.                     CASE WHEN vRoundingModeNonTax = 'RD' THEN TRUNC((B.gross_price_po - B.discount_amount) * (100 + B.tax_percentage) / 100, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, B.curr_code))
  237.                     ELSE ROUND((B.gross_price_po - B.discount_amount) * (100 + B.tax_percentage) / 100, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, B.curr_code)) END
  238.                 END,
  239.             B.qty_int, B.base_uom_id, B.qty_int, B.base_uom_id, 0,
  240.             0,
  241.             CASE WHEN B.flg_tax_amount = 'Y' THEN B.gross_item_amount - (B.qty_int * B.discount_amount)
  242.                 ELSE
  243.                     CASE WHEN vRoundingModeNonTax = 'RD' THEN TRUNC(B.qty_int * (B.gross_price_po - B.discount_amount) * (100 + B.tax_percentage) / 100, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, B.curr_code))
  244.                     ELSE ROUND(B.qty_int * (B.gross_price_po - B.discount_amount) * (100 + B.tax_percentage) / 100, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, B.curr_code)) END
  245.                 END,
  246.             CASE WHEN B.flg_tax_amount = 'Y' THEN B.gross_item_amount - (B.qty_int * B.discount_amount)
  247.                 ELSE
  248.                     CASE WHEN vRoundingModeNonTax = 'RD' THEN TRUNC(B.qty_int * (B.gross_price_po - B.discount_amount) * (100 + B.tax_percentage) / 100, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, B.curr_code))
  249.                     ELSE ROUND(B.qty_int * (B.gross_price_po - B.discount_amount) * (100 + B.tax_percentage) / 100, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, B.curr_code)) END
  250.                 END,
  251.             0, vEmptyId,
  252.             f_get_product_coa_group_product(A.tenant_id, B.product_id), vEmptyId, A.doc_date, 0, B.remark,
  253.             0, pDatetime, pUserId, pDatetime, pUserId
  254.         FROM pu_po_internal A, pu_po_internal_item B
  255.         WHERE A.po_internal_id = pPoInternalId AND
  256.             A.po_internal_id = B.po_internal_id;
  257.            
  258.         /*
  259.          * selisih nilai tax amount di detail item dan gov tax amount akan dialokasi kan ke po item yang paling akhir
  260.          */
  261.         UPDATE pu_po_item SET nett_item_amount = nett_item_amount + (vGovTaxAmount - vItemTaxAmount)
  262.         WHERE po_id = vPoId AND
  263.             po_item_id IN (SELECT MAX(po_item_id) FROM pu_po_item WHERE po_id = vPoId);
  264.    
  265.     END IF;
  266.    
  267.     /*
  268.      * buat saldo po item dengan status sudah Final
  269.      * karena po internal langsung dianggap terima barang semua nya.
  270.      */
  271.     INSERT INTO pu_po_balance_item
  272.     (po_item_id, tenant_id, ou_id, qty_po, qty_rcv, qty_return, qty_cancel, qty_add, po_uom_id,
  273.      qty_int_po, qty_int_rcv, qty_int_return, qty_int_cancel, qty_int_add, base_uom_id,
  274.      tolerance_rcv_qty, status_item, version, create_datetime, create_user_id, update_datetime, update_user_id)
  275.     SELECT A.po_item_id, A.tenant_id, B.ou_id, A.qty_po, A.qty_po, 0, 0, 0, A.po_uom_id,
  276.             A.qty_int, A.qty_int, 0, 0, 0, A.base_uom_id,
  277.             A.tolerance_rcv_qty, vStatusFinal,
  278.             0, pDatetime, pUserId, pDatetime, pUserId
  279.     FROM pu_po_item A, pu_po B
  280.     WHERE A.po_id = vPoId AND
  281.         A.po_id = B.po_id;
  282.      
  283.     /*
  284.      * buat log saldo po item untuk transaksi po item sendiri
  285.      */
  286.     INSERT INTO pu_log_po_balance_item
  287.     (tenant_id, po_id, po_item_id, ref_doc_type_id, ref_id, ref_item_id,
  288.      qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  289.     version, create_datetime, create_user_id, update_datetime, update_user_id)
  290.     SELECT A.tenant_id, A.po_id, A.po_item_id, vEmptyId, vEmptyId, vEmptyId,
  291.         A.qty_po, A.po_uom_id, A.qty_int, A.base_uom_id, A.remark,
  292.         0, pDatetime, pUserId, pDatetime, pUserId
  293.     FROM pu_po_item A
  294.     WHERE A.po_id = vPoId;         
  295.        
  296.     /*
  297.      * buat data header receive goods sesuai dengan po id di atas
  298.      */
  299.     INSERT INTO pu_receive_goods
  300.     (receive_goods_id, tenant_id, doc_type_id, doc_no, doc_date,
  301.     ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id,
  302.     remark, partner_id, warehouse_id, status_doc, workflow_status,
  303.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  304.     SELECT vRgId, A.tenant_id, B.ref_doc_type_id, B.ref_doc_no, A.doc_date,
  305.         A.ou_buy_id, A.ext_doc_no, A.ext_doc_date, vPoDocType, vPoId,
  306.         A.remark, A.partner_sell_id, A.warehouse_buy_id, vStatusRelease, vWorkflowStatus,
  307.         0, pDatetime, pUserId, pDatetime, pUserId
  308.     FROM pu_po_internal A,  pu_po_internal_doc_no B
  309.     WHERE A.po_internal_id = pPoInternalId AND
  310.         A.po_internal_id = B.po_internal_id AND
  311.         B.ref_doc_type_id = vRgDocType;
  312.    
  313.     /*
  314.      * buat data item receive goods
  315.      */
  316.     INSERT INTO pu_receive_goods_item
  317.     (tenant_id, receive_goods_id, line_no, ref_doc_type_id, ref_id,
  318.     product_id, qty_rcv_po, po_uom_id, qty_rcv_int, base_uom_id,
  319.     remark, "version", create_datetime, create_user_id, update_datetime, update_user_id)
  320.     SELECT A.tenant_id, vRgId, A.line_no, vPoDocType, A.po_item_id,
  321.         A.product_id, A.qty_po, A.po_uom_id, A.qty_int, A.base_uom_id,
  322.         A.remark, 0, pDatetime, pUserId, pDatetime, pUserId
  323.     FROM pu_po_item A
  324.     WHERE A.po_id = vPoId;
  325.    
  326.     /*
  327.      * buat data product receive goods
  328.      * item yang memiliki product balance id
  329.      */
  330.     INSERT INTO pu_receive_goods_product
  331.     (tenant_id, receive_goods_item_id, line_no, product_id, serial_number,
  332.     product_expired_date, product_year_made, lot_number, qty_rcv_po, po_uom_id,
  333.     qty_rcv_int, base_uom_id, remark,
  334.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  335.     SELECT A.tenant_id, C.receive_goods_item_id, A.line_no, A.product_id, D.serial_number,
  336.         D.product_expired_date, D.product_year_made, D.lot_number, A.qty_int, A.base_uom_Id,
  337.         A.qty_int, A.base_uom_id, A.remark,
  338.         0, pDatetime, pUserId, pDatetime, pUserId
  339.     FROM pu_po_internal_product A, pu_po_item B, pu_receive_goods_item C, in_product_balance D
  340.     WHERE A.po_internal_item_id = B.ref_id AND
  341.         B.po_id = vPoId AND
  342.         B.po_item_id = C.ref_id AND
  343.         A.product_balance_id = D.product_balance_id;
  344.        
  345.     /*
  346.      * buat log saldo po item untuk item receive goods
  347.      */
  348.     INSERT INTO pu_log_po_balance_item
  349.     (tenant_id, po_id, po_item_id, ref_doc_type_id, ref_id, ref_item_id,
  350.      qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  351.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  352.     SELECT A.tenant_id, A.ref_id, B.ref_id, A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id,
  353.         B.qty_rcv_po * -1, B.po_uom_id, B.qty_rcv_int * -1, B.base_uom_id, B.remark,
  354.         0, pDatetime, pUserId, pDatetime, pUserId
  355.     FROM pu_receive_goods A, pu_receive_goods_item B
  356.     WHERE A.receive_goods_id = vRgId AND
  357.           A.receive_goods_id = B.receive_goods_id;
  358.          
  359.     /*
  360.      * buat saldo po invoice
  361.      * dengan status sudah invoice = Y
  362.      * nett item amount langsung digunakan, karena receive goods tidak partial, qty terima sesuai dengan qty order
  363.      */
  364.     INSERT INTO pu_po_balance_invoice
  365.     (tenant_id, ou_id, partner_id, po_id,
  366.     ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, ref_item_id, qty_rcv_po, po_uom_id,
  367.     curr_code, price_po, item_amount, flg_invoice, invoice_id,
  368.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  369.     SELECT A.tenant_id, A.ou_id, A.partner_id, A.ref_id,
  370.         A.doc_type_id, A.receive_goods_id, A.doc_no, A.doc_date, B.receive_goods_item_id, B.qty_rcv_po, B.po_uom_id,
  371.         C.curr_code, C.nett_price_po,
  372.         C.nett_item_amount,
  373.         'Y', vPurchInvId,
  374.         0, pDatetime, pUserId, pDatetime, pUserId
  375.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_po_item C
  376.     WHERE A.receive_goods_id = vRgId AND
  377.           A.receive_goods_id = B.receive_goods_id AND
  378.           B.ref_id = C.po_item_id;
  379.        
  380.     INSERT INTO pu_po_balance_invoice_tax
  381.     (tenant_id, ou_id, partner_id, po_id,
  382.     ref_doc_type_id, ref_id, ref_item_id, tax_id, flg_amount,
  383.     tax_percentage, curr_code, base_amount, tax_amount, flg_invoice, invoice_id,
  384.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  385.     SELECT A.tenant_id, A.ou_id, A.partner_id, A.ref_id,
  386.         A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id, C.tax_id, D.flg_amount,
  387.         C.tax_percentage, C.curr_code,
  388.         f_get_amount_before_tax(B.qty_rcv_po * (C.gross_price_po - C.discount_amount), C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, C.curr_code), vRoundingModeNonTax),
  389.         f_tax_rounding(A.tenant_id, f_get_amount_before_tax(B.qty_rcv_po * (C.gross_price_po - C.discount_amount), C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, C.curr_code), vRoundingModeNonTax), C.tax_percentage),
  390.         'Y', vPurchInvId,
  391.         0, pDatetime, pUserId, pDatetime, pUserId
  392.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_po_item C, m_tax D
  393.     WHERE A.receive_goods_id = vRgId AND
  394.           A.receive_goods_id = B.receive_goods_id AND
  395.           B.ref_id = C.po_item_id AND
  396.           C.tax_id = D.tax_id;
  397.    
  398.     /*
  399.      * tampung data item receive goods, untuk dapat digunakan dan disimpan ke product_balance, product_price_balance
  400.      */      
  401.     INSERT INTO tt_pu_product_balance
  402.     (session_id, warehouse_id, product_balance_id, tenant_id, ou_id, product_id,
  403.     serial_number, lot_number, product_expired_date, product_year_made,
  404.     product_price_balance_id, product_buy_date, partner_id,
  405.     doc_type_id, ref_id, ref_item_id, doc_no, doc_date,
  406.     po_id, po_no, po_date, po_item_id,
  407.     curr_code, price, qty_rcv, po_uom_id, qty_int_rcv, base_uom_id, flg_stock)
  408.     SELECT pSessionId, A.warehouse_id, vEmptyId, A.tenant_id, A.ou_id, B.product_id,
  409.         vEmptyValue, vEmptyValue, vEmptyValue, vEmptyValue,
  410.         vEmptyId, A.doc_date, A.partner_id,
  411.         A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id, A.doc_no, A.doc_date,
  412.         E.po_id, E.doc_no, E.doc_date, D.po_item_id,
  413.         D.curr_code, D.gross_price_po - D.discount_amount, SUM(B.qty_rcv_po), D.po_uom_id, SUM(B.qty_rcv_int), D.base_uom_id, D.flg_stock
  414.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_po_item D, pu_po E
  415.     WHERE A.receive_goods_id = vRgId AND
  416.         A.receive_goods_id = B.receive_goods_id AND
  417.         NOT EXISTS (SELECT 1 FROM pu_receive_goods_product C
  418.                     WHERE B.receive_goods_item_id = C.receive_goods_item_id) AND
  419.         B.ref_id = D.po_item_id AND
  420.         D.po_id = E.po_id
  421.     GROUP BY A.warehouse_id, A.tenant_id, A.ou_id, B.product_id,
  422.         A.doc_date, A.partner_id, A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id, A.doc_no,
  423.         E.po_id, E.doc_no, E.doc_date, D.po_item_id,
  424.         D.curr_code, D.nett_price_po, D.po_uom_id, D.base_uom_id, D.flg_stock;
  425.  
  426.    
  427.     INSERT INTO tt_pu_product_balance
  428.     (session_id, warehouse_id, product_balance_id, tenant_id, ou_id, product_id,
  429.     serial_number, lot_number, product_expired_date, product_year_made,
  430.     product_price_balance_id, product_buy_date, partner_id,
  431.     doc_type_id, ref_id, ref_item_id, doc_no, doc_date,
  432.     po_id, po_no, po_date, po_item_id,
  433.     curr_code, price, qty_rcv, po_uom_id, qty_int_rcv, base_uom_id, flg_stock)
  434.     SELECT pSessionId, A.warehouse_id, F.product_balance_id, A.tenant_id, A.ou_id, B.product_id,
  435.         C.serial_number, C.lot_number, C.product_expired_date, C.product_year_made,
  436.         vEmptyId, A.doc_date, A.partner_id,
  437.         A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id, A.doc_no, A.doc_date,
  438.         E.po_id, E.doc_no, E.doc_date, D.po_item_id,       
  439.         D.curr_code, D.gross_price_po - D.discount_amount, SUM(C.qty_rcv_po), D.po_uom_id, SUM(C.qty_rcv_int), D.base_uom_id, D.flg_stock
  440.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_receive_goods_product C, pu_po_item D, pu_po E, pu_po_internal_product F
  441.     WHERE A.receive_goods_id = vRgId AND
  442.         A.receive_goods_id = B.receive_goods_id AND
  443.         B.receive_goods_item_id = C.receive_goods_item_id AND
  444.         B.ref_id = D.po_item_id AND
  445.         D.po_id = E.po_id AND
  446.         F.po_internal_item_id = D.ref_id AND
  447.         D.po_item_id = B.ref_id AND
  448.         C.line_no = F.line_no
  449.     GROUP BY A.warehouse_id, A.tenant_id, A.ou_id, B.product_id,
  450.         C.serial_number, C.lot_number, C.product_expired_date, C.product_year_made,
  451.         A.doc_date, A.partner_id, A.doc_type_id, a.receive_goods_id, B.receive_goods_item_id, A.doc_no,
  452.         E.po_id, E.doc_no, E.doc_date, D.po_item_id,
  453.         D.curr_code, D.nett_price_po, D.po_uom_id, D.base_uom_id, D.flg_stock, F.product_balance_id;
  454.                    
  455.     INSERT INTO in_product_price_balance
  456.     (tenant_id, ou_id, product_id, product_balance_id,
  457.     product_buy_date, partner_id, doc_type_id, ref_id, doc_no, doc_date,
  458.     curr_code, amount, qty, uom_id,
  459.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  460.     SELECT A.tenant_id, A.ou_id, A.product_id, A.product_balance_id,
  461.         A.doc_date, A.partner_id, A.doc_type_id, A.ref_item_id, A.doc_no, A.doc_date,
  462.         A.curr_code, SUM(f_get_amount_before_tax(A.qty_rcv * A.price, B.flg_tax_amount, B.tax_percentage, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, A.curr_code), vRoundingModeNonTax)),
  463.         SUM(A.qty_int_rcv), A.base_uom_id,
  464.         0, pDatetime, pUserId, pDatetime, pUserId
  465.     FROM tt_pu_product_balance A, pu_po_item B
  466.     WHERE A.session_id = pSessionId AND
  467.         A.po_item_id = B.po_item_id
  468.     GROUP BY A.tenant_id, A.ou_id, A.product_id, A.product_balance_id, A.doc_date,
  469.         A.partner_id, A.doc_type_id, A.ref_item_id, A.doc_no, A.curr_code, A.base_uom_id, B.nett_item_amount;
  470.    
  471.     UPDATE tt_pu_product_balance SET product_price_balance_id = A.product_price_balance_id
  472.     FROM in_product_price_balance A
  473.     WHERE tt_pu_product_balance.session_id = pSessionId AND
  474.         tt_pu_product_balance.tenant_id = A.tenant_id AND
  475.         tt_pu_product_balance.ou_id = A.ou_id AND
  476.         tt_pu_product_balance.product_id = A.product_id AND    
  477.         tt_pu_product_balance.product_balance_id = A.product_balance_id AND
  478.         tt_pu_product_balance.partner_id = A.partner_id AND
  479.         tt_pu_product_balance.doc_type_id = A.doc_type_id AND
  480.         tt_pu_product_balance.ref_item_id = A.ref_id AND
  481.         tt_pu_product_balance.doc_no = A.doc_no AND
  482.         tt_pu_product_balance.doc_date = A.doc_date;
  483.    
  484.     /*
  485.      * update product_balance_stock, yang sudah ada di in_produc_balance_stock
  486.      */
  487.     --Modified by Adrian, Jun 19, 2017
  488.     --Mengubah update product balance stock menjadi dari hasil group by
  489.     WITH summed_tt_pu_product_balance AS (
  490.         SELECT A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id,
  491.             SUM(A.qty_int_rcv) AS qty_int_rcv
  492.         FROM tt_pu_product_balance A
  493.         WHERE A.session_id = pSessionId
  494.             AND A.flg_stock = 'Y'
  495.         GROUP BY A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id
  496.     )
  497.     UPDATE in_product_balance_stock SET qty = qty + A.qty_int_rcv, update_datetime = pDatetime, update_user_id = pUserId, version = version + 1
  498.     FROM summed_tt_pu_product_balance A
  499.     WHERE --A.session_id = pSessionId AND
  500.         in_product_balance_stock.product_id = A.product_id AND
  501.         in_product_balance_stock.tenant_id = A.tenant_id AND
  502.         in_product_balance_stock.warehouse_id = A.warehouse_id AND
  503.         in_product_balance_stock.product_balance_id = A.product_balance_id AND
  504.         in_product_balance_stock.product_status = vProductStatus;
  505.         --AND A.flg_stock = 'Y';
  506.  
  507.     /*
  508.      * insert data in_product_balance_stock
  509.      */
  510.     INSERT INTO in_product_balance_stock
  511.     (tenant_id, warehouse_id, product_id, product_balance_id, product_status, base_uom_id, qty,
  512.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  513.     SELECT A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id, vProductStatus,
  514.         A.base_uom_id, SUM(A.qty_int_rcv),
  515.         0, pDatetime, pUserId, pDatetime, pUserId
  516.     FROM tt_pu_product_balance A
  517.     WHERE A.session_id = pSessionId AND
  518.         A.flg_stock = 'Y' AND
  519.         NOT EXISTS (SELECT 1 FROM in_product_balance_stock B
  520.                     WHERE A.tenant_id = B.tenant_id AND
  521.                         A.warehouse_id = B.warehouse_id AND
  522.                         A.product_id = B.product_id AND
  523.                         A.product_balance_id = B.product_balance_id AND
  524.                         B.product_status = vProductStatus)
  525.     GROUP BY A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id, A.base_uom_id;
  526.        
  527.     /*
  528.      * insert data product_price_balance_stock
  529.      */
  530.     INSERT INTO in_product_price_balance_stock
  531.     (tenant_id, warehouse_id, product_id, product_balance_id,
  532.     product_price_balance_id, product_status, base_uom_id, qty,
  533.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  534.     SELECT A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id,
  535.         A.product_price_balance_id, vProductStatus, A.base_uom_id, SUM(A.qty_int_rcv),
  536.         0, pDatetime, pUserId, pDatetime, pUserId
  537.     FROM tt_pu_product_balance A
  538.     WHERE A.session_id = pSessionId AND
  539.         A.flg_stock = 'Y'
  540.     GROUP BY A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id, A.product_price_balance_id, A.base_uom_id;
  541.    
  542.     /*
  543.      * buat data log product balance stock
  544.      */
  545.     INSERT INTO in_log_product_balance_stock
  546.     (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  547.      product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
  548.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  549.     SELECT A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  550.         A.product_id, A.product_balance_id, A.warehouse_id, vProductStatus, A.base_uom_id, SUM(A.qty_int_rcv),
  551.         0, pDatetime, pUserId, pDatetime, pUserId      
  552.     FROM tt_pu_product_balance A
  553.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  554.     WHERE A.session_id = pSessionId AND
  555.         A.flg_stock = 'Y'
  556.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  557.         A.product_id, A.product_balance_id, A.warehouse_id, A.base_uom_id;
  558.  
  559.     /*
  560.      * buat data log product price balance stock
  561.      */
  562.     INSERT INTO in_log_product_price_balance_stock
  563.     (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  564.      product_id, warehouse_id, product_balance_id, product_price_balance_id, product_status, base_uom_id, qty,
  565.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  566.     SELECT A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  567.         A.product_id, A.warehouse_id, A.product_balance_id, A.product_price_balance_id, vProductStatus, A.base_uom_id, SUM(A.qty_int_rcv),
  568.         0, pDatetime, pUserId, pDatetime, pUserId
  569.     FROM tt_pu_product_balance A
  570.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  571.     WHERE A.session_id = pSessionId AND
  572.         A.flg_stock = 'Y'
  573.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  574.         A.product_id, A.warehouse_id, A.product_balance_id, A.product_price_balance_id, A.base_uom_id;
  575.        
  576.     /*
  577.      * add data balance receive goods item yang akan digunakan di inventory,
  578.      * saat akan membuat claim note
  579.      */
  580.     INSERT INTO in_balance_receive_goods_item
  581.     (receive_goods_item_id, tenant_id, ou_id, receive_goods_id, doc_no, doc_date, partner_id,
  582.       po_id, po_no, po_date, po_item_id,
  583.       qty_rcv, qty_return, po_uom_id, qty_int_rcv, 
  584.       qty_int_return, base_uom_id, status_item,
  585.       "version", create_datetime, create_user_id, update_datetime, update_user_id)
  586.     SELECT A.ref_item_id, A.tenant_id, A.ou_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  587.             A.po_id, A.po_no, A.po_date, A.po_item_id,
  588.             SUM(A.qty_rcv), 0, A.po_uom_id, SUM(A.qty_int_rcv),
  589.             0, A.base_uom_id, vStatusRelease,
  590.         0, pDatetime, pUserId, pDatetime, pUserId      
  591.     FROM tt_pu_product_balance A
  592.     WHERE A.session_id = pSessionId
  593.     GROUP BY A.ref_item_id, A.tenant_id, A.ou_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  594.             A.po_id, A.po_no, A.po_date, A.po_item_id, A.po_uom_id, A.base_uom_id;
  595.          
  596.     /*
  597.      * create monthly price product
  598.      */
  599.     INSERT INTO tt_pu_monthly_price_product
  600.     (session_id, tenant_id, ou_id, year_month_date,
  601.     product_id, curr_code, amount, qty, base_uom_id,
  602.      ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, source_price,
  603.      flg_tax_amount, tax_id, tax_percentage)
  604.     SELECT pSessionId, A.tenant_id, A.ou_id, C.year_month_date,
  605.         A.product_id, A.curr_code, SUM(f_get_amount_before_tax(A.qty_rcv * A.price, B.flg_tax_amount, B.tax_percentage, f_get_digit_decimal_doc_curr(vPoInternalDocTypeId, A.curr_code), vRoundingModeNonTax)),
  606.         SUM(A.qty_int_rcv), A.base_uom_id,
  607.         A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  608.         'PURCHASING PO NO : '|| A.po_no || ' DATE : '|| A.po_date,
  609.         B.flg_tax_amount, B.tax_id, B.tax_percentage
  610.     FROM tt_pu_product_balance A, pu_po_item B, dt_date C
  611.     WHERE A.session_id = pSessionId AND
  612.         A.po_item_id = B.po_item_id AND
  613.         A.doc_date = C.string_date
  614.     GROUP BY A.tenant_id, A.ou_id, C.year_month_date, A.product_id, A.curr_code, A.base_uom_id,
  615.         A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.po_no, A.po_date,
  616.         B.flg_tax_amount, B.tax_id, B.tax_percentage;
  617.      
  618.     UPDATE pu_monthly_price_product SET curr_code = A.curr_code, amount = A.amount,
  619.                                         qty = A.qty, ref_doc_type_id = A.ref_doc_type_id,
  620.                                         ref_id = A.ref_id, ref_doc_no = A.ref_doc_no, ref_doc_date = A.ref_doc_date,
  621.                                         source_price = A.source_price, flg_tax_amount = A.flg_tax_amount,
  622.                                         tax_id = A.tax_id, tax_percentage = A.tax_percentage
  623.     FROM tt_pu_monthly_price_product A
  624.     WHERE A.session_id = pSessionId AND
  625.         pu_monthly_price_product.tenant_id = A.tenant_id AND
  626.         pu_monthly_price_product.ou_id = A.ou_id AND
  627.         pu_monthly_price_product.year_month_date = A.year_month_date AND
  628.         pu_monthly_price_product.product_id = A.product_id;
  629.        
  630.     INSERT INTO pu_monthly_price_product
  631.     (tenant_id, ou_id, year_month_date, product_id,
  632.     curr_code, amount, qty, base_uom_id, source_price,
  633.     ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date,
  634.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  635.     flg_tax_amount, tax_id, tax_percentage)
  636.     SELECT A.tenant_id, A.ou_id, A.year_month_date, A.product_id,
  637.             A.curr_code, A.amount, A.qty, A.base_uom_id, A.source_price,
  638.             A.ref_doc_type_id, A.ref_id, A.ref_doc_no, A.ref_doc_date,
  639.             0, pDatetime, pUserId, pDatetime, pUserId,
  640.             A.flg_tax_amount, A.tax_id, A.tax_percentage
  641.     FROM tt_pu_monthly_price_product A
  642.     WHERE A.session_id = pSessionId AND
  643.         NOT EXISTS (SELECT 1 FROM pu_monthly_price_product B
  644.                     WHERE A.tenant_id = B.tenant_id AND
  645.                         A.ou_id = B.ou_id AND
  646.                         A.product_id = B.product_id AND
  647.                         A.year_month_date = B.year_month_date);
  648.    
  649.     INSERT INTO pu_log_monthly_price_product
  650.     (tenant_id, ou_id, year_month_date, product_id,
  651.     curr_code, amount, qty, base_uom_id, source_price,
  652.     ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date,
  653.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  654.     flg_tax_amount, tax_id, tax_percentage)
  655.     SELECT A.tenant_id, A.ou_id, A.year_month_date, A.product_id,
  656.         A.curr_code, A.amount, A.qty, A.base_uom_id, A.source_price,
  657.         A.ref_doc_type_id, A.ref_id, A.ref_doc_no, A.ref_doc_date,
  658.         0, pDatetime, pUserId, pDatetime, pUserId,
  659.         A.flg_tax_amount, A.tax_id, A.tax_percentage
  660.     FROM tt_pu_monthly_price_product A
  661.     WHERE A.session_id = pSessionId;
  662.    
  663.     IF vFlgAcceptTax = 'Y' THEN
  664.         INSERT INTO pu_invoice
  665.         (invoice_id, tenant_id, doc_type_id, doc_no, doc_date,
  666.         ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id,
  667.         remark, partner_id, ou_legal_id, due_date, purchaser_id,
  668.         curr_code, gross_amount, advance_amount, tax_amount, add_amount,
  669.         total_amount, status_doc, workflow_status,
  670.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  671.         SELECT vPurchInvId, A.tenant_id, B.ref_doc_type_id, B.ref_doc_no, A.doc_date,
  672.             A.ou_buy_id, A.ext_doc_no, A.ext_doc_date, vPoDocType, vPoId,
  673.             A.remark, A.partner_sell_id, vEmptyId, A.doc_date, A.purchaser_id,
  674.             A.curr_code, SUM(C.item_amount) + SUM(D.gov_tax_amount), 0, SUM(D.gov_tax_amount), 0,
  675.             SUM(C.item_amount), vStatusRelease, vWorkflowStatus,
  676.             0, pDatetime, pUserId, pDatetime, pUserId
  677.         FROM pu_po_internal A,  pu_po_internal_doc_no B, pu_po_balance_invoice C, pu_po_internal_tax D
  678.         WHERE A.po_internal_id = pPoInternalId AND
  679.             A.po_internal_id = B.po_internal_id AND
  680.             B.ref_doc_type_id = vPurchInvDocType AND
  681.             A.po_internal_id = D.po_internal_id AND
  682.             C.invoice_id = vPurchInvId
  683.         GROUP BY A.tenant_id, B.ref_doc_type_id, B.ref_doc_no, A.doc_date, A.ou_buy_id, A.ext_doc_no, A.ext_doc_date, A.remark,
  684.                 A.partner_sell_id, A.purchaser_id, A.curr_code;
  685.     ELSE
  686.         INSERT INTO pu_invoice
  687.         (invoice_id, tenant_id, doc_type_id, doc_no, doc_date,
  688.         ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id,
  689.         remark, partner_id, ou_legal_id, due_date, purchaser_id,
  690.         curr_code, gross_amount, advance_amount, tax_amount, add_amount,
  691.         total_amount, status_doc, workflow_status,
  692.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  693.         SELECT vPurchInvId, A.tenant_id, B.ref_doc_type_id, B.ref_doc_no, A.doc_date,
  694.             A.ou_buy_id, A.ext_doc_no, A.ext_doc_date, vPoDocType, vPoId,
  695.             A.remark, A.partner_sell_id, vEmptyId, A.doc_date, A.purchaser_id,
  696.             A.curr_code, SUM(C.item_amount), 0, 0, 0,
  697.             SUM(C.item_amount), vStatusRelease, vWorkflowStatus,
  698.             0, pDatetime, pUserId, pDatetime, pUserId
  699.         FROM pu_po_internal A,  pu_po_internal_doc_no B, pu_po_balance_invoice C
  700.         WHERE A.po_internal_id = pPoInternalId AND
  701.             A.po_internal_id = B.po_internal_id AND
  702.             B.ref_doc_type_id = vPurchInvDocType AND
  703.             C.invoice_id = vPurchInvId
  704.         GROUP BY A.tenant_id, B.ref_doc_type_id, B.ref_doc_no, A.doc_date, A.ou_buy_id, A.ext_doc_no, A.ext_doc_date, A.remark,
  705.                 A.partner_sell_id, A.purchaser_id, A.curr_code;
  706.    
  707.     END IF;
  708.    
  709.     INSERT INTO pu_invoice_item
  710.     (tenant_id, invoice_id, line_no, ref_doc_type_id, ref_id,
  711.     ref_item_id, ref_item_amount, remark,
  712.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  713.     SELECT A.tenant_id, A.invoice_id, ROW_NUMBER() OVER ( PARTITION BY A.invoice_id), A.ref_doc_type_id, A.ref_id,
  714.         A.ref_item_id, A.item_amount, vEmptyValue,
  715.         0, pDatetime, pUserId, pDatetime, pUserId
  716.     FROM pu_po_balance_invoice A
  717.     WHERE A.invoice_id = vPurchInvId;
  718.    
  719.     IF vFlgAcceptTax = 'Y' THEN
  720.         INSERT INTO pu_invoice_tax
  721.         (tenant_id, invoice_id, tax_id, flg_amount, tax_percentage,
  722.         base_amount, tax_amount, tax_no, tax_date, tax_curr_code, gov_tax_amount,
  723.         remark, "version", create_datetime, create_user_id, update_datetime, update_user_id)
  724.         SELECT A.tenant_id, vPurchInvId, A.tax_id, A.flg_amount, A.tax_percentage,
  725.             A.base_amount, A.tax_amount, A.tax_no, A.tax_date, A.tax_curr_code, A.gov_tax_amount,
  726.             A.remark, 0, pDatetime, pUserId, pDatetime, pUserId
  727.         FROM pu_po_internal_tax A
  728.         WHERE A.po_internal_id = pPoInternalId;
  729.        
  730.         -- Modified by David, 2 Januari 2015 add next val for using for insert into vat in
  731.         SELECT nextval('fi_invoice_ap_balance_seq') INTO vInvoiceApBalanceId;
  732.        
  733.         INSERT INTO fi_invoice_ap_balance
  734.         (invoice_ap_balance_id, tenant_id, ou_id, doc_type_id, invoice_ap_id,
  735.         doc_no, doc_date, ext_doc_no, ext_doc_date,
  736.         ref_doc_type_id, ref_id,  partner_id, due_date,  
  737.         curr_code, amount, remark, payment_amount, flg_payment,
  738.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  739.         SELECT vInvoiceApBalanceId, A.tenant_id, A.ou_id, A.doc_type_id, A.invoice_id,
  740.                 A.doc_no, A.doc_date, A.ext_doc_no, A.ext_doc_date,
  741.                 A.ref_doc_type_id, A.ref_id, A.partner_id, A.due_date,
  742.                 A.curr_code, A.total_amount, A.remark, A.total_amount, 'Y',
  743.                 0, pDatetime, pUserId, pDatetime, pUserId
  744.         FROM pu_invoice A
  745.         WHERE A.invoice_id = vPurchInvId;
  746.        
  747.         INSERT INTO fi_invoice_tax_ap_balance
  748.         (tenant_id, ou_id, doc_type_id, invoice_ap_balance_id,
  749.         partner_id, tax_id, tax_no, tax_date,
  750.         curr_code, tax_amount, tax_curr_code, gov_tax_amount,
  751.         due_date, remark, payment_amount, flg_payment,
  752.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  753.         SELECT A.tenant_id, A.ou_id, vFakturPajakMasukan, C.invoice_ap_balance_id,     
  754.             A.partner_id, B.tax_id, B.tax_no, B.tax_date,
  755.             A.curr_code, B.tax_amount, B.tax_curr_code, B.gov_tax_amount,
  756.             A.due_date, B.remark, B.gov_tax_amount, 'Y',
  757.             0, pDatetime, pUserId, pDatetime, pUserId
  758.         FROM pu_invoice A, pu_invoice_tax B, fi_invoice_ap_balance C
  759.         WHERE A.invoice_id = vPurchInvId AND
  760.             A.invoice_id = B.invoice_id AND
  761.             A.tenant_id = C.tenant_id AND
  762.             A.ou_id = C.ou_id AND
  763.             A.partner_id = C.partner_id AND
  764.             A.doc_type_id = C.doc_type_id AND
  765.             A.invoice_id = C.invoice_ap_id;
  766.            
  767.         /**
  768.          * David, 2 Januari 2015
  769.          * Call function for insert tax data into fi_vat_in_reporting for tax
  770.          * @see http://jleaf.org:8181/browse/ERPDB-235
  771.          */
  772.         PERFORM fi_insert_vat_in_for_reporting(pTenantId, pSessionId, vInvoiceApBalanceId, pUserId, pDatetime);
  773.        
  774.  
  775.      ELSE
  776.         INSERT INTO fi_invoice_ap_balance
  777.         ( tenant_id, ou_id, doc_type_id, invoice_ap_id,
  778.         doc_no, doc_date, ext_doc_no, ext_doc_date,
  779.         ref_doc_type_id, ref_id,  partner_id, due_date,  
  780.         curr_code, amount, remark, payment_amount, flg_payment,
  781.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  782.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.invoice_id,
  783.                 A.doc_no, A.doc_date, A.ext_doc_no, A.ext_doc_date,
  784.                 A.ref_doc_type_id, A.ref_id, A.partner_id, A.due_date,
  785.                 A.curr_code, A.total_amount, A.remark, A.total_amount, 'Y',
  786.                 0, pDatetime, pUserId, pDatetime, pUserId
  787.         FROM pu_invoice A
  788.         WHERE A.invoice_id = vPurchInvId;
  789.    
  790.     END IF;
  791.    
  792.    
  793.     INSERT INTO fi_payment_order
  794.     (payment_order_id, tenant_id, doc_type_id, doc_no, doc_date,
  795.     ou_id, partner_id, partner_bank_id, ext_doc_no, ext_doc_date,
  796.     ref_doc_type_id, ref_id, due_date, curr_code, debit_amount,
  797.     credit_amount, payment_amount, remark, status_doc, workflow_status,
  798.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  799.     SELECT vPayApId, A.tenant_id, B.ref_doc_type_id, B.ref_doc_no, A.doc_date,
  800.         A.ou_buy_id, A.partner_sell_id, vEmptyId, A.ext_doc_no, A.ext_doc_date,
  801.         vEmptyId, vEmptyId, A.doc_date, A.curr_code, 0,
  802.         C.gross_amount, C.gross_amount, A.remark, vStatusRelease, vWorkflowStatus,
  803.         0, pDatetime, pUserId, pDatetime, pUserId
  804.     FROM pu_po_internal A,  pu_po_internal_doc_no B, pu_invoice C
  805.     WHERE A.po_internal_id = pPoInternalId AND
  806.             A.po_internal_id = B.po_internal_id AND
  807.             B.ref_doc_type_id = vPayApDocType AND
  808.             C.invoice_id = vPurchInvId;
  809.            
  810.     INSERT INTO fi_payment_order_invoice
  811.     (tenant_id, payment_order_id, ref_doc_type_id, ref_id,
  812.     curr_code, debit_amount, credit_amount, payment_amount,
  813.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  814.     SELECT A.tenant_id, vPayApId, A.doc_type_id, A.invoice_ap_balance_id,
  815.         A.curr_code, 0, A.amount, 0,
  816.         0, pDatetime, pUserId, pDatetime, pUserId
  817.     FROM fi_invoice_ap_balance A
  818.     WHERE A.invoice_ap_id = vPurchInvId AND
  819.         A.doc_type_id = vPurchInvDocType;
  820.  
  821.     INSERT INTO fi_payment_order_invoice
  822.     (tenant_id, payment_order_id, ref_doc_type_id, ref_id,
  823.     curr_code, debit_amount, credit_amount, payment_amount,
  824.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  825.     SELECT A.tenant_id, vPayApId, A.doc_type_id, A.invoice_tax_ap_balance_id,
  826.         A.tax_curr_code, 0, A.gov_tax_amount, 0,
  827.         0, pDatetime, pUserId, pDatetime, pUserId
  828.     FROM fi_invoice_tax_ap_balance A, fi_invoice_ap_balance B
  829.     WHERE A.invoice_ap_balance_id = B.invoice_ap_balance_id AND
  830.         B.invoice_ap_id = vPurchInvId AND
  831.         B.doc_type_id = vPurchInvDocType;
  832.        
  833.     INSERT INTO fi_payment_order_alloc_balance
  834.     (payment_order_id, tenant_id, ou_id,
  835.     credit_doc_type_id, credit_doc_date, credit_id, credit_curr_code, credit_amount,
  836.     debit_doc_type_id, debit_doc_date, debit_id, debit_curr_code, debit_amount,
  837.     flg_alloc, ref_alloc_id, ref_doc_type_id, ref_doc_no, ref_doc_date,
  838.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  839.     SELECT A.payment_order_id, A.tenant_id, A.ou_id,
  840.         B.ref_doc_type_id, A.doc_date, B.ref_id, B.curr_code, B.credit_amount,
  841.         vEmptyId, vEmptyValue, vEmptyId, vEmptyValue, 0,
  842.         'C', vCbOutId, C.ref_doc_type_id, C.ref_doc_no , A.doc_date,
  843.         0, pDatetime, pUserId, pDatetime, pUserId
  844.     FROM fi_payment_order A, fi_payment_order_invoice B, pu_po_internal_doc_no C
  845.     WHERE A.payment_order_id = vPayApId AND
  846.         A.payment_order_id = B.payment_order_id AND
  847.         C.po_internal_id = pPoInternalId AND
  848.         C.ref_doc_type_id = vCbOutDocType;
  849.    
  850.     SELECT nextval('cb_trx_cashbank_balance_seq') INTO vTrxCashbankBalanceId;
  851.    
  852.     INSERT INTO cb_trx_cashbank_balance
  853.     (trx_cashbank_balance_id, tenant_id, ou_id, doc_type_id, payment_id,
  854.       payment_doc_no, payment_doc_date, payment_remark,
  855.       partner_id, partner_bank_id, curr_code, amount,
  856.       due_date, flg_payment, ref_doc_type_id, ref_id,
  857.       version, create_datetime, create_user_id, update_datetime, update_user_id)
  858.     SELECT vTrxCashbankBalanceId, A.tenant_id, A.ou_id, A.doc_type_id, A.payment_order_id,
  859.         A.doc_no, A.doc_date, A.remark,
  860.         A.partner_id, A.partner_bank_id, A.curr_code, A.payment_amount,
  861.         A.due_date, 'Y', vCbOutDocType, vCbOutId,
  862.         0, pDatetime, pUserId, pDatetime, pUserId
  863.     FROM fi_payment_order A
  864.     WHERE A.payment_order_id = vPayApId AND
  865.         A.payment_amount > 0;      
  866.        
  867.     INSERT INTO cb_in_out_cashbank
  868.     (in_out_cashbank_id, tenant_id, doc_type_id, doc_no, doc_date,
  869.     ou_id, partner_id, type_in_out_cashbank, ext_doc_no, ext_doc_date,
  870.     ref_doc_type_id, ref_id, ref_curr_code, ref_amount, due_date,
  871.     remark, status_doc, workflow_status,
  872.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  873.     SELECT vCbOutId, A.tenant_id, B.ref_doc_type_id, B.ref_doc_no, A.doc_date,
  874.         A.ou_buy_id, A.partner_sell_id, 'O', A.ext_doc_no, A.ext_doc_date,
  875.         vPayApDocType, vTrxCashbankBalanceId, A.curr_code, C.total_amount, A.doc_date,
  876.         A.remark, vStatusRelease, vWorkflowStatus,
  877.         0, pDatetime, pUserId, pDatetime, pUserId
  878.     FROM pu_po_internal A,  pu_po_internal_doc_no B, pu_invoice C
  879.     WHERE A.po_internal_id = pPoInternalId AND
  880.             A.po_internal_id = B.po_internal_id AND
  881.             B.ref_doc_type_id = vCbOutDocType AND
  882.             C.invoice_id = vPurchInvId AND
  883.             C.total_amount > 0;
  884.    
  885.     INSERT INTO cb_in_out_cashbank_payment
  886.     (tenant_id, in_out_cashbank_id, cashbank_id,
  887.     mode_payment, bank_payment, no_payment, date_payment,
  888.     curr_code, cashbank_amount, payment_amount,
  889.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  890.     SELECT  A.tenant_id, vCbOutId, A.cashbank_buy_id,
  891.         'CASH', vEmptyValue, vEmptyValue, vEmptyValue,
  892.         A.curr_code, C.gross_amount, C.gross_amount,
  893.         0, pDatetime, pUserId, pDatetime, pUserId
  894.     FROM pu_po_internal A,  pu_po_internal_doc_no B, pu_invoice C
  895.     WHERE A.po_internal_id = pPoInternalId AND
  896.             A.po_internal_id = B.po_internal_id AND
  897.             B.ref_doc_type_id = vCbOutDocType AND
  898.             C.invoice_id = vPurchInvId AND
  899.             C.gross_amount > 0;
  900.    
  901.     INSERT INTO cb_cashbank_balance
  902.     (tenant_id, ou_id, cashbank_id, cash_bank_date,
  903.     rec_type, curr_code, amount,
  904.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  905.     SELECT A.tenant_id, D.ou_id, B.cashbank_id, A.doc_date,
  906.         'K', B.curr_code, 0,
  907.         0, pDatetime, pUserId, pDatetime, pUserId
  908.     FROM cb_in_out_cashbank A, cb_in_out_cashbank_payment B, m_cashbank_ou D
  909.     WHERE A.in_out_cashbank_id = B.in_out_cashbank_id AND
  910.         A.in_out_cashbank_id = vCbOutId AND
  911.         D.cashbank_id = B.cashbank_id AND
  912.         NOT EXISTS (SELECT 1 FROM cb_cashbank_balance C
  913.                     WHERE A.tenant_id = C.tenant_id AND
  914.                             D.ou_id = C.ou_id AND
  915.                             B.cashbank_id = C.cashbank_id AND
  916.                             A.doc_date = C.cash_bank_date AND
  917.                             C.rec_type = 'K');
  918.                            
  919.     UPDATE cb_cashbank_balance D SET amount = D.amount + B.cashbank_amount,
  920.         version = D.version + 1, update_datetime = pDatetime, update_user_id = pUserId
  921.     FROM cb_in_out_cashbank A, cb_in_out_cashbank_payment B, m_cashbank_ou C
  922.     WHERE A.in_out_cashbank_id = B.in_out_cashbank_id AND
  923.           A.in_out_cashbank_id = vCbOutId AND
  924.           D.cash_bank_date = A.doc_date AND  
  925.           D.tenant_id = A.tenant_id AND
  926.           D.ou_id = C.ou_id AND
  927.           B.cashbank_id = D.cashbank_id AND
  928.           D.cashbank_id = C.cashbank_id AND
  929.           D.rec_type = 'K';  
  930.                      
  931.     /*
  932.      * membuat data transaksi jurnal Receive Goods :
  933.      * 1. buat admin
  934.      * 2. buat temlate jurnal
  935.      */
  936.  
  937.     PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuBuyStructure).ou_bu_id, A.ou_id, (vDocJournalRg).journal_type, (vDocJournalRg).ledger_code, f_get_year_month_date(A.doc_date), 'DAILY', pDatetime, pUserId)
  938.     FROM pu_receive_goods A
  939.     WHERE A.receive_goods_id = vRgId;
  940.    
  941.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  942.    
  943.     INSERT INTO gl_journal_trx
  944.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  945.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  946.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  947.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  948.     SELECT vJournalTrxId, A.tenant_id, (vDocJournalRg).journal_type, A.doc_type_id, A.receive_goods_id, A.doc_no, A.doc_date,
  949.         (vOuBuyStructure).ou_bu_id, (vOuBuyStructure).ou_branch_id, (vOuBuyStructure).ou_sub_bu_id, A.partner_id, vEmptyId, A.warehouse_id, A.ext_doc_no, A.ext_doc_date,
  950.         A.ref_doc_type_id, A.ref_id, A.doc_date, B.curr_code, A.remark, vStatusDraft, 'DRAFT',
  951.         0, pDatetime, pUserId, pDatetime, pUserId
  952.     FROM pu_receive_goods A, pu_po B
  953.     WHERE A.receive_goods_id = vRgId AND
  954.         A.ref_doc_type_id = B.doc_type_id AND
  955.         A.ref_id = B.po_id;
  956.    
  957.     INSERT INTO tt_journal_trx_item
  958.     (session_id, tenant_id, journal_trx_id, line_no,
  959.     ref_doc_type_id, ref_id,
  960.     partner_id, product_id, cashbank_id, ou_rc_id,
  961.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  962.     coa_id, curr_code, qty, uom_id,
  963.     amount, journal_date, type_rate,
  964.     numerator_rate, denominator_rate, journal_desc, remark)
  965.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  966.         A.doc_type_id, B.receive_goods_item_id,
  967.         A.partner_id, B.product_id, vEmptyId, C.ou_rc_id,
  968.         vEmptyId, vSignDebit, vProductCOA, C.activity_gl_id,
  969.         C.product_coa_id, C.curr_code, B.qty_rcv_int, B.base_uom_id,
  970.         C.nett_item_amount,
  971.         A.doc_date, vTypeRate,
  972.         1, 1, 'PRODUCT_STOCK', B.remark
  973.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_po_item C
  974.     WHERE A.receive_goods_id = vRgId AND
  975.         A.receive_goods_id = B.receive_goods_id AND
  976.         B.ref_id = C.po_item_id AND
  977.         C.flg_stock = 'Y';
  978.            
  979.     INSERT INTO gl_journal_trx_item
  980.     (tenant_id, journal_trx_id, line_no,
  981.     ref_doc_type_id, ref_id,
  982.     partner_id, product_id, cashbank_id, ou_rc_id,
  983.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  984.     coa_id, curr_code, qty, uom_id,
  985.     amount, journal_date, type_rate,
  986.     numerator_rate, denominator_rate, journal_desc, remark,
  987.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  988.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  989.         A.ref_doc_type_id, A.ref_id,
  990.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  991.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  992.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  993.         A.amount, A.journal_date, A.type_rate,
  994.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  995.         0, pDatetime, pUserId, pDatetime, pUserId
  996.     FROM tt_journal_trx_item A
  997.     WHERE A.session_id = pSessionId;
  998.    
  999.     INSERT INTO gl_journal_trx_mapping
  1000.     (tenant_id, journal_trx_id, line_no,
  1001.     ref_doc_type_id, ref_id,
  1002.     partner_id, product_id, cashbank_id, ou_rc_id,
  1003.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1004.     coa_id, curr_code, qty, uom_id,
  1005.     amount, journal_date, type_rate,
  1006.     numerator_rate, denominator_rate, journal_desc, remark,
  1007.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  1008.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  1009.         vEmptyId, vEmptyId,    
  1010.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  1011.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  1012.         f_get_system_coa_by_group_coa(A.tenant_id, 'HutangHarusDibayar'), A.curr_code, 0, vEmptyId,
  1013.         SUM(A.amount), A.journal_date, A.type_rate,
  1014.         1, 1, 'ACCR_AP', vEmptyValue,
  1015.         0, pDatetime, pUserId, pDatetime, pUserId
  1016.     FROM tt_journal_trx_item A
  1017.     WHERE A.session_id = pSessionId
  1018.     GROUP BY A.tenant_id, A.journal_trx_id, A.partner_id, A.curr_code, A.journal_date, A.type_rate;          
  1019.          
  1020.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;     
  1021.  
  1022.     /*
  1023.      * membuat data transaksi jurnal Purch Invoice:
  1024.      * 1. buat admin
  1025.      * 2. buat temlate jurnal
  1026.      */
  1027.     PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuBuyStructure).ou_bu_id, A.ou_id, (vDocJournalPurchInv).journal_type, (vDocJournalPurchInv).ledger_code, f_get_year_month_date(A.doc_date), 'DAILY', pDatetime, pUserId)
  1028.     FROM pu_invoice A
  1029.     WHERE A.invoice_id = vPurchInvId;
  1030.        
  1031.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  1032.    
  1033.     INSERT INTO gl_journal_trx
  1034.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  1035.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  1036.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  1037.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  1038.     SELECT vJournalTrxId, A.tenant_id, (vDocJournalPurchInv).journal_type, A.doc_type_id, A.invoice_id, A.doc_no, A.doc_date,
  1039.         (vOuBuyStructure).ou_bu_id, (vOuBuyStructure).ou_branch_id, (vOuBuyStructure).ou_sub_bu_id, A.partner_id, vEmptyId, vEmptyId, A.ext_doc_no, A.ext_doc_date,
  1040.         A.ref_doc_type_id, A.ref_id, A.due_date, A.curr_code, A.remark, vStatusDraft, 'DRAFT',
  1041.         0, pDatetime, pUserId, pDatetime, pUserId
  1042.     FROM pu_invoice A
  1043.     WHERE A.invoice_id = vPurchInvId;
  1044.    
  1045.     /*
  1046.      * journal detail item receive goods
  1047.      * tanggal rate menggunakan tanggal receive goods
  1048.      *
  1049.      */
  1050.     INSERT INTO tt_journal_trx_item
  1051.     (session_id, tenant_id, journal_trx_id, line_no,
  1052.     ref_doc_type_id, ref_id,
  1053.     partner_id, product_id, cashbank_id, ou_rc_id,
  1054.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1055.     coa_id, curr_code, qty, uom_id,
  1056.     amount, journal_date, type_rate,
  1057.     numerator_rate, denominator_rate, journal_desc, remark)
  1058.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  1059.         C.doc_type_id, C.receive_goods_id,
  1060.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  1061.         vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  1062.         f_get_system_coa_by_group_coa(A.tenant_id, 'HutangHarusDibayar'), A.curr_code, 0, vEmptyId,
  1063.         B.ref_item_amount, C.doc_date, vTypeRate,
  1064.         1, 1, 'ACCR_AP', B.remark
  1065.     FROM pu_invoice A, pu_invoice_item B, pu_receive_goods C
  1066.     WHERE A.invoice_id = vPurchInvId AND
  1067.         A.invoice_id = B.invoice_id AND
  1068.         B.ref_id = C.receive_goods_id;
  1069.  
  1070.     /*
  1071.      * journal detail tax purch invoice
  1072.      * tanggal rate menggunakan tanggal invoice
  1073.      */
  1074.     INSERT INTO tt_journal_trx_item
  1075.     (session_id, tenant_id, journal_trx_id, line_no,
  1076.     ref_doc_type_id, ref_id,
  1077.     partner_id, product_id, cashbank_id, ou_rc_id,
  1078.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1079.     coa_id, curr_code, qty, uom_id,
  1080.     amount, journal_date, type_rate,
  1081.     numerator_rate, denominator_rate, journal_desc, remark)
  1082.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  1083.         A.doc_type_id, B.invoice_tax_id,
  1084.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  1085.         vEmptyId, vSignDebit, vTaxCOA, vEmptyId,
  1086.         C.receive_coa_id, C.tax_curr_code, 0, vEmptyId,
  1087.         B.gov_tax_amount, A.doc_date, vTypeRate,
  1088.         1, 1, 'VAT_IN', B.remark
  1089.     FROM pu_invoice A, pu_invoice_tax B, m_tax C
  1090.     WHERE A.invoice_id = vPurchInvId AND
  1091.         A.invoice_id = B.invoice_id AND
  1092.         B.tax_id = C.tax_id;   
  1093.     /*
  1094.      * buat juournal offside untuk yg credit ap
  1095.      * dengan grouping data journal yang lain melakukan debit account lain
  1096.      */
  1097.     INSERT INTO tt_journal_trx_item
  1098.     (session_id, tenant_id, journal_trx_id, line_no,
  1099.     ref_doc_type_id, ref_id,
  1100.     partner_id, product_id, cashbank_id, ou_rc_id,
  1101.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1102.     coa_id, curr_code, qty, uom_id,
  1103.     amount, journal_date, type_rate,
  1104.     numerator_rate, denominator_rate, journal_desc, remark)
  1105.     SELECT A.session_id, B.tenant_id, B.journal_trx_id, 1,
  1106.         B.doc_type_id, B.doc_id,
  1107.         B.partner_id, vEmptyId, vEmptyId, vEmptyId,
  1108.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  1109.         f_get_ap_coa_partner(B.tenant_id, B.partner_id), A.curr_code, 0, vEmptyId,
  1110.         SUM(A.amount), B.doc_date, vTypeRate,
  1111.         1, 1, 'AP', B.remark
  1112.     FROM tt_journal_trx_item A, gl_journal_trx B
  1113.     WHERE A.session_id = pSessionId AND
  1114.         A.journal_trx_id = B.journal_trx_id AND
  1115.         B.journal_trx_id = vJournalTrxId AND
  1116.         A.sign_journal = vSignDebit AND
  1117.         A.journal_desc IN ('ACCR_AP','VAT_IN')
  1118.     GROUP BY A.session_id, B.tenant_id, B.journal_trx_id, B.doc_type_id, B.doc_id,
  1119.         B.partner_id, A.curr_code, B.remark;
  1120.  
  1121.     INSERT INTO gl_journal_trx_item
  1122.     (tenant_id, journal_trx_id, line_no,
  1123.     ref_doc_type_id, ref_id,
  1124.     partner_id, product_id, cashbank_id, ou_rc_id,
  1125.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1126.     coa_id, curr_code, qty, uom_id,
  1127.     amount, journal_date, type_rate,
  1128.     numerator_rate, denominator_rate, journal_desc, remark,
  1129.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  1130.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  1131.         A.ref_doc_type_id, A.ref_id,
  1132.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  1133.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  1134.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  1135.         A.amount, A.journal_date, A.type_rate,
  1136.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  1137.         0, pDatetime, pUserId, pDatetime, pUserId
  1138.     FROM tt_journal_trx_item A
  1139.     WHERE A.session_id = pSessionId AND
  1140.         journal_desc IN ('ACCR_AP','VAT_IN');
  1141.  
  1142.     INSERT INTO gl_journal_trx_mapping
  1143.     (tenant_id, journal_trx_id, line_no,
  1144.     ref_doc_type_id, ref_id,
  1145.     partner_id, product_id, cashbank_id, ou_rc_id,
  1146.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1147.     coa_id, curr_code, qty, uom_id,
  1148.     amount, journal_date, type_rate,
  1149.     numerator_rate, denominator_rate, journal_desc, remark,
  1150.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  1151.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  1152.         A.ref_doc_type_id, A.ref_id,
  1153.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  1154.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  1155.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  1156.         A.amount, A.journal_date, A.type_rate,
  1157.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  1158.         0, pDatetime, pUserId, pDatetime, pUserId
  1159.     FROM tt_journal_trx_item A
  1160.     WHERE A.session_id = pSessionId AND
  1161.         journal_desc IN ('AP');
  1162.    
  1163.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  1164.    
  1165.     /*
  1166.      * membuat data transaksi jurnal Cash Bank Out AP:
  1167.      * 1. buat admin
  1168.      * 2. buat temlate jurnal
  1169.      */
  1170.     PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuBuyStructure).ou_bu_id, A.ou_id, (vDocJournalCbOut).journal_type, (vDocJournalCbOut).ledger_code, f_get_year_month_date(A.doc_date), 'DAILY', pDatetime, pUserId)
  1171.     FROM cb_in_out_cashbank A
  1172.     WHERE A.in_out_cashbank_id = vCbOutId;
  1173.    
  1174.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  1175.    
  1176.     INSERT INTO gl_journal_trx
  1177.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  1178.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  1179.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  1180.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  1181.     SELECT vJournalTrxId, A.tenant_id, (vDocJournalCbOut).journal_type, A.doc_type_id, A.in_out_cashbank_id, A.doc_no, A.doc_date,
  1182.         (vOuBuyStructure).ou_bu_id, (vOuBuyStructure).ou_branch_id, (vOuBuyStructure).ou_sub_bu_id, A.partner_id, vEmptyId, vEmptyId, A.ext_doc_no, A.ext_doc_date,
  1183.         A.ref_doc_type_id, A.ref_id, A.doc_date, A.ref_curr_code, A.remark, vStatusDraft, 'DRAFT',
  1184.         0, pDatetime, pUserId, pDatetime, pUserId
  1185.     FROM cb_in_out_cashbank A
  1186.     WHERE A.in_out_cashbank_id = vCbOutId;
  1187.  
  1188.     INSERT INTO tt_journal_trx_item
  1189.     (session_id, tenant_id, journal_trx_id, line_no,
  1190.     ref_doc_type_id, ref_id,
  1191.     partner_id, product_id, cashbank_id, ou_rc_id,
  1192.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1193.     coa_id, curr_code, qty, uom_id,
  1194.     amount, journal_date, type_rate,
  1195.     numerator_rate, denominator_rate, journal_desc, remark)
  1196.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  1197.         B.credit_doc_type_id, B.credit_id,
  1198.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  1199.         vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  1200.         f_get_ap_coa_partner(A.tenant_id, A.partner_id), B.credit_curr_code, 0, vEmptyId,
  1201.         B.credit_amount, B.credit_doc_date, vTypeRate,
  1202.         1, 1, 'AP', A.remark
  1203.     FROM cb_in_out_cashbank A, fi_payment_order_alloc_balance B, cb_trx_cashbank_balance C
  1204.     WHERE A.in_out_cashbank_id = vCBOutId AND
  1205.         A.ref_id = C.trx_cashbank_balance_id AND
  1206.         C.payment_id = B.payment_order_id AND
  1207.         B.flg_alloc = 'C';
  1208.    
  1209.     INSERT INTO tt_journal_trx_item
  1210.     (session_id, tenant_id, journal_trx_id, line_no,
  1211.     ref_doc_type_id, ref_id,
  1212.     partner_id, product_id, cashbank_id, ou_rc_id,
  1213.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1214.     coa_id, curr_code, qty, uom_id,
  1215.     amount, journal_date, type_rate,
  1216.     numerator_rate, denominator_rate, journal_desc, remark)
  1217.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  1218.         A.doc_type_id, A.in_out_cashbank_id,
  1219.         A.partner_id, vEmptyId, B.cashbank_id, vEmptyId,
  1220.         vEmptyId, vSignCredit, vCashBankCOA, vEmptyId,
  1221.         C.coa_id, B.curr_code, 0, vEmptyId,
  1222.         B.cashbank_amount, A.doc_date, vTypeRate,
  1223.         1, 1, 'CASH_BANK', A.remark
  1224.     FROM cb_in_out_cashbank A, cb_in_out_cashbank_payment B, m_cashbank C
  1225.     WHERE A.in_out_cashbank_id = vCbOutId AND  
  1226.         A.in_out_cashbank_id = B.in_out_cashbank_id AND
  1227.         B.cashbank_id = C.cashbank_id;
  1228.  
  1229.     INSERT INTO gl_journal_trx_item
  1230.     (tenant_id, journal_trx_id, line_no,
  1231.     ref_doc_type_id, ref_id,
  1232.     partner_id, product_id, cashbank_id, ou_rc_id,
  1233.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1234.     coa_id, curr_code, qty, uom_id,
  1235.     amount, journal_date, type_rate,
  1236.     numerator_rate, denominator_rate, journal_desc, remark,
  1237.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  1238.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  1239.         A.ref_doc_type_id, A.ref_id,
  1240.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  1241.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  1242.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  1243.         A.amount, A.journal_date, A.type_rate,
  1244.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  1245.         0, pDatetime, pUserId, pDatetime, pUserId
  1246.     FROM tt_journal_trx_item A
  1247.     WHERE A.session_id = pSessionId
  1248.     AND A.journal_desc IN ('AP');
  1249.    
  1250.     INSERT INTO gl_journal_trx_mapping
  1251.     (tenant_id, journal_trx_id, line_no,
  1252.     ref_doc_type_id, ref_id,
  1253.     partner_id, product_id, cashbank_id, ou_rc_id,
  1254.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1255.     coa_id, curr_code, qty, uom_id,
  1256.     amount, journal_date, type_rate,
  1257.     numerator_rate, denominator_rate, journal_desc, remark,
  1258.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  1259.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  1260.         A.ref_doc_type_id, A.ref_id,
  1261.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  1262.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  1263.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  1264.         A.amount, A.journal_date, A.type_rate,
  1265.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  1266.         0, pDatetime, pUserId, pDatetime, pUserId
  1267.     FROM tt_journal_trx_item A
  1268.     WHERE A.session_id = pSessionId
  1269.     AND A.journal_desc = 'CASH_BANK';  
  1270.        
  1271.     DELETE FROM tt_pu_product_balance WHERE session_id = pSessionId;
  1272.     DELETE FROM tt_pu_monthly_price_product WHERE session_id = pSessionId;
  1273.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;     
  1274.        
  1275. END;   
  1276. $BODY$
  1277.   LANGUAGE plpgsql VOLATILE
  1278.   COST 100;
  1279.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement