bank_api 0.4.4 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63748c7e32a8c3a3485046be38b918a427f4d6a8833ad1ea7d6845c3bbf310b2
4
- data.tar.gz: 62d60679b1a457f6f96a57a4f9144a4e66b4704ba361eaca69eb0d3253a99820
3
+ metadata.gz: cd569e27d05057177eb55bd22f5ea7e715e1320543d49343a684cd12a3ed53b5
4
+ data.tar.gz: 1421ca3ecfa79b5c441849470666099ee5b0e2429550e186a5ff3273d0a9707a
5
5
  SHA512:
6
- metadata.gz: 39605cd234af305e2033c6c720203807a1fff43e3a462ae4d16e32cdba2a7c769c0bea4263225f428522493a85285fa6631f0417fdd98de15bf484702b96f8f9
7
- data.tar.gz: 0231306ca60a4b307b14a9cc70ef0b515c4e920848d7be5bebc4d33e22f7ae1b8ff9df0fa108eb31b710efb2a40af4179a669870fd09f823cd8d3a171f453aea
6
+ metadata.gz: fd21fb3ebd6cac2413c52c04066012cd5893eaee3ddbe898d91a1164037590f345c7a9746bb6c9fa2cc22b1b639fe4adddf3a45b4d6c9da684e66ef39a92015e
7
+ data.tar.gz: 4e90b787dc4120d7735a28058d9d973544abc6661bd12393a40361c07c9882b8b61821811f7d351431b57c54168199607b3d48e82249518fc8a9a4174df2011f
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bank_api (0.4.4)
4
+ bank_api (0.5.0)
5
5
  pincers
6
6
  rest-client
7
7
  timezone (~> 1.0)
@@ -60,7 +60,7 @@ GEM
60
60
  diff-lcs (>= 1.2.0, < 2.0)
61
61
  rspec-support (~> 3.7.0)
62
62
  rspec-support (3.7.0)
63
- rubyzip (1.2.1)
63
+ rubyzip (1.2.2)
64
64
  selenium-webdriver (2.53.4)
65
65
  childprocess (~> 0.5)
66
66
  rubyzip (~> 1.0)
@@ -27,20 +27,23 @@ module BankApi
27
27
 
28
28
  module BancoSecurity
29
29
  def self.get_account_balance(account_number)
30
- Clients::BancoSecurity::CompanyClient.new(BankApi.configuration).get_balance(account_number)
30
+ company_instance.get_balance(account_number)
31
31
  end
32
32
 
33
- def self.get_recent_company_deposits
34
- Clients::BancoSecurity::CompanyClient.new(BankApi.configuration).get_recent_deposits
33
+ def self.get_recent_company_deposits(options = {})
34
+ company_instance.get_recent_deposits(options)
35
35
  end
36
36
 
37
37
  def self.company_transfer(transfer_data)
38
- Clients::BancoSecurity::CompanyClient.new(BankApi.configuration).transfer(transfer_data)
38
+ company_instance.transfer(transfer_data)
39
39
  end
40
40
 
41
41
  def self.company_batch_transfers(transfers_data)
42
+ company_instance.batch_transfers(transfers_data)
43
+ end
44
+
45
+ def self.company_instance
42
46
  Clients::BancoSecurity::CompanyClient.new(BankApi.configuration)
43
- .batch_transfers(transfers_data)
44
47
  end
45
48
  end
46
49
  end
@@ -38,7 +38,7 @@ module BankApi::Clients
38
38
  ].any?(&:nil?)
39
39
  end
40
40
 
41
- def get_deposits
41
+ def get_deposits(_options = {})
42
42
  login
43
43
  goto_deposits
44
44
  select_deposits_range
@@ -37,14 +37,15 @@ module BankApi::Clients::BancoSecurity
37
37
  find_account_balance(account_number)
38
38
  end
39
39
 
40
- def get_deposits
40
+ def get_deposits(options = {})
41
41
  login
42
42
  goto_company_dashboard
43
- goto_deposits
44
- select_deposits_range
45
- deposits = deposits_from_txt
46
- validate_deposits(deposits) unless deposits.empty?
47
- deposits
43
+
44
+ if options[:source] == :account_details
45
+ return get_deposits_from_balance_section(options[:account_number])
46
+ end
47
+
48
+ get_deposits_from_transfers_section
48
49
  ensure
49
50
  browser.close
50
51
  end
@@ -71,6 +72,21 @@ module BankApi::Clients::BancoSecurity
71
72
  browser.close
72
73
  end
73
74
 
75
+ def get_deposits_from_transfers_section
76
+ goto_deposits
77
+ select_deposits_range
78
+ deposits = deposits_from_txt
79
+ validate_deposits(deposits) unless deposits.empty?
80
+ deposits
81
+ end
82
+
83
+ def get_deposits_from_balance_section(account_number)
84
+ fail "missing :account_number option" unless account_number
85
+ goto_balance
86
+ goto_account_details(account_number.to_s)
87
+ deposits_from_account_details
88
+ end
89
+
74
90
  def goto_frame(query: nil, should_reset: true)
75
91
  sleep 1
76
92
  super
@@ -2,10 +2,6 @@
2
2
 
3
3
  module BankApi::Clients::BancoSecurity
4
4
  module Deposits
5
- DATE_COLUMN = 0
6
- RUT_COLUMN = 2
7
- AMOUNT_COLUMN = 5
8
-
9
5
  def select_deposits_range
10
6
  browser.search('.BusquedaPorDefectoRecibida a:contains("búsqueda avanzada")').click
11
7
  browser.search('#RadioEntreFechasRecibido').click
@@ -29,16 +25,54 @@ module BankApi::Clients::BancoSecurity
29
25
  format_transactions(transactions)
30
26
  end
31
27
 
28
+ def deposits_from_account_details
29
+ data = browser.download(
30
+ deposits_account_details_url
31
+ ).content.encode("UTF-8", "iso-8859-3").split("\r\n")
32
+ transactions = data[3, data.count - 11].reverse
33
+ format_account_transactions(transactions)
34
+ end
35
+
32
36
  def format_transactions(transactions)
33
37
  transactions.map do |t|
38
+ datetime = DateTime.parse(t[0])
34
39
  {
35
- rut: format_rut(t[RUT_COLUMN]),
36
- date: timezone.local_to_utc(DateTime.parse(t[DATE_COLUMN])).to_date,
37
- amount: t[AMOUNT_COLUMN].to_i
40
+ client: t[1],
41
+ rut: format_rut(t[2]),
42
+ date: timezone.local_to_utc(datetime).to_date,
43
+ time: datetime,
44
+ amount: t[5].to_i
38
45
  }
39
46
  end
40
47
  end
41
48
 
49
+ def format_account_transactions(transactions)
50
+ transactions.inject([]) do |memo, t|
51
+ parts = t.split(";")
52
+ amount = parts[4].delete(",").to_i
53
+ next memo if amount.zero?
54
+ client = extract_client_name(parts[1])
55
+ next memo unless client
56
+
57
+ memo << {
58
+ client: client,
59
+ rut: nil,
60
+ date: Date.strptime(parts[0], "%d/%m"),
61
+ time: nil,
62
+ amount: amount
63
+ }
64
+
65
+ memo
66
+ end
67
+ end
68
+
69
+ def extract_client_name(text)
70
+ parts = text.to_s.split(" De ")
71
+ parts = text.to_s.split(" DE ") if parts.count == 1
72
+ return text if parts.count > 2
73
+ parts.last.to_s.strip
74
+ end
75
+
42
76
  def deposit_range
43
77
  @deposit_range ||= begin
44
78
  today = timezone.utc_to_local(Time.now).to_date
@@ -55,6 +89,10 @@ module BankApi::Clients::BancoSecurity
55
89
  "fechaInicio=#{start_}&fechaFin=#{end_}&estado=1"
56
90
  end
57
91
 
92
+ def deposits_account_details_url
93
+ browser.search("a:contains('Descargar TXT')").first.attribute("href")
94
+ end
95
+
58
96
  def format_rut(rut)
59
97
  verification_digit = rut[-1]
60
98
  without_verification_digit = rut[0..-2].reverse.scan(/.{1,3}/).join(".").reverse
@@ -11,9 +11,9 @@ module BankApi::Clients
11
11
  @days_to_check = config.days_to_check
12
12
  end
13
13
 
14
- def get_recent_deposits
14
+ def get_recent_deposits(options = {})
15
15
  validate_credentials
16
- parse_entries(get_deposits)
16
+ parse_entries(get_deposits(options))
17
17
  end
18
18
 
19
19
  def transfer(transfer_data)
@@ -42,7 +42,7 @@ module BankApi::Clients
42
42
  raise NotImplementedError
43
43
  end
44
44
 
45
- def get_deposits
45
+ def get_deposits(_options = {})
46
46
  raise NotImplementedError
47
47
  end
48
48
 
@@ -122,8 +122,10 @@ module BankApi::Clients
122
122
  BankApi::Values::DepositEntry.new(
123
123
  entry[:amount],
124
124
  entry[:date],
125
+ entry[:time],
125
126
  entry[:rut],
126
- bank_name
127
+ bank_name,
128
+ entry[:client]
127
129
  )
128
130
  end
129
131
  BankApi::SignDeposits.sign(deposit_entries)
@@ -67,6 +67,10 @@ module BankApi::Clients::Navigation
67
67
  goto_frame query: 'iframe[name="central"]', should_reset: false
68
68
  end
69
69
 
70
+ def goto_account_details(account_number)
71
+ wait("a.clickable:contains(\"#{account_number}\")").click
72
+ end
73
+
70
74
  def goto_transfer_form
71
75
  goto_frame query: '#topFrame'
72
76
  selenium_browser.execute_script(
@@ -37,6 +37,7 @@ module BankApi::SignDeposits
37
37
  end
38
38
 
39
39
  def entry_key(entry)
40
- "#{entry.amount}|#{entry.date}|#{entry.rut}|#{entry.bank}"
40
+ rut_or_client = entry.rut || entry.client.to_s.downcase.delete(' ')
41
+ "#{entry.amount}|#{entry.date}|#{rut_or_client}|#{entry.bank}"
41
42
  end
42
43
  end
@@ -1,12 +1,14 @@
1
1
  module BankApi::Values
2
2
  class DepositEntry
3
- attr_accessor :amount, :date, :rut, :signature, :bank
3
+ attr_accessor :client, :amount, :date, :time, :rut, :signature, :bank
4
4
 
5
- def initialize(amount, date, rut, bank)
5
+ def initialize(amount, date, time, rut, bank, client)
6
6
  @amount = amount
7
7
  @date = date
8
+ @time = time
8
9
  @rut = rut
9
10
  @bank = bank
11
+ @client = client
10
12
  end
11
13
  end
12
14
  end
@@ -1,3 +1,3 @@
1
1
  module BankApi
2
- VERSION = "0.4.4"
2
+ VERSION = "0.5.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bank_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - oaestay
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-11 00:00:00.000000000 Z
11
+ date: 2018-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pincers