Evra70

validate

Jan 6th, 2022
1,211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- FUNCTION: public.cb_cancel_submit_payment_order_cb(bigint, character varying, bigint, character varying, bigint, character varying, character varying)
  2.  
  3. -- DROP FUNCTION public.cb_cancel_submit_payment_order_cb(bigint, character varying, bigint, character varying, bigint, character varying, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION public.cb_cancel_submit_payment_order_cb(
  6.     bigint,
  7.     character varying,
  8.     bigint,
  9.     character varying,
  10.     bigint,
  11.     character varying,
  12.     character varying)
  13. RETURNS void
  14.     LANGUAGE 'plpgsql'
  15.     COST 100
  16.     VOLATILE
  17. AS $BODY$
  18. DECLARE
  19.     pTenantId               ALIAS FOR $1;
  20.     pSessionId              ALIAS FOR $2;
  21.     pUserId                 ALIAS FOR $3; -- for update user id in transaction
  22.     pDatetime               ALIAS FOR $4;
  23.     pPaymentOrderId         ALIAS FOR $5; -- invoice id
  24.     pRemarkApproval         ALIAS FOR $6; -- Remark for appear in approval reset history
  25.     pPrevProcessNo          ALIAS FOR $7; -- Substitute for renaming prevous process no
  26.  
  27.     vDocTypePaymentOrderCb      bigint := 601;
  28.     vCashbankLedgerCode     character varying := 'CASH.BANK';
  29.     vStatusLedgerNotDone    character varying := '0';
  30.     vInProgress     character varying := 'I';
  31.     vYes            character varying := 'Y';
  32.     vFunctionSubmit character varying := 'cb_submit_payment_order_cb';
  33.     vStatusDocRelease       character varying := 'R';
  34.     vStatusDocDraft     character varying := 'D';
  35.     vWorkflowStatusDraft    character varying := 'DRAFT';
  36.    
  37.     vDocTypeId      bigint;
  38.     vOuId           bigint;
  39.     vDocNo          character varying;
  40.     vDocDate        character varying;
  41.     vScheme         character varying;
  42.     vStatusDoc      character varying;
  43.    
  44. BEGIN
  45.     /** Cancel payment order CB
  46.      * 1. Find document cb_payment_order, must release and match doc type
  47.      * 2. Cek status ledger not yet closed
  48.      * 3. Cek balance cash bank (cb_trx_cashbank_balance) not yet used on BKK (Cash Bank Out)
  49.      * 4. Delete cb_trx_cashbank_balance
  50.      * 5. Update cb_payment_order, set doc_status to In Progress
  51.      * 6. Reset approval
  52.      */
  53.    
  54.     SELECT A.ou_id, A.doc_date, A.doc_type_id, A.doc_no, A.status_doc, B.scheme
  55.     INTO vOuId, vDocDate, vDocTypeId, vDocNo, vStatusDoc, vScheme  
  56.     FROM cb_payment_order A
  57.     INNER JOIN m_document B ON A.doc_type_id = B.doc_type_id
  58.     WHERE A.payment_order_id = pPaymentOrderId
  59.         AND A.doc_type_id = vDocTypePaymentOrderCb
  60.         AND A.status_doc = vStatusDocRelease;
  61.    
  62.     IF FOUND THEN
  63.         -- * 2. Cek status ledger not yet closed
  64.         IF EXISTS (
  65.             SELECT 1
  66.             FROM m_admin_process_ledger e, m_ou_structure f, t_ou g
  67.             WHERE e.tenant_id = pTenantId
  68.                 AND e.ou_id = f.ou_bu_id
  69.                 AND f.ou_id = vOuId
  70.                 AND e.date_year_month = SUBSTR(vDocDate, 1, 6)
  71.                 AND e.ledger_code = vCashbankLedgerCode AND
  72.                 f.ou_id = g.ou_id AND e.status_ledger = vStatusLedgerNotDone) THEN
  73.            
  74.             -- * 3. Cek balance cash bank (cb_trx_cashbank_balance) not yet used on BKK (Cash Bank Out)
  75.             IF EXISTS(
  76.                     SELECT 1
  77.                     FROM cb_trx_cashbank_balance A
  78.                     WHERE A.payment_id = pPaymentOrderId
  79.                         AND A.doc_type_id = vDocTypeId
  80.                         AND A.flg_payment IN ( vYes, vInProgress )) THEN
  81.                        
  82.                 RAISE EXCEPTION 'Payment Order Cash Bank already been used in Cash Bank Out transaction';
  83.             ELSE
  84.                 -- remove cb_trx_cashbank_balance
  85.                 DELETE FROM cb_trx_cashbank_balance
  86.                 WHERE payment_id = pPaymentOrderId
  87.                         AND doc_type_id = vDocTypeId;
  88.                        
  89.                 -- update doc status do draft
  90.                 UPDATE cb_payment_order
  91.                 SET status_doc = vStatusDocDraft,
  92.                     workflow_status = vWorkflowStatusDraft,
  93.                     version = version + 1,
  94.                     update_datetime = pDatetime,
  95.                     update_user_id = pUserId
  96.                 WHERE payment_order_id = pPaymentOrderId;
  97.                
  98.                 -- reset approval
  99.                                 -- do reset approval to draft
  100.                 PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pPaymentOrderId, vDocNo, pDatetime, pRemarkApproval);
  101.    
  102.                 -- update previous process no
  103.                 UPDATE t_process_message
  104.                 SET process_no = pPrevProcessNo,
  105.                     update_datetime = pDatetime,
  106.                     update_user_id = pUserId,
  107.                     version = version + 1
  108.                 WHERE tenant_id = pTenantId
  109.                     AND process_name = vFunctionSubmit
  110.                     AND process_no = pPaymentOrderId || '_' || vDocNo;
  111.                
  112.                 PERFORM f_process_other_ap_balance_for_cancel_submit_document(pTenantId, vDocTypeId, pPaymentOrderId, pDatetime, pUserId);
  113.             END IF;
  114.         ELSE
  115.             RAISE EXCEPTION 'Admin Process Ledger for Cash Bank in year month % is already closed', SUBSTR(vDocDate, 1, 6);
  116.         END IF;
  117.     ELSE
  118.         RAISE EXCEPTION 'Document with id % is not found or document is on approval progress', pPaymentOrderId;
  119.     END IF;
  120.    
  121. END;
  122. $BODY$;
  123.  
  124. ALTER FUNCTION public.cb_cancel_submit_payment_order_cb(bigint, character varying, bigint, character varying, bigint, character varying, character varying)
  125.     OWNER TO sts;
  126.  
  127. GRANT EXECUTE ON FUNCTION public.cb_cancel_submit_payment_order_cb(bigint, character varying, bigint, character varying, bigint, character varying, character varying) TO PUBLIC;
  128.  
  129. GRANT EXECUTE ON FUNCTION public.cb_cancel_submit_payment_order_cb(bigint, character varying, bigint, character varying, bigint, character varying, character varying) TO sts;
  130.  
  131. GRANT EXECUTE ON FUNCTION public.cb_cancel_submit_payment_order_cb(bigint, character varying, bigint, character varying, bigint, character varying, character varying) TO stsdev;
  132.  
  133.  
Advertisement
Add Comment
Please, Sign In to add comment