Module: BankApi::Clients::BancoSecurity::Deposits

Included in:
CompanyClient
Defined in:
lib/bank_api/clients/banco_security/concerns/deposits.rb

Instance Method Summary collapse

Instance Method Details

#any_deposits?Boolean

Returns:

  • (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_rangeObject



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_urlObject



105
106
107
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 105

def 
  browser.search("a:contains('Descargar TXT')").first.attribute("href")
end

#deposits_from_account_detailsObject



42
43
44
45
46
47
48
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 42

def 
  data = browser.download(
    
  ).content.encode("UTF-8", "iso-8859-3").split("\r\n")
  transactions = data[3, data.count - 11].reverse
  (transactions)
end

#deposits_from_txtObject



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_urlObject



96
97
98
99
100
101
102
103
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 96

def deposits_txt_url
   = 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_inputsObject



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 (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_rangeObject



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

#timezoneObject



136
137
138
# File 'lib/bank_api/clients/banco_security/concerns/deposits.rb', line 136

def timezone
  @timezone ||= Timezone['America/Santiago']
end

#total_depositsObject



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_fetchObject



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