Tuesday, April 18, 2017

API to assign bank account number to suppliers

declare
p_api_version          number;
  p_init_msg_list        varchar2(200);
  p_commit               varchar2(200);
  x_return_status        varchar2(200);
  x_msg_count            number;
  x_msg_data             varchar2(200);
  p_payee                apps.iby_disbursement_setup_pub.payeecontext_rec_type;
  p_assignment_attribs   apps.iby_fndcpt_setup_pub.pmtinstrassignment_rec_type;
  lr_ext_bank_acct_dtl   iby_ext_bank_accounts%rowtype;
  x_assign_id            number;
  x_response             apps.iby_fndcpt_common_pub.result_rec_type;
  lv_vendor_site_code    varchar2(100);
  lv_vendor_id number;    
  lv_bank_acct_name      varchar2(100);
  lv_supp_site_id        varchar2(100);
  lv_supp_party_site_id  varchar2(100);
  lv_acct_owner_party_id varchar2(100);
  lv_org_id              varchar2(100);
  l_msg                  varchar2(200);
   cursor c_suppliers is
 select
        s.vendor_id,
        s.vendor_site_code,
        s.street,
        s.address_line2,
        s.address_line3,
        s.city,
        s.country,
        s.bank_name,
        s.branch_name,
        s.bank_account_country,
        s.bank_account_num,
        s.currency_code,
        s.iban,
        s.bank_account_type,
        s.payment_factor_flag,
        s.foreign_payment_use_flag,
        s.bank_account_name,
        s.bank_account_num_electronic,
        s.liability_code_id,
        s.prepay_code_combination_id
    from tem_suppliers s;
begin
  -- initialize apps session
  fnd_global.apps_initialize(user_id=>6837,
                           resp_id=>50558,
                           resp_appl_id=>200);
  mo_global.init('S', null);
  --fnd_client_info.set_org_context(101);
  -- input values
  for c in c_suppliers loop
  lv_vendor_site_code := c.vendor_site_code;
  lv_vendor_id      := c.vendor_id;
  lv_bank_acct_name   := c.bank_account_name;
  -- assign api parameters
  p_api_version   := 1.0;
  p_init_msg_list := fnd_api.g_true;
  p_commit        := fnd_api.g_true;

  -- get ext bank account details
  begin
    select *
      into lr_ext_bank_acct_dtl
      from iby_ext_bank_accounts
     where bank_account_name = lv_bank_acct_name;
  exception
    when others then
      dbms_output.put_line('Unable to derive the external bank details:' ||
                           sqlerrm);
  end;

  -- get supplier details
  begin
    select assa.vendor_site_id,
           assa.party_site_id,
           aps.party_id,
           assa.org_id
      into lv_supp_site_id,
           lv_supp_party_site_id,
           lv_acct_owner_party_id,
           lv_org_id
      from ap_suppliers aps, ap_supplier_sites_all assa
     where aps.vendor_id = assa.vendor_id
       and aps.vendor_id = c.vendor_id
       and assa.vendor_site_code = lv_vendor_site_code;
  exception  
    when others then
      dbms_output.put_line('Error- Get supp_site_id and supp_party_site_id' ||
                           sqlcode || sqlerrm);
  end;

  -- assign payee values
  p_payee.supplier_site_id := lv_supp_site_id;
  p_payee.party_id         := lv_acct_owner_party_id;
  p_payee.party_site_id    := lv_supp_party_site_id;
  p_payee.payment_function := 'PAYABLES_DISB';
  p_payee.org_id           := lv_org_id;
  p_payee.org_type         := 'OPERATING_UNIT';
  -- assignment values
  p_assignment_attribs.instrument.instrument_type := 'BANKACCOUNT';
  p_assignment_attribs.instrument.instrument_id   := lr_ext_bank_acct_dtl.ext_bank_account_id;
  -- external bank account id
  p_assignment_attribs.priority   := 1;
  p_assignment_attribs.start_date := sysdate;

  iby_disbursement_setup_pub.set_payee_instr_assignment
    (p_api_version        => p_api_version,
     p_init_msg_list      => p_init_msg_list,
     p_commit             => p_commit,
     x_return_status      => x_return_status,
     x_msg_count          => x_msg_count,
     x_msg_data           => x_msg_data,
     p_payee              => p_payee,
     p_assignment_attribs => p_assignment_attribs,
     x_assign_id          => x_assign_id,
     x_response           => x_response
    );

  dbms_output.put_line('X_RETURN_STATUS = ' || x_return_status);
  dbms_output.put_line('X_MSG_COUNT = ' || x_msg_count);
  dbms_output.put_line('X_MSG_DATA = ' || x_msg_data);
  dbms_output.put_line('X_ASSIGN_ID = ' || x_assign_id);
  dbms_output.put_line('X_RESPONSE.Result_Code = ' ||
                       x_response.result_code);
  dbms_output.put_line('X_RESPONSE.Result_Category = ' ||
                       x_response.result_category);
  dbms_output.put_line('X_RESPONSE.Result_Message = ' ||
                       x_response.result_message);
commit;

  if (x_return_status <> fnd_api.g_ret_sts_success) then
    for i in 1 .. fnd_msg_pub.count_msg loop
      l_msg := fnd_msg_pub.get(p_msg_index => i,
                               p_encoded   => fnd_api.g_false);
      dbms_output.put_line('The API call failed with error ' || l_msg);
    end loop;
  else
    dbms_output.put_line('The API call ended with SUCESSS status');
  end if;
  end loop;
end;

No comments:

Post a Comment