Module: BankApi::Clients::BancoSecurity::Deposits
- Included in:
- CompanyClient
- Defined in:
- lib/bank_api/clients/banco_security/concerns/deposits.rb
Instance Method Summary collapse
- #any_deposits? ⇒ Boolean
- #deposit_range ⇒ Object
- #deposits_account_details_url ⇒ Object
- #deposits_from_account_details ⇒ Object
- #deposits_from_txt ⇒ Object
- #deposits_txt_url ⇒ Object
- #extract_client_name(text) ⇒ Object
- #fill_date_inputs ⇒ Object
- #format_account_transactions(transactions) ⇒ Object
- #format_rut(rut) ⇒ Object
- #format_transactions(transactions) ⇒ Object
- #select_deposits_range ⇒ Object
- #timezone ⇒ Object
- #total_deposits ⇒ Object
- #validate_deposits(deposits) ⇒ Object
- #wait_for_deposits_fetch ⇒ Object
Instance Method Details
#any_deposits? ⇒ Boolean
121 122 123 124 125 126 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 121 def any_deposits? browser.search( "#gridPrincipalRecibidas " \ ".k-label:contains('No se han encontrado transacciones para la búsqueda seleccionada.')" ).none? end |
#deposit_range ⇒ Object
89 90 91 92 93 94 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 89 def deposit_range @deposit_range ||= begin today = timezone.utc_to_local(Time.now).to_date { start: (today - @days_to_check), end: today } end end |
#deposits_account_details_url ⇒ Object
105 106 107 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 105 def deposits_account_details_url browser.search("a:contains('Descargar TXT')").first.attribute("href") end |
#deposits_from_account_details ⇒ Object
42 43 44 45 46 47 48 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 42 def deposits_from_account_details data = browser.download( deposits_account_details_url ).content.encode("UTF-8", "iso-8859-3").split("\r\n") transactions = data[3, data.count - 11].reverse format_account_transactions(transactions) end |
#deposits_from_txt ⇒ Object
35 36 37 38 39 40 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 35 def deposits_from_txt return [] unless any_deposits? download = browser.download(deposits_txt_url) transactions = download.content.split("\n").drop(1).map { |r| r.split("|") } format_transactions(transactions) end |
#deposits_txt_url ⇒ Object
96 97 98 99 100 101 102 103 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 96 def deposits_txt_url account_number = CGI.escape(selenium_browser.execute_script('return nCuenta')) start_ = CGI.escape("#{deposit_range[:start].strftime('%m/%d/%Y')} 00:00:00") end_ = CGI.escape("#{deposit_range[:end].strftime('%m/%d/%Y')} 00:00:00") "https://www.bancosecurity.cl/ConvivenciaEmpresas/CartolasTEF/Download/" + "CrearTxTRecibidas?numeroCuenta=#{account_number}&monto=0&" + "fechaInicio=#{start_}&fechaFin=#{end_}&estado=1" end |
#extract_client_name(text) ⇒ Object
82 83 84 85 86 87 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 82 def extract_client_name(text) parts = text.to_s.split(" De ") parts = text.to_s.split(" DE ") if parts.count == 1 return text if parts.count > 2 parts.last.to_s.strip end |
#fill_date_inputs ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 13 def fill_date_inputs start_element = browser.search('#datePickerInicioRecibidas').elements.first start_element.send_key "-" deposit_range[:start].strftime('%d%m%Y').chars.each do |c| start_element.send_key c sleep 0.1 end end_element = browser.search('#datePickerFinRecibido').elements.first end_element.send_key "-" deposit_range[:end].strftime('%d%m%Y').chars.each do |c| end_element.send_key c sleep 0.1 end end |
#format_account_transactions(transactions) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 63 def format_account_transactions(transactions) transactions.inject([]) do |memo, t| parts = t.split(";") amount = parts[4].delete(",").to_i next memo if amount.zero? client = extract_client_name(parts[1]) memo << { client: client, rut: nil, date: Date.strptime(parts[0], "%d/%m"), time: nil, amount: amount } memo end end |
#format_rut(rut) ⇒ Object
109 110 111 112 113 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 109 def format_rut(rut) verification_digit = rut[-1] without_verification_digit = rut[0..-2].reverse.scan(/.{1,3}/).join(".").reverse "#{without_verification_digit}-#{verification_digit}" end |
#format_transactions(transactions) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 50 def format_transactions(transactions) transactions.map do |t| datetime = timezone.local_to_utc(DateTime.parse(t[0])) { client: t[1], rut: format_rut(t[2]), date: datetime.to_date, time: datetime, amount: t[5].to_i } end end |
#select_deposits_range ⇒ Object
5 6 7 8 9 10 11 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 5 def select_deposits_range browser.search('.BusquedaPorDefectoRecibida a:contains("búsqueda avanzada")').click browser.search('#RadioEntreFechasRecibido').click fill_date_inputs wait('.ContenedorSubmitRecibidas .btn_buscar').click wait_for_deposits_fetch end |
#timezone ⇒ Object
136 137 138 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 136 def timezone @timezone ||= Timezone['America/Santiago'] end |
#total_deposits ⇒ Object
115 116 117 118 119 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 115 def total_deposits pages_info = wait(".k-pager-info") matches = pages_info.text.match(/(\d+)[a-z\s-]+(\d+)[a-z\s-]+(\d+)/) matches[3].to_i end |
#validate_deposits(deposits) ⇒ Object
128 129 130 131 132 133 134 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 128 def validate_deposits(deposits) total_deposits_ = total_deposits unless deposits.count == total_deposits_ raise BankApi::Deposit::QuantityError, "Expected #{total_deposits_} deposits," + " got #{deposits.count}." end end |
#wait_for_deposits_fetch ⇒ Object
28 29 30 31 32 33 |
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 28 def wait_for_deposits_fetch goto_frame query: '#mainFrame' goto_frame query: 'iframe[name="central"]', should_reset: false wait('.k-loading-image') { browser.search('.k-loading-image').any? } wait('.k-loading-image') { browser.search('.k-loading-image').none? } end |