Advertisement
aadddrr

CANCEL SUBMIT SO

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