Module: RusBankRails::ActsAsBank::ClassMethods

Defined in:
lib/rus_bank_rails/acts_as_bank.rb

Instance Method Summary collapse

Instance Method Details

#acts_as_bankObject



14
15
16
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 14

def acts_as_bank
  include RusBankRails::ActsAsBank::LocalInstanceMethods
end

#bic_to_int_code(bic) ⇒ Object

Метод возвращает внутренний номер банка по БИК

Parameters:

bic

Банковский Идентификационный Код



24
25
26
27
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 24

def bic_to_int_code(bic)
  resp = check_and_update(bic: bic)
  resp ? resp.internal_code : nil
end

#bic_to_reg_number(bic) ⇒ Object

Метод возвращает регистрационный номер банка по БИК

Parameters:

bic

Банковский Идентификационный Код



35
36
37
38
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 35

def bic_to_reg_number(bic)
  resp = check_and_update(bic: bic)
  resp ? resp.reg_number : nil
end

#enum_bicObject

Данные по BIC кодам КО, без филиалов. При этом обновляет в базе каждый экземпляр результата. Ресурсоемкий метод, использовать с учетом этого.

Returns:

Возвращает массив актуальных записей класса <Bank> из базы.



159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 159

def enum_bic
  cbr = RusBank.new
  bics = cbr.EnumBic

  if bics
    banks = []
    bics.each do |b|
      bank = check_and_update(bic: b[:bic])
      banks << bank unless bank.nil?
    end
    banks
  else
    nil
  end
end

#get_offices(internal_code) ⇒ Object

Возвращает список филиалов по внутреннему номеру банка. Метод делегирует вызов к соответствующему методу RusBank. В базу не сохраняет, все результаты онлайн из API ЦБ.

Parameters:

internal_code

Внутренний номер банка

Returns:

Возвращает массив хэшей вида номер филиала”, :cname=>“название филиала”, :cndate=>“Дата регистрации филиала”, :straddrmn=>“Место нахождения (фактический адрес)”, :reg_id=>“вн. Код региона”



129
130
131
132
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 129

def get_offices(internal_code)
  cbr = RusBank.new
  cbr.GetOffices(internal_code)
end

#get_offices_by_region(region_code) ⇒ Object

Список филиалов в указанном регионе. Метод делегирует вызов к соответствующему методу RusBank. В базу не сохраняет, все результаты онлайн из API ЦБ. Ресурсоемкий метод, использовать с учетом этого.

Parameters:

region_code

код региона

Returns:

Возвращает массив хэшей вида Код банка (головного)”, :cregnum=>“рег. номер филиала”, :cname=>“название филиала”, :cndate=>“Дата регистрации филиала”, :straddrmn=>“Место нахождения (фактический адрес)”



148
149
150
151
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 148

def get_offices_by_region(region_code)
  cbr = RusBank.new
  cbr.GetOfficesByRegion(region_code)
end

#int_code_to_reg_number(internal_code) ⇒ Object

Возвращает регистрационный номер по внутреннему номеру

Parameters:

internal_code

Внутренний номер банка



82
83
84
85
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 82

def int_code_to_reg_number(internal_code)
  bank = check_and_update(internal_code: internal_code)
  bank.reg_number if bank
end

#reg_num_to_int_code(reg_number) ⇒ Object

Возвращает внутренний номер по регистрационному номеру

Parameters:

reg_number

Регистрационный номер банка



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 46

def reg_num_to_int_code(reg_number)
  # TODO: Подумать, стоит ли учет смены регистрационного номера столь лишнего кода. Данный подход основывается на данных с API ЦБ, что более точно. Но можно все упростить, если допустить, что регистрационный код никогда не меняется.
  bank = self.find_by_reg_number(reg_number.to_i)
  get_int_code_by_reg_number = lambda {
    cbr = RusBank.new
    internal_code = cbr.RegNumToIntCode(reg_number)
    if internal_code
      bic = cbr.CreditInfoByIntCode(internal_code)[:co][:bic]
      check_and_update(bic: bic)
      return internal_code.to_i
    else
      return nil
    end
  }
  if bank.nil?
    get_int_code_by_reg_number.call
  else
    if bank.bic                               # Банк в базе может быть без БИК
      resp = check_and_update(bic: bank.bic)
      if resp.reg_number == reg_number.to_i   # На случай если после обновления записи в базе reg_number
        resp.internal_code                    # поменялся и найденный банк из базы становится неактуальным
      else
        get_int_code_by_reg_number.call
      end
    else                                      # Если без БИК, обновлять не требуется, банк не действующий.
      bank.internal_code
    end
  end
end

#regions_enumObject

Список регионов. Метод делегирует вызов к соответствующему методу RusBank. В базу не сохраняет, все результаты онлайн из API ЦБ.

Returns:

Возвращает массив хэшей вида код региона”, :cname=>“Название региона”



182
183
184
185
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 182

def regions_enum
  cbr = RusBank.new
  cbr.RegionsEnum
end

#search_by_bic(bic) ⇒ Object

Метод возвращает банк по БИК

Parameters:

bic

Банковский Идентификационный Код

Returns:

Возвращает экземпляр класса <Bank> из базы или nil.



195
196
197
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 195

def search_by_bic(bic)
  check_and_update(bic: bic)
end

#search_by_main_reg_number(main_reg_number) ⇒ Object

Метод возвращает банк по основному государственному регистрационному номеру(ОГРН)

Parameters:

main_reg_number

Основной государственный регистрационный номер

Returns:

Возвращает экземпляр класса <Bank> из базы или nil.



220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 220

def search_by_main_reg_number(main_reg_number)
  bank = Bank.where(main_reg_number: main_reg_number.to_s).first
  if bank
    check_and_update(internal_code: bank.internal_code )
  else                      # Единственный метод в API, из которого можно вытянуть банк по ОГРН
    cbr = RusBank.new       # является enum_bic, но локальный вариант метода обновляет ВСЕ полученные банки
    all_banks = cbr.EnumBic # в базе, что лишнее для данного случая. Поэтому используем enum_bic из rus_bank.

    if all_banks
      all_banks.each do |b|
        if b[:rb] == main_reg_number
          return check_and_update(bic: b[:bic] )
        end
      end
      return nil
    end
  end
end

#search_by_name(bank_name) ⇒ Object

Поиск по названию банка. При этом, обращаясь к API, обновляет в базе каждый экземпляр результата. Чем большая выборка на выходе, тем более ресурсоемкий метод.

Parameters:

bank_name

наименование банка

Returns:

Возвращает массив актуальных записей класса <Bank> из базы.



96
97
98
99
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 96

def search_by_name(bank_name)
  cbr = RusBank.new
  get_updated_array( cbr.SearchByName(bank_name) )
end

#search_by_reg_number(reg_number) ⇒ Object

Метод возвращает банк по регистрационному номеру ЦБ РФ

Parameters:

reg_number

Регистрационный номер банка

Returns:

Возвращает экземпляр класса <Bank> из базы или nil.



207
208
209
210
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 207

def search_by_reg_number(reg_number)
  internal_code = reg_num_to_int_code(reg_number.to_i)
  internal_code ? check_and_update(internal_code: internal_code) : nil
end

#search_by_region_code(region_code) ⇒ Object

Список банков по коду региона. При этом обновляет в базе каждый экземпляр результата. Ресурсоемкий метод, использовать с учетом этого.

Parameters:

region_code

код региона

Returns:

Возвращает массив актуальных записей класса <Bank> из базы.



111
112
113
114
# File 'lib/rus_bank_rails/acts_as_bank.rb', line 111

def search_by_region_code(region_code)
  cbr = RusBank.new
  get_updated_array( cbr.SearchByRegionCode(region_code) )
end