Advertisement
aadddrr

CANCEL SUBMIT VOID CONVERSION CB IN OTHER

Mar 21st, 2017
101
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_void_conversion_cb_in_other(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.     pVoidConvCBInOtherId                ALIAS FOR $5;
  12.     pRemarkApproval                     ALIAS FOR $6;
  13.     pPrevProcessNo                      ALIAS FOR $7;
  14.    
  15.     vDocTypeVoidConvCBInOther           bigint;
  16.     vEmptyId                            bigint;
  17.     vFunctionSubmit                     character varying;
  18.     vStatusDocReleased                  character varying;
  19.     vStatusDocDraft                     character varying;
  20.     vStatusDocInProgress                character varying;
  21.     vStatusDocVoid                      character varying;
  22.     vWorkflowStatusDraft                character varying;
  23.     vYes                                character varying;
  24.     vNo                                 character varying;
  25.     vZero                               bigint;
  26.    
  27.     vOuId                               bigint;
  28.     vJournalTrxId                       bigint;
  29.     vDocNo                              character varying;
  30.     vDocDate                            character varying;
  31.     vScheme                             character varying;
  32.    
  33.     vDocJournal                         DOC_JOURNAL%ROWTYPE;
  34.     vOuStructure                        OU_BU_STRUCTURE%ROWTYPE;
  35.     result                              RECORD;
  36.    
  37.     vLedgerCode                         character varying;
  38.     vStatusLedgerNotDone                character varying;
  39.    
  40.     vOuStructureJournalItem             OU_BU_STRUCTURE%ROWTYPE;
  41.    
  42.     vRefAmount                          numeric;
  43.     vSignDebit                          character varying(1);
  44.     vSignCredit                         character varying(1);
  45.     vTypeRate                           character varying(3);
  46.     vActivityCOA                        character varying(10);
  47.     vRefId                              bigint;
  48.     vRefDocTypeId                       bigint;
  49.     vCbInOtherId                        bigint;
  50.     vPaymentAmountConversion            numeric;
  51.    
  52. BEGIN
  53.  
  54.     vDocTypeVoidConvCBInOther := 630;
  55.     vEmptyId := -99;
  56.     vFunctionSubmit := 'cb_submit_void_conversion_cb_in_other';    
  57.     vStatusDocReleased := 'R'
  58.     vStatusDocDraft := 'D';
  59.     vStatusDocInProgress := 'I';
  60.     vStatusDocVoid := 'V';
  61.     vWorkflowStatusDraft := 'DRAFT';
  62.     vYes := 'Y';
  63.     vNo := 'N';
  64.     vZero := 0;
  65.    
  66.     vLedgerCode := 'CASH.BANK';
  67.     vStatusLedgerNotDone := '0';
  68.    
  69.     vSignDebit := 'D';
  70.    
  71.     --RAISE EXCEPTION 'Function Submit For Document Void Conversion Cashbank In Other is not yet Created';
  72.    
  73.     -- get data
  74.     select f_get_ou_bu_structure(A.ou_id) AS ou, A.ou_id, A.doc_no, A.doc_date,
  75.         f_get_document_journal(A.doc_type_id) as doc, C.scheme,
  76.         A.ref_id, A.ref_doc_type_id
  77.     FROM cb_in_out_cashbank A, m_document C
  78.     WHERE A.in_out_cashbank_id = pVoidConvCBInOtherId AND
  79.         A.doc_type_id = C.doc_type_id AND
  80.         A.doc_type_id = vDocTypeVoidConvCBInOther AND
  81.         A.status_doc = vStatusDocReleased
  82.     INTO result;
  83.    
  84.     IF FOUND THEN
  85.         vOuStructure := result.ou;
  86.         vOuId := result.ou_id;
  87.         vDocNo := result.doc_no;
  88.         vDocDate := result.doc_date;
  89.         vDocJournal := result.doc;
  90.         vScheme := result.scheme;
  91.         vRefId := result.ref_id;
  92.         vRefDocTypeId := result.ref_doc_type_id;
  93.        
  94.         SELECT A.ref_id, B.payment_amount
  95.         INTO vCbInOtherId, vPaymentAmountConversion
  96.         FROM cb_in_out_cashbank A
  97.             INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  98.         WHERE A.in_out_cashbank_id = vRefId;
  99.        
  100.         -- Cek status ledger not yet closed
  101.         IF EXISTS (
  102.             SELECT 1
  103.             FROM m_admin_process_ledger e, m_ou_structure f, t_ou g
  104.             WHERE e.tenant_id = pTenantId
  105.                 AND e.ou_id = f.ou_bu_id
  106.                 AND f.ou_id = vOuId
  107.                 AND e.date_year_month = SUBSTR(vDocDate, 1, 6)
  108.                 AND e.ledger_code = vLedgerCode AND
  109.                 f.ou_id = g.ou_id AND e.status_ledger = vStatusLedgerNotDone) THEN
  110.                
  111.             /*
  112.              * validasi status doc CONVERSION CB IN OTHER TO PARTNER
  113.              */
  114.             IF NOT EXISTS (
  115.                 SELECT (1)
  116.                 FROM cb_in_out_cashbank A
  117.                 WHERE A.in_out_cashbank_id = vRefId
  118.                     AND A.status_doc <> vStatusDocVoid
  119.             ) THEN
  120.            
  121.                 /*
  122.                  * validasi flg_convert harus N
  123.                  */
  124.                 IF NOT EXISTS (
  125.                     SELECT (1)
  126.                     FROM cb_non_ar_receive_to_ar_balance A
  127.                     WHERE A.in_out_cashbank_id = vCbInOtherId
  128.                         AND A.flg_convert <> vNo
  129.                 ) THEN
  130.        
  131.                     -- UPDATE DOCUMENT VOID CONVERSION CB IN OTHER
  132.                     UPDATE cb_in_out_cashbank
  133.                     SET status_doc = vStatusDocDraft,
  134.                         workflow_status = vWorkflowStatusDraft,
  135.                         version = version + 1,
  136.                         update_datetime = pDatetime,
  137.                         update_user_id = pUserId
  138.                     WHERE in_out_cashbank_id = pVoidConvCBInOtherId;
  139.                    
  140.                     -- FOR DOCUMENT CONVERSION CB IN OTHER to partner
  141.                     UPDATE cb_in_out_cashbank
  142.                     SET status_doc = vStatusDocInProgress,
  143.                         version = version + 1,
  144.                         update_datetime = pDatetime,
  145.                         update_user_id = pUserId
  146.                     WHERE in_out_cashbank_id = vRefId; 
  147.                    
  148.                     -- UPDATE DATA  NON AR BALANCE -> DI TABLE cb_non_ar_receive_to_ar_balance
  149.                     -- > Mengembalikan amount yang sudah di convert sebelumnya
  150.                     -- > Mengembalikan flg_convert
  151.                     UPDATE cb_non_ar_receive_to_ar_balance A
  152.                     SET convert_amount = A.convert_amount + vPaymentAmountConversion,
  153.                         version = A.version + 1,
  154.                         update_datetime = pDatetime,
  155.                         update_user_id = pUserId
  156.                     WHERE A.in_out_cashbank_id = vCbInOtherId;
  157.                    
  158.                     --update flg_convert = 'Y'
  159.                     UPDATE cb_non_ar_receive_to_ar_balance
  160.                     SET flg_convert = vYes
  161.                     WHERE in_out_cashbank_id = vCbInOtherId
  162.                         AND receive_amount = convert_amount;
  163.                        
  164.                     -- UPDATE DATA DOC CB IN OTHER
  165.                     UPDATE cb_in_out_cashbank A
  166.                     SET status_doc = vStatusDocVoid,
  167.                         version = A.version + 1,
  168.                         update_datetime = pDatetime,
  169.                         update_user_id = pUserId
  170.                     WHERE A.in_out_cashbank_id = vCbInOtherId;
  171.                    
  172.                     INSERT INTO fi_receipt_ar_balance
  173.                     (receipt_ar_balance_id, tenant_id, ou_id, doc_type_id, doc_no, doc_date,
  174.                     cashbank_id, partner_id, curr_code, amount, remark,
  175.                     flg_alloc, ref_alloc_id, ref_item_id, cheque_giro_no, cheque_giro_date, cheque_giro_bank,
  176.                     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  177.                     SELECT A.in_out_cashbank_id, A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  178.                         B.cashbank_id, A.partner_id, B.curr_code, B.payment_amount, A.remark,
  179.                         vStatusDocInProgress, vEmptyId, A.in_out_cashbank_id, '' AS cheque_giro_no, '' AS cheque_giro_date, '' AS bank_payment,
  180.                         0, pDatetime, pUserId, pDatetime, pUserId
  181.                     FROM cb_in_out_cashbank A
  182.                         INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  183.                     WHERE A.in_out_cashbank_id = vRefId;
  184.                    
  185.                     -- PERFORM cancel gl_cancel_admin_journal_trx
  186.                     PERFORM gl_cancel_admin_journal_trx(pTenantId, (vOuStructure).ou_bu_id, vOuId, (vDocJournal).journal_type, f_get_year_month_date(vDocDate), 'DAILY', pDatetime, pUserId);
  187.                    
  188.                     -- Find journal trx id
  189.                     SELECT journal_trx_id INTO vJournalTrxId
  190.                     FROM gl_journal_trx
  191.                     WHERE tenant_id = pTenantId
  192.                         AND journal_type = (vDocJournal).journal_type
  193.                         AND doc_type_id = vDocTypeVoidConvCBInOther
  194.                         AND doc_id = pVoidConvCBInOtherId
  195.                         AND doc_no = vDocNo
  196.                         AND doc_date = vDocDate
  197.                         AND ou_bu_id = (vOuStructure).ou_bu_id
  198.                         AND ou_branch_id = (vOuStructure).ou_branch_id
  199.                         AND ou_sub_bu_id = (vOuStructure).ou_sub_bu_id;
  200.                    
  201.                     -- DELETE gl_journal_trx
  202.                     DELETE FROM gl_journal_trx
  203.                     WHERE journal_trx_id = vJournalTrxId;
  204.                    
  205.                     -- DELETE gl_journal_trx_item
  206.                     DELETE FROM gl_journal_trx_item
  207.                     WHERE journal_trx_id = vJournalTrxId;
  208.            
  209.                     -- DELETE gl_journal_trx_mapping
  210.                     DELETE FROM gl_journal_trx_mapping
  211.                     WHERE journal_trx_id = vJournalTrxId;
  212.                    
  213.                     -- PERFORM f_reset_approval_to_draft
  214.                     PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pVoidConvCBInOtherId, vDocNo, pDatetime, pRemarkApproval);
  215.                        
  216.                     -- UPDATE t_process_message
  217.                     UPDATE t_process_message
  218.                     SET process_no = pPrevProcessNo,
  219.                         update_datetime = pDatetime,
  220.                         update_user_id = pUserId,
  221.                         version = version + 1
  222.                     WHERE tenant_id = pTenantId
  223.                         AND process_name = vFunctionSubmit
  224.                         AND process_no = pVoidConvCBInOtherId || '_' || vDocNo;
  225.          
  226.                 ELSE
  227.                     RAISE EXCEPTION 'Referenced document with id % is already used for other conversion', pVoidConvCBInOtherId;
  228.                 END IF;
  229.                        
  230.             ELSE
  231.                 RAISE EXCEPTION 'Referenced document with id % is not void', vRefId;
  232.             END IF;
  233.                    
  234.         ELSE
  235.             RAISE EXCEPTION 'Admin Process Ledger for Cashbank in year month % is already closed', SUBSTR(vDocDate, 1, 6);
  236.         END IF;
  237.        
  238.     ELSE
  239.         RAISE EXCEPTION 'Document with id % is not found or is on approval progress', pVoidConvCBInOtherId;
  240.     END IF;
  241.                
  242. END;
  243. $BODY$
  244.   LANGUAGE plpgsql VOLATILE
  245.   COST 100;
  246.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement