Advertisement
aadddrr

CANCEL SUBMIT CB IN OTHER TO PARTNER

Mar 21st, 2017
99
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_conversion_cbin_other_to_partner(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.     pCBInId                             ALIAS FOR $5;
  12.     pRemarkApproval                     ALIAS FOR $6;
  13.     pPrevProcessNo                      ALIAS FOR $7;
  14.    
  15.     vCbInDocTypeId                      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.    
  49. BEGIN
  50.    
  51.     vCbInDocTypeId := 626;
  52.     vEmptyId := -99;
  53.     vFunctionSubmit := 'cb_submit_conversion_cbin_other_to_partner';       
  54.     vStatusDocReleased := 'R'
  55.     vStatusDocDraft := 'D';
  56.     vStatusDocInProgress := 'I';
  57.     vStatusDocVoid := 'V';
  58.     vWorkflowStatusDraft := 'DRAFT';
  59.     vYes := 'Y';
  60.     vNo := 'N';
  61.     vZero := 0;
  62.    
  63.     vLedgerCode := 'CASH.BANK';
  64.     vStatusLedgerNotDone := '0';
  65.    
  66.     vSignDebit := 'D';
  67.  
  68.     --RAISE EXCEPTION 'Function Submit For Document Conversion Cashbank In Other to Partner is not yet Created';
  69.    
  70.     -- get data
  71.     select f_get_ou_bu_structure(A.ou_id) AS ou, A.ou_id, A.doc_no, A.doc_date,
  72.         f_get_document_journal(A.doc_type_id) as doc, C.scheme,
  73.         A.ref_id
  74.     FROM cb_in_out_cashbank A, m_document C
  75.     WHERE A.in_out_cashbank_id = pCBInId AND
  76.         A.doc_type_id = C.doc_type_id AND
  77.         A.doc_type_id = vCbInDocTypeId AND
  78.         A.status_doc = vStatusDocReleased
  79.     INTO result;
  80.    
  81.     IF FOUND THEN
  82.         vOuStructure := result.ou;
  83.         vOuId := result.ou_id;
  84.         vDocNo := result.doc_no;
  85.         vDocDate := result.doc_date;
  86.         vDocJournal := result.doc;
  87.         vScheme := result.scheme;
  88.         vRefId := result.ref_id;
  89.        
  90.         -- Cek status ledger not yet closed
  91.         IF EXISTS (
  92.             SELECT 1
  93.             FROM m_admin_process_ledger e, m_ou_structure f, t_ou g
  94.             WHERE e.tenant_id = pTenantId
  95.                 AND e.ou_id = f.ou_bu_id
  96.                 AND f.ou_id = vOuId
  97.                 AND e.date_year_month = SUBSTR(vDocDate, 1, 6)
  98.                 AND e.ledger_code = vLedgerCode AND
  99.                 f.ou_id = g.ou_id AND e.status_ledger = vStatusLedgerNotDone) THEN
  100.                
  101.             /*
  102.              * validasi flg_alloc harus N
  103.              */
  104.             IF NOT EXISTS (
  105.                 SELECT (1)
  106.                 FROM fi_receipt_ar_balance A
  107.                 WHERE A.receipt_ar_balance_id = pCBInId
  108.                     AND A.flg_alloc <> vNo
  109.             ) THEN
  110.                
  111.                 /*
  112.                  * validasi flg_convert harus bukan I
  113.                  */
  114.                 IF NOT EXISTS (
  115.                     SELECT (1)
  116.                     FROM cb_non_ar_receive_to_ar_balance A
  117.                     WHERE A.in_out_cashbank_id = vRefId
  118.                         AND A.flg_convert = vStatusDocInProgress
  119.                 ) THEN
  120.                    
  121.                     /*
  122.                      * jika flg_convert = Y, status_doc ref harus void
  123.                      */
  124.                     IF NOT EXISTS (
  125.                         SELECT (1)
  126.                         FROM cb_in_out_cashbank A, cb_non_ar_receive_to_ar_balance B
  127.                         WHERE A.in_out_cashbank_id = vRefId
  128.                             AND A.in_out_cashbank_id = B.in_out_cashbank_id
  129.                             AND B.flg_convert = 'Y'
  130.                             AND A.status_doc <> vStatusDocVoid
  131.                     ) THEN
  132.                
  133.                         /*
  134.                          * 1.delete saldo cashbank in ar ke module finance
  135.                          * 2.update status ref-doc
  136.                          * 3.update status doc cb_in_out_cashbank
  137.                          * 4.update previous data balance (from CB In Other)
  138.                          * 5.hapus jurnal
  139.                          */
  140.                        
  141.                         -- 1.delete saldo cashbank in ar ke module finance
  142.                         DELETE
  143.                         FROM fi_receipt_ar_balance Z   
  144.                         WHERE Z.receipt_ar_balance_id = pCBInId;
  145.                        
  146.                         -- 2.update status ref-doc
  147.                         UPDATE cb_in_out_cashbank A
  148.                         SET status_doc = vStatusDocReleased,
  149.                             version = A.version + 1,
  150.                             update_datetime = pDatetime,
  151.                             update_user_id = pUserId
  152.                         FROM cb_non_ar_receive_to_ar_balance B
  153.                         WHERE A.in_out_cashbank_id = vRefId
  154.                             AND A.in_out_cashbank_id = B.in_out_cashbank_id
  155.                             AND B.flg_convert = 'Y';
  156.                        
  157.                         -- 3.update status doc cb_in_out_cashbank
  158.                         UPDATE cb_in_out_cashbank
  159.                         SET status_doc = vStatusDocDraft,
  160.                             workflow_status = vWorkflowStatusDraft,
  161.                             version = version + 1,
  162.                             update_datetime = pDatetime,
  163.                             update_user_id = pUserId
  164.                         WHERE in_out_cashbank_id = pCBInId;
  165.                        
  166.                         --update data NON AR balance
  167.                         WITH data_convert AS (
  168.                             SELECT A.ref_id, B.payment_amount
  169.                             FROM cb_in_out_cashbank A
  170.                                 INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  171.                             WHERE A.in_out_cashbank_id = pCBInId
  172.                         )
  173.                         UPDATE cb_non_ar_receive_to_ar_balance A
  174.                         SET convert_amount = convert_amount - payment_amount,
  175.                             flg_convert = vStatusDocInProgress,
  176.                             version = version + 1,
  177.                             update_datetime = pDatetime,
  178.                             update_user_id = pUserId
  179.                         FROM data_convert B
  180.                         WHERE A.in_out_cashbank_id = B.ref_id;
  181.                        
  182.                         -- PERFORM cancel gl_cancel_admin_journal_trx
  183.                         PERFORM gl_cancel_admin_journal_trx(pTenantId, (vOuStructure).ou_bu_id, vOuId, (vDocJournal).journal_type, f_get_year_month_date(vDocDate), 'DAILY', pDatetime, pUserId);
  184.                        
  185.                         -- Find journal trx id
  186.                         SELECT journal_trx_id INTO vJournalTrxId
  187.                         FROM gl_journal_trx
  188.                         WHERE tenant_id = pTenantId
  189.                             AND journal_type = (vDocJournal).journal_type
  190.                             AND doc_type_id = vCbInDocTypeId
  191.                             AND doc_id = pCBInId
  192.                             AND doc_no = vDocNo
  193.                             AND doc_date = vDocDate
  194.                             AND ou_bu_id = (vOuStructure).ou_bu_id
  195.                             AND ou_branch_id = (vOuStructure).ou_branch_id
  196.                             AND ou_sub_bu_id = (vOuStructure).ou_sub_bu_id;
  197.                        
  198.                         -- DELETE gl_journal_trx
  199.                         DELETE FROM gl_journal_trx
  200.                         WHERE journal_trx_id = vJournalTrxId;
  201.                        
  202.                         -- DELETE gl_journal_trx_item
  203.                         DELETE FROM gl_journal_trx_item
  204.                         WHERE journal_trx_id = vJournalTrxId;
  205.                
  206.                         -- DELETE gl_journal_trx_mapping
  207.                         DELETE FROM gl_journal_trx_mapping
  208.                         WHERE journal_trx_id = vJournalTrxId;
  209.                        
  210.                         -- PERFORM f_reset_approval_to_draft
  211.                         PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pCBInId, vDocNo, pDatetime, pRemarkApproval);
  212.                            
  213.                         -- UPDATE t_process_message
  214.                         UPDATE t_process_message
  215.                         SET process_no = pPrevProcessNo,
  216.                             update_datetime = pDatetime,
  217.                             update_user_id = pUserId,
  218.                             version = version + 1
  219.                         WHERE tenant_id = pTenantId
  220.                             AND process_name = vFunctionSubmit
  221.                             AND process_no = pCBInId || '_' || vDocNo;
  222.                
  223.                     ELSE
  224.                         RAISE EXCEPTION 'Referenced document with id % is not void', vRefId;
  225.                     END IF;
  226.                            
  227.                 ELSE
  228.                     RAISE EXCEPTION 'Document with id % is already used for other conversion', pCBInId;
  229.                 END IF;
  230.                
  231.             ELSE
  232.                 RAISE EXCEPTION 'Document with id % is already allocated', pCBInId;
  233.             END IF;
  234.                
  235.         ELSE
  236.             RAISE EXCEPTION 'Admin Process Ledger for Cashbank in year month % is already closed', SUBSTR(vDocDate, 1, 6);
  237.         END IF;
  238.        
  239.     ELSE
  240.         RAISE EXCEPTION 'Document with id % is not found, is on approval progress, or is void', pCBInId;
  241.     END IF;
  242.    
  243. END;
  244. $BODY$
  245.   LANGUAGE plpgsql VOLATILE
  246.   COST 100;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement