Advertisement
aadddrr

CANCEL SUBMIT CG VOID

Mar 21st, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Adrian, Mar 21, 2017
  2.  
  3. CREATE OR REPLACE FUNCTION cb_cancel_submit_cg_void(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.     pCGVoidId                           ALIAS FOR $5;
  12.     pRemarkApproval                     ALIAS FOR $6;
  13.     pPrevProcessNo                      ALIAS FOR $7;
  14.    
  15.     vEmptyId                            bigint;
  16.     vCGVoidDocTypeId                    bigint;
  17.     vFlagNo                             character varying(1);
  18.     vRoundingModeNonTax                 character varying(5);
  19.     vOuStructure                        OU_BU_STRUCTURE%ROWTYPE;
  20.     result                              RECORD;
  21.    
  22.     vFunctionSubmit                     character varying;
  23.     vStatusDocReleased                  character varying(1);
  24.     vStatusDocDraft                     character varying;
  25.     vStatusDocInProgress                character varying;
  26.     vStatusDocVoid                      character varying(1);
  27.     vWorkflowStatusDraft                character varying;
  28.     vPoId                               bigint;
  29.     vZero                               bigint;
  30.    
  31.     vOuId                               bigint;
  32.     vScheme                             character varying;
  33.     vDocNo                              character varying;
  34.    
  35.     vEmpty                              character varying;
  36.     vYes                                character varying;
  37.     vNo                                 character varying;
  38.    
  39. BEGIN
  40.    
  41.     vEmptyId := -99;
  42.     vFlagNo := 'N';
  43.     vCGVoidDocTypeId := 629;
  44.    
  45.     vFunctionSubmit := 'cb_submit_cg_void';
  46.     vStatusDocReleased := 'R';
  47.     vStatusDocDraft := 'D';
  48.     vStatusDocInProgress = 'I';
  49.     vStatusDocVoid := 'V';
  50.     vWorkflowStatusDraft := 'DRAFT';
  51.     vZero := 0;
  52.    
  53.     vEmpty := '';
  54.     vYes := 'Y';
  55.     vNo := 'N';
  56.  
  57.     --RAISE EXCEPTION 'Function Submit For Document Cheque Giro Void is not yet Created';
  58.    
  59.     -- get data
  60.     select f_get_ou_bu_structure(A.ou_id) AS ou, A.ou_id, A.doc_no, A.doc_date,
  61.         f_get_document_journal(A.doc_type_id) as doc, C.scheme
  62.     FROM cb_in_out_cashbank A, m_document C
  63.     WHERE A.in_out_cashbank_id = pCGVoidId AND
  64.         A.doc_type_id = C.doc_type_id AND
  65.         A.doc_type_id = vCGVoidDocTypeId AND
  66.         A.status_doc = vStatusDocReleased
  67.     INTO result;
  68.    
  69.     IF FOUND THEN
  70.         vOuStructure := result.ou;
  71.         vOuId := result.ou_id;
  72.         vDocNo := result.doc_no;
  73.         vScheme := result.scheme;
  74.        
  75.         /*
  76.          * validasi flg_deposit harus N dan flg_realization harus Y
  77.          */
  78.         IF NOT EXISTS (
  79.             SELECT (1)
  80.             FROM cb_cheque_giro_balance A, cb_cheque_giro_void B, cb_in_out_cheque_giro_payment C
  81.             WHERE B.in_out_cashbank_id = pCGVoidId
  82.                 AND B.ref_id = C.in_out_cheque_giro_payment_id
  83.                 AND A.tenant_id = pTenantId
  84.                 AND A.in_out_cheque_giro_payment_id = C.in_out_cheque_giro_payment_id
  85.                 AND (
  86.                     A.flg_deposit <> vNo
  87.                     OR A.flg_realization <> vYes
  88.                 )
  89.         ) THEN
  90.        
  91.             /*
  92.              * validasi flg_alloc harus V
  93.              */
  94.             IF NOT EXISTS (
  95.                 SELECT (1)
  96.                 FROM fi_receipt_ar_balance A, cb_cheque_giro_void B, cb_in_out_cheque_giro_payment C
  97.                 WHERE B.in_out_cashbank_id = pCGVoidId
  98.                     AND B.ref_id = C.in_out_cheque_giro_payment_id
  99.                     AND A.receipt_ar_balance_id = C.in_out_cheque_giro_payment_id
  100.                     AND A.flg_alloc <> vStatusDocVoid
  101.             ) THEN
  102.        
  103.                 --update data cheque/giro balance      
  104.                 UPDATE cb_cheque_giro_balance A
  105.                 SET flg_realization = vNo,
  106.                     version = A.version + 1,
  107.                     update_datetime = pDatetime,
  108.                     update_user_id = pUserId
  109.                 FROM cb_cheque_giro_void B
  110.                     INNER JOIN cb_in_out_cheque_giro_payment C ON B.ref_id = C.in_out_cheque_giro_payment_id
  111.                 WHERE A.tenant_id = pTenantId AND
  112.                     A.in_out_cheque_giro_payment_id = C.in_out_cheque_giro_payment_id AND
  113.                     B.in_out_cashbank_id = pCGVoidId;
  114.            
  115.                 -- update cb_in_out_cashbank
  116.                 UPDATE cb_in_out_cashbank
  117.                 SET status_doc = vStatusDocDraft,
  118.                     workflow_status = vWorkflowStatusDraft,
  119.                     version = version + 1,
  120.                     update_datetime = pDatetime,
  121.                     update_user_id = pUserId
  122.                 WHERE in_out_cashbank_id = pCGVoidId;
  123.                
  124.                 -- update data AR Balance
  125.                 UPDATE fi_receipt_ar_balance A
  126.                 SET flg_alloc = vNo,
  127.                     remark = D.remark,
  128.                     version = A.version + 1,
  129.                     update_datetime = pDatetime,
  130.                     update_user_id = pUserId
  131.                 FROM cb_cheque_giro_void B
  132.                     INNER JOIN cb_in_out_cheque_giro_payment C ON B.ref_id = C.in_out_cheque_giro_payment_id
  133.                     INNER JOIN cb_in_out_cashbank D ON D.in_out_cashbank_id = C.in_out_cashbank_id
  134.                 WHERE B.in_out_cashbank_id = pCGVoidId AND
  135.                     A.receipt_ar_balance_id = C.in_out_cheque_giro_payment_id AND
  136.                     A.flg_alloc = vStatusDocVoid;
  137.            
  138.                  -- PERFORM f_reset_approval_to_draft
  139.                 PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pCGVoidId, 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 = pCGVoidId || '_' || vDocNo;
  150.        
  151.             ELSE
  152.                 RAISE EXCEPTION 'Document with id % is already allocated', pCGVoidId;
  153.             END IF;
  154.                    
  155.         ELSE
  156.             RAISE EXCEPTION 'Document with id % is already used in other document', pCGVoidId;
  157.         END IF;
  158.    
  159.     ELSE
  160.         RAISE EXCEPTION 'Document with id % is not found or document is on approval progress', pCGVoidId;
  161.     END IF;
  162.        
  163. END;
  164. $BODY$
  165.   LANGUAGE plpgsql VOLATILE
  166.   COST 100;
  167.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement