Advertisement
aadddrr

pu_cancel_submit_po_consingment

Aug 27th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION pu_cancel_submit_po_consingment(bigint, character varying, bigint, character varying, bigint, character varying, character varying)
  2.   RETURNS void AS
  3. $BODY$
  4. DECLARE
  5.     pTenantId               ALIAS FOR $1;
  6.     pSessionId              ALIAS FOR $2;
  7.     pUserId                 ALIAS FOR $3; -- for update user id in transaction
  8.     pDatetime               ALIAS FOR $4;
  9.     pPoId                   ALIAS FOR $5;
  10.     pRemarkApproval         ALIAS FOR $6; -- Remark for appear in approval reset history
  11.     pPrevProcessNo          ALIAS FOR $7; -- Substitute for renaming prevous process no
  12.    
  13.     vDocTypeIdPo            bigint := 101;
  14.     vStatusRelease          character varying(1) := 'R';
  15.     vDocNo                  character varying;
  16.     vScheme                 character varying;
  17.     vStatusDocDraft         character varying := 'D';
  18.     vWorkflowStatusDraft    character varying := 'DRAFT';
  19.     vFlagConsign            character varying(1);
  20.     vEmptyId                bigint := -99;
  21.     vFunctionSubmit         character varying := 'pu_submit_po';
  22.  
  23.     vProcessId      bigint;
  24.     vPoId           bigint;
  25.     vUserId         bigint;
  26.     vDatetime       character varying(14);
  27.    
  28.     vStatusFinal    character varying(1);
  29.    
  30.     vPurchaseOrderDocTypeId bigint;
  31.     vRoundingModeNonTax character varying(5);
  32.    
  33.    
  34. BEGIN
  35.    
  36.     -- Find document must release and match doc type
  37.     SELECT A.doc_no, B.scheme
  38.     INTO vDocNo, vScheme
  39.     FROM pu_po A
  40.     INNER JOIN m_document B ON A.doc_type_id = B.doc_type_id
  41.     WHERE A.po_id = pPoId
  42.         AND A.doc_type_id = vDocTypeIdPo
  43.         AND A.status_doc = vStatusRelease;
  44.    
  45.     IF FOUND THEN
  46.         -- Update pu_po, set doc_status to DRAFT
  47.         UPDATE pu_po
  48.         SET status_doc = vStatusDocDraft,
  49.             workflow_status = vWorkflowStatusDraft,
  50.             version = version + 1,
  51.             update_datetime = pDatetime,
  52.             update_user_id = pUserId
  53.         WHERE po_id = pPoId;
  54.    
  55.         SELECT flg_buy_consignment INTO vFlagConsign
  56.         FROM pu_po_ext
  57.         WHERE po_id = pPoId;
  58.        
  59.         DELETE FROM pu_po_tax A
  60.         WHERE EXISTS (
  61.             SELECT 1 FROM pu_po_item B
  62.             INNER JOIN m_tax C ON B.tax_id = C.tax_id
  63.             WHERE B.po_id = pPoId
  64.                 AND B.tax_id <> vEmptyId
  65.                 AND A.tenant_id = B.tenant_id
  66.                 AND A.po_id = B.po_id
  67.                 AND A.tax_id = B.tax_id
  68.         );
  69.        
  70.         IF vFlagConsign = 'Y' THEN
  71.             DELETE FROM pu_po_balance_item_consignment A
  72.             WHERE EXISTS (
  73.                 SELECT 1 FROM pu_po_item B
  74.                 INNER JOIN pu_po C ON B.po_id = C.po_id
  75.                 WHERE C.po_id = pPoId
  76.                     AND A.po_item_id = B.po_item_id
  77.             );
  78.            
  79.             DELETE FROM pu_log_po_balance_item_consignment A
  80.             WHERE EXISTS (
  81.                 SELECT 1 FROM pu_po_item B
  82.                 WHERE B.po_id = pPoId
  83.                     AND A.tenant_id = B.tenant_id
  84.                     AND A.po_id = B.po_id
  85.                     AND A.po_item_id = B.po_item_id
  86.                     AND A.ref_doc_type_id = vEmptyId
  87.                     AND A.ref_id = vEmptyId
  88.                     AND A.ref_item_id = vEmptyId
  89.             );
  90.            
  91.             -- PERFORM f_reset_approval_to_draft
  92.             PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pPoId, vDocNo, pDatetime, pRemarkApproval);
  93.  
  94.             -- UPDATE t_process_message
  95.             UPDATE t_process_message
  96.             SET process_no = pPrevProcessNo,
  97.                 update_datetime = pDatetime,
  98.                 update_user_id = pUserId,
  99.                 version = version + 1
  100.             WHERE tenant_id = pTenantId
  101.                 AND process_name = vFunctionSubmit
  102.                 AND process_no = pPoId || '_' || vDocNo;
  103.         END IF;
  104.     ELSE
  105.         RAISE EXCEPTION 'Document with id % is not found or document is on approval progress', pPoId;
  106.     END IF;
  107.        
  108. END;
  109. $BODY$
  110.   LANGUAGE plpgsql VOLATILE
  111.   COST 100;
  112.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement