Advertisement
tercnem

SUBMIT RG ERP

Mar 26th, 2019
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION pu_submit_receive_goods(bigint, character varying, character varying)
  2.   RETURNS void AS
  3. $BODY$
  4. DECLARE
  5.     pTenantId           ALIAS FOR $1;
  6.     pSessionId          ALIAS FOR $2;
  7.     pProcessNo          ALIAS FOR $3;
  8.  
  9.     vProcessId              bigint;
  10.     vRgId                   bigint;
  11.     vUserId                 bigint;
  12.     vDatetime               character varying(14);
  13.     vFlagInvoice            character varying(1);
  14.     vEmptyId                bigint;
  15.     vStatusRelease          character varying(1);
  16.     vStatusDraft            character varying(1);
  17.     vStatusFinal            character varying(1);
  18.     vEmptyValue             character varying(1);
  19.     vProductStatus          character varying(50);
  20.     vSignDebit              character varying(1);
  21.     vSignCredit             character varying(1);
  22.     vTypeRate               character varying(3);
  23.     vActivityCOA            character varying(10);
  24.     vProductCOA             character varying(10);
  25.     vSystemCOA              character varying(10);
  26.     vPoId                   bigint;
  27.     vUnfinishedItem         bigint;
  28.     vJournalTrxId           bigint;
  29.     vOuId                       bigint;
  30.     vOuWarehouseIdForJournal    bigint;
  31.    
  32.     vDocJournal                 DOC_JOURNAL%ROWTYPE;
  33.     vOuStructure                OU_BU_STRUCTURE%ROWTYPE;
  34.     vOuStructureJournalItem     OU_BU_STRUCTURE%ROWTYPE;
  35.     result                      RECORD;
  36.    
  37.     vReceiveGoodsDocTypeId  bigint;
  38.     vRoundingModeNonTax     character varying(5);
  39.    
  40.     /*
  41.      * NK, 2 Jan 2015
  42.      * untuk kepentingan auto serial number
  43.      */
  44.     vDocDate                character varying(8);
  45.    
  46.     vOutletId               bigint;
  47.     vOuWarehouseId          bigint;
  48.     vDbVersion              character varying(10);
  49. BEGIN
  50.    
  51.     vFlagInvoice := 'N';
  52.     vEmptyId := -99;
  53.     vStatusRelease := 'R';
  54.     vStatusDraft := 'D';
  55.     vStatusFinal := 'F';
  56.     vEmptyValue := ' ';
  57.     vOutletId := -99;
  58.     vOuWarehouseId = -99;
  59.     vDbVersion = '1.0';
  60.    
  61.     /*
  62.      * NK, 31 Des 2014
  63.      * diganti dng membaca m_product_status
  64.      */
  65.     --vProductStatus := 'GOOD';
  66.     SELECT product_status_code INTO vProductStatus
  67.     FROM m_product_status
  68.     WHERE flg_buy = 'Y';
  69.    
  70.     vSignDebit := 'D';
  71.     vSignCredit := 'C';
  72.     vTypeRate := 'COM';
  73.     vActivityCOA := 'ACTIVITY';
  74.     vProductCOA := 'PRODUCT';
  75.     vSystemCOA := 'SYSTEM';
  76.     vUnfinishedItem := 0;
  77.    
  78.     vReceiveGoodsDocTypeId := 111;
  79.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  80.    
  81.     SELECT A.process_message_id INTO vProcessId
  82.     FROM t_process_message A
  83.     WHERE A.tenant_id = pTenantId AND
  84.         A.process_name = 'pu_submit_receive_goods' AND
  85.         A.process_no = pProcessNo;
  86.        
  87.     SELECT CAST(A.process_parameter_value AS bigint) INTO vRgId
  88.     FROM t_process_parameter A
  89.     WHERE A.process_message_id = vProcessId AND
  90.         A.process_parameter_key = 'receiveGoodsId';
  91.    
  92.     SELECT CAST(A.process_parameter_value AS bigint) INTO vUserId
  93.     FROM t_process_parameter A
  94.     WHERE A.process_message_id = vProcessId AND
  95.         A.process_parameter_key = 'userId';
  96.  
  97.     SELECT CAST(A.process_parameter_value AS character varying(14)) INTO vDatetime
  98.     FROM t_process_parameter A
  99.     WHERE A.process_message_id = vProcessId AND
  100.         A.process_parameter_key = 'datetime';
  101.  
  102.     DELETE FROM tt_pu_product_balance WHERE session_id = pSessionId;       
  103.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId; 
  104.     DELETE FROM tt_pu_product_balance_summary_stock WHERE session_id = pSessionId;
  105.     DELETE FROM tt_pu_monthly_price_product WHERE session_id = pSessionId;
  106. /*
  107.  * 1. add pu_log_po_balance_item
  108.  * 2. add pu_po_balance_invoice
  109.  * 3. add pu_po_balance_invoice_tax
  110.  * 4. add in_produt_balance jika belum exists ( bisa ada serial number dan yang tidak ada serial number )
  111.  * 5. add in_product_price_balance
  112.  * 6. add/update in_product_balance_stock
  113.  * 7. add in_log_product_balance_stock
  114.  * 7b. add data log untuk outlet jika gudang nya adalah gudang outlet
  115.  * 8. add in_log_product_price_balance_stock
  116.  * 9. update status pu_receive_goods
  117.  * 10.update status pu_po_balance_item
  118.  * 10b.update status pu_po. Jika seluruh balance item sudah final/cancel, maka status menjadi Final.
  119.  * 11.add balance receive goods item
  120.  * 12.add gl_journal_trx
  121.  * 13.add gl_journal_trx_item
  122.  * 14.add gl_journal_trx_mapping
  123.  *
  124.  *
  125.  */    
  126. /* pakai cara lain, NK, 14 Jan 2014
  127.     SELECT A.ref_id, f_get_parent_ou_bu(A.tenant_id, A.ou_id), f_get_journal_type(A.doc_type_id) INTO vPoId, vParentOuId, vJournalType
  128.     FROM pu_receive_goods A
  129.     WHERE A.receive_goods_id = vRgId;
  130. */
  131.    
  132.     SELECT A.ref_id, f_get_ou_bu_structure(A.ou_id) AS ou, f_get_document_journal(A.doc_type_id) as doc, A.doc_date
  133.     FROM pu_receive_goods A
  134.     WHERE A.receive_goods_id = vRgId INTO result;
  135.  
  136.     vPoId := result.ref_id;
  137.     vOuStructure := result.ou;
  138.     vDocJournal := result.doc;
  139.     vDocDate := result.doc_date;
  140. /* 
  141.     SELECT INTO vOuStructure f_get_ou_bu_structure(A.ou_id)
  142.     FROM pu_receive_goods A
  143.     WHERE A.receive_goods_id = vRgId;
  144.  
  145.     SELECT INTO vDocJournal f_get_document_journal(A.doc_type_id)
  146.     FROM pu_receive_goods A
  147.     WHERE A.receive_goods_id = vRgId;
  148.  
  149.     SELECT A.ref_id INTO vPoId
  150.     FROM pu_receive_goods A
  151.     WHERE A.receive_goods_id = vRgId;
  152.     */
  153.    
  154.     /*
  155.      * NK, 2 Jan 2015
  156.      * memanggil function untuk membuat auto serial number
  157.      */
  158.     PERFORM pu_create_sn_receive_goods(pTenantId, pSessionId, vDocDate, vRgId, vUserId, vDatetime );
  159.    
  160.     INSERT INTO pu_log_po_balance_item
  161.     (tenant_id, po_id, po_item_id, ref_doc_type_id, ref_id, ref_item_id,
  162.      qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  163.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  164.     SELECT A.tenant_id, C.po_id, C.po_item_id, A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id,
  165.         B.qty_rcv_po * -1, B.po_uom_id, B.qty_rcv_int * -1, B.base_uom_id, B.remark,
  166.         0, vDatetime, vUserId, vDatetime, vUserId
  167.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_po_item C
  168.     WHERE A.receive_goods_id = vRgId AND
  169.           A.receive_goods_id = B.receive_goods_id AND
  170.           B.ref_id = C.po_item_id;
  171.          
  172.     INSERT INTO pu_po_balance_invoice
  173.     (tenant_id, ou_id, partner_id, po_id,
  174.     ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, ref_item_id, qty_rcv_po, po_uom_id,
  175.     curr_code, price_po, item_amount, flg_invoice, invoice_id,
  176.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  177.     SELECT A.tenant_id, A.ou_id, A.partner_id, A.ref_id,
  178.         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,
  179.         C.curr_code, C.nett_price_po,
  180.         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(vReceiveGoodsDocTypeId, C.curr_code), vRoundingModeNonTax),
  181.         vFlagInvoice, vEmptyId,
  182.         0, vDatetime, vUserId, vDatetime, vUserId
  183.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_po_item C
  184.     WHERE A.receive_goods_id = vRgId AND
  185.           A.receive_goods_id = B.receive_goods_id AND
  186.           B.ref_id = C.po_item_id;
  187.        
  188.     INSERT INTO pu_po_balance_invoice_tax
  189.     (tenant_id, ou_id, partner_id, po_id,
  190.     ref_doc_type_id, ref_id, ref_item_id, tax_id, flg_amount,
  191.     tax_percentage, curr_code, base_amount, tax_amount, flg_invoice, invoice_id,
  192.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  193.     SELECT A.tenant_id, A.ou_id, A.partner_id, A.ref_id,
  194.         A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id, C.tax_id, D.flg_amount,
  195.         C.tax_percentage, C.curr_code,
  196.         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(vReceiveGoodsDocTypeId, C.curr_code), vRoundingModeNonTax),
  197.         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(vReceiveGoodsDocTypeId, C.curr_code), vRoundingModeNonTax), C.tax_percentage),
  198.         vFlagInvoice, vEmptyId,
  199.         0, vDatetime, vUserId, vDatetime, vUserId
  200.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_po_item C, m_tax D
  201.     WHERE A.receive_goods_id = vRgId AND
  202.           A.receive_goods_id = B.receive_goods_id AND
  203.           B.ref_id = C.po_item_id AND
  204.           C.tax_id = D.tax_id;
  205.          
  206.     /*
  207.      * tampung data item receive goods, untuk dapat digunakan dan disimpan ke product_balance, product_price_balance
  208.      */
  209.     -- Insert untuk data product yang tidak memiliki serial number
  210.     INSERT INTO tt_pu_product_balance
  211.     (session_id, warehouse_id, product_balance_id, tenant_id, ou_id, product_id,
  212.     serial_number, lot_number, product_expired_date, product_year_made,
  213.     product_price_balance_id, product_buy_date, partner_id,
  214.     doc_type_id, ref_id, ref_item_id, doc_no, doc_date,
  215.     po_id, po_no, po_date, po_item_id,
  216.     curr_code, price, qty_rcv, po_uom_id, qty_int_rcv, base_uom_id, flg_stock)
  217.     SELECT pSessionId, A.warehouse_id, vEmptyId, A.tenant_id, A.ou_id, B.product_id,
  218.         vEmptyValue, vEmptyValue, vEmptyValue, vEmptyValue,
  219.         vEmptyId, A.doc_date, A.partner_id,
  220.         A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id, A.doc_no, A.doc_date,
  221.         E.po_id, E.doc_no, E.doc_date, D.po_item_id,
  222.         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
  223.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_po_item D, pu_po E
  224.     WHERE A.receive_goods_id = vRgId AND
  225.         A.receive_goods_id = B.receive_goods_id AND
  226.         NOT EXISTS (SELECT 1 FROM pu_receive_goods_product C
  227.                     WHERE B.receive_goods_item_id = C.receive_goods_item_id) AND
  228.         NOT EXISTS (SELECT 1 FROM pu_receive_goods_product_auto_sn C
  229.                     WHERE B.receive_goods_item_id = C.receive_goods_item_id) AND
  230.         B.ref_id = D.po_item_id AND
  231.         D.po_id = E.po_id
  232.     GROUP BY A.warehouse_id, A.tenant_id, A.ou_id, B.product_id,
  233.         A.doc_date, A.partner_id, A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id, A.doc_no,
  234.         E.po_id, E.doc_no, E.doc_date, D.po_item_id,
  235.         D.curr_code, D.nett_price_po, D.po_uom_id, D.base_uom_id, D.flg_stock;
  236.  
  237.     -- Insert untuk data product yang memiliki serial number dan serial number tidak di-generate
  238.     INSERT INTO tt_pu_product_balance
  239.     (session_id, warehouse_id, product_balance_id, tenant_id, ou_id, product_id,
  240.     serial_number, lot_number, product_expired_date, product_year_made,
  241.     product_price_balance_id, product_buy_date, partner_id,
  242.     doc_type_id, ref_id, ref_item_id, doc_no, doc_date,
  243.     po_id, po_no, po_date, po_item_id,
  244.     curr_code, price, qty_rcv, po_uom_id, qty_int_rcv, base_uom_id, flg_stock)
  245.     SELECT pSessionId, A.warehouse_id, vEmptyId, A.tenant_id, A.ou_id, B.product_id,
  246.         C.serial_number, C.lot_number, C.product_expired_date, C.product_year_made,
  247.         vEmptyId, A.doc_date, A.partner_id,
  248.         A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id, A.doc_no, A.doc_date,
  249.         E.po_id, E.doc_no, E.doc_date, D.po_item_id,       
  250.         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
  251.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_receive_goods_product C, pu_po_item D, pu_po E
  252.     WHERE A.receive_goods_id = vRgId AND
  253.         A.receive_goods_id = B.receive_goods_id AND
  254.         B.receive_goods_item_id = C.receive_goods_item_id AND
  255.         B.ref_id = D.po_item_id AND
  256.         D.po_id = E.po_id
  257.     GROUP BY A.warehouse_id, A.tenant_id, A.ou_id, B.product_id,
  258.         C.serial_number, C.lot_number, C.product_expired_date, C.product_year_made,
  259.         A.doc_date, A.partner_id, A.doc_type_id, a.receive_goods_id, B.receive_goods_item_id, A.doc_no,
  260.         E.po_id, E.doc_no, E.doc_date, D.po_item_id,
  261.         D.curr_code, D.nett_price_po, D.po_uom_id, D.base_uom_id, D.flg_stock;
  262.  
  263. /* NK, 5 Jan 2015 sudah diganti dengan function pu_create_sn_receive_goods
  264.      -- Insert untuk data product yang memiliki serial number dan serial number di-generate
  265.     INSERT INTO tt_pu_product_balance
  266.     (session_id, warehouse_id, product_balance_id, tenant_id, ou_id, product_id,
  267.     serial_number, lot_number, product_expired_date, product_year_made,
  268.     product_price_balance_id, product_buy_date, partner_id,
  269.     doc_type_id, ref_id, ref_item_id, doc_no, doc_date,
  270.     po_id, po_no, po_date, po_item_id,
  271.     curr_code, price, qty_rcv, po_uom_id, qty_int_rcv, base_uom_id, flg_stock)
  272.     SELECT pSessionId, A.warehouse_id, vEmptyId, A.tenant_id, A.ou_id, B.product_id,
  273.         C.serial_number, C.lot_number, C.product_expired_date, C.product_year_made,
  274.         vEmptyId, A.doc_date, A.partner_id,
  275.         A.doc_type_id, A.receive_goods_id, B.receive_goods_item_id, A.doc_no, A.doc_date,
  276.         E.po_id, E.doc_no, E.doc_date, D.po_item_id,       
  277.         D.curr_code, D.gross_price_po - D.discount_amount, SUM(C.qty_rcv_po), D.po_uom_id, 1, D.base_uom_id, D.flg_stock
  278.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_receive_goods_product_auto_sn C, pu_po_item D, pu_po E
  279.     WHERE A.receive_goods_id = vRgId AND
  280.         A.receive_goods_id = B.receive_goods_id AND
  281.         B.receive_goods_item_id = C.receive_goods_item_id AND
  282.         B.ref_id = D.po_item_id AND
  283.         D.po_id = E.po_id;
  284. *
  285.  */                
  286.     /*
  287.      * update product_balance_id dari in_product_balance
  288.      */    
  289.     UPDATE tt_pu_product_balance SET product_balance_id = A.product_balance_id
  290.     FROM in_product_balance A
  291.     WHERE tt_pu_product_balance.session_id = pSessionId AND
  292.         tt_pu_product_balance.tenant_id = A.tenant_id AND
  293.         tt_pu_product_balance.product_id = A.product_id AND
  294.         tt_pu_product_balance.serial_number = A.serial_number AND
  295.         tt_pu_product_balance.lot_number = A.lot_number;
  296.        
  297.     /*
  298.      * insert data ke in_product_balance yang product_balance_id masih empty
  299.      */
  300.     INSERT INTO in_product_balance
  301.     (tenant_id, product_id,
  302.     serial_number, lot_number, product_expired_date, product_year_made,
  303.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  304.     SELECT A.tenant_id, A.product_id,
  305.         A.serial_number, A.lot_number, A.product_expired_date, A.product_year_made,
  306.         0, vDatetime, vUserId, vDatetime, vUserId
  307.     FROM tt_pu_product_balance A
  308.     WHERE A.session_id = pSessionId AND
  309.         A.product_balance_id = vEmptyId
  310.     GROUP BY A.tenant_id, A.product_id, serial_number, lot_number, product_expired_date, product_year_made;
  311.        
  312.     /*
  313.      * update product_balance_id yang masih empty, ambil dari in_product_balance yang sebelumnya sudah diinsert
  314.      */
  315.     UPDATE tt_pu_product_balance SET product_balance_id = A.product_balance_id
  316.     FROM in_product_balance A
  317.     WHERE tt_pu_product_balance.session_id = pSessionId AND
  318.         tt_pu_product_balance.product_balance_id = vEmptyId AND
  319.         tt_pu_product_balance.tenant_id = A.tenant_id AND
  320.         tt_pu_product_balance.product_id = A.product_id AND
  321.         tt_pu_product_balance.serial_number = A.serial_number AND
  322.         tt_pu_product_balance.lot_number = A.lot_number;
  323.  
  324.     INSERT INTO in_product_price_balance
  325.     (tenant_id, ou_id, product_id, product_balance_id,
  326.     product_buy_date, partner_id, doc_type_id, ref_id, doc_no, doc_date,
  327.     curr_code, amount, qty, uom_id,
  328.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  329.     SELECT A.tenant_id, A.ou_id, A.product_id, A.product_balance_id,
  330.         A.doc_date, A.partner_id, A.doc_type_id, A.ref_item_id, A.doc_no, A.doc_date,
  331.         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(vReceiveGoodsDocTypeId, A.curr_code), vRoundingModeNonTax)),
  332.         SUM(A.qty_int_rcv), A.base_uom_id,
  333.         0, vDatetime, vUserId, vDatetime, vUserId
  334.     FROM tt_pu_product_balance A, pu_po_item B
  335.     WHERE A.session_id = pSessionId AND
  336.         A.po_item_id = B.po_item_id
  337.     GROUP BY A.tenant_id, A.ou_id, A.product_id, A.product_balance_id, A.doc_date,
  338.         A.partner_id, A.doc_type_id, A.ref_item_id, A.doc_no, A.curr_code, A.base_uom_id;
  339.    
  340.     UPDATE tt_pu_product_balance SET product_price_balance_id = A.product_price_balance_id
  341.     FROM in_product_price_balance A
  342.     WHERE tt_pu_product_balance.session_id = pSessionId AND
  343.         tt_pu_product_balance.tenant_id = A.tenant_id AND
  344.         tt_pu_product_balance.ou_id = A.ou_id AND
  345.         tt_pu_product_balance.product_id = A.product_id AND    
  346.         tt_pu_product_balance.product_balance_id = A.product_balance_id AND
  347.         tt_pu_product_balance.partner_id = A.partner_id AND
  348.         tt_pu_product_balance.doc_type_id = A.doc_type_id AND
  349.         tt_pu_product_balance.ref_item_id = A.ref_id AND
  350.         tt_pu_product_balance.doc_no = A.doc_no AND
  351.         tt_pu_product_balance.doc_date = A.doc_date;
  352.    
  353.     /*
  354.      * create summary dari tt_pu_product_balance untuk update yg sudah ada di in_product_balance_stock
  355.      */
  356.     INSERT INTO tt_pu_product_balance_summary_stock
  357.             (session_id, warehouse_id, product_balance_id, tenant_id, product_id,
  358.             product_price_balance_id, qty_rcv, po_uom_id, qty_int_rcv, base_uom_id, flg_stock)
  359.     SELECT  pSessionId, A.warehouse_id, A.product_balance_id, A.tenant_id, A.product_id,
  360.             vEmptyId, SUM(A.qty_rcv), A.po_uom_id, SUM(A.qty_int_rcv), A.base_uom_id, A.flg_stock
  361.     FROM    tt_pu_product_balance A
  362.     WHERE   A.session_id = pSessionId
  363.     GROUP BY A.warehouse_id, A.product_balance_id, A.tenant_id, A.product_id,
  364.              A.po_uom_id, A.base_uom_id, A.flg_stock;
  365.        
  366.     /*
  367.      * update product_balance_stock, yang sudah ada di in_product_balance_stock
  368.      */
  369.     UPDATE in_product_balance_stock SET qty = qty + A.qty_int_rcv, update_datetime = vDatetime, update_user_id = vUserId,
  370.     version = version + 1
  371.     FROM tt_pu_product_balance_summary_stock A
  372.     WHERE A.session_id = pSessionId AND
  373.         in_product_balance_stock.product_id = A.product_id AND
  374.         in_product_balance_stock.tenant_id = A.tenant_id AND
  375.         in_product_balance_stock.warehouse_id = A.warehouse_id AND
  376.         in_product_balance_stock.product_balance_id = A.product_balance_id AND
  377.         in_product_balance_stock.product_status = vProductStatus AND
  378.         A.flg_stock = 'Y';
  379.  
  380.     /*
  381.      * insert data in_product_balance_stock
  382.      */
  383.     INSERT INTO in_product_balance_stock
  384.     (tenant_id, warehouse_id, product_id, product_balance_id, product_status, base_uom_id, qty,
  385.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  386.     SELECT A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id, vProductStatus,
  387.         A.base_uom_id, SUM(A.qty_int_rcv),
  388.         0, vDatetime, vUserId, vDatetime, vUserId
  389.     FROM tt_pu_product_balance A
  390.     WHERE A.session_id = pSessionId AND
  391.         A.flg_stock = 'Y' AND
  392.         NOT EXISTS (SELECT 1 FROM in_product_balance_stock B
  393.                     WHERE A.tenant_id = B.tenant_id AND
  394.                         A.warehouse_id = B.warehouse_id AND
  395.                         A.product_id = B.product_id AND
  396.                         A.product_balance_id = B.product_balance_id AND
  397.                         B.product_status = vProductStatus)
  398.     GROUP BY A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id, A.base_uom_id;
  399.        
  400.     /*
  401.      * insert data product_price_balance_stock
  402.      */
  403.     INSERT INTO in_product_price_balance_stock
  404.     (tenant_id, warehouse_id, product_id, product_balance_id,
  405.     product_price_balance_id, product_status, base_uom_id, qty,
  406.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  407.     SELECT A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id,
  408.         A.product_price_balance_id, vProductStatus, A.base_uom_id, SUM(A.qty_int_rcv),
  409.         0, vDatetime, vUserId, vDatetime, vUserId
  410.     FROM tt_pu_product_balance A
  411.     WHERE A.session_id = pSessionId AND
  412.         A.flg_stock = 'Y'
  413.     GROUP BY A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id, A.product_price_balance_id, A.base_uom_id;
  414.    
  415.     /*
  416.      * buat data log product balance stock
  417.      */
  418.     INSERT INTO in_log_product_balance_stock
  419.     (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  420.      product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
  421.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  422.     SELECT A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  423.         A.product_id, A.product_balance_id, A.warehouse_id, vProductStatus, A.base_uom_id, SUM(A.qty_int_rcv),
  424.         0, vDatetime, vUserId, vDatetime, vUserId      
  425.     FROM tt_pu_product_balance A, m_warehouse_ou B
  426.     WHERE A.session_id = pSessionId AND
  427.         A.flg_stock = 'Y' AND
  428.         A.warehouse_id = B.warehouse_id
  429.     GROUP BY A.tenant_id, B.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  430.         A.product_id, A.product_balance_id, A.warehouse_id, A.base_uom_id;
  431.  
  432.     /*
  433.      * 7b. buat data log untuk update stok outlet jika ou ini adalah ou outlet
  434.      */
  435.     -- cek dulu warehouse ou nya   
  436.     SELECT B.ou_id INTO vOuWarehouseId
  437.     FROM pu_receive_goods A
  438.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  439.     WHERE receive_goods_id = vRgId;
  440.    
  441.     IF vOuWarehouseId IS NULL THEN
  442.         vOuWarehouseId = vEmptyId;
  443.     END IF;
  444.        
  445.     -- cek dulu apakah ou yang digunakan ini merupakan ou outlet
  446.     IF EXISTS(SELECT 1 FROM i_outlet A WHERE A.ou_id = vOuWarehouseId) THEN
  447.         SELECT A.outlet_id INTO vOutletId
  448.         FROM i_outlet A WHERE A.ou_id = vOuWarehouseId;
  449.     END IF;
  450.    
  451.     IF vOutletId IS NULL THEN
  452.         vOutletId = vEmptyId;
  453.     END IF;
  454.    
  455.     -- jika outlet, maka harus tulis data log agar outlet bisa lakukan update
  456.     IF vOutletId <> vEmptyId THEN
  457.         vDbVersion := f_get_value_system_config_by_param_code(pTenantId, 'DbVersion');
  458.    
  459.        
  460.         INSERT INTO i_trx_data_log(
  461.             tenant_id, ou_id, doc_date, db_version, type_data,
  462.             mode_log, data_log, version, create_datetime, create_user_id,
  463.             update_datetime, update_user_id)
  464.         SELECT B.tenant_id, B.ou_id, B.doc_date, vDbVersion, 'in_product_balance',
  465.                'A', '{"id":'||C.product_balance_id||',"tenantId":"'||C.tenant_id||'","productId":'||C.product_id||',"serialNumber":"'||C.serial_number||'","lotNumber":"'||C.lot_number||'","productExpiredDate":"'||C.product_expired_date||'","productYearMade":"'||C.product_year_made||'","createDateTime":"'||C.create_datetime||'","createUserId":'||C.create_user_id||',"version":'||C.version||',"updateDateTime":"'||C.update_datetime||'","updateUserId":'||C.update_user_id||'}',
  466.                0, vDatetime, vUserId, vDatetime, vUserId
  467.         FROM pu_receive_goods A
  468.         INNER JOIN in_log_product_balance_stock B
  469.             ON A.tenant_id = B.tenant_id
  470.             AND A.doc_no = B.doc_no
  471.             AND A.doc_date = B.doc_date
  472.             AND A.doc_type_id = B.doc_type_id
  473.             AND A.receive_goods_id = B.ref_id
  474.             AND A.warehouse_id = B.warehouse_id
  475.         INNER JOIN in_product_balance C
  476.             ON B.product_balance_id = C.product_balance_id
  477.         WHERE A.receive_goods_id = vRgId
  478.         GROUP BY B.tenant_id, B.ou_id, B.doc_date, C.product_balance_id;
  479.        
  480.         INSERT INTO i_trx_data_log(
  481.             tenant_id, ou_id, doc_date, db_version, type_data,
  482.             mode_log, data_log, version, create_datetime, create_user_id,
  483.             update_datetime, update_user_id)
  484.         SELECT B.tenant_id, B.ou_id, B.doc_date, vDbVersion, 'in_log_product_balance_stock',
  485.                'A', '{"tenantId":'||B.tenant_id||',"createDateTime":"'||B.create_datetime||'","baseUomId":'||B.base_uom_id||',"ouId":'||B.ou_id||',"docNo":"'||B.doc_no||'","refId":'||B.ref_id||',"partnerId":'||B.partner_id||',"qty":'||B.qty||',"warehouseId":'||B.warehouse_id||',"version":'||B.version||',"productId":'||B.product_id||',"updateUserId":'||B.update_user_id||',"productStatus":"'||B.product_status||'","docDate":"'||B.doc_date||'","updateDateTime":"'||B.update_datetime||'","productBalanceId":'||B.product_balance_id||',"createUserId":'||B.create_user_id||',"docTypeId":'||B.doc_type_id||'}',
  486.                0, vDatetime, vUserId, vDatetime, vUserId
  487.         FROM pu_receive_goods A
  488.         INNER JOIN in_log_product_balance_stock B
  489.             ON A.tenant_id = B.tenant_id
  490.             AND A.doc_no = B.doc_no
  491.             AND A.doc_date = B.doc_date
  492.             AND A.doc_type_id = B.doc_type_id
  493.             AND A.receive_goods_id = B.ref_id
  494.             AND A.warehouse_id = B.warehouse_id
  495.         WHERE A.receive_goods_id = vRgId;
  496.     END IF;
  497.  
  498.     /*
  499.      * buat data log product price balance stock
  500.      */
  501.     INSERT INTO in_log_product_price_balance_stock
  502.     (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  503.      product_id, warehouse_id, product_balance_id, product_price_balance_id, product_status, base_uom_id, qty,
  504.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  505.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  506.         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),
  507.         0, vDatetime, vUserId, vDatetime, vUserId
  508.     FROM tt_pu_product_balance A
  509.     WHERE A.session_id = pSessionId AND
  510.         A.flg_stock = 'Y'
  511.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  512.         A.product_id, A.warehouse_id, A.product_balance_id, A.product_price_balance_id, A.base_uom_id;
  513.        
  514.     /*
  515.      * add data balance receive goods item yang akan digunakan di inventory,
  516.      * saat akan membuat claim note
  517.      */
  518.     INSERT INTO in_balance_receive_goods_item
  519.     (receive_goods_item_id, tenant_id, ou_id, receive_goods_id, doc_no, doc_date, partner_id,
  520.       po_id, po_no, po_date, po_item_id,
  521.       qty_rcv, qty_return, po_uom_id, qty_int_rcv, 
  522.       qty_int_return, base_uom_id, status_item,
  523.       "version", create_datetime, create_user_id, update_datetime, update_user_id)
  524.     SELECT A.ref_item_id, A.tenant_id, A.ou_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  525.             A.po_id, A.po_no, A.po_date, A.po_item_id,
  526.             SUM(A.qty_rcv), 0, A.po_uom_id, SUM(A.qty_int_rcv),
  527.             0, A.base_uom_id, vStatusRelease,
  528.         0, vDatetime, vUserId, vDatetime, vUserId      
  529.     FROM tt_pu_product_balance A
  530.     WHERE A.session_id = pSessionId
  531.     GROUP BY A.ref_item_id, A.tenant_id, A.ou_id, A.ref_id, A.doc_no, A.doc_date, A.partner_id,
  532.             A.po_id, A.po_no, A.po_date, A.po_item_id, A.po_uom_id, A.base_uom_id;
  533.    
  534.     UPDATE pu_receive_goods SET status_doc = vStatusRelease, update_datetime = vDatetime, update_user_id = vUserId
  535.     WHERE receive_goods_id = vRgId;
  536.    
  537.     UPDATE pu_po_balance_item SET status_item = vStatusRelease, update_datetime = vDatetime, update_user_id = vUserId
  538.     FROM pu_receive_goods_item A
  539.     WHERE pu_po_balance_item.po_item_id = A.ref_id AND
  540.         pu_po_balance_item.tenant_id = A.tenant_id AND
  541.         A.receive_goods_id = vRgId AND
  542.         pu_po_balance_item.qty_po - pu_po_balance_item.qty_cancel + pu_po_balance_item.qty_add - pu_po_balance_item.qty_rcv > 0;
  543.  
  544.     UPDATE pu_po_balance_item SET status_item = vStatusFinal, update_datetime = vDatetime, update_user_id = vUserId
  545.     FROM pu_receive_goods_item A
  546.     WHERE pu_po_balance_item.po_item_id = A.ref_id AND
  547.         pu_po_balance_item.tenant_id = A.tenant_id AND
  548.         A.receive_goods_id = vRgId AND
  549.         pu_po_balance_item.qty_po - pu_po_balance_item.qty_cancel + pu_po_balance_item.qty_add - pu_po_balance_item.qty_rcv <= 0;
  550.        
  551.     SELECT COUNT(1) INTO vUnfinishedItem
  552.     FROM pu_po_balance_item A, pu_po_item B
  553.     WHERE A.po_item_id = B.po_item_id AND
  554.         B.po_id = vPoId AND
  555.         A.status_item = vStatusRelease;
  556.        
  557.     IF vUnfinishedItem = 0 THEN
  558.         UPDATE pu_po SET status_doc = vStatusFinal, update_datetime = vDatetime, update_user_id = vUserId
  559.         WHERE po_id = vPoId;
  560.     END IF;
  561.        
  562.     /*
  563.      * create monthly price product
  564.      */
  565.     INSERT INTO tt_pu_monthly_price_product
  566.     (session_id, tenant_id, ou_id, year_month_date,
  567.     product_id, curr_code, amount, qty, base_uom_id,
  568.      ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, source_price,
  569.      flg_tax_amount, tax_id, tax_percentage)
  570.     SELECT pSessionId, A.tenant_id, A.ou_id, C.year_month_date,
  571.         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(vReceiveGoodsDocTypeId, A.curr_code), vRoundingModeNonTax)),
  572.         SUM(A.qty_int_rcv), A.base_uom_id,
  573.         A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  574.         'PURCHASING PO NO : '|| A.po_no || ' DATE : '|| A.po_date,
  575.         B.flg_tax_amount, B.tax_id, B.tax_percentage
  576.     FROM tt_pu_product_balance A, pu_po_item B, dt_date C
  577.     WHERE A.session_id = pSessionId AND
  578.         A.po_item_id = B.po_item_id AND
  579.         A.doc_date = C.string_date
  580.     GROUP BY A.tenant_id, A.ou_id, C.year_month_date, A.product_id, A.curr_code, A.base_uom_id,
  581.         A.doc_type_id, A.ref_id, A.doc_no, A.doc_date, A.po_no, A.po_date, B.flg_tax_amount, B.tax_id, B.tax_percentage;
  582.      
  583.     UPDATE pu_monthly_price_product SET curr_code = A.curr_code, amount = A.amount,
  584.                                         qty = A.qty, ref_doc_type_id = A.ref_doc_type_id,
  585.                                         ref_id = A.ref_id, ref_doc_no = A.ref_doc_no, ref_doc_date = A.ref_doc_date,
  586.                                         source_price = A.source_price, flg_tax_amount = A.flg_tax_amount,
  587.                                         tax_id = A.tax_id, tax_percentage = A.tax_percentage
  588.     FROM tt_pu_monthly_price_product A
  589.     WHERE A.session_id = pSessionId AND
  590.         pu_monthly_price_product.tenant_id = A.tenant_id AND
  591.         pu_monthly_price_product.ou_id = A.ou_id AND
  592.         pu_monthly_price_product.year_month_date = A.year_month_date AND
  593.         pu_monthly_price_product.product_id = A.product_id;
  594.        
  595.     INSERT INTO pu_monthly_price_product
  596.     (tenant_id, ou_id, year_month_date, product_id,
  597.     curr_code, amount, qty, base_uom_id, source_price,
  598.     ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date,
  599.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  600.     flg_tax_amount, tax_id, tax_percentage)
  601.     SELECT A.tenant_id, A.ou_id, A.year_month_date, A.product_id,
  602.             A.curr_code, SUM(A.amount), SUM(A.qty), A.base_uom_id, A.source_price,
  603.             A.ref_doc_type_id, A.ref_id, A.ref_doc_no, A.ref_doc_date,
  604.             0, vDatetime, vUserId, vDatetime, vUserId,
  605.             A.flg_tax_amount, A.tax_id, A.tax_percentage
  606.     FROM tt_pu_monthly_price_product A
  607.     WHERE A.session_id = pSessionId AND
  608.         NOT EXISTS (SELECT 1 FROM pu_monthly_price_product B
  609.                     WHERE A.tenant_id = B.tenant_id AND
  610.                         A.ou_id = B.ou_id AND
  611.                         A.product_id = B.product_id AND
  612.                         A.year_month_date = B.year_month_date)
  613.     GROUP BY A.tenant_id, A.ou_id, A.year_month_date, A.product_id, A.curr_code, A.base_uom_id, A.source_price,
  614.              A.ref_doc_type_id, A.ref_id, A.ref_doc_no, A.ref_doc_date, A.flg_tax_amount, A.tax_id, A.tax_percentage;
  615.    
  616.     INSERT INTO pu_log_monthly_price_product
  617.     (tenant_id, ou_id, year_month_date, product_id,
  618.     curr_code, amount, qty, base_uom_id, source_price,
  619.     ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date,
  620.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  621.     flg_tax_amount, tax_id, tax_percentage)
  622.     SELECT A.tenant_id, A.ou_id, A.year_month_date, A.product_id,
  623.         A.curr_code, SUM(A.amount), SUM(A.qty), A.base_uom_id, A.source_price,
  624.         A.ref_doc_type_id, A.ref_id, A.ref_doc_no, A.ref_doc_date,
  625.         0, vDatetime, vUserId, vDatetime, vUserId,
  626.         A.flg_tax_amount, A.tax_id, A.tax_percentage
  627.     FROM tt_pu_monthly_price_product A
  628.     WHERE A.session_id = pSessionId
  629.     GROUP BY A.tenant_id, A.ou_id, A.year_month_date, A.product_id,
  630.              A.curr_code, A.base_uom_id, A.source_price, A.ref_doc_type_id, A.ref_id,
  631.              A.ref_doc_no, A.ref_doc_date, A.flg_tax_amount, A.tax_id, A.tax_percentage;
  632.    
  633.     /*
  634.      * @author TKP, 9 Jun 2016
  635.      * Cek jika OU pada warehouse sama dengan OU pada dokumen maka nilai ou_bu_id dan ou_sub_bu_id =-99
  636.      * jika OU pada warehouse tidak sama dengan OU pada dokumen maka nilai ou_bu_id dan ou_sub_bu_id didapat pada f_get_ou_bu_structure;
  637.      */
  638.  
  639.     SELECT A.ou_id, B.ou_id INTO vOuId, vOuWarehouseIdForJournal
  640.     FROM pu_receive_goods A
  641.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  642.     WHERE A.receive_goods_id = vRgId;
  643.    
  644.     IF (vOuId <> vOuWarehouseIdForJournal) THEN
  645.         SELECT f_get_ou_bu_structure(vOuWarehouseIdForJournal) as ou_structure INTO result;
  646.         vOuStructureJournalItem := result.ou_structure;
  647.     ELSE
  648.         vOuStructureJournalItem := ROW(-99, -99, -99);
  649.     END IF;
  650.              
  651.     /*
  652.      * membuat data transaksi jurnal :
  653.      * 1. buat admin
  654.      * 2. buat temlate jurnal
  655.      */
  656.  
  657.     PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuStructure).ou_bu_id, A.ou_id, (vDocJournal).journal_type, (vDocJournal).ledger_code, f_get_year_month_date(A.doc_date), 'DAILY', vDatetime, vUserId)
  658.     FROM pu_receive_goods A
  659.     WHERE A.receive_goods_id = vRgId;
  660.    
  661.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  662.    
  663.     INSERT INTO gl_journal_trx
  664.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  665.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  666.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  667.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  668.     SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.receive_goods_id, A.doc_no, A.doc_date,
  669.         (vOuStructure).ou_bu_id, (vOuStructure).ou_branch_id, (vOuStructure).ou_sub_bu_id, A.partner_id, vEmptyId, A.warehouse_id, A.ext_doc_no, A.ext_doc_date,
  670.         A.ref_doc_type_id, A.ref_id, A.doc_date, B.curr_code, A.remark, vStatusDraft, 'DRAFT',
  671.         0, vDatetime, vUserId, vDatetime, vUserId
  672.     FROM pu_receive_goods A, pu_po B
  673.     WHERE A.receive_goods_id = vRgId AND
  674.         A.ref_doc_type_id = B.doc_type_id AND
  675.         A.ref_id = B.po_id;
  676.    
  677.     INSERT INTO tt_journal_trx_item
  678.     (session_id, tenant_id, journal_trx_id, line_no,
  679.     ref_doc_type_id, ref_id,
  680.     partner_id, product_id, cashbank_id, ou_rc_id,
  681.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  682.     coa_id, curr_code, qty, uom_id,
  683.     amount, journal_date, type_rate,
  684.     numerator_rate, denominator_rate, journal_desc, remark)
  685.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  686.         A.doc_type_id, B.receive_goods_item_id,
  687.         A.partner_id, B.product_id, vEmptyId, C.ou_rc_id,
  688.         vEmptyId, vSignDebit, vProductCOA, C.activity_gl_id,
  689.         C.product_coa_id, C.curr_code, B.qty_rcv_int, B.base_uom_id,
  690.         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(vReceiveGoodsDocTypeId, C.curr_code), vRoundingModeNonTax),
  691.         A.doc_date, vTypeRate,
  692.         1, 1, 'PRODUCT_STOCK', B.remark
  693.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_po_item C
  694.     WHERE A.receive_goods_id = vRgId AND
  695.         A.receive_goods_id = B.receive_goods_id AND
  696.         B.ref_id = C.po_item_id AND
  697.         C.flg_stock = 'Y';
  698.        
  699.     INSERT INTO tt_journal_trx_item
  700.     (session_id, tenant_id, journal_trx_id, line_no,
  701.     ref_doc_type_id, ref_id,
  702.     partner_id, product_id, cashbank_id, ou_rc_id,
  703.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  704.     coa_id, curr_code, qty, uom_id,
  705.     amount, journal_date, type_rate,
  706.     numerator_rate, denominator_rate, journal_desc, remark)
  707.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  708.         A.doc_type_id, B.receive_goods_item_id,
  709.         A.partner_id, B.product_id, vEmptyId, C.ou_rc_id,
  710. -- NK, 30 Agustus 2014 - add segment_id        
  711.         C.segment_id, vSignDebit, vActivityCOA, C.activity_gl_id,
  712.         E.coa_id, C.curr_code, B.qty_rcv_int, B.base_uom_id,
  713.         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(vReceiveGoodsDocTypeId, C.curr_code), vRoundingModeNonTax),
  714.         A.doc_date, vTypeRate,
  715.         1, 1, 'PRODUCT_NON_STOCK', B.remark
  716.     FROM pu_receive_goods A, pu_receive_goods_item B, pu_po_item C, m_activity_gl E
  717.     WHERE A.receive_goods_id = vRgId AND
  718.         A.receive_goods_id = B.receive_goods_id AND
  719.         B.ref_id = C.po_item_id AND
  720.         C.flg_stock = 'N' AND
  721.         C.activity_gl_id = E.activity_gl_id;
  722.        
  723.    
  724.     INSERT INTO gl_journal_trx_item
  725.     (tenant_id, journal_trx_id, line_no,
  726.     ref_doc_type_id, ref_id,
  727.     partner_id, product_id, cashbank_id, ou_rc_id,
  728.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  729.     coa_id, curr_code, qty, uom_id,
  730.     amount, journal_date, type_rate,
  731.     numerator_rate, denominator_rate, journal_desc, remark,
  732.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  733.     ou_branch_id, ou_sub_bu_id)
  734.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  735.         A.ref_doc_type_id, A.ref_id,
  736.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  737.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  738.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  739.         A.amount, A.journal_date, A.type_rate,
  740.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  741.         0, vDatetime, vUserId, vDatetime, vUserId,
  742.         (vOuStructureJournalItem).ou_branch_id, (vOuStructureJournalItem).ou_sub_bu_id
  743.     FROM tt_journal_trx_item A
  744.     WHERE A.session_id = pSessionId;
  745.    
  746.     INSERT INTO gl_journal_trx_mapping
  747.     (tenant_id, journal_trx_id, line_no,
  748.     ref_doc_type_id, ref_id,
  749.     partner_id, product_id, cashbank_id, ou_rc_id,
  750.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  751.     coa_id, curr_code, qty, uom_id,
  752.     amount, journal_date, type_rate,
  753.     numerator_rate, denominator_rate, journal_desc, remark,
  754.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  755.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  756.         vEmptyId, vEmptyId,    
  757.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  758.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  759.         f_get_system_coa_by_group_coa(A.tenant_id, 'HutangHarusDibayar'), A.curr_code, 0, vEmptyId,
  760.         SUM(A.amount), A.journal_date, A.type_rate,
  761.         1, 1, 'ACCR_AP', vEmptyValue,
  762.         0, vDatetime, vUserId, vDatetime, vUserId
  763.     FROM tt_journal_trx_item A
  764.     WHERE A.session_id = pSessionId
  765.     GROUP BY A.tenant_id, A.journal_trx_id, A.partner_id, A.curr_code, A.journal_date, A.type_rate;
  766.        
  767.     DELETE FROM tt_pu_product_balance WHERE session_id = pSessionId;   
  768.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId; 
  769.     DELETE FROM tt_pu_product_balance_summary_stock WHERE session_id = pSessionId;
  770.     DELETE FROM tt_pu_monthly_price_product WHERE session_id = pSessionId;
  771. END;   
  772. $BODY$
  773.   LANGUAGE plpgsql VOLATILE
  774.   COST 100;
  775.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement