Advertisement
aadddrr

in_cancel_submit_claim_note

Jul 3rd, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Adrian, Jan 27, 2017
  2. --Modified by Adrian, Jul 4, 2017, menambahkan hapus in_log_product_balance_stock
  3.  
  4. CREATE OR REPLACE FUNCTION in_cancel_submit_claim_note(bigint, character varying, bigint, character varying, bigint, character varying, character varying)
  5.   RETURNS void AS
  6. $BODY$
  7. DECLARE
  8.     pTenantId                           ALIAS FOR $1;
  9.     pSessionId                          ALIAS FOR $2;
  10.     pUserId                             ALIAS FOR $3;
  11.     pDatetime                           ALIAS FOR $4;
  12.     pClaimNoteId                        ALIAS FOR $5;
  13.     pRemarkApproval                     ALIAS FOR $6;
  14.     pPrevProcessNo                      ALIAS FOR $7;
  15.    
  16.     vClaimNoteDocTypeId                 bigint;
  17.     vEmptyId                            bigint;
  18.     vFunctionSubmit                     character varying;
  19.     vStatusDocRelease                   character varying;
  20.     vStatusDocDraft                     character varying;
  21.     vWorkflowStatusDraft                character varying;
  22.     vInventoryLedgerCode                character varying;
  23.     vStatusLedgerNotDone                character varying;
  24.    
  25.     vOuId                               bigint;
  26.     vJournalTrxId                       bigint;
  27.     vDocNo                              character varying;
  28.     vDocDate                            character varying;
  29.     vScheme                             character varying;
  30.    
  31.     vDocJournal                         DOC_JOURNAL%ROWTYPE;
  32.     vOuStructure                        OU_BU_STRUCTURE%ROWTYPE;
  33.     result                              RECORD;
  34.    
  35.     vStatusInProgress                   character varying;
  36.     vYes                                character varying;
  37.    
  38. BEGIN
  39.    
  40.     vClaimNoteDocTypeId := 511;
  41.     vEmptyId := -99;
  42.     vFunctionSubmit := 'in_submit_claim_note';     
  43.     vStatusDocRelease := 'R';  
  44.     vStatusDocDraft := 'D';
  45.     vWorkflowStatusDraft := 'DRAFT';
  46.     vInventoryLedgerCode := 'INV';
  47.     vStatusLedgerNotDone := '0';
  48.    
  49.     vStatusInProgress := 'I';
  50.     vYes := 'Y';
  51.  
  52.     --RAISE EXCEPTION 'Function Submit For Document Claim Note';
  53.    
  54.     -- get data
  55.     select f_get_ou_bu_structure(A.ou_from_id) AS ou, A.ou_from_id, A.doc_no, A.doc_date,
  56.             f_get_document_journal(A.doc_type_id) as doc, C.scheme
  57.     FROM in_inventory A, in_inventory_item B, m_document C
  58.     WHERE A.inventory_id = B.inventory_id AND
  59.         A.doc_type_id = C.doc_type_id AND
  60.         A.inventory_id = pClaimNoteId AND
  61.         A.doc_type_id = vClaimNoteDocTypeId
  62.         AND A.status_doc = vStatusDocRelease INTO result;
  63.    
  64.     IF FOUND THEN
  65.         vOuStructure := result.ou;
  66.         vOuId := result.ou_from_id;
  67.         vDocNo := result.doc_no;
  68.         vDocDate := result.doc_date;
  69.         vDocJournal := result.doc;
  70.         vScheme := result.scheme;  
  71.    
  72.         -- Cek status ledger not yet closed
  73.         IF EXISTS (
  74.             SELECT 1
  75.             FROM m_admin_process_ledger e, m_ou_structure f, t_ou g
  76.             WHERE e.tenant_id = pTenantId
  77.                 AND e.ou_id = f.ou_bu_id
  78.                 AND f.ou_id = vOuId
  79.                 AND e.date_year_month = SUBSTR(vDocDate, 1, 6)
  80.                 AND e.ledger_code = vInventoryLedgerCode AND
  81.                 f.ou_id = g.ou_id AND e.status_ledger = vStatusLedgerNotDone) THEN
  82.            
  83.             DELETE FROM tt_in_po_balance_item WHERE session_id = pSessionId;
  84.            
  85.             /*
  86.              * insert data temporer tt_in_po_balance_item
  87.              */
  88.             INSERT INTO tt_in_po_balance_item
  89.             (session_id, tenant_id, ou_id, doc_type_id,
  90.             doc_no, doc_date, inventory_id, partner_id,
  91.             inventory_item_id, po_id, receive_goods_id, receive_goods_item_id,
  92.             qty_return, base_uom_id, remark,
  93.             po_item_id, curr_code, price,
  94.             flg_tax_amount, qty_po, qty_int_po,
  95.             po_uom_id, tax_id, tax_percentage)
  96.             SELECT pSessionId, A.tenant_id, A.ou_from_id, A.doc_type_id,
  97.                     A.doc_no, A.doc_date, A.inventory_id, A.partner_id,
  98.                     B.inventory_item_id, A.ref_id, B.ref_id, B.ref_item_id,
  99.                     SUM(B.qty_realization), B.base_uom_id, A.remark,
  100.                     D.po_item_id, D.curr_code, D.gross_price_po - D.discount_amount,
  101.                     D.flg_tax_amount, D.qty_po, D.qty_int,
  102.                     D.po_uom_id, D.tax_id, D.tax_percentage
  103.             FROM in_inventory A, in_inventory_item B, in_balance_receive_goods_item C, pu_po_item D
  104.             WHERE A.inventory_id = pClaimNoteId AND
  105.                   A.inventory_id = B.inventory_id AND
  106.                   B.ref_item_id = C.receive_goods_item_id AND
  107.                   C.po_item_id = D.po_item_id
  108.             GROUP BY A.tenant_id, A.ou_from_id, A.doc_type_id,
  109.                     A.doc_no, A.doc_date, A.inventory_id, A.partner_id,
  110.                     B.inventory_item_id, A.ref_id, B.ref_id, B.ref_item_id,
  111.                     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 ;
  112.                    
  113.             /*
  114.              * validasi belum dibuatkan invoice
  115.              */
  116.             IF NOT EXISTS (
  117.                 SELECT (1) FROM tt_in_po_balance_item B, pu_po_balance_invoice A
  118.                 WHERE A.tenant_id = B.tenant_id
  119.                     AND A.ou_id = B.ou_id
  120.                     AND A.po_id = B.po_id
  121.                     AND A.ref_doc_type_id = B.doc_type_id
  122.                     AND A.ref_id = B.inventory_id
  123.                     AND A.ref_item_id = B.receive_goods_item_id
  124.                     AND A.flg_invoice = vYes) THEN
  125.                    
  126.                 /*
  127.                  * validasi status pu_po_balance_item bukan 'I'
  128.                  */
  129.                 IF NOT EXISTS (
  130.                     SELECT (1) FROM pu_po_balance_item B, tt_in_po_balance_item A
  131.                     WHERE A.session_id = pSessionId AND
  132.                         B.po_item_id = A.po_item_id AND
  133.                         B.status_item = vStatusInProgress) THEN
  134.                        
  135.                     /*
  136.                      * validasi status in_balance_receive_goods_item bukan 'I'
  137.                      */
  138.                     IF NOT EXISTS (
  139.                         SELECT (1) FROM in_balance_receive_goods_item B, tt_in_po_balance_item A
  140.                         WHERE A.session_id = pSessionId AND
  141.                             B.receive_goods_item_id = A.receive_goods_item_id AND
  142.                             B.status_item = vStatusInProgress) THEN
  143.            
  144.                         /*
  145.                          * hapus data log product balance stock
  146.                          */      
  147.                         WITH grouped_in_inventory_item AS (
  148.                             SELECT A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  149.                             B.product_id, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id, (SUM(B.qty_realization) * -1) AS qty
  150.                             FROM in_inventory A, in_inventory_item B, m_warehouse_ou C
  151.                             WHERE A.inventory_id = pClaimNoteId AND
  152.                                 A.inventory_id = B.inventory_id AND
  153.                                 C.warehouse_id = A.warehouse_from_id
  154.                             GROUP BY A.tenant_id, C.ou_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  155.                                 B.product_id, B.product_balance_id, A.warehouse_from_id, B.product_status, B.base_uom_id
  156.                         )
  157.                         DELETE
  158.                         FROM in_log_product_balance_stock Z
  159.                         WHERE EXISTS (
  160.                             SELECT (1)
  161.                             FROM grouped_in_inventory_item A
  162.                             WHERE Z.tenant_id = A.tenant_id
  163.                                 AND Z.ou_id = A.ou_id
  164.                                 AND Z.doc_type_id = A.doc_type_id
  165.                                 AND Z.ref_id = A.inventory_id
  166.                                 AND Z.doc_no = A.doc_no
  167.                                 AND Z.doc_date = A.doc_date
  168.                                 AND Z.partner_id = A.partner_id
  169.                                 AND Z.product_id = A.product_id
  170.                                 AND Z.product_balance_id = A.product_balance_id
  171.                                 AND Z.warehouse_id = A.warehouse_from_id
  172.                                 AND Z.product_status = A.product_status
  173.                                 AND Z.base_uom_id = A.base_uom_id
  174.                                 AND Z.qty = A.qty
  175.                         )
  176.            
  177.                         /*
  178.                          * update qty return di data pu_po_balance_item
  179.                          */        
  180.                         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 = pDatetime, update_user_id = pUserId
  181.                         FROM tt_in_po_balance_item A
  182.                         WHERE A.session_id = pSessionId AND
  183.                             pu_po_balance_item.po_item_id = A.po_item_id;
  184.                            
  185.                         /*
  186.                          * delete data pu_log_po_balance_item
  187.                          */
  188.                         DELETE FROM pu_log_po_balance_item A
  189.                         WHERE EXISTS(
  190.                             SELECT (1) FROM tt_in_po_balance_item B
  191.                             WHERE A.tenant_id = B.tenant_id
  192.                                 AND A.po_id = B.po_id
  193.                                 AND A.po_item_id = B.po_item_id
  194.                                 AND A.ref_doc_type_id = B.doc_type_id
  195.                                 AND A.ref_id = B.inventory_id
  196.                                 AND A.ref_item_id = B.inventory_item_id
  197.                                 AND A.qty_trx = ((B.qty_return * B.qty_po) / B.qty_int_po )
  198.                                 AND A.trx_uom_id = B.po_uom_id
  199.                                 AND A.qty_int = B.qty_return
  200.                                 AND A.base_uom_id = B.base_uom_id
  201.                                 AND A.remark = B.remark
  202.                         );
  203.                            
  204.                         /*
  205.                          * delete data pu_po_balance_invoice
  206.                          */
  207.                         DELETE FROM pu_po_balance_invoice A
  208.                         WHERE EXISTS(
  209.                             SELECT (1) FROM tt_in_po_balance_item B
  210.                             WHERE A.tenant_id = B.tenant_id
  211.                                 AND A.ou_id = B.ou_id
  212.                                 AND A.po_id = B.po_id
  213.                                 AND A.ref_doc_type_id = B.doc_type_id
  214.                                 AND A.ref_id = B.inventory_id
  215.                                 AND A.ref_item_id = B.receive_goods_item_id
  216.                         );
  217.                        
  218.                        
  219.                         /*
  220.                          * delete data pu_po_balance_invoice_tax
  221.                          */
  222.                         DELETE FROM pu_po_balance_invoice_tax A
  223.                         WHERE EXISTS(
  224.                             SELECT (1) FROM tt_in_po_balance_item B, m_tax C
  225.                             WHERE B.tax_id = C.tax_id AND
  226.                                 A.tenant_id = B.tenant_id AND
  227.                                 A.ou_id = B.ou_id AND
  228.                                 A.po_id = B.po_id AND
  229.                                 A.ref_doc_type_id = B.doc_type_id AND
  230.                                 A.ref_id = B.inventory_id AND
  231.                                 A.ref_item_id = B.receive_goods_item_id AND
  232.                                 A.tax_id = C.tax_id
  233.                         );
  234.                        
  235.                         UPDATE in_balance_receive_goods_item SET status_item = vStatusInProgress
  236.                         FROM tt_in_po_balance_item A
  237.                         WHERE A.session_id = pSessionId AND
  238.                             in_balance_receive_goods_item.receive_goods_item_id = A.receive_goods_item_id;
  239.                        
  240.                        
  241.                         -- Update in_inventory, set doc_status to DRAFT
  242.                         UPDATE in_inventory
  243.                         SET status_doc = vStatusDocDraft,
  244.                             workflow_status = vWorkflowStatusDraft,
  245.                             version = version + 1,
  246.                             update_datetime = pDatetime,
  247.                             update_user_id = pUserId
  248.                         WHERE inventory_id = pClaimNoteId;
  249.                        
  250.                        
  251.                         -- PERFORM cancel gl_cancel_admin_journal_trx
  252.                         PERFORM gl_cancel_admin_journal_trx(pTenantId, (vOuStructure).ou_bu_id, vOuId, (vDocJournal).journal_type, f_get_year_month_date(vDocDate), 'MONTHLY', pDatetime, pUserId);
  253.                        
  254.                         -- Find journal trx id
  255.                         SELECT journal_trx_id INTO vJournalTrxId
  256.                         FROM gl_journal_trx
  257.                         WHERE tenant_id = pTenantId
  258.                             AND journal_type = (vDocJournal).journal_type
  259.                             AND doc_type_id = vClaimNoteDocTypeId
  260.                             AND doc_id = pClaimNoteId
  261.                             AND doc_no = vDocNo
  262.                             AND doc_date = vDocDate
  263.                             AND ou_bu_id = (vOuStructure).ou_bu_id
  264.                             AND ou_branch_id = (vOuStructure).ou_branch_id
  265.                             AND ou_sub_bu_id = (vOuStructure).ou_sub_bu_id;
  266.                        
  267.                         -- DELETE gl_journal_trx
  268.                         DELETE FROM gl_journal_trx
  269.                         WHERE journal_trx_id = vJournalTrxId;
  270.                        
  271.                         -- DELETE gl_journal_trx_item
  272.                         DELETE FROM gl_journal_trx_item
  273.                         WHERE journal_trx_id = vJournalTrxId;
  274.                
  275.                         -- DELETE gl_journal_trx_mapping
  276.                         DELETE FROM gl_journal_trx_mapping
  277.                         WHERE journal_trx_id = vJournalTrxId;
  278.                        
  279.                         -- PERFORM f_reset_approval_to_draft
  280.                         PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pClaimNoteId, vDocNo, pDatetime, pRemarkApproval);
  281.                            
  282.                         -- UPDATE t_process_message
  283.                         UPDATE t_process_message
  284.                         SET process_no = pPrevProcessNo,
  285.                             update_datetime = pDatetime,
  286.                             update_user_id = pUserId,
  287.                             version = version + 1
  288.                         WHERE tenant_id = pTenantId
  289.                             AND process_name = vFunctionSubmit
  290.                             AND process_no = pClaimNoteId || '_' || vDocNo;
  291.                        
  292.                         DELETE FROM tt_in_po_balance_item WHERE session_id = pSessionId;
  293.        
  294.                     ELSE
  295.                         RAISE EXCEPTION 'Document with id % has a final item', pClaimNoteId;
  296.                     END IF;
  297.                        
  298.                 ELSE
  299.                     RAISE EXCEPTION 'Document with id % has a final item', pClaimNoteId;
  300.                 END IF;
  301.                    
  302.             ELSE
  303.                 RAISE EXCEPTION 'Document with id % is already used in Purchasing Invoice', pClaimNoteId;
  304.             END IF;
  305.                
  306.         ELSE
  307.             RAISE EXCEPTION 'Admin Process Ledger for Inventory in year month % is already closed', SUBSTR(vDocDate, 1, 6);
  308.         END IF;
  309.        
  310.     ELSE
  311.         RAISE EXCEPTION 'Document with id % is not found or document is on approval progress', pClaimNoteId;
  312.     END IF;
  313.    
  314. END;
  315. $BODY$
  316.   LANGUAGE plpgsql VOLATILE
  317.   COST 100;
  318.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement