Advertisement
samuel025

Function Submit DO Receipt

Dec 21st, 2021
1,180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION in_submit_do_receipt(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.     vDoReceiptId                    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.     vStatusVoid             character varying(1);
  19.     vEmptyValue             character varying(1);
  20.     vProductStatus          character varying(5);
  21.     vSignDebit              character varying(1);
  22.     vSignCredit             character varying(1);
  23.     vTypeRate               character varying(3);
  24.     vProductCOA             character varying(10);
  25.     vSystemCOA              character varying(10);
  26.     vSoId                   bigint;
  27.     vDoId                   bigint;
  28.     vUnfinishedItem         bigint;
  29.     vParentOuId             bigint;
  30.     vJournalTrxId           bigint;    
  31.     vJournalType            character varying(20);
  32.     vDocNoSI                character varying(50);
  33.     vOuId                   bigint;
  34.     vOuWarehouseId          bigint;
  35.     vAutoNumId              bigint;
  36.    
  37.     vDocJournal                 DOC_JOURNAL%ROWTYPE;
  38.     vOuStructure                OU_BU_STRUCTURE%ROWTYPE;
  39.     vOuStructureJournalItem     OU_BU_STRUCTURE%ROWTYPE;
  40.     result                      RECORD;
  41.    
  42.     vDoReceiptDocTypeId     bigint;
  43.     vRoundingModeNonTax     character varying(5);
  44.     vDoDocTypeId            bigint;
  45.     vSoDocTypeId            bigint;
  46.     vSlsInvTempId           bigint;
  47.     vSlsInvTempDocTypeId    bigint;
  48.     vNo                     character varying(5);
  49.     vYes                    character varying(5);
  50. BEGIN
  51.  
  52.     vFlagInvoice := 'N';
  53.     vEmptyId := -99;
  54.     vStatusRelease := 'R';
  55.     vStatusVoid := 'V';
  56.     vStatusDraft := 'D';
  57.     vStatusFinal := 'F';
  58.     vEmptyValue := ' ';
  59.     vProductStatus := 'GOOD';
  60.     vSignDebit := 'D';
  61.     vSignCredit := 'C';
  62.     vTypeRate := 'COM';
  63.     vProductCOA := 'PRODUCT';
  64.     vSystemCOA := 'SYSTEM';
  65.     vUnfinishedItem := 0;
  66.     vNo := 'N';
  67.     vYes := 'Y';
  68.  
  69.     vDoReceiptDocTypeId = 526;
  70.     vDoDocTypeId := 311;
  71.     vSoDocTypeId := 301;
  72.     vSlsInvTempDocTypeId := 361;
  73.  
  74.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  75.  
  76.  
  77.     SELECT A.process_message_id INTO vProcessId
  78.     FROM t_process_message A
  79.     WHERE A.tenant_id = pTenantId AND
  80.         A.process_name = 'in_submit_do_receipt' AND
  81.         A.process_no = pProcessNo;
  82.  
  83.     SELECT CAST(A.process_parameter_value AS bigint) INTO vDoReceiptId
  84.     FROM t_process_parameter A
  85.     WHERE A.process_message_id = vProcessId AND
  86.         A.process_parameter_key = 'doReceiptId';
  87.  
  88.     SELECT CAST(A.process_parameter_value AS bigint) INTO vUserId
  89.     FROM t_process_parameter A
  90.     WHERE A.process_message_id = vProcessId AND
  91.         A.process_parameter_key = 'userId';
  92.  
  93.     SELECT CAST(A.process_parameter_value AS character varying(14)) INTO vDatetime
  94.     FROM t_process_parameter A
  95.     WHERE A.process_message_id = vProcessId AND
  96.         A.process_parameter_key = 'datetime';
  97.  
  98.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  99. /*
  100.  * 1. update status doc in_do_receipt
  101.  * 2. add sl_log_so_balance_item
  102.  * 3. add sl_so_balance_invoice
  103.  * 4. add sl_so_balance_invoice_tax
  104.  * 5. update sl_so_balance_invoice untuk Do Id
  105.  * 6. update sl_so_balance_invoice_tax untuk Do Id
  106.  * 7. void sales invoice temporer untuk So Id
  107.  * 8. delete data sales invoice temporer dari fi_invoice_ar_balance dan fi_invoice_tax_ar_balance
  108.  * 9. add in_log_product_balance_stock
  109.  * 10. update in_product_balance_stock
  110.  * 11. update in_balance_do_item
  111.  * 12. update sl_so_balance_item - status dan qty
  112.  * 13. update status sl_so. Jika seluruh balance item sudah final/cancel, maka status menjadi Final.
  113.  * 14. add gl_journal_trx
  114.  * 15. add gl_journal_trx_item
  115.  * 16. add gl_journal_trx_mapping
  116.  *
  117.  */
  118.  
  119.     SELECT A.ref_id, f_get_ou_bu_structure(A.ou_id) AS ou, f_get_document_journal(A.doc_type_id) as doc
  120.     FROM in_do_receipt A
  121.     WHERE A.do_receipt_id = vDoReceiptId INTO result;
  122.  
  123.     vDoId := result.ref_id;
  124.     vOuStructure := result.ou;
  125.     vDocJournal := result.doc;
  126.  
  127.     SELECT ref_id INTO vSoId
  128.     FROM sl_do
  129.     WHERE do_id = vDoId;
  130.  
  131.     /*
  132.      * update status doc in_do_receipt menjadi Release
  133.      */
  134.     UPDATE in_do_receipt SET status_doc = vStatusRelease, version = version + 1, update_datetime = vDatetime, update_user_id = vUserId
  135.     WHERE do_receipt_id = vDoReceiptId;
  136.  
  137.     /*
  138.      * buat data log sl_log_so_balance_item
  139.      */
  140.     INSERT INTO sl_log_so_balance_item
  141.     (tenant_id, so_id, so_item_id, ref_doc_type_id, ref_id, ref_item_id,
  142.      qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  143.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  144.     SELECT A.tenant_id, C.so_id, C.so_item_id, A.doc_type_id, A.do_receipt_id, B.do_receipt_item_id,
  145.         B.qty_return * D.qty_so / D.qty_int, D.so_uom_id, B.qty_return, B.uom_id, B.remark,
  146.         0, vDatetime, vUserId, vDatetime, vUserId
  147.     FROM in_do_receipt A, in_do_receipt_item B, in_balance_do_item C, sl_so_item D
  148.     WHERE A.do_receipt_id = vDoReceiptId AND
  149.           A.do_receipt_id = B.do_receipt_id AND
  150.           B.ref_id = C.do_item_id AND
  151.           C.so_item_id = D.so_item_id AND
  152.           B.qty_return > 0;
  153.  
  154.     /*
  155.      * buat data sl_so_balance_Invoice
  156.      * supaya dapat ditarik saat buat sales invoice
  157.      */
  158.     INSERT INTO sl_so_balance_invoice
  159.         (tenant_id, ou_id, partner_id, so_id,
  160.         ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, ref_item_id, qty_dlv_so, so_uom_id,
  161.         curr_code, price_so, item_amount, flg_invoice, invoice_id,
  162.         regular_disc_amount, promo_disc_amount, adj_regular_disc_amount, adj_promo_disc_amount,
  163.         "version", create_datetime, create_user_id, update_datetime, update_user_id,
  164.         do_receipt_item_id, gross_sell_price_so, flg_tax_amount, tax_id, tax_percentage, discount_percentage, discount_amount)
  165.        
  166.     SELECT A.tenant_id, A.ou_id, G.partner_id, C.so_id,
  167.             A.ref_doc_type_id, A.ref_id, G.ref_doc_no, G.ref_doc_date, B.ref_id, -1 * B.qty_return * D.qty_so / D.qty_int, D.so_uom_id,
  168.             D.curr_code, G.price_so,
  169.             -1 * f_get_amount_before_tax_and_disc((B.qty_return * D.qty_so / D.qty_int) * G.gross_sell_price_so, (B.qty_return * D.qty_so / D.qty_int) * G.discount_amount, G.flg_tax_amount, G.tax_percentage, f_get_digit_decimal_doc_curr(vDoReceiptDocTypeId, D.curr_code), vRoundingModeNonTax),
  170.             vFlagInvoice, vEmptyId,
  171.             -1 * (G.discount_amount * (B.qty_return * D.qty_so / D.qty_int)),
  172.             0, 0, 0,
  173.             0, vDatetime, vUserId, vDatetime, vUserId,
  174.             B.do_receipt_item_id, G.gross_sell_price_so, G.flg_tax_amount, G.tax_id, G.tax_percentage, G.discount_percentage, G.discount_amount
  175.            
  176.     FROM in_do_receipt A, in_do_receipt_item B, in_balance_do_item C, sl_so_item D, sl_so_balance_invoice G
  177.     WHERE A.do_receipt_id = vDoReceiptId AND
  178.           A.do_receipt_id = B.do_receipt_id AND
  179.           B.ref_id = C.do_item_id AND
  180.           C.so_item_id = D.so_item_id AND
  181.           G.ref_doc_type_id = A.ref_doc_type_id AND
  182.           G.ref_id = A.ref_id AND
  183.           G.ref_item_id = B.ref_id AND
  184.           B.qty_return > 0 AND G.do_receipt_item_id = -99;
  185.          
  186.     /*
  187.      * buat data sl_so_balance_invoice_tax
  188.      * supaya dapat ditarik saat buat sales invoice
  189.      */
  190.     INSERT INTO sl_so_balance_invoice_tax
  191.     (tenant_id, ou_id, partner_id, so_id,
  192.     ref_doc_type_id, ref_id, ref_item_id, tax_id, flg_amount,
  193.     tax_percentage, curr_code, base_amount, tax_amount, flg_invoice, invoice_id,
  194.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  195.     do_receipt_item_id)
  196.     SELECT A.tenant_id, A.ou_id, G.partner_id, C.so_id,
  197.         A.ref_doc_type_id, A.ref_id, B.ref_id, G.tax_id, E.flg_amount,
  198.         D.tax_percentage, D.curr_code,
  199.         -1 * f_get_amount_before_tax_and_disc((B.qty_return * D.qty_so / D.qty_int) * G.gross_sell_price_so, (B.qty_return * D.qty_so / D.qty_int) * G.discount_amount, G.flg_tax_amount, G.tax_percentage, f_get_digit_decimal_doc_curr(vDoReceiptDocTypeId, D.curr_code), vRoundingModeNonTax),
  200.         -1 * f_tax_rounding(A.tenant_id, f_get_amount_before_tax((B.qty_return * D.qty_so / D.qty_int) * (G.gross_sell_price_so - G.discount_amount), G.flg_tax_amount, G.tax_percentage, f_get_digit_decimal_doc_curr(vDoReceiptDocTypeId, D.curr_code), vRoundingModeNonTax), G.tax_percentage),
  201.         vFlagInvoice, vEmptyId,
  202.         0, vDatetime, vUserId, vDatetime, vUserId,
  203.         B.do_receipt_item_id
  204.     FROM in_do_receipt A, in_do_receipt_item B, in_balance_do_item C, sl_so_item D, m_tax E, sl_so F, sl_so_balance_invoice G
  205.     WHERE A.do_receipt_id = vDoReceiptId AND
  206.           A.do_receipt_id = B.do_receipt_id AND
  207.           B.ref_id = C.do_item_id AND
  208.           C.so_item_id = D.so_item_id AND
  209.           G.tax_id = E.tax_id AND
  210.           D.so_id = F.so_id AND
  211.           B.qty_return > 0 AND
  212.          
  213.           G.ref_doc_type_id = A.ref_doc_type_id AND
  214.           G.ref_id = A.ref_id AND
  215.           G.ref_item_id = B.ref_id AND
  216.           G.do_receipt_item_id = -99;
  217.           /*
  218.           G.do_id = vDoId AND
  219.           G.do_id = H.do_id AND
  220.           H.ref_id = D.so_item_id AND
  221.           D.tax_id = E.tax_id AND
  222.           D.so_id = F.so_id;
  223.           */
  224.          
  225.          
  226.          
  227.  
  228.     /*
  229.      * update sl_so_balance_invoice, dan sl_so_balance_invoice_tax
  230.      * yang sudah dibuat oleh sales invoice temporer
  231.      */
  232.     UPDATE sl_so_balance_invoice SET flg_invoice = vFlagInvoice, flg_invoice_temp = vFlagInvoice, invoice_id = vEmptyId
  233.     WHERE ref_id = vDoId AND
  234.         ref_doc_type_id = vDoDocTypeId;
  235.  
  236.     UPDATE sl_so_balance_invoice_tax SET flg_invoice = vFlagInvoice, invoice_id = vEmptyId
  237.     WHERE ref_id = vDoId AND
  238.         ref_doc_type_id = vDoDocTypeId;
  239.  
  240.     /*
  241.      * void data sales invoice temporer yang menggunakan DO Item id yang sama dng Do Receipt :
  242.      * 1. cari invoice temp id yang memiliki data DO Item yang sama dengan DO Receipt
  243.      * 2. update status doc invoice temp sesuai id yang diperoleh di langkah ke 1
  244.      */
  245.     SELECT A.invoice_temp_id INTO vSlsInvTempId
  246.     FROM sl_invoice_temp_item A, in_do_receipt_item B, in_do_receipt C, sl_invoice_temp D
  247.     WHERE A.ref_doc_type_id = B.ref_doc_type_id AND
  248.         A.ref_id = vDoId AND
  249.         A.ref_item_id = B.ref_id AND
  250.         B.do_receipt_id = C.do_receipt_id AND
  251.         C.ref_id = A.ref_id AND
  252.         B.do_receipt_id = vDoReceiptId AND
  253.         A.invoice_temp_id = D.invoice_temp_id AND
  254.         D.status_doc <> vStatusVoid;
  255.  
  256.     UPDATE sl_invoice_temp SET status_doc = vStatusVoid, update_datetime = vDatetime, update_user_id = vUserId
  257.     WHERE invoice_temp_id = vSlsInvTempId;
  258.  
  259.     /*
  260.      * advance invoice  harus diupdate juga supaya bisa dipakai lagi
  261.      */
  262.     UPDATE sl_so_balance_advance_invoice B SET flg_invoice = vFlagInvoice, flg_invoice_temp = vFlagInvoice, invoice_id = vEmptyId
  263.     WHERE B.so_id = vSoId
  264.     AND EXISTS (
  265.         SELECT 1 FROM sl_invoice_temp_advance A
  266.         WHERE A.ref_id = B.ref_id
  267.         AND A.ref_doc_type_id = B.ref_doc_type_id
  268.         AND A.invoice_temp_id = vSlsInvTempId
  269.     );
  270.  
  271.     /*
  272.      * nomor faktur pajak boleh digunakan kembali untuk temp sales invoice yang di void gara2 DO Receipt
  273.      *
  274.      */
  275.     UPDATE m_gen_tax_number A
  276.     SET invoice_id = vEmptyId, invoice_doc_type_id = vEmptyId, invoice_doc_no = vEmptyValue, invoice_doc_date = vEmptyValue
  277.     FROM sl_invoice_temp B
  278.     WHERE A.invoice_doc_no = B.inv_doc_no
  279.     AND A.invoice_doc_date = B.inv_doc_date
  280.     AND A.invoice_doc_type_id = B.doc_type_id
  281.     AND A.invoice_id = vSlsInvTempId
  282.     AND B.invoice_temp_id = vSlsInvTempId;
  283.  
  284.     /*
  285.      * Ambil nomor dokumen SI untuk dilakukan pengecekan SI masiih ada/tidak
  286.      */
  287.      SELECT A.doc_no INTO vDocNoSI
  288.      FROM sl_invoice A, sl_invoice_temp B
  289.      WHERE B.invoice_temp_id = vSlsInvTempId
  290.         AND A.doc_no = B.inv_doc_no;
  291.  
  292.      IF vDocNoSI IS NULL THEN
  293.  
  294.         /*
  295.          * nomor dokumen SI boleh digunakan kembali untuk temp sales invoice yang di void gara2 DO Receipt
  296.          *
  297.          */
  298.         UPDATE autonum_generated A
  299.         SET flg_unused = vYes
  300.         FROM sl_invoice_temp B
  301.         WHERE A.value_auto_num = B.inv_doc_no
  302.         AND B.invoice_temp_id = vSlsInvTempId;
  303.  
  304.         /*
  305.          * ambil id autonum
  306.          */
  307.          SELECT A.autonum_generated_id INTO vAutoNumId
  308.          FROM autonum_generated A, sl_invoice_temp B
  309.          WHERE A.value_auto_num = B.inv_doc_no
  310.          AND B.invoice_temp_id = vSlsInvTempId;
  311.  
  312.         /*
  313.          * delete autonum_ref_mapping berdasarkan variable autonumId yg sudah diambil sebelumnya
  314.          */
  315.          IF vAutoNumId IS NOT NULL THEN
  316.          DELETE FROM autonum_ref_mapping WHERE autonum_generated_id = vAutoNumId;
  317.          END IF;
  318.  
  319.      END IF;
  320.  
  321.     /*
  322.      * delete data sales invoice temporer dari fi_invoice_ar_balance dan fi_invoice_tax_ar_balance
  323.      */
  324.    
  325.     DELETE FROM fi_invoice_tax_ar_balance A
  326.     WHERE A.tenant_id = pTenantId AND
  327.     EXISTS (
  328.         SELECT 1 FROM fi_invoice_ar_balance B
  329.         WHERE A.tenant_id = B.tenant_id
  330.         AND A.invoice_ar_balance_id = B.invoice_ar_balance_id
  331.         AND B.doc_type_id = vSlsInvTempDocTypeId
  332.         AND B.invoice_ar_id = vSlsInvTempId
  333.     );
  334.    
  335.     DELETE FROM fi_invoice_ar_balance A
  336.     WHERE A.tenant_id = pTenantId AND
  337.           A.doc_type_id = vSlsInvTempDocTypeId AND
  338.           A.invoice_ar_id = vSlsInvTempId;
  339.    
  340.    
  341.     /*
  342.      * buat data log product balance stock
  343.      * ref item id = do_receipt_id
  344.      */      
  345.     INSERT INTO in_log_product_balance_stock
  346.     (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  347.      product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
  348.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  349.     SELECT A.tenant_id, E.ou_id, A.doc_type_id, A.do_receipt_id, A.doc_no, A.doc_date, D.partner_ship_to_id,
  350.         C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.uom_id, SUM(C.qty_return),
  351.         0, vDatetime, vUserId, vDatetime, vUserId      
  352.     FROM in_do_receipt A, in_do_receipt_item B, in_do_receipt_product C, sl_do D, m_warehouse_ou E
  353.     WHERE A.do_receipt_id = vDoReceiptId AND
  354.         A.do_receipt_id = B.do_receipt_id AND
  355.         B.do_receipt_item_id = C.do_receipt_item_id AND
  356.         A.ref_id = D.do_id AND
  357.         A.warehouse_id = E.warehouse_id
  358.     GROUP BY A.tenant_id, E.ou_id, A.doc_type_id, A.do_receipt_id, A.doc_no, A.doc_date, D.partner_ship_to_id,
  359.             C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.uom_id;
  360.  
  361.     /*
  362.      * update in_product_balance_stock
  363.      * mod by Didit, 30 Des 2016
  364.      * perbaiki jika ada 1 produk yang sama (product dan product balance) tapi ada lebih dari 1 record di tabel itemnya akan menjadi salah
  365.      */
  366.     WITH tt_in_product_balance_summary AS (
  367.         SELECT  C.product_id, C.tenant_id, A.warehouse_id, C.product_balance_id, C.product_status, SUM(C.qty_return) AS qty_return
  368.         FROM    in_do_receipt A, in_do_receipt_item B, in_do_receipt_product C
  369.         WHERE   A.do_receipt_id = vDoReceiptId
  370.                 AND A.do_receipt_id = B.do_receipt_id
  371.                 AND B.do_receipt_item_id = C.do_receipt_item_id
  372.                 AND C.qty_return > 0
  373.         GROUP BY C.product_id, C.tenant_id, A.warehouse_id, C.product_balance_id, C.product_status
  374.     )
  375.     UPDATE in_product_balance_stock SET qty = qty + A.qty_return, update_datetime = vDatetime, update_user_id = vUserId, version = version + 1
  376.     FROM tt_in_product_balance_summary A
  377.     WHERE in_product_balance_stock.product_id = A.product_id AND
  378.         in_product_balance_stock.tenant_id = A.tenant_id AND
  379.         in_product_balance_stock.warehouse_id = A.warehouse_id AND
  380.         in_product_balance_stock.product_balance_id = A.product_balance_id AND
  381.         in_product_balance_stock.product_status = A.product_status;
  382.            
  383.     /*
  384.      * update data balance do item sehubungan dengan product yang dikembalian/tidak diterima oleh customer,
  385.      * sehingga saat akan membuat return note, hanya barang yang memang diterima oleh customer
  386.      */
  387.     UPDATE in_balance_do_item SET qty_dlv_int = qty_dlv_int - A.qty_return,
  388.                                 qty_dlv = in_balance_do_item.qty_dlv - (A.qty_return * in_balance_do_item.qty_dlv / in_balance_do_item.qty_dlv_int),
  389.                                 status_item = vStatusRelease, update_datetime = vDatetime, update_user_id = vUserId
  390.     FROM in_do_receipt_item A
  391.     WHERE A.do_receipt_id = vDoReceiptId AND
  392.         in_balance_do_item.do_item_id = A.ref_id AND
  393.         A.qty_return > 0;
  394.        
  395.     UPDATE in_balance_do_item
  396.     SET status_item = vStatusRelease,
  397.         update_datetime = vDatetime,
  398.         update_user_id = vUserId
  399.     FROM in_do_receipt A
  400.     WHERE A.do_receipt_id = vDoReceiptId AND
  401.         in_balance_do_item.do_id = A.ref_id AND
  402.         A.ref_doc_type_id = vDoDocTypeId;
  403.        
  404.     /*
  405.      * update status SO seperti semula
  406.      */
  407.     UPDATE sl_so
  408.     SET status_doc = flg_old_status,
  409.         flg_old_status = vEmptyValue,
  410.         update_datetime = vDatetime,
  411.         update_user_id = vUserId,
  412.         version = version + 1
  413.     WHERE so_id = vSoId;
  414.    
  415.     /*
  416.      * update flg invoice so balance inv
  417.      */
  418.     UPDATE sl_so_balance_invoice
  419.     SET flg_invoice = vNo,
  420.         update_datetime = vDatetime,
  421.         update_user_id = vUserId,
  422.         version = version + 1
  423.     WHERE so_id = vSoId
  424.         AND ref_id = vDoId;
  425.    
  426.     /*
  427.      * update status so balance item
  428.      */
  429.     UPDATE sl_so_balance_item B
  430.     SET status_item = B.flg_old_status,
  431.         flg_old_status = vEmptyValue,
  432.         update_datetime = vDatetime,
  433.         update_user_id = vUserId,
  434.         version = B.version + 1
  435.     FROM sl_so A
  436.     INNER JOIN sl_so_item C ON A.so_id = C.so_id
  437.     INNER JOIN sl_do_item D ON D.ref_id = C.so_item_id
  438.     WHERE B.so_item_id = C.so_item_id
  439.         AND A.so_id = vSoId
  440.         AND D.do_id = vDoId;
  441.        
  442.     /*
  443.      * status item SO akan berubah menjadi Release, karena ada nya barang yang dikembalikan oleh customer
  444.      */    
  445.     UPDATE sl_so_balance_item SET qty_dlv = sl_so_balance_item.qty_dlv - (A.qty_return * sl_so_balance_item.qty_so / sl_so_balance_item.qty_so_int),
  446.                                 qty_dlv_int = sl_so_balance_item.qty_dlv_int - A.qty_return,
  447.                                 status_item = vStatusRelease
  448.     FROM in_do_receipt_item A, in_balance_do_item B
  449.     WHERE A.do_receipt_id = vDoReceiptId AND
  450.         A.ref_id = B.do_item_id AND
  451.         sl_so_balance_item.so_item_id = B.so_item_id AND
  452.         A.qty_return > 0;
  453.        
  454.     UPDATE sl_so SET status_doc = vStatusRelease
  455.     WHERE so_id = vSoId;   
  456.        
  457.     /*
  458.      * @author TKP, 9 Jun 2016
  459.      * Cek jika OU pada warehouse sama dengan OU pada dokumen maka nilai ou_bu_id dan ou_sub_bu_id =-99
  460.      * 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;
  461.      */
  462.    
  463.     SELECT A.ou_id, B.ou_id INTO vOuId, vOuWarehouseId
  464.     FROM in_do_receipt A
  465.     INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  466.     WHERE A.do_receipt_id = vDoReceiptId;
  467.    
  468.     IF (vOuId <> vOuWarehouseId) THEN
  469.         SELECT f_get_ou_bu_structure(vOuWarehouseId) as ou_structure INTO result;
  470.         vOuStructureJournalItem := result.ou_structure;
  471.     ELSE
  472.         vOuStructureJournalItem := ROW(-99, -99, -99);
  473.     END IF;
  474.    
  475.     /*
  476.      * membuat data transaksi jurnal :
  477.      * 1. buat admin
  478.      * 2. buat temlate jurnal
  479.      */
  480.  
  481.     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), 'MONTHLY', vDatetime, vUserId)
  482.     FROM in_do_receipt A
  483.     WHERE A.do_receipt_id = vDoReceiptId;
  484.    
  485.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  486.    
  487.     INSERT INTO gl_journal_trx
  488.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  489.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  490.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  491.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  492.     SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.do_receipt_id, A.doc_no, A.doc_date,
  493.         (vOuStructure).ou_bu_id, (vOuStructure).ou_branch_id, (vOuStructure).ou_sub_bu_id, B.partner_ship_to_id, vEmptyId, A.warehouse_id, A.ext_doc_no, A.ext_doc_date,
  494.         A.ref_doc_type_id, A.ref_id, A.doc_date, C.curr_code, A.remark, vStatusDraft, 'DRAFT',
  495.         0, vDatetime, vUserId, vDatetime, vUserId
  496.     FROM in_do_receipt A, sl_do B, sl_so C
  497.     WHERE A.do_receipt_id = vDoReceiptId AND
  498.         A.ref_id = B.do_id AND
  499.         B.ref_id = C.so_id;
  500.    
  501.     INSERT INTO tt_journal_trx_item
  502.     (session_id, tenant_id, journal_trx_id, line_no,
  503.     ref_doc_type_id, ref_id,
  504.     partner_id, product_id, cashbank_id, ou_rc_id,
  505.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  506.     coa_id, curr_code, qty, uom_id,
  507.     amount, journal_date, type_rate,
  508.     numerator_rate, denominator_rate, journal_desc, remark)
  509.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  510.         A.doc_type_id, B.do_receipt_item_id,
  511.         C.partner_ship_to_id, B.product_id, vEmptyId, vEmptyId,
  512.         vEmptyId, vSignDebit, vProductCOA, vEmptyId,
  513.         f_get_product_coa_group_product(A.tenant_id, B.product_id), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), B.qty_return, B.uom_id,
  514.         0, A.doc_date, vTypeRate,
  515.         1, 1, 'PRODUCT_STOCK', B.remark
  516.     FROM in_do_receipt A, in_do_receipt_item B, sl_do C
  517.     WHERE A.do_receipt_id = vDoReceiptId AND
  518.         A.do_receipt_id = B.do_receipt_id AND
  519.         A.ref_id = C.do_id;
  520.        
  521.     INSERT INTO gl_journal_trx_item
  522.     (tenant_id, journal_trx_id, line_no,
  523.     ref_doc_type_id, ref_id,
  524.     partner_id, product_id, cashbank_id, ou_rc_id,
  525.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  526.     coa_id, curr_code, qty, uom_id,
  527.     amount, journal_date, type_rate,
  528.     numerator_rate, denominator_rate, journal_desc, remark,
  529.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  530.     ou_branch_id, ou_sub_bu_id)
  531.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  532.         A.ref_doc_type_id, A.ref_id,
  533.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  534.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  535.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  536.         A.amount, A.journal_date, A.type_rate,
  537.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  538.         0, vDatetime, vUserId, vDatetime, vUserId,
  539.         (vOuStructureJournalItem).ou_branch_id, (vOuStructureJournalItem).ou_sub_bu_id
  540.     FROM tt_journal_trx_item A
  541.     WHERE A.session_id = pSessionId;
  542.    
  543.     INSERT INTO gl_journal_trx_mapping
  544.     (tenant_id, journal_trx_id, line_no,
  545.     ref_doc_type_id, ref_id,
  546.     partner_id, product_id, cashbank_id, ou_rc_id,
  547.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  548.     coa_id, curr_code, qty, uom_id,
  549.     amount, journal_date, type_rate,
  550.     numerator_rate, denominator_rate, journal_desc, remark,
  551.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  552.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  553.         A.ref_doc_type_id, A.ref_id,
  554.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  555.         A.segmen_id, vSignCredit, A.flg_source_coa, A.activity_gl_id,
  556.         f_get_system_coa_by_group_coa(A.tenant_id, 'PersediaanInTransit'), A.curr_code, A.qty, A.uom_id,
  557.         A.amount, A.journal_date, A.type_rate,
  558.         A.numerator_rate, A.denominator_rate, 'PRODUCT_STOCK_IN_TRANSIT', A.remark,
  559.         0, vDatetime, vUserId, vDatetime, vUserId
  560.     FROM tt_journal_trx_item A
  561.     WHERE A.session_id = pSessionId;
  562.        
  563.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId; 
  564. END;   
  565. $BODY$
  566.   LANGUAGE plpgsql VOLATILE
  567.   COST 100;
  568.   /
  569.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement