Advertisement
aadddrr

pu_cancel_submit_po

Aug 28th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Adrian, Aug 28, 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.     vFlagConsign                        character varying(1);
  30.    
  31.     result                              RECORD;
  32.    
  33. BEGIN
  34.    
  35.     vPurchaseOrderDocTypeId := 101;
  36.     vFunctionSubmit := 'pu_submit_po';
  37.     vStatusDocReleased := 'R';
  38.     vStatusDocDraft := 'D';
  39.     vStatusDocInProgress := 'I';
  40.     vStatusFinal := 'F';
  41.     vWorkflowStatusDraft := 'DRAFT';
  42.     vEmptyId := -99;
  43.     vZero := 0;
  44.  
  45.     --RAISE EXCEPTION 'Function Cancel Submit is not yet Created';
  46.    
  47.     -- get data
  48.     select A.ou_id, A.doc_no, A.doc_date, B.scheme, C.flg_buy_consignment
  49.     FROM pu_po A, m_document B, pu_po_ext C
  50.     WHERE A.doc_type_id = B.doc_type_id AND
  51.         A.po_id = pPurchaseOrderId AND
  52.         A.doc_type_id = vPurchaseOrderDocTypeId
  53.         AND A.status_doc = vStatusDocReleased
  54.         AND A.po_id = C.po_id
  55.         INTO result;
  56.    
  57.     IF FOUND THEN
  58.         vOuId := result.ou_id;
  59.         vDocNo := result.doc_no;
  60.         vDocDate := result.doc_date;
  61.         vScheme := result.scheme;  
  62.         vFlagConsign := result.flg_buy_consignment;
  63.        
  64.         /*
  65.          * validasi belum digunakan oleh manage PO
  66.          */
  67.         IF NOT EXISTS (
  68.             SELECT (1) FROM pu_manage_po B
  69.             WHERE B.po_id = pPurchaseOrderId
  70.             ) THEN
  71.                    
  72.                    
  73.             IF vFlagConsign = 'N' THEN
  74.                
  75.                 /*
  76.                  * validasi belum digunakan oleh dokumen lain
  77.                  */
  78.                 IF NOT EXISTS (
  79.                     SELECT (1) FROM pu_po_balance_item B, pu_po_item A
  80.                     WHERE A.po_id = pPurchaseOrderId
  81.                         AND B.po_item_id = A.po_item_id
  82.                         AND (
  83.                             (B.qty_rcv + B.qty_return + B.qty_cancel + B.qty_add) > vZero
  84.                             OR B.status_item NOT IN (vStatusDocReleased)
  85.                         )
  86.                     ) THEN
  87.            
  88.                     /*
  89.                      * validasi belum digunakan oleh dokumen lain
  90.                      */
  91.                     IF NOT EXISTS (
  92.                         SELECT (1) FROM sl_so_po_balance_item B, pu_po_item A
  93.                         WHERE A.po_id = pPurchaseOrderId
  94.                             AND B.so_item_id = A.ref_id
  95.                             AND (
  96.                                 (B.qty_po_int + B.qty_po_int_return + B.qty_po_int_cancel + B.qty_po_int_add) - A.qty_int < vZero
  97.                                 OR B.status_item NOT IN (vStatusDocReleased, vStatusFinal)
  98.                             )
  99.                         ) THEN
  100.            
  101.                         /*
  102.                          * Jika PO adalah bukan PO consignment
  103.                          * 1. remove pu_po_tax
  104.                          * 2. remove pu_po_balance_item
  105.                          * 3. update sl_so_po_balance_item
  106.                          * 4. update pu_po
  107.                          */
  108.                                
  109.                         DELETE
  110.                         FROM pu_po_tax Z
  111.                         WHERE EXISTS (
  112.                             SELECT (1)
  113.                             FROM pu_po_item A
  114.                             WHERE A.po_id = pPurchaseOrderId
  115.                                 AND A.tax_id <> vEmptyId
  116.                                 AND Z.tenant_id = A.tenant_id
  117.                                 AND Z.po_id = A.po_id
  118.                                 AND Z.tax_id = A.tax_id
  119.                             );
  120.                            
  121.                         DELETE
  122.                         FROM pu_po_balance_item Z
  123.                         WHERE EXISTS (
  124.                             SELECT (1)
  125.                             FROM pu_po_item A
  126.                             WHERE A.po_id = pPurchaseOrderId
  127.                                 AND A.po_item_id = Z.po_item_id
  128.                             )
  129.                             AND Z.qty_rcv = vZero
  130.                             AND Z.qty_return = vZero
  131.                             AND Z.qty_cancel = vZero
  132.                             AND Z.qty_add = vZero
  133.                             AND Z.status_item = vStatusDocReleased;
  134.                            
  135.                         UPDATE sl_so_po_balance_item
  136.                             SET qty_po_int = qty_po_int - A.qty_int, status_item = vStatusDocInProgress, update_datetime = pDatetime, update_user_id = pUserId
  137.                         FROM pu_po_item A
  138.                         WHERE A.po_id = pPurchaseOrderId AND
  139.                             A.ref_id <> -99 AND
  140.                             A.ref_id = sl_so_po_balance_item.so_item_id;
  141.                            
  142.                         UPDATE pu_po SET status_doc = vStatusDocDraft, workflow_status = vWorkflowStatusDraft, version = version + 1, update_datetime = pDatetime, update_user_id = pUserId
  143.                         WHERE po_id = pPurchaseOrderId
  144.                         AND status_doc = vStatusDocReleased;
  145.                        
  146.                         -- PERFORM f_reset_approval_to_draft
  147.                         PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pPurchaseOrderId, vDocNo, pDatetime, pRemarkApproval);
  148.                            
  149.                         -- UPDATE t_process_message
  150.                         UPDATE t_process_message
  151.                         SET process_no = pPrevProcessNo,
  152.                             update_datetime = pDatetime,
  153.                             update_user_id = pUserId,
  154.                             version = version + 1
  155.                         WHERE tenant_id = pTenantId
  156.                             AND process_name = vFunctionSubmit
  157.                             AND process_no = pPurchaseOrderId || '_' || vDocNo;
  158.                                
  159.                     ELSE
  160.                         RAISE EXCEPTION 'Item in document with id % is already used by other document or not sufficient', pPurchaseOrderId;
  161.                     END IF;
  162.                    
  163.                 ELSE
  164.                     RAISE EXCEPTION 'Item in document with id % is already used by other document', pPurchaseOrderId;
  165.                 END IF;
  166.            
  167.             ELSE
  168.            
  169.                 /*
  170.                  * validasi belum digunakan oleh dokumen lain
  171.                  */
  172.                 IF NOT EXISTS (
  173.                     SELECT (1) FROM pu_po_balance_item_consignment B, pu_po_item A
  174.                     WHERE A.po_id = pPurchaseOrderId
  175.                         AND B.po_item_id = A.po_item_id
  176.                         AND (
  177.                             (B.qty_rcv + B.qty_return + B.qty_cancel + B.qty_add) > vZero
  178.                             OR B.status_item NOT IN (vStatusDocReleased)
  179.                         )
  180.                     ) THEN
  181.        
  182.                     /*
  183.                      * Jika PO adalah bukan PO consignment
  184.                      * 1. remove pu_po_tax
  185.                      * 2. remove pu_po_balance_item_consignment
  186.                      */
  187.                
  188.                     DELETE
  189.                     FROM pu_po_tax Z
  190.                     WHERE EXISTS (
  191.                         SELECT (1)
  192.                         FROM pu_po_item A
  193.                         WHERE A.po_id = pPurchaseOrderId
  194.                             AND A.tax_id <> vEmptyId
  195.                             AND Z.tenant_id = A.tenant_id
  196.                             AND Z.po_id = A.po_id
  197.                             AND Z.tax_id = A.tax_id
  198.                         );
  199.                
  200.                     DELETE
  201.                     FROM pu_po_balance_item_consignment Z
  202.                     WHERE EXISTS (
  203.                         SELECT (1)
  204.                         FROM pu_po_item A
  205.                         WHERE A.po_id = pPurchaseOrderId
  206.                             AND A.po_item_id = Z.po_item_id
  207.                         )
  208.                         AND Z.qty_rcv = vZero
  209.                         AND Z.qty_return = vZero
  210.                         AND Z.qty_cancel = vZero
  211.                         AND Z.qty_add = vZero
  212.                         AND Z.status_item = vStatusDocReleased;
  213.                        
  214.                     UPDATE pu_po SET status_doc = vStatusDocDraft, workflow_status = vWorkflowStatusDraft, version = version + 1, update_datetime = pDatetime, update_user_id = pUserId
  215.                     WHERE po_id = pPurchaseOrderId
  216.                     AND status_doc = vStatusDocReleased;
  217.                    
  218.                     -- PERFORM f_reset_approval_to_draft
  219.                     PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pPurchaseOrderId, vDocNo, pDatetime, pRemarkApproval);
  220.                        
  221.                     -- UPDATE t_process_message
  222.                     UPDATE t_process_message
  223.                     SET process_no = pPrevProcessNo,
  224.                         update_datetime = pDatetime,
  225.                         update_user_id = pUserId,
  226.                         version = version + 1
  227.                     WHERE tenant_id = pTenantId
  228.                         AND process_name = vFunctionSubmit
  229.                         AND process_no = pPurchaseOrderId || '_' || vDocNo;
  230.                        
  231.                 ELSE
  232.                     RAISE EXCEPTION 'Item in document with id % is already used by other document', pPurchaseOrderId;
  233.                 END IF;
  234.                
  235.             END IF;
  236.        
  237.         ELSE
  238.             RAISE EXCEPTION 'Document with id % is already used in Manage Purchase Order', pPurchaseOrderId;
  239.         END IF;
  240.            
  241.     ELSE
  242.         RAISE EXCEPTION 'Document with id % is not found or document is on approval progress', pPurchaseOrderId;
  243.     END IF;
  244.    
  245. END;
  246. $BODY$
  247.   LANGUAGE plpgsql VOLATILE
  248.   COST 100;
  249.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement