Advertisement
tercnem

in_submit_return_note_from_generate

Jan 18th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  */
  3.  
  4. CREATE OR REPLACE FUNCTION in_submit_return_note_from_generate(bigint, character varying, character varying)
  5.   RETURNS void AS
  6. $BODY$
  7. DECLARE
  8.     pTenantId           ALIAS FOR $1;
  9.     pSessionId          ALIAS FOR $2;
  10.     pProcessNo          ALIAS FOR $3;
  11.  
  12.     vProcessId      bigint;
  13.     vReturnNoteId   bigint;
  14.     vUserId         bigint;
  15.     vDatetime       character varying(14);
  16.     vFlagInvoice    character varying(1);
  17.     vEmptyId        bigint;
  18.     vStatusRelease  character varying(1);
  19.     vEmptyValue     character varying(1);
  20.     vStatusFinal    character varying(1);
  21.     vStatusDraft    character varying(1);  
  22.     vFlagYes            character varying(1);
  23.     vFlagNo             character varying(1);
  24.     vEmptyString        character varying(1);  
  25.     vJournalType        character varying(20);
  26.     vSignDebit          character varying(1);
  27.     vSignCredit         character varying(1);
  28.     vTypeRate           character varying(3);
  29.     vProductCOA         character varying(10);
  30.     vSystemCOA          character varying(10);
  31.     vParentOuId         bigint;
  32.     vJournalTrxId       bigint;
  33.     vNol                numeric;
  34.     vOuId               bigint;
  35.     vOuWarehouseId      bigint;
  36.     vDocTypeId          bigint;
  37.    
  38.     vDocJournal                 DOC_JOURNAL%ROWTYPE;
  39.     vOuStructure                OU_BU_STRUCTURE%ROWTYPE;
  40.     vOuStructureJournalItem     OU_BU_STRUCTURE%ROWTYPE;
  41.     result                      RECORD;
  42.    
  43.     vReturnNoteDocTypeId bigint;
  44.     vRoundingModeNonTax character varying(5);
  45.  
  46.     vTaxPercentage      numeric;
  47.     vTaxId          bigint;
  48.     vPartnerIdMagento   bigint;
  49.     vReturnNotePartnerId    bigint;
  50.     vReturnNoteDocDate  character varying(8);
  51.     vPkpStartDate       character varying(8);
  52.    
  53.     vSalesOrderDocTypeId    bigint;
  54.     vClaimNoteId            bigint;
  55.     vClaimNoteDocTypeId     bigint;
  56.     vClaimNoteDocNo         character varying(30);
  57.     vClaimNoteNumId         bigint;
  58.     vEmpty                  character varying(1);
  59.     vEmptyIdString          character varying;
  60.     vRemarkPrefix           text;
  61.     vWorkflowApproved       character varying;
  62.     vReceiveGoodsDocTypeId  bigint;
  63.    
  64.     vRoleIdForGenerateDoc       bigint := -99;
  65.     vUserIdForGenerateDoc       bigint := -99;
  66.     vClaimNoteFlowId            bigint := -99;
  67.     vClaimNoteScheme            character varying := 'EA02';
  68.     vFlgUserRole                character varying := 'R';
  69.     vParamUserIdForGenerateDoc  character varying := 'user.id.for.return.note.for.finance';
  70.     vParamRoleIdForGenerateDoc  character varying := 'role.id.for.return.note.for.finance';
  71.    
  72. BEGIN
  73.    
  74.     vFlagInvoice := 'N';
  75.     vEmptyId := -99;
  76.     vEmptyValue := ' ';
  77.     vStatusRelease := 'R';
  78.     vStatusFinal := 'F';
  79.     vStatusDraft := 'D';   
  80.     vFlagYes := 'Y';
  81.     vFlagNo := 'N';
  82.     vEmptyString := ' ';
  83.     vSignDebit := 'D';
  84.     vSignCredit := 'C';
  85.     vTypeRate := 'COM';
  86.     vProductCOA := 'PRODUCT';
  87.     vSystemCOA := 'SYSTEM';
  88.     vNol := 0;
  89.    
  90.     vDocTypeId := 311;
  91.     vReturnNoteDocTypeId := 502;
  92.     vSalesOrderDocTypeId := 301;
  93.     vClaimNoteDocTypeId := 511;
  94.     vEmpty := '';
  95.     vWorkflowApproved := 'APPROVED';
  96.     vReceiveGoodsDocTypeId := 111;
  97.     vEmptyIdString = '-99';
  98.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  99.  
  100.     -- Menampung nilai tax_id dan tax_percentage dari table m_tax ke variable vTaxId dan vTaxPercentage
  101.     SELECT tax_id, percentage INTO vTaxId, vTaxPercentage FROM m_tax WHERE tenant_id = pTenantId and tax_code = 'PPn';
  102.  
  103.     -- Menampung nilai partner_id magento dari sysconfig ke variable vPartnerIdMagento
  104.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'partner.id.e.commerce')::bigint INTO vPartnerIdMagento;
  105.  
  106.     -- Menampung nilai pkp start date dari sysconfig ke variable vPkpStartDate
  107.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'pkp.start.date') INTO vPkpStartDate;
  108.    
  109.    
  110.     SELECT A.process_message_id INTO vProcessId
  111.     FROM t_process_message A
  112.     WHERE A.tenant_id = pTenantId AND
  113.         A.process_name = 'in_submit_return_note_from_generate' AND
  114.         A.process_no = pProcessNo;
  115.        
  116.     SELECT CAST(A.process_parameter_value AS bigint) INTO vReturnNoteId
  117.     FROM t_process_parameter A
  118.     WHERE A.process_message_id = vProcessId AND
  119.         A.process_parameter_key = 'returnNoteId';
  120.    
  121.     SELECT CAST(A.process_parameter_value AS bigint) INTO vUserId
  122.     FROM t_process_parameter A
  123.     WHERE A.process_message_id = vProcessId AND
  124.         A.process_parameter_key = 'userId';
  125.  
  126.     SELECT CAST(A.process_parameter_value AS character varying(14)) INTO vDatetime
  127.     FROM t_process_parameter A
  128.     WHERE A.process_message_id = vProcessId AND
  129.         A.process_parameter_key = 'datetime';
  130.  
  131.     -- Menampung nilai doc_date return note dan partner_id return note ke dalam variable vReturnNoteDocDate dan vReturnNotePartnerId
  132.     SELECT A.doc_date, B.partner_bill_to_id  INTO vReturnNoteDocDate, vReturnNotePartnerId
  133.     FROM in_inventory A
  134.     INNER JOIN sl_so B ON a.ref_doc_type_id = 301 AND A.ref_id = B.so_id
  135.     WHERE A.inventory_id = vReturnNoteId;
  136.  
  137.     DELETE FROM tt_in_so_balance_item WHERE session_id = pSessionId;   
  138.    
  139.     /*
  140.      * 1.update status doc in_inventory
  141.      * 2.update data ke in_product_balance_stock / insert data ke in_product-balance_stock
  142.      * 3.insert data ke in_log_product_balance_stock
  143.      * 4.update data sl_so_balance_item
  144.      * 5.insert data sl_log_so_balance_item
  145.      * 6.insert data sl_so_balance_invoice
  146.      * 7.insert data sl_so_balance_invoice_tax
  147.      * 8.update data in_balance_do_item
  148.      * 9.add trx jurnal
  149.      */
  150.        
  151.     SELECT f_get_ou_bu_structure(A.ou_from_id) AS ou, f_get_document_journal(A.doc_type_id) as doc, '[AUTO GENERATED FROM '|| A.doc_no || ' | ' || A.doc_date ||']' AS remark_prefix
  152.     FROM in_inventory A
  153.     WHERE A.inventory_id = vReturnNoteId INTO result;
  154.    
  155.     vOuStructure := result.ou;
  156.     vDocJournal := result.doc; 
  157.     vRemarkPrefix := result.remark_prefix;
  158.    
  159.     UPDATE in_inventory SET status_doc = vStatusRelease, version = version + 1, update_datetime = vDatetime, update_user_id = vUserId
  160.     WHERE inventory_id = vReturnNoteId;
  161.    
  162.     /*
  163.      * create summary dari in_inventory_item untuk update yg sudah ada di in_product_balance_stock
  164.      */
  165.     INSERT INTO tt_in_product_balance_summary_stock
  166.             (session_id, tenant_id, inventory_id, warehouse_id, product_id, product_balance_id, product_status, base_uom_id, qty)
  167.     SELECT  pSessionId, A.tenant_id, A.inventory_id, A.warehouse_from_id, B.product_id, B.product_balance_id, B.product_status,
  168.             B.base_uom_id, SUM(B.qty_realization)
  169.     FROM    in_inventory A, in_inventory_item B
  170.     WHERE   A.inventory_id = B.inventory_id
  171.     AND     A.inventory_id = vReturnNoteId
  172.     GROUP BY A.tenant_id, A.inventory_id, A.warehouse_from_id, B.product_id, B.product_balance_id, B.product_status, B.base_uom_id;
  173.        
  174.    
  175.     /*
  176.      * insert data in_log_product_balance_stock
  177.      */    
  178.     INSERT INTO in_log_product_balance_stock
  179.     (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  180.      product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
  181.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  182.     SELECT A.tenant_id, A.ou_to_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  183.         B.product_id, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id, SUM(B.qty_realization),
  184.         0, vDatetime, vUserId, vDatetime, vUserId
  185.     FROM in_inventory A, in_inventory_item B
  186.     WHERE A.inventory_id = vReturnNoteId AND
  187.         A.inventory_id = B.inventory_id
  188.     GROUP BY A.tenant_id, A.ou_to_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  189.         B.product_id, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id;
  190.  
  191.    
  192.     /*
  193.         Added Julius Tanuwijaya, 16 Nov 2016
  194.     1. buat sysConfig -> pkp.start.date : diisi dengan 20161001
  195.     2. Ambil nilai syconfig tampung ke variabel vPkpStartDate
  196.     3. Ambil doc_date dari return note yang disubmit tampung ke variabel vReturnNoteDate
  197.     4. Ambil dari m_tax untuk tenant id bersangkutan dgn tax code PPn, tampung vUsedTaxId, dan vUsedTaxPercentage
  198.     5. Ambil partner_id dari dokumen return note tampung ke vReturnNotePartnerId
  199.     6. Ambil partner_id eCommerce (MAGENTO) dari sysconfig tampung ke vMagentoPartnerId
  200.     7. IF vReturnNotePartnerId = vMagentoPartnerId AND vReturnNoteDate >= vPkpStartDate THEN
  201.          --custom code
  202.          -- INSERT ke tt_in_so_balance_item
  203.                 flg_tax_amount selalu Yes (Y)
  204.                 tax_id pakai vUsedTaxId
  205.                 tax_percentage pakai vUsedTaxPercentage
  206.        ELSE
  207.  
  208.                  -- default code insert ke tt_in_so_balance_item
  209.        END IF
  210.     */
  211.     /*
  212.      * insert data temporer tt_in_so_balance_item
  213.      */
  214.     IF vReturnNotePartnerId = vPartnerIdMagento AND vReturnNoteDocDate >= vPkpStartDate THEN
  215.      -- INSERT ke tt_in_so_balance_item
  216.      -- flg_tax_amount selalu Yes (Y)
  217.      -- tax_id pakai vUsedTaxId
  218.      -- tax_percentage pakai vUsedTaxPercentage
  219.         INSERT INTO tt_in_so_balance_item
  220.         (session_id, tenant_id, ou_id, doc_type_id,
  221.         doc_no, doc_date, inventory_id, partner_id,
  222.         inventory_item_id, so_id, do_id, do_item_id,
  223.         qty_return, base_uom_id, remark,
  224.         so_item_id, curr_code, price,
  225.         flg_tax_amount, qty_so, qty_int_so,
  226.         so_uom_id, tax_id, tax_percentage)
  227.         SELECT pSessionId, A.tenant_id, A.ou_from_id, A.doc_type_id,
  228.                 A.doc_no, A.doc_date, A.inventory_id, E.partner_bill_to_id,
  229.                 B.inventory_item_id, A.ref_id, B.ref_id, B.ref_item_id,
  230.                 SUM(B.qty_realization), B.base_uom_id, A.remark,
  231.                 -99, A.curr_code, C.dpp_price,
  232.                 vFlagYes, 0, 0,
  233.                 B.base_uom_id, vTaxId, vTaxPercentage
  234.         FROM in_inventory A, in_inventory_item B, tt_generate_return_note_return_purch_invoice C, sl_so E
  235.         WHERE A.inventory_id = vReturnNoteId AND
  236.               A.inventory_id = B.inventory_id AND
  237.               C.return_note_item_id = B.inventory_item_id AND
  238.               C.so_id = E.so_id
  239.         GROUP BY A.inventory_id, B.inventory_item_id, E.partner_bill_to_id,
  240.                 B.inventory_item_id, C.dpp_price;
  241.      
  242.     ELSE
  243.         -- default code insert ke tt_in_so_balance_item
  244.         INSERT INTO tt_in_so_balance_item
  245.         (session_id, tenant_id, ou_id, doc_type_id,
  246.         doc_no, doc_date, inventory_id, partner_id,
  247.         inventory_item_id, so_id, do_id, do_item_id,
  248.         qty_return, base_uom_id, remark,
  249.         so_item_id, curr_code, price,
  250.         flg_tax_amount, qty_so, qty_int_so,
  251.         so_uom_id, tax_id, tax_percentage)
  252.         SELECT pSessionId, A.tenant_id, A.ou_from_id, A.doc_type_id,
  253.                 A.doc_no, A.doc_date, A.inventory_id, E.partner_bill_to_id,
  254.                 B.inventory_item_id, A.ref_id, B.ref_id, B.ref_item_id,
  255.                 SUM(B.qty_realization), B.base_uom_id, A.remark,
  256.                 D.so_item_id, D.curr_code, D.gross_sell_price,
  257.                 D.flg_tax_amount, D.qty_so, D.qty_int,
  258.                 D.so_uom_id, D.tax_id, D.tax_percentage
  259.         FROM in_inventory A, in_inventory_item B, in_balance_do_item C, sl_so_item D, sl_so E
  260.         WHERE A.inventory_id = vReturnNoteId AND
  261.               A.inventory_id = B.inventory_id AND
  262.               B.ref_item_id = C.do_item_id AND
  263.               C.so_item_id = D.so_item_id AND
  264.               D.so_id = E.so_id
  265.         GROUP BY A.tenant_id, A.ou_from_id, A.doc_type_id,
  266.                 A.doc_no, A.doc_date, A.inventory_id, E.partner_bill_to_id,
  267.                 B.inventory_item_id, A.ref_id, B.ref_id, B.ref_item_id,
  268.                 B.base_uom_id, D.so_item_id, D.curr_code, D.nett_sell_price, D.qty_so, D.qty_int, D.so_uom_id, D.tax_id ;
  269.     END IF;
  270.     /*
  271.      * buat data sl_so_balance_invoice
  272.      */
  273.     INSERT INTO sl_so_balance_invoice
  274.     (tenant_id, ou_id, partner_id, so_id,
  275.     ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, ref_item_id, qty_dlv_so, so_uom_id,
  276.     curr_code, price_so, item_amount, flg_invoice, invoice_id,
  277.     regular_disc_amount, promo_disc_amount, adj_regular_disc_amount, adj_promo_disc_amount,
  278.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  279.     SELECT A.tenant_id, A.ou_id, A.partner_id, A.so_id,
  280.         A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.do_item_id, SUM(A.qty_return), A.so_uom_id,
  281.         A.curr_code, A.price, SUM(A.qty_return) * A.price, vFlagInvoice, vEmptyId,
  282.         0, 0, 0, 0,
  283.         0, vDatetime, vUserId, vDatetime, vUserId
  284.     FROM tt_in_so_balance_item A
  285.     WHERE A.session_id = pSessionId
  286.     GROUP BY A.tenant_id, A.ou_id, A.partner_id, A.so_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.do_item_id, A.so_uom_id, A.curr_code, A.price;
  287.          
  288.     /*
  289.      * buat data sl_so_balance_invoice_tax
  290.      */
  291.     INSERT INTO sl_so_balance_invoice_tax
  292.     (tenant_id, ou_id, partner_id, so_id,
  293.     ref_doc_type_id, ref_id, ref_item_id, tax_id, flg_amount,
  294.     tax_percentage, curr_code, base_amount,
  295.     tax_amount, flg_invoice, invoice_id,
  296.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  297.     SELECT A.tenant_id, A.ou_id, A.partner_id, A.so_id,
  298.         A.doc_type_id, A.inventory_id, A.do_item_id, A.tax_id, D.flg_amount,
  299.         A.tax_percentage, A.curr_code, SUM(A.qty_return * A.price),
  300.         f_tax_rounding(A.tenant_id, SUM(A.qty_return * A.price), A.tax_percentage), vFlagInvoice, vEmptyId,
  301.         0, vDatetime, vUserId, vDatetime, vUserId
  302.     FROM tt_in_so_balance_item A, m_tax D, tt_generate_return_note_return_purch_invoice B
  303.     WHERE A.session_id = pSessionId AND
  304.           A.tax_id = D.tax_id AND
  305.           A.so_item_id = B.so_item_id AND
  306.           A.inventory_item_id = B.inventory_item_id AND
  307.           B.tax_price <> 0
  308.     GROUP BY A.tenant_id, A.ou_id, A.partner_id, A.so_id, A.doc_type_id, A.inventory_id, A.do_item_id, A.tax_id,
  309.         D.flg_amount, A.tax_percentage, A.curr_code;
  310.        
  311.     /*
  312.      * journal return note
  313.      * Debit Inventory = dari nilai COGS
  314.      * Credit HPP
  315.      */
  316.     /*
  317.      * membuat data transaksi jurnal :
  318.      * 1. buat admin
  319.      * 2. buat temlate jurnal
  320.      */    
  321.     PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuStructure).ou_bu_id, A.ou_from_id, (vDocJournal).journal_type, (vDocJournal).ledger_code, f_get_year_month_date(A.doc_date), 'MONTHLY', vDatetime, vUserId)
  322.     FROM in_inventory A
  323.     WHERE A.inventory_id = vReturnNoteId;
  324.        
  325.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  326.    
  327.     INSERT INTO gl_journal_trx
  328.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  329.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  330.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  331.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  332.     SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date,
  333.         (vOuStructure).ou_bu_id, (vOuStructure).ou_branch_id, (vOuStructure).ou_sub_bu_id, A.partner_id, vEmptyId, A.warehouse_from_id, A.ext_doc_no, A.ext_doc_date,
  334.         A.ref_doc_type_id, A.ref_id, A.doc_date, f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), A.remark, vStatusDraft, 'DRAFT',
  335.         0, vDatetime, vUserId, vDatetime, vUserId
  336.     FROM in_inventory A
  337.     WHERE A.inventory_id = vReturnNoteId;
  338.    
  339.     INSERT INTO tt_journal_trx_item
  340.     (session_id, tenant_id, journal_trx_id, line_no,
  341.     ref_doc_type_id, ref_id,
  342.     partner_id, product_id, cashbank_id, ou_rc_id,
  343.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  344.     coa_id, curr_code, qty, uom_id,
  345.     amount, journal_date, type_rate,
  346.     numerator_rate, denominator_rate, journal_desc, remark)
  347.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  348.         A.doc_type_id, B.inventory_item_id,
  349.         A.partner_id, B.product_id, vEmptyId, vEmptyId,
  350.         vEmptyId, vSignDebit, vProductCOA, vEmptyId,
  351.         f_get_product_coa_group_product(A.tenant_id, B.product_id), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), B.qty_realization, B.base_uom_id,
  352.         0 , A.doc_date, vTypeRate,
  353.         1, 1, 'PRODUCT_STOCK', B.remark
  354.     FROM in_inventory A, in_inventory_item B
  355.     WHERE A.inventory_id = vReturnNoteId AND
  356.         A.inventory_id = B.inventory_id;
  357.  
  358.        
  359. /* NK, 1 Feb 2014, journal HPP tidak perlu break down sampai ke product    
  360.     INSERT INTO tt_journal_trx_item
  361.     (session_id, tenant_id, journal_trx_id, line_no,
  362.     ref_doc_type_id, ref_id,
  363.     partner_id, product_id, cashbank_id, ou_rc_id,
  364.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  365.     coa_id, curr_code, qty, uom_id,
  366.     amount, journal_date, type_rate,
  367.     numerator_rate, denominator_rate, journal_desc, remark)
  368.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  369.         A.doc_type_id, B.inventory_item_id,
  370.         A.partner_id, B.product_id, vEmptyId, vEmptyId,
  371.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  372.         f_get_system_coa_by_group_coa(A.tenant_id, 'HargaPokokPenjualan'), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), B.qty_realization, B.base_uom_id,
  373.         0 , A.doc_date, vTypeRate,
  374.         1, 1, 'HPP', B.remark
  375.     FROM in_inventory A, in_inventory_item B
  376.     WHERE A.inventory_id = vReturnNoteId AND
  377.         A.inventory_id = B.inventory_id;
  378. */     
  379. /*     
  380.     INSERT INTO tt_journal_trx_item
  381.     (session_id, tenant_id, journal_trx_id, line_no,
  382.     ref_doc_type_id, ref_id, ou_id, sub_ou_id,
  383.     partner_id, product_id, cashbank_id, ou_rc_id,
  384.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  385.     coa_id, curr_code, qty, uom_id,
  386.     amount, journal_date, type_rate,
  387.     numerator_rate, denominator_rate, journal_desc, remark)
  388.     SELECT pSessionId, A.tenant_id, B.journal_trx_id, 1,
  389.         A.doc_type_id, A.inventory_item_id, B.ou_id, B.sub_ou_id,
  390.         vEmptyId, C.product_id, vEmptyId, vEmptyId,
  391.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  392.         f_get_system_coa_by_group_coa(A.tenant_id, 'HargaPokokPenjualan'), A.curr_code, A.qty_return, A.base_uom_id,
  393.         f_get_amount_before_tax((A.qty_return * A.qty_so * A.price) / A.qty_int_so, A.flg_tax_amount, A.tax_percentage,0),
  394.         A.doc_date, vTypeRate,
  395.         1, 1, 'HPP', A.remark
  396.     FROM tt_in_so_balance_item A, gl_journal_trx B, in_inventory_item C
  397.     WHERE A.session_id = pSessionId AND
  398.         B.journal_trx_id = vJournalTrxId AND
  399.         A.inventory_item_id = C.inventory_item_id;
  400.  
  401.     INSERT INTO gl_journal_trx_mapping
  402.     (tenant_id, journal_trx_id, line_no,
  403.     ref_doc_type_id, ref_id,
  404.     partner_id, product_id, cashbank_id, ou_rc_id,
  405.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  406.     coa_id, curr_code, qty, uom_id,
  407.     amount, journal_date, type_rate,
  408.     numerator_rate, denominator_rate, journal_desc, remark,
  409.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  410.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  411.         A.ref_doc_type_id, A.ref_id,
  412.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  413.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  414.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  415.         A.amount, A.journal_date, A.type_rate,
  416.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  417.         0, vDatetime, vUserId, vDatetime, vUserId
  418.     FROM tt_journal_trx_item A
  419.     WHERE A.session_id = pSessionId AND
  420.         A.journal_desc = 'HPP';
  421.                
  422. */
  423.     INSERT INTO gl_journal_trx_item
  424.     (tenant_id, journal_trx_id, line_no,
  425.     ref_doc_type_id, ref_id,
  426.     partner_id, product_id, cashbank_id, ou_rc_id,
  427.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  428.     coa_id, curr_code, qty, uom_id,
  429.     amount, journal_date, type_rate,
  430.     numerator_rate, denominator_rate, journal_desc, remark,
  431.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  432.     ou_branch_id, ou_sub_bu_id)
  433.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  434.         A.ref_doc_type_id, A.ref_id,
  435.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  436.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  437.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  438.         A.amount, A.journal_date, A.type_rate,
  439.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  440.         0, vDatetime, vUserId, vDatetime, vUserId,
  441.         (vOuStructureJournalItem).ou_branch_id, (vOuStructureJournalItem).ou_sub_bu_id
  442.     FROM tt_journal_trx_item A
  443.     WHERE A.session_id = pSessionId AND
  444.         A.journal_desc = 'PRODUCT_STOCK';
  445.        
  446.     INSERT INTO gl_journal_trx_mapping
  447.     (tenant_id, journal_trx_id, line_no,
  448.     ref_doc_type_id, ref_id,
  449.     partner_id, product_id, cashbank_id, ou_rc_id,
  450.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  451.     coa_id, curr_code, qty, uom_id,
  452.     amount, journal_date, type_rate,
  453.     numerator_rate, denominator_rate, journal_desc, remark,
  454.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  455.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  456.         vEmptyId, vEmptyId,
  457.         vEmptyId, vEmptyId, vEmptyId, vEmptyId,
  458.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  459.         f_get_system_coa_by_group_coa(A.tenant_id, 'HargaPokokPenjualan'), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), 0, vEmptyId,
  460.         0, A.journal_date, A.type_rate,
  461.         1, 1, 'COGS', vEmptyValue,
  462.         0, vDatetime, vUserId, vDatetime, vUserId
  463.     FROM tt_journal_trx_item A
  464.     WHERE A.session_id = pSessionId
  465.     GROUP BY A.tenant_id, A.journal_trx_id, A.journal_date, A.type_rate;
  466.        
  467.    
  468.     ========================================================================
  469.     BELUM TAHU BAWAH INI DIGIMANAKAN (belum dilakukan perubahan)
  470.     ========================================================================
  471.     --Jika Return Note adalah for Finance, buat data Claim Note
  472.     IF EXISTS (
  473.         SELECT (1)
  474.         FROM in_return_note_for_finance A
  475.         WHERE A.inventory_id = vReturnNoteId
  476.             AND A.flg_for_finance = vFlagYes
  477.     ) THEN
  478.    
  479.         DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;     
  480.         DELETE FROM tt_in_po_balance_item WHERE session_id = pSessionId;
  481.    
  482.         SELECT NEXTVAL('in_inventory_seq') INTO vClaimNoteId;
  483.        
  484.         SELECT CAST(A.process_parameter_value AS character varying(30)) INTO vClaimNoteDocNo FROM t_process_parameter A
  485.         WHERE A.process_message_id = vProcessId AND A.process_parameter_key = 'CLAIM_NOTE_NO';
  486.    
  487.         SELECT CAST(A.process_parameter_value AS bigint) INTO vClaimNoteNumId FROM t_process_parameter A
  488.         WHERE A.process_message_id = vProcessId AND A.process_parameter_key = 'CLAIM_NOTE_NUM_ID';
  489.    
  490.                
  491.         INSERT INTO in_inventory(
  492.             inventory_id, tenant_id, doc_type_id, doc_no, doc_date, ou_from_id,
  493.             ou_to_id, partner_id, ext_doc_no, ext_doc_date, ref_doc_type_id,
  494.             ref_id, remark, warehouse_from_id, warehouse_to_id, transfer_date,
  495.             receive_date, activity_gl_id, ou_rc_id, no_vehicle, flg_delivery,
  496.             delivery_code, status_doc, workflow_status, version, create_datetime,
  497.             create_user_id, update_datetime, update_user_id, segment_id,
  498.             group_product_id)
  499.         SELECT vClaimNoteId, A.tenant_id, vClaimNoteDocTypeId, vClaimNoteDocNo, A.doc_date, C.ou_id,
  500.             C.ou_id, C.partner_id, A.doc_no, A.doc_date, C.doc_type_id,
  501.             C.po_id, vRemarkPrefix || A.remark, A.warehouse_from_id, A.warehouse_to_id, A.transfer_date,
  502.             A.receive_date, vEmptyId, vEmptyId, A.no_vehicle, A.flg_delivery,
  503.             A.delivery_code, vStatusRelease, vWorkflowApproved, 0, vDatetime,
  504.             vUserId, vDatetime, vUserId, vEmptyId,
  505.             vEmptyId
  506.         FROM in_inventory A
  507.         INNER JOIN in_return_note_for_finance B
  508.             ON A.inventory_id = B.inventory_id
  509.         INNER JOIN pu_po C
  510.             ON B.po_id = C.po_id
  511.         WHERE A.inventory_id = vReturnNoteId;
  512.  
  513.         INSERT INTO in_inventory_item(
  514.             tenant_id, inventory_id, line_no, product_id,
  515.             product_balance_id, product_status, serial_number, product_expired_date,
  516.             product_year_made, lot_number, ref_doc_type_id, ref_id, ref_item_id,
  517.             curr_code, amount, base_uom_id, qty_request, qty_realization,
  518.             remark, version, create_datetime, create_user_id, update_datetime,
  519.             update_user_id)
  520.         SELECT A.tenant_id, vClaimNoteId, D.line_no, E.product_id,
  521.             E.product_balance_id, F.product_status, G.serial_number, G.product_expired_date,
  522.             G.product_year_made, G.lot_number, vReceiveGoodsDocTypeId, C.receive_goods_id, C.receive_goods_item_id,
  523.             vEmptyIdString, 0, C.base_uom_id,
  524.             CASE WHEN H.qty < E.qty THEN
  525.                 H.qty
  526.             ELSE
  527.                 E.qty
  528.             END,
  529.             A.qty_return,
  530.             D.remark, 0, vDatetime, vUserId, vDatetime,
  531.             vUserId
  532.         FROM tt_in_so_balance_item A
  533.         INNER JOIN pu_po_item B
  534.             ON A.so_item_id = B.ref_id
  535.         INNER JOIN in_balance_receive_goods_item C
  536.             ON B.po_item_id = C.po_item_id
  537.                 AND C.status_item = 'I'
  538.         INNER JOIN in_inventory_item D
  539.             ON A.inventory_item_id = D.inventory_item_id
  540.         INNER JOIN in_log_product_balance_stock E
  541.             ON C.tenant_id = E.tenant_id
  542.                 AND E.ref_id = C.receive_goods_id
  543.                 AND C.doc_date = E.doc_date
  544.                 AND B.product_id = E.product_id
  545.                 AND E.qty > 0
  546.         INNER JOIN tt_in_product_balance_summary_stock F
  547.             ON F.tenant_id = E.tenant_id
  548.                 --AND   F.warehouse_id = E.warehouse_id
  549.                 AND F.product_id = E.product_id
  550.                 AND F.product_balance_id = E.product_balance_id
  551.         INNER JOIN in_product_balance G
  552.             ON F.product_balance_id = G.product_balance_id
  553.         INNER JOIN in_product_balance_stock H
  554.             ON H.tenant_id = F.tenant_id
  555.                 AND H.warehouse_id = F.warehouse_id
  556.                 AND H.product_id = F.product_id
  557.                 AND H.product_balance_id = F.product_balance_id
  558.                 AND H.product_status = F.product_status
  559.         WHERE A.session_id = pSessionId
  560.             AND B.ref_doc_type_id = vSalesOrderDocTypeId
  561.             AND E.doc_type_id = vReceiveGoodsDocTypeId
  562.             AND F.session_id = pSessionId
  563.             AND F.inventory_id = vReturnNoteId;
  564.            
  565.         /*
  566.          * update product_balance_stock
  567.          */
  568.         UPDATE in_product_balance_stock SET qty = in_product_balance_stock.qty - A.qty, update_datetime = vDatetime, update_user_id = vUserId,
  569.             version = version + 1
  570.         FROM tt_in_product_balance_summary_stock A
  571.         WHERE A.session_id = pSessionId AND
  572.             A.inventory_id = vReturnNoteId AND
  573.             in_product_balance_stock.tenant_id = A.tenant_id AND
  574.             in_product_balance_stock.warehouse_id = A.warehouse_id AND
  575.             in_product_balance_stock.product_id = A.product_id AND
  576.             in_product_balance_stock.product_balance_id = A.product_balance_id AND
  577.             in_product_balance_stock.product_status = A.product_status;
  578.            
  579.         INSERT INTO in_inventory_logistic(
  580.             tenant_id, inventory_id, partner_ship_address_id,
  581.             partner_ship_cp_id, cp_name, cp_phone1, cp_phone2, remark, due_date,
  582.             version, create_datetime, create_user_id, update_datetime, update_user_id)
  583.         SELECT A.tenant_id, vClaimNoteId, B.partner_address_id,
  584.             C.partner_cp_id, C.cp_name, C.phone1, C.phone2, A.remark, A.transfer_date,
  585.             0, vDatetime, vUserId, vDatetime, vUserId
  586.         FROM in_inventory A
  587.         INNER JOIN m_partner_address B
  588.             ON A.tenant_id = B.tenant_id AND A.partner_id = B.partner_id
  589.         INNER JOIN m_partner_cp C
  590.             ON A.tenant_id = C.tenant_id AND A.partner_id = C.partner_id
  591.         WHERE A.inventory_id = vClaimNoteId
  592.             AND B.active = vFlagYes
  593.             AND B.flg_default = vFlagYes
  594.             AND C.active = vFlagYes
  595.             AND C.flg_responsibility = vFlagYes;
  596.  
  597.         SELECT f_get_ou_bu_structure(A.ou_from_id) AS ou, f_get_document_journal(A.doc_type_id) as doc
  598.         FROM in_inventory A
  599.         WHERE A.inventory_id = vClaimNoteId INTO result;
  600.        
  601.         vOuStructure := result.ou;
  602.         vDocJournal := result.doc; 
  603.                        
  604.         INSERT INTO in_log_product_balance_stock
  605.         (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  606.          product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
  607.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  608.         SELECT A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  609.             B.product_id, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id, SUM(B.qty_realization) * -1,
  610.             0, vDatetime, vUserId, vDatetime, vUserId
  611.         FROM in_inventory A, in_inventory_item B, m_warehouse_ou C
  612.         WHERE A.inventory_id = vClaimNoteId AND
  613.             A.inventory_id = B.inventory_id AND
  614.             C.warehouse_id = A.warehouse_from_id
  615.         GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  616.             B.product_id, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id;
  617.        
  618.         INSERT INTO tt_in_po_balance_item
  619.         (session_id, tenant_id, ou_id, doc_type_id,
  620.         doc_no, doc_date, inventory_id, partner_id,
  621.         inventory_item_id, po_id, receive_goods_id, receive_goods_item_id,
  622.         qty_return, base_uom_id, remark,
  623.         po_item_id, curr_code, price,
  624.         flg_tax_amount, qty_po, qty_int_po,
  625.         po_uom_id, tax_id, tax_percentage)
  626.         SELECT pSessionId, A.tenant_id, A.ou_from_id, A.doc_type_id,
  627.                 A.doc_no, A.doc_date, A.inventory_id, A.partner_id,
  628.                 B.inventory_item_id, A.ref_id, B.ref_id, B.ref_item_id,
  629.                 SUM(B.qty_realization), B.base_uom_id, A.remark,
  630.                 D.po_item_id, D.curr_code, D.gross_price_po - D.discount_amount,
  631.                 D.flg_tax_amount, D.qty_po, D.qty_int,
  632.                 D.po_uom_id, D.tax_id, D.tax_percentage
  633.         FROM in_inventory A, in_inventory_item B, in_balance_receive_goods_item C, pu_po_item D
  634.         WHERE A.inventory_id = vClaimNoteId AND
  635.               A.inventory_id = B.inventory_id AND
  636.               B.ref_item_id = C.receive_goods_item_id AND
  637.               C.po_item_id = D.po_item_id
  638.         GROUP BY A.tenant_id, A.ou_from_id, A.doc_type_id,
  639.                 A.doc_no, A.doc_date, A.inventory_id, A.partner_id,
  640.                 B.inventory_item_id, A.ref_id, B.ref_id, B.ref_item_id,
  641.                 B.base_uom_id, D.po_item_id, D.curr_code, D.nett_price_po, D.qty_po, D.qty_int, D.po_uom_id, D.tax_id ;
  642.                
  643.         UPDATE pu_po_balance_item SET qty_return = pu_po_balance_item.qty_return + ((A.qty_return * A.qty_po) / A.qty_int_po), qty_int_return = pu_po_balance_item.qty_int_return + A.qty_return, update_datetime = vDatetime, update_user_id = vUserId
  644.         FROM tt_in_po_balance_item A
  645.         WHERE A.session_id = pSessionId AND
  646.             pu_po_balance_item.po_item_id = A.po_item_id;
  647.            
  648.         INSERT INTO pu_log_po_balance_item
  649.         (tenant_id, po_id, po_item_id, ref_doc_type_id, ref_id, ref_item_id,
  650.          qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  651.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  652.         SELECT A.tenant_id, A.po_id, A.po_item_id, A.doc_type_id, A.inventory_id, A.inventory_item_id,
  653.             ((A.qty_return * A.qty_po) / A.qty_int_po ), A.po_uom_id, A.qty_return, A.base_uom_id, A.remark,
  654.             0, vDatetime, vUserId, vDatetime, vUserId
  655.         FROM tt_in_po_balance_item A
  656.         WHERE A.session_id = pSessionId;
  657.        
  658.         INSERT INTO pu_po_balance_invoice
  659.         (tenant_id, ou_id, partner_id, po_id,
  660.         ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, ref_item_id, qty_rcv_po, po_uom_id,
  661.         curr_code, price_po, item_amount, flg_invoice, invoice_id,
  662.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  663.         SELECT A.tenant_id, A.ou_id, A.partner_id, A.po_id,
  664.             A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.receive_goods_item_id, SUM((A.qty_return * A.qty_po) / A.qty_int_po), A.po_uom_id,
  665.             A.curr_code, A.price,
  666.             SUM(f_get_amount_before_tax((A.qty_return * A.qty_po * A.price) / A.qty_int_po, A.flg_tax_amount, A.tax_percentage, f_get_digit_decimal_doc_curr(vClaimNoteDocTypeId, A.curr_code), vRoundingModeNonTax)),     
  667.             vFlagInvoice, vEmptyId,
  668.             0, vDatetime, vUserId, vDatetime, vUserId
  669.         FROM tt_in_po_balance_item A
  670.         WHERE A.session_id = pSessionId
  671.         GROUP BY A.tenant_id, A.ou_id, A.partner_id, A.po_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.receive_goods_item_id, A.po_uom_id, A.curr_code, A.price;
  672.        
  673.         INSERT INTO pu_po_balance_invoice_tax
  674.         (tenant_id, ou_id, partner_id, po_id,
  675.         ref_doc_type_id, ref_id, ref_item_id, tax_id, flg_amount,
  676.         tax_percentage, curr_code, base_amount, tax_amount, flg_invoice, invoice_id,
  677.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  678.         SELECT A.tenant_id, A.ou_id, A.partner_id, A.po_id,
  679.             A.doc_type_id, A.inventory_id, A.receive_goods_item_id, A.tax_id, D.flg_amount,
  680.             A.tax_percentage, A.curr_code,
  681.             SUM(f_get_amount_before_tax((A.qty_return * A.qty_po * A.price) / A.qty_int_po, A.flg_tax_amount, A.tax_percentage, f_get_digit_decimal_doc_curr(vClaimNoteDocTypeId, A.curr_code), vRoundingModeNonTax)),
  682.             f_tax_rounding(A.tenant_id, SUM(f_get_amount_before_tax((A.qty_return * A.qty_po * A.price) / A.qty_int_po, A.flg_tax_amount, A.tax_percentage, f_get_digit_decimal_doc_curr(vClaimNoteDocTypeId, A.curr_code), vRoundingModeNonTax)), A.tax_percentage),
  683.             vFlagInvoice, vEmptyId,
  684.             0, vDatetime, vUserId, vDatetime, vUserId
  685.         FROM tt_in_po_balance_item A, m_tax D
  686.         WHERE A.session_id = pSessionId AND
  687.               A.tax_id = D.tax_id
  688.         GROUP BY A.tenant_id, A.ou_id, A.partner_id, A.po_id, A.doc_type_id, A.inventory_id, A.receive_goods_item_id, A.tax_id,
  689.             D.flg_amount, A.tax_percentage, A.curr_code;
  690.            
  691.         UPDATE in_balance_receive_goods_item SET status_item = vStatusFinal
  692.         FROM tt_in_po_balance_item A
  693.         WHERE A.session_id = pSessionId AND
  694.             in_balance_receive_goods_item.receive_goods_item_id = A.receive_goods_item_id AND
  695.             in_balance_receive_goods_item.qty_rcv -in_balance_receive_goods_item.qty_return <= 0;
  696.    
  697.         UPDATE in_balance_receive_goods_item SET status_item = vStatusRelease
  698.         FROM tt_in_po_balance_item A
  699.         WHERE A.session_id = pSessionId AND
  700.             in_balance_receive_goods_item.receive_goods_item_id = A.receive_goods_item_id AND
  701.             in_balance_receive_goods_item.qty_rcv -in_balance_receive_goods_item.qty_return > 0;
  702.            
  703.         SELECT A.ou_from_id, B.ou_id INTO vOuId, vOuWarehouseId
  704.         FROM in_inventory A
  705.         INNER JOIN m_warehouse_ou B ON A.warehouse_from_id = B.warehouse_id
  706.         WHERE A.inventory_id = vClaimNoteId;
  707.        
  708.         IF (vOuId <> vOuWarehouseId) THEN
  709.             SELECT f_get_ou_bu_structure(vOuWarehouseId) as ou_structure INTO result;
  710.             vOuStructureJournalItem := result.ou_structure;
  711.         ELSE
  712.             vOuStructureJournalItem := ROW(-99, -99, -99);
  713.         END IF;
  714.        
  715.         PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuStructure).ou_bu_id, A.ou_from_id, (vDocJournal).journal_type, (vDocJournal).ledger_code, f_get_year_month_date(A.doc_date), 'DAILY', vDatetime, vUserId)
  716.         FROM in_inventory A
  717.         WHERE A.inventory_id = vClaimNoteId;
  718.            
  719.         SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  720.        
  721.         INSERT INTO gl_journal_trx
  722.         (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  723.         ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  724.         ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  725.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  726.         SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date,
  727.             (vOuStructure).ou_bu_id, (vOuStructure).ou_branch_id, (vOuStructure).ou_sub_bu_id, A.partner_id, vEmptyId, A.warehouse_from_id, A.ext_doc_no, A.ext_doc_date,
  728.             A.ref_doc_type_id, A.ref_id, A.doc_date, f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), A.remark, vStatusDraft, 'DRAFT',
  729.             0, vDatetime, vUserId, vDatetime, vUserId
  730.         FROM in_inventory A
  731.         WHERE A.inventory_id = vClaimNoteId;
  732.        
  733.         INSERT INTO tt_journal_trx_item
  734.         (session_id, tenant_id, journal_trx_id, line_no,
  735.         ref_doc_type_id, ref_id,
  736.         partner_id, product_id, cashbank_id, ou_rc_id,
  737.         segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  738.         coa_id, curr_code, qty, uom_id,
  739.         amount, journal_date, type_rate,
  740.         numerator_rate, denominator_rate, journal_desc, remark)
  741.         SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  742.             A.doc_type_id, B.inventory_item_id,
  743.             A.partner_id, B.product_id, vEmptyId, vEmptyId,
  744.             vEmptyId, vSignCredit, vProductCOA, vEmptyId,
  745.             f_get_product_coa_group_product(A.tenant_id, B.product_id), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), B.qty_realization, B.base_uom_id,
  746.             f_get_amount_before_tax((A.qty_return * A.qty_po * A.price) / A.qty_int_po, A.flg_tax_amount, A.tax_percentage, f_get_digit_decimal_doc_curr(vClaimNoteDocTypeId, A.curr_code), vRoundingModeNonTax),
  747.             C.doc_date, vTypeRate,
  748.             1, 1, 'PRODUCT_STOCK', B.remark
  749.         FROM tt_in_po_balance_item A, in_inventory_item B, pu_receive_goods C
  750.         WHERE A.inventory_id = vClaimNoteId AND
  751.             A.inventory_item_id = B.inventory_item_id AND
  752.             A.receive_goods_id = C.receive_goods_id;
  753.            
  754.         INSERT INTO tt_journal_trx_item
  755.         (session_id, tenant_id, journal_trx_id, line_no,
  756.         ref_doc_type_id, ref_id,
  757.         partner_id, product_id, cashbank_id, ou_rc_id,
  758.         segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  759.         coa_id, curr_code, qty, uom_id,
  760.         amount, journal_date, type_rate,
  761.         numerator_rate, denominator_rate, journal_desc, remark)
  762.         SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  763.             A.doc_type_id, A.inventory_item_id,
  764.             A.partner_id, C.product_id, vEmptyId, vEmptyId,
  765.             vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  766.             f_get_system_coa_by_group_coa(A.tenant_id, 'HutangHarusDibayar'), A.curr_code, A.qty_return, A.base_uom_id,
  767.             f_get_amount_before_tax((A.qty_return * A.qty_po * A.price) / A.qty_int_po, A.flg_tax_amount, A.tax_percentage, f_get_digit_decimal_doc_curr(vClaimNoteDocTypeId, A.curr_code), vRoundingModeNonTax),
  768.             A.doc_date, vTypeRate,
  769.             1, 1, 'ACCR_AP', A.remark
  770.         FROM tt_in_po_balance_item A, in_inventory_item C
  771.         WHERE A.session_id = pSessionId AND
  772.             A.inventory_item_id = C.inventory_item_id;
  773.    
  774.         INSERT INTO gl_journal_trx_item
  775.         (tenant_id, journal_trx_id, line_no,
  776.         ref_doc_type_id, ref_id,
  777.         partner_id, product_id, cashbank_id, ou_rc_id,
  778.         segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  779.         coa_id, curr_code, qty, uom_id,
  780.         amount, journal_date, type_rate,
  781.         numerator_rate, denominator_rate, journal_desc, remark,
  782.         "version", create_datetime, create_user_id, update_datetime, update_user_id,
  783.         ou_branch_id, ou_sub_bu_id)
  784.         SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  785.             A.ref_doc_type_id, A.ref_id,
  786.             A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  787.             A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  788.             A.coa_id, A.curr_code, A.qty, A.uom_id,
  789.             A.amount, A.journal_date, A.type_rate,
  790.             A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  791.             0, vDatetime, vUserId, vDatetime, vUserId,
  792.             (vOuStructureJournalItem).ou_branch_id, (vOuStructureJournalItem).ou_sub_bu_id
  793.         FROM tt_journal_trx_item A
  794.         WHERE A.session_id = pSessionId AND
  795.             A.journal_desc = 'PRODUCT_STOCK';
  796.            
  797.         INSERT INTO gl_journal_trx_mapping
  798.         (tenant_id, journal_trx_id, line_no,
  799.         ref_doc_type_id, ref_id,
  800.         partner_id, product_id, cashbank_id, ou_rc_id,
  801.         segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  802.         coa_id, curr_code, qty, uom_id,
  803.         amount, journal_date, type_rate,
  804.         numerator_rate, denominator_rate, journal_desc, remark,
  805.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  806.         SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  807.             A.ref_doc_type_id, A.ref_id,
  808.             A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  809.             A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  810.             A.coa_id, A.curr_code, A.qty, A.uom_id,
  811.             A.amount, A.journal_date, A.type_rate,
  812.             A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  813.             0, vDatetime, vUserId, vDatetime, vUserId
  814.         FROM tt_journal_trx_item A
  815.         WHERE A.session_id = pSessionId AND
  816.             A.journal_desc = 'ACCR_AP';
  817.            
  818.         INSERT INTO pu_po_balance_invoice_ext_invoice_doc_type
  819.         (tenant_id, ou_id, po_id, ref_doc_type_id, ref_id,
  820.         ref_item_id, invoice_id, invoice_doc_type_id,
  821.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  822.         SELECT A.tenant_id, A.ou_id, A.po_id, A.doc_type_id, A.inventory_id,
  823.             A.receive_goods_item_id, vEmptyId, vEmptyId,
  824.             0, vDatetime, vUserId, vDatetime, vUserId
  825.         FROM tt_in_po_balance_item A
  826.         WHERE A.session_id = pSessionId
  827.         GROUP BY A.tenant_id, A.ou_id, A.partner_id, A.po_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date,
  828.             A.receive_goods_item_id, A.po_uom_id, A.curr_code, A.price;
  829.              
  830.         INSERT INTO pu_po_balance_invoice_tax_ext
  831.         (tenant_id, ou_id, po_id, ref_doc_type_id, ref_id,
  832.         ref_item_id, tax_id, invoice_id, invoice_doc_type_id,
  833.         "version", create_datetime, create_user_id, update_datetime, update_user_id)
  834.         SELECT A.tenant_id, A.ou_id, A.po_id, A.doc_type_id, A.inventory_id,
  835.             A.receive_goods_item_id, A.tax_id, vEmptyId, vEmptyId,
  836.             0, vDatetime, vUserId, vDatetime, vUserId
  837.         FROM tt_in_po_balance_item A, m_tax D
  838.         WHERE A.session_id = pSessionId AND
  839.               A.tax_id = D.tax_id
  840.         GROUP BY A.tenant_id, A.ou_id, A.partner_id, A.po_id, A.doc_type_id, A.inventory_id, A.receive_goods_item_id, A.tax_id,
  841.             D.flg_amount, A.tax_percentage, A.curr_code;
  842.            
  843.         /**
  844.          * GENERATE APPROVAL
  845.          */
  846.        
  847.         -- Set user id from sysconfig
  848.         SELECT f_get_value_system_config_by_param_code(pTenantId, vParamUserIdForGenerateDoc)::bigint INTO vUserIdForGenerateDoc;
  849.  
  850.         -- Set role id from sysconfig
  851.         SELECT f_get_value_system_config_by_param_code(pTenantId, vParamRoleIdForGenerateDoc)::bigint INTO vRoleIdForGenerateDoc;
  852.            
  853.        
  854.         -- Mendapatkan default approval flow ID
  855.         SELECT awe_flow_id INTO vClaimNoteFlowId
  856.         FROM awe_flow
  857.         WHERE scheme = vClaimNoteScheme AND
  858.             flg_validate = vFlagYes AND
  859.             active = vFlagYes;
  860.        
  861.         -- Generate data awe_currdoc_status
  862.         INSERT INTO awe_currdoc_status(
  863.             req_id, tenant_id, scheme, doc_id, doc_no, doc_date, current_state,
  864.             remark, current_user_id, current_role_id, flg_user_role, label,
  865.             data, flow_id, create_datetime, create_user_id, create_role_id,
  866.             update_datetime, update_user_id, update_role_id, version)
  867.         SELECT A.inventory_id||'_'||A.doc_no, A.tenant_id, vClaimNoteScheme, A.inventory_id, A.doc_no, A.doc_date, vWorkflowApproved,
  868.             A.remark, vUserIdForGenerateDoc, vRoleIdForGenerateDoc, vFlgUserRole, 'CLAIM NOTE '||A.doc_no,
  869.             '{}', vClaimNoteFlowId, vDatetime, vUserIdForGenerateDoc, vRoleIdForGenerateDoc,
  870.             vDatetime, vUserIdForGenerateDoc, vRoleIdForGenerateDoc, 0
  871.         FROM in_inventory A
  872.         WHERE A.inventory_id = vClaimNoteId;
  873.        
  874.         -- Generate data awe_historydoc
  875.         INSERT INTO awe_historydoc(
  876.                 tenant_id, req_id, doc_id, scheme, user_id, role_id,
  877.                 activity, previous_state, next_state, remark, next_user_id, next_role_id,
  878.                 flg_user_role, activity_datetime, version)
  879.         SELECT pTenantId, B.req_id, A.inventory_id, vClaimNoteScheme, vUserIdForGenerateDoc, vRoleIdForGenerateDoc,
  880.                 'AUTO GENERATE', '', '', A.remark, vEmptyId, vEmptyId,
  881.                 vFlgUserRole, vDateTime, 0
  882.         FROM in_inventory A
  883.         INNER JOIN awe_currdoc_status B ON B.doc_id = A.inventory_id AND B.doc_no = A.doc_no AND B.doc_date = A.doc_date
  884.         WHERE A.tenant_id = pTenantId
  885.             AND A.inventory_id = vClaimNoteId;
  886.        
  887.         DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;     
  888.         DELETE FROM tt_in_po_balance_item WHERE session_id = pSessionId;
  889.        
  890.         -- Insert ke tabel mapping
  891.         INSERT INTO in_ref_mapping_return_note_for_finance(
  892.             so_id, po_id, return_note_id, return_note_doc_type_id, return_note_doc_no,
  893.             claim_note_id, claim_note_doc_type_id, claim_note_doc_no,
  894.             create_datetime, create_user_id, update_datetime, update_user_id, version)
  895.         SELECT A.so_id, A.po_id, A.inventory_id, B.doc_type_id, B.doc_no,
  896.             vClaimNoteId, vClaimNoteDocTypeId, vClaimNoteDocNo,
  897.             vDatetime, vUserId, vDatetime, vUserId, 0
  898.         FROM in_return_note_for_finance A
  899.         INNER JOIN in_inventory B ON A.inventory_id = B.inventory_id
  900.         WHERE A.inventory_id = vReturnNoteId
  901.             AND A.flg_for_finance = vFlagYes;
  902.        
  903.     END IF;
  904.          
  905.     DELETE FROM tt_in_product_balance_summary_stock WHERE session_id = pSessionId;
  906.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;     
  907.     DELETE FROM tt_in_so_balance_item WHERE session_id = pSessionId;         
  908. END;
  909. $BODY$
  910. LANGUAGE plpgsql VOLATILE
  911. COST 100;
  912. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement