Advertisement
aadddrr

CANCEL SUBMIT FOLLOW UP CASH ADVANCE SETTLEMENT

Mar 20th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Adrian, Mar 20, 2017
  2.  
  3. CREATE OR REPLACE FUNCTION cb_cancel_submit_follow_up_advance_settlement(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.     pFollowSettleId                                 ALIAS FOR $5;
  12.     pRemarkApproval                     ALIAS FOR $6;
  13.     pPrevProcessNo                      ALIAS FOR $7;
  14.    
  15.     vFollowSettleDocTypeId              bigint;
  16.     vEmptyId                            bigint;
  17.     vFunctionSubmit                     character varying;
  18.     vStatusDocReleased                  character varying;
  19.     vStatusDocDraft                     character varying;
  20.     vStatusDocInProgress                character varying;
  21.     vWorkflowStatusDraft                character varying;
  22.     vYes                                character varying;
  23.     vNo                                 character varying;
  24.     vZero                               bigint;
  25.    
  26.     vOuId                               bigint;
  27.     vJournalTrxId                       bigint;
  28.     vDocNo                              character varying;
  29.     vDocDate                            character varying;
  30.     vScheme                             character varying;
  31.    
  32.     vDocJournal                         DOC_JOURNAL%ROWTYPE;
  33.     vOuStructure                        OU_BU_STRUCTURE%ROWTYPE;
  34.     result                              RECORD;
  35.    
  36.     vLedgerCode                         character varying;
  37.     vStatusLedgerNotDone                character varying;
  38.    
  39.     vOuStructureJournalItem             OU_BU_STRUCTURE%ROWTYPE;
  40.    
  41.     vRefAmount                          numeric;
  42.     vSignDebit                          character varying(1);
  43.     vSignCredit                         character varying(1);
  44.     vTypeRate                           character varying(3);
  45.     vActivityCOA                        character varying(10);
  46.     vRefId                              bigint;
  47.    
  48. BEGIN
  49.  
  50.     vFollowSettleDocTypeId := 641;
  51.     vEmptyId := -99;
  52.     vFunctionSubmit := 'cb_submit_follow_up_advance_settlement';       
  53.     vStatusDocReleased := 'R'
  54.     vStatusDocDraft := 'D';
  55.     vStatusDocInProgress := 'I';
  56.     vWorkflowStatusDraft := 'DRAFT';
  57.     vYes := 'Y';
  58.     vNo := 'N';
  59.     vZero := 0;
  60.    
  61.     vLedgerCode := 'CASH.BANK';
  62.     vStatusLedgerNotDone := '0';
  63.    
  64.     vSignDebit := 'D';
  65.    
  66.     --RAISE EXCEPTION 'Function Submit For Document Follow up Advance Settlement is not yet Created';
  67.    
  68.     -- get data
  69.     select f_get_ou_bu_structure(A.ou_id) AS ou, A.ou_id, A.doc_no, A.doc_date,
  70.         f_get_document_journal(A.doc_type_id) as doc, C.scheme,
  71.         A.ref_amount, A.ref_id
  72.     FROM cb_in_out_cashbank A, m_document C
  73.     WHERE A.in_out_cashbank_id = pFollowSettleId AND
  74.         A.doc_type_id = C.doc_type_id AND
  75.         A.doc_type_id = vFollowSettleDocTypeId AND
  76.         A.status_doc = vStatusDocReleased
  77.     INTO result;
  78.    
  79.     IF FOUND THEN
  80.         vOuStructure := result.ou;
  81.         vOuId := result.ou_id;
  82.         vDocNo := result.doc_no;
  83.         vDocDate := result.doc_date;
  84.         vDocJournal := result.doc;
  85.         vScheme := result.scheme;
  86.         vRefAmount := result.ref_amount;
  87.         vRefId := result.ref_id;
  88.        
  89.         -- Cek status ledger not yet closed
  90.         IF EXISTS (
  91.             SELECT 1
  92.             FROM m_admin_process_ledger e, m_ou_structure f, t_ou g
  93.             WHERE e.tenant_id = pTenantId
  94.                 AND e.ou_id = f.ou_bu_id
  95.                 AND f.ou_id = vOuId
  96.                 AND e.date_year_month = SUBSTR(vDocDate, 1, 6)
  97.                 AND e.ledger_code = vLedgerCode AND
  98.                 f.ou_id = g.ou_id AND e.status_ledger = vStatusLedgerNotDone) THEN
  99.                
  100.             /*
  101.              * validasi flg_payment harus Y
  102.              */
  103.             IF NOT EXISTS (
  104.                 SELECT (1)
  105.                 FROM cb_trx_cashbank_balance A
  106.                 WHERE A.trx_cashbank_balance_id = vRefId
  107.                     AND A.flg_payment <> vYes
  108.             ) THEN
  109.                
  110.                 -- update flag cb_trx_cashbank_balance
  111.                 UPDATE cb_trx_cashbank_balance
  112.                 SET flg_payment = vStatusDocInProgress,
  113.                     ref_doc_type_id = vEmptyId,
  114.                     ref_id = vEmptyId,
  115.                     version = version + 1,
  116.                     update_datetime = pDatetime,
  117.                     update_user_id = pUserId
  118.                 WHERE trx_cashbank_balance_id = vRefId;
  119.            
  120.                 -- update cb_in_out_cashbank : status doc to D, workflow status to DRAFT
  121.                 UPDATE cb_in_out_cashbank
  122.                 SET status_doc = vStatusDocDraft,
  123.                     workflow_status = vWorkflowStatusDraft,
  124.                     version = version + 1,
  125.                     update_datetime = pDatetime,
  126.                     update_user_id = pUserId
  127.                 WHERE in_out_cashbank_id = pFollowSettleId;
  128.                
  129.                 DELETE
  130.                 FROM cb_in_out_cashbank_cost Z 
  131.                 WHERE EXISTS (
  132.                     SELECT (1)
  133.                     FROM cb_in_out_cashbank A
  134.                     WHERE A.in_out_cashbank_id = pFollowSettleId
  135.                         AND Z.tenant_id = A.tenant_id
  136.                         AND Z.in_out_cashbank_id = A.in_out_cashbank_id
  137.                         AND Z.line_no = 1
  138.                         AND Z.activity_gl_id = f_get_activity_gl_id_for_rounding(A.tenant_id)
  139.                 );
  140.                
  141.                 /*
  142.                  * jika refAmount < 0, artinya follow up settlement diselesaikan dengan cash/bank In
  143.                  */
  144.                 IF vRefAmount < 0 THEN
  145.                        
  146.                     UPDATE cb_cashbank_balance D
  147.                     SET amount = D.amount - B.cashbank_amount,
  148.                         version = D.version + 1,
  149.                         update_datetime = pDatetime,
  150.                         update_user_id = pUserId
  151.                     FROM cb_in_out_cashbank A, cb_in_out_cashbank_payment B, m_cashbank_ou C
  152.                     WHERE A.in_out_cashbank_id = B.in_out_cashbank_id AND
  153.                             D.cashbank_id = C.cashbank_id AND
  154.                             A.in_out_cashbank_id = pFollowSettleId AND
  155.                             D.cash_bank_date = A.doc_date AND  
  156.                             D.tenant_id = A.tenant_id AND
  157.                             D.ou_id = C.ou_id AND
  158.                             D.cashbank_id = B.cashbank_id AND
  159.                             D.rec_type = vSignDebit;   
  160.                
  161.                 END IF;
  162.                
  163.                 -- PERFORM cancel gl_cancel_admin_journal_trx
  164.                 PERFORM gl_cancel_admin_journal_trx(pTenantId, (vOuStructure).ou_bu_id, vOuId, (vDocJournal).journal_type, f_get_year_month_date(vDocDate), 'DAILY', pDatetime, pUserId);
  165.                
  166.                 -- Find journal trx id
  167.                 SELECT journal_trx_id INTO vJournalTrxId
  168.                 FROM gl_journal_trx
  169.                 WHERE tenant_id = pTenantId
  170.                     AND journal_type = (vDocJournal).journal_type
  171.                     AND doc_type_id = vFollowSettleDocTypeId
  172.                     AND doc_id = pFollowSettleId
  173.                     AND doc_no = vDocNo
  174.                     AND doc_date = vDocDate
  175.                     AND ou_bu_id = (vOuStructure).ou_bu_id
  176.                     AND ou_branch_id = (vOuStructure).ou_branch_id
  177.                     AND ou_sub_bu_id = (vOuStructure).ou_sub_bu_id;
  178.                
  179.                 -- DELETE gl_journal_trx
  180.                 DELETE FROM gl_journal_trx
  181.                 WHERE journal_trx_id = vJournalTrxId;
  182.                
  183.                 -- DELETE gl_journal_trx_item
  184.                 DELETE FROM gl_journal_trx_item
  185.                 WHERE journal_trx_id = vJournalTrxId;
  186.        
  187.                 -- DELETE gl_journal_trx_mapping
  188.                 DELETE FROM gl_journal_trx_mapping
  189.                 WHERE journal_trx_id = vJournalTrxId;
  190.                
  191.                 -- PERFORM f_reset_approval_to_draft
  192.                 PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pFollowSettleId, vDocNo, pDatetime, pRemarkApproval);
  193.                    
  194.                 -- UPDATE t_process_message
  195.                 UPDATE t_process_message
  196.                 SET process_no = pPrevProcessNo,
  197.                     update_datetime = pDatetime,
  198.                     update_user_id = pUserId,
  199.                     version = version + 1
  200.                 WHERE tenant_id = pTenantId
  201.                     AND process_name = vFunctionSubmit
  202.                     AND process_no = pFollowSettleId || '_' || vDocNo;
  203.            
  204.             ELSE
  205.                 RAISE EXCEPTION 'Follow up  for document with id % is on approval progress', pFollowSettleId;
  206.             END IF;
  207.                
  208.         ELSE
  209.             RAISE EXCEPTION 'Admin Process Ledger for Cashbank in year month % is already closed', SUBSTR(vDocDate, 1, 6);
  210.         END IF;
  211.            
  212.     ELSE
  213.         RAISE EXCEPTION 'Document with id % is not found or document is on approval progress', pFollowSettleId;
  214.     END IF;
  215.    
  216. END;
  217. $BODY$
  218.   LANGUAGE plpgsql VOLATILE
  219.   COST 100;
  220.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement