Advertisement
aadddrr

pu_create_doc_buy_po_internal_unsettled

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