Advertisement
aadddrr

CANCEL SUBMIT CASH ADVANCE SETTLEMENT

Mar 19th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Adrian, Mar 17, 2017
  2.  
  3. CREATE OR REPLACE FUNCTION cb_cancel_submit_cash_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.     pCASId                              ALIAS FOR $5;
  12.     pRemarkApproval                     ALIAS FOR $6;
  13.     pPrevProcessNo                      ALIAS FOR $7;
  14.    
  15.     vCASDocTypeId                       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.     vSettleAmount                       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.     vCASDocTypeId := 603;
  51.     vEmptyId := -99;
  52.     vFunctionSubmit := 'cb_submit_cash_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.     --RAISE EXCEPTION 'Function Submit For Document Cash Advance Settlement is not yet Created';
  65.    
  66.     -- get data
  67.     select f_get_ou_bu_structure(A.ou_id) AS ou, A.ou_id, A.doc_no, A.doc_date,
  68.         f_get_document_journal(A.doc_type_id) as doc, C.scheme,
  69.         SUM(B.advance_amount) AS settle_amount, A.ref_id
  70.     FROM cb_advance_settle A, cb_advance_settle_cost B, m_document C
  71.     WHERE A.advance_settle_id = B.advance_settle_id AND
  72.         A.doc_type_id = C.doc_type_id AND
  73.         A.advance_settle_id = pCASId AND
  74.         A.doc_type_id = vCASDocTypeId
  75.         AND A.status_doc = vStatusDocReleased
  76.     GROUP BY A.doc_type_id, A.ref_id, A.tenant_id, A.ou_id, A.doc_no, A.doc_date, C.scheme, A.ref_id INTO result;
  77.        
  78.     IF FOUND THEN
  79.         vOuStructure := result.ou;
  80.         vOuId := result.ou_id;
  81.         vDocNo := result.doc_no;
  82.         vDocDate := result.doc_date;
  83.         vDocJournal := result.doc;
  84.         vScheme := result.scheme;
  85.         vSettleAmount := result.settle_amount;
  86.         vRefId := result.ref_id;
  87.        
  88.         -- Cek status ledger not yet closed
  89.         IF EXISTS (
  90.             SELECT 1
  91.             FROM m_admin_process_ledger e, m_ou_structure f, t_ou g
  92.             WHERE e.tenant_id = pTenantId
  93.                 AND e.ou_id = f.ou_bu_id
  94.                 AND f.ou_id = vOuId
  95.                 AND e.date_year_month = SUBSTR(vDocDate, 1, 6)
  96.                 AND e.ledger_code = vLedgerCode AND
  97.                 f.ou_id = g.ou_id AND e.status_ledger = vStatusLedgerNotDone) THEN
  98.                
  99.             /*
  100.              * validasi belum dilakukan payment
  101.              */
  102.             IF NOT EXISTS (
  103.                 SELECT (1)
  104.                 FROM cb_trx_cashbank_balance A, cb_advance_settle B
  105.                 WHERE B.advance_settle_id = pCASId
  106.                     AND A.tenant_id = B.tenant_id
  107.                     AND A.ou_id = B.ou_id
  108.                     AND A.partner_id = B.partner_id
  109.                     AND A.doc_type_id = B.doc_type_id
  110.                     AND A.payment_id = B.advance_settle_id
  111.                     AND A.payment_doc_no = B.doc_no
  112.                     AND A.payment_doc_date = B.doc_date
  113.                     AND A.ref_doc_type_id <> vEmptyId
  114.                     AND A.ref_id <> vEmptyId
  115.                     AND A.flg_payment <> vNo
  116.             ) THEN
  117.                
  118.                 /*
  119.                  * validasi belum dilakukan settlement
  120.                  */
  121.                 IF NOT EXISTS (
  122.                     SELECT (1)
  123.                     FROM cb_advance_balance A, cb_advance_settle B
  124.                     WHERE B.advance_settle_id = pCASId
  125.                         AND A.advance_id = B.ref_id
  126.                         AND A.flg_settle <> vYes
  127.                 ) THEN
  128.            
  129.                     DELETE
  130.                     FROM cb_trx_cashbank_balance Z 
  131.                     WHERE EXISTS (
  132.                         SELECT (1)
  133.                         FROM cb_advance_settle A
  134.                         WHERE A.advance_settle_id = pCASId
  135.                             AND Z.tenant_id = A.tenant_id
  136.                             AND Z.ou_id = A.ou_id
  137.                             AND Z.partner_id = A.partner_id
  138.                             AND Z.doc_type_id = A.doc_type_id
  139.                             AND Z.payment_id = A.advance_settle_id
  140.                             AND Z.payment_doc_no = A.doc_no
  141.                             AND Z.payment_doc_date = A.doc_date
  142.                     );
  143.                    
  144.                     -- update status cb_advance_settle
  145.                     UPDATE cb_advance_settle
  146.                     SET status_doc = vStatusDocDraft,
  147.                         workflow_status = vWorkflowStatusDraft,
  148.                         version = version + 1,
  149.                         update_datetime = pDatetime,
  150.                         update_user_id = pUserId
  151.                     WHERE advance_settle_id = pCASId;
  152.            
  153.                     -- update advance balance
  154.                     UPDATE cb_advance_balance
  155.                     SET flg_settle = vStatusDocInProgress,
  156.                         ref_id = pCASId,
  157.                         ref_doc_type_id = vCASDocTypeId,
  158.                         ref_amount = amount,
  159.                         version = version + 1,
  160.                         update_datetime = pDatetime,
  161.                         update_user_id = pUserId
  162.                     WHERE advance_id = vRefId;
  163.                    
  164.                     -- PERFORM cancel gl_cancel_admin_journal_trx
  165.                     PERFORM gl_cancel_admin_journal_trx(pTenantId, (vOuStructure).ou_bu_id, vOuId, (vDocJournal).journal_type, f_get_year_month_date(vDocDate), 'DAILY', pDatetime, pUserId);
  166.                    
  167.                     -- Find journal trx id
  168.                     SELECT journal_trx_id INTO vJournalTrxId
  169.                     FROM gl_journal_trx
  170.                     WHERE tenant_id = pTenantId
  171.                         AND journal_type = (vDocJournal).journal_type
  172.                         AND doc_type_id = vCASDocTypeId
  173.                         AND doc_id = pCASId
  174.                         AND doc_no = vDocNo
  175.                         AND doc_date = vDocDate
  176.                         AND ou_bu_id = (vOuStructure).ou_bu_id
  177.                         AND ou_branch_id = (vOuStructure).ou_branch_id
  178.                         AND ou_sub_bu_id = (vOuStructure).ou_sub_bu_id;
  179.                    
  180.                     -- DELETE gl_journal_trx
  181.                     DELETE FROM gl_journal_trx
  182.                     WHERE journal_trx_id = vJournalTrxId;
  183.                    
  184.                     -- DELETE gl_journal_trx_item
  185.                     DELETE FROM gl_journal_trx_item
  186.                     WHERE journal_trx_id = vJournalTrxId;
  187.            
  188.                     -- DELETE gl_journal_trx_mapping
  189.                     DELETE FROM gl_journal_trx_mapping
  190.                     WHERE journal_trx_id = vJournalTrxId;
  191.                    
  192.                     -- PERFORM f_reset_approval_to_draft
  193.                     PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pCASId, vDocNo, pDatetime, pRemarkApproval);
  194.                        
  195.                     -- UPDATE t_process_message
  196.                     UPDATE t_process_message
  197.                     SET process_no = pPrevProcessNo,
  198.                         update_datetime = pDatetime,
  199.                         update_user_id = pUserId,
  200.                         version = version + 1
  201.                     WHERE tenant_id = pTenantId
  202.                         AND process_name = vFunctionSubmit
  203.                         AND process_no = pCASId || '_' || vDocNo;
  204.                    
  205.                 ELSE
  206.                     RAISE EXCEPTION 'Cash advance with id % is already used for other settle', vRefId;
  207.                 END IF;
  208.                        
  209.             ELSE
  210.                 RAISE EXCEPTION 'Document with id % is already used for payment', pCASId;
  211.             END IF;
  212.            
  213.         ELSE
  214.             RAISE EXCEPTION 'Admin Process Ledger for Cashbank in year month % is already closed', SUBSTR(vDocDate, 1, 6);
  215.         END IF;
  216.            
  217.     ELSE
  218.         RAISE EXCEPTION 'Document with id % is not found or document is on approval progress', pCASId;
  219.     END IF;
  220.    
  221. END;
  222. $BODY$
  223.   LANGUAGE plpgsql VOLATILE
  224.   COST 100;
  225.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement