Advertisement
aadddrr

pu_cancel_submit_po

Aug 28th, 2017
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Adrian, Aug 25, 2017
  2.  
  3. CREATE OR REPLACE FUNCTION pu_cancel_submit_po(bigint, character varying, bigint, character varying, bigint, character varying, character varying)
  4.   RETURNS void AS
  5. $BODY$
  6. DECLARE
  7.     pTenantId                           ALIAS FOR $1;
  8.     pSessionId                          ALIAS FOR $2;
  9.     pUserId                             ALIAS FOR $3;
  10.     pDatetime                           ALIAS FOR $4;
  11.     pPurchaseOrderId                    ALIAS FOR $5;
  12.     pRemarkApproval                     ALIAS FOR $6;
  13.     pPrevProcessNo                      ALIAS FOR $7;
  14.    
  15.     vPurchaseOrderDocTypeId             bigint;
  16.     vFunctionSubmit                     character varying;
  17.     vStatusDocReleased                  character varying;
  18.     vStatusDocDraft                     character varying;
  19.     vStatusDocInProgress                character varying;
  20.     vStatusFinal                        character varying;
  21.     vWorkflowStatusDraft                character varying;
  22.     vEmptyId                            bigint;
  23.     vZero                               bigint;
  24.    
  25.     vOuId                               bigint;
  26.     vDocNo                              character varying;
  27.     vDocDate                            character varying;
  28.     vScheme                             character varying;
  29.    
  30.     result                              RECORD;
  31.    
  32. BEGIN
  33.    
  34.     vPurchaseOrderDocTypeId := 101;
  35.     vFunctionSubmit := 'pu_submit_po';
  36.     vStatusDocReleased := 'R';
  37.     vStatusDocDraft := 'D';
  38.     vStatusDocInProgress := 'I';
  39.     vStatusFinal := 'F';
  40.     vWorkflowStatusDraft := 'DRAFT';
  41.     vEmptyId := -99;
  42.     vZero := 0;
  43.  
  44.     --RAISE EXCEPTION 'Function Cancel Submit is not yet Created';
  45.    
  46.     -- get data
  47.     select A.ou_id, A.doc_no, A.doc_date, B.scheme
  48.     FROM pu_po A, m_document B
  49.     WHERE A.doc_type_id = B.doc_type_id AND
  50.         A.po_id = pPurchaseOrderId AND
  51.         A.doc_type_id = vPurchaseOrderDocTypeId
  52.         AND A.status_doc = vStatusDocReleased INTO result;
  53.    
  54.     IF FOUND THEN
  55.         vOuId := result.ou_id;
  56.         vDocNo := result.doc_no;
  57.         vDocDate := result.doc_date;
  58.         vScheme := result.scheme;  
  59.        
  60.         /*
  61.          * validasi belum digunakan oleh dokumen lain
  62.          */
  63.         IF NOT EXISTS (
  64.             SELECT (1) FROM pu_po_balance_item B, pu_po_item A
  65.             WHERE A.po_id = pPurchaseOrderId
  66.                 AND B.po_item_id = A.po_item_id
  67.                 AND (
  68.                     (B.qty_rcv + B.qty_return + B.qty_cancel + B.qty_add) > vZero
  69.                     OR B.status_item NOT IN (vStatusDocReleased)
  70.                 )
  71.             ) THEN
  72.    
  73.             /*
  74.              * validasi belum digunakan oleh dokumen lain
  75.              */
  76.             IF NOT EXISTS (
  77.                 SELECT (1) FROM sl_so_po_balance_item B, pu_po_item A
  78.                 WHERE A.po_id = pPurchaseOrderId
  79.                     AND B.so_item_id = A.ref_id
  80.                     AND (
  81.                         (B.qty_po_int + B.qty_po_int_return + B.qty_po_int_cancel + B.qty_po_int_add) - A.qty_int < vZero
  82.                         OR B.status_item NOT IN (vStatusDocReleased, vStatusFinal)
  83.                     )
  84.                 ) THEN
  85.                
  86.                 /*
  87.                  * validasi belum digunakan oleh manage PO
  88.                  */
  89.                 IF NOT EXISTS (
  90.                     SELECT (1) FROM pu_manage_po B
  91.                     WHERE B.po_id = pPurchaseOrderId
  92.                     ) THEN
  93.                
  94.                     /*
  95.                      * 1. remove pu_po_tax
  96.                      * 2. remove pu_po_balance_item
  97.                      * 3. update sl_so_po_balance_item
  98.                      * 4. update pu_po
  99.                      */
  100.                
  101.                     DELETE
  102.                     FROM pu_po_tax Z
  103.                     WHERE EXISTS (
  104.                         SELECT (1)
  105.                         FROM pu_po_item A
  106.                         WHERE A.po_id = pPurchaseOrderId
  107.                             AND A.tax_id <> vEmptyId
  108.                             AND Z.tenant_id = A.tenant_id
  109.                             AND Z.po_id = A.po_id
  110.                             AND Z.tax_id = A.tax_id
  111.                         );
  112.                        
  113.                     DELETE
  114.                     FROM pu_po_balance_item Z
  115.                     WHERE EXISTS (
  116.                         SELECT (1)
  117.                         FROM pu_po_item A
  118.                         WHERE A.po_id = pPurchaseOrderId
  119.                             AND A.po_item_id = Z.po_item_id
  120.                         )
  121.                         AND Z.qty_rcv = vZero
  122.                         AND Z.qty_return = vZero
  123.                         AND Z.qty_cancel = vZero
  124.                         AND Z.qty_add = vZero
  125.                         AND Z.status_item = vStatusDocReleased;
  126.                        
  127.                     UPDATE sl_so_po_balance_item
  128.                         SET qty_po_int = qty_po_int - A.qty_int, status_item = vStatusDocInProgress, update_datetime = pDatetime, update_user_id = pUserId
  129.                     FROM pu_po_item A
  130.                     WHERE A.po_id = pPurchaseOrderId AND
  131.                         A.ref_id <> -99 AND
  132.                         A.ref_id = sl_so_po_balance_item.so_item_id;
  133.                        
  134.                     UPDATE pu_po SET status_doc = vStatusDocDraft, workflow_status = vWorkflowStatusDraft, version = version + 1, update_datetime = pDatetime, update_user_id = pUserId
  135.                     WHERE po_id = pPurchaseOrderId
  136.                     AND status_doc = vStatusDocReleased;
  137.                    
  138.                     -- PERFORM f_reset_approval_to_draft
  139.                     PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pPurchaseOrderId, vDocNo, pDatetime, pRemarkApproval);
  140.                        
  141.                     -- UPDATE t_process_message
  142.                     UPDATE t_process_message
  143.                     SET process_no = pPrevProcessNo,
  144.                         update_datetime = pDatetime,
  145.                         update_user_id = pUserId,
  146.                         version = version + 1
  147.                     WHERE tenant_id = pTenantId
  148.                         AND process_name = vFunctionSubmit
  149.                         AND process_no = pPurchaseOrderId || '_' || vDocNo;
  150.                        
  151.                 ELSE
  152.                     RAISE EXCEPTION 'Document with id % is already used in Manage Purchase Order', pPurchaseOrderId;
  153.                 END IF;
  154.                
  155.             ELSE
  156.                 RAISE EXCEPTION 'Item in document with id % is already used by other document or not sufficient', pPurchaseOrderId;
  157.             END IF;
  158.            
  159.         ELSE
  160.             RAISE EXCEPTION 'Item in document with id % is already used by other document', pPurchaseOrderId;
  161.         END IF;
  162.            
  163.     ELSE
  164.         RAISE EXCEPTION 'Document with id % is not found or document is on approval progress', pPurchaseOrderId;
  165.     END IF;
  166.    
  167. END;
  168. $BODY$
  169.   LANGUAGE plpgsql VOLATILE
  170.   COST 100;
  171.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement