Skip to content

Commit 0635fe4

Browse files
Merge pull request #86 from fintech-to-ynab/feature/provider-import-ids
Using provider ids for import_id
2 parents 6ac87a4 + d99c902 commit 0635fe4

File tree

9 files changed

+20
-29
lines changed

9 files changed

+20
-29
lines changed

app/services/import/csv.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,22 @@ class Import::Csv
77
def initialize(path, ynab_account_id)
88
@path = path
99
@ynab_account_id = ynab_account_id
10+
@import_id_creator = YNAB::ImportIdCreator.new
1011
end
1112

1213
def import
1314
transactions_to_create = []
1415

1516
::CSV.foreach(@path, headers: true) do |transaction|
1617
transaction = transaction.to_h.symbolize_keys
18+
amount = (transaction[:amount].to_f * 1000).to_i
19+
date = Date.parse(transaction[:date])
20+
1721
transactions_to_create << {
18-
amount: (transaction[:amount].to_f * 1000).to_i,
22+
id: @import_id_creator.import_id(amount, date),
23+
amount: amount,
1924
payee_name: transaction[:description],
20-
date: Date.parse(transaction[:date])
25+
date: date
2126
}
2227
end
2328

app/services/import/csv/starling_bank.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,24 @@ class Import::Csv::StarlingBank
77
def initialize(path, ynab_account_id = ENV['YNAB_STARLING_ACCOUNT_ID'])
88
@path = path
99
@ynab_account_id = ynab_account_id
10+
@import_id_creator = YNAB::ImportIdCreator.new
1011
end
1112

1213
def import
1314
transactions_to_create = []
1415

1516
::CSV.foreach(@path, headers: true) do |transaction|
16-
1717
# First row can be blank
1818
next unless transaction['Date'].present?
1919

20+
amount = (transaction['Amount (GBP)'].to_f * 1000).to_i
21+
date = Date.parse(transaction['Date'])
22+
2023
transactions_to_create << {
21-
amount: (transaction['Amount (GBP)'].to_f * 1000).to_i,
24+
id: @import_id_creator.import_id(amount, date),
25+
amount: amount,
2226
payee_name: transaction['Counter Party'],
23-
date: Date.parse(transaction['Date']),
27+
date: date,
2428
description: transaction['Reference']
2529
}
2630
end

app/services/import/monzo.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def import
3636
end
3737

3838
transactions_to_create << {
39+
id: "M#{transaction[:id]}",
3940
amount: transaction[:amount] * 10,
4041
payee_name: payee_name,
4142
date: Time.parse(transaction[:created]).to_date,

app/services/import/starling.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ def import
1010
transactions_to_create = []
1111
@starling.transactions.list(params: { from: from, to: Date.today }).each do |transaction|
1212
transactions_to_create << {
13+
id: "S:#{transaction.id}",
1314
amount: (transaction.amount * 1000).to_i,
1415
payee_name: transaction.narrative.strip,
1516
date: transaction.created,

app/services/import/teller.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def import
1212
transactions_to_create = []
1313
transactions.select{|t| Date.parse(t[:date]) <= Date.today }.each do |transaction|
1414
transactions_to_create << {
15+
id: "T#{transaction[:id]}",
1516
amount: (transaction[:amount].to_f * 1000).to_i,
1617
payee_name: transaction[:counterparty],
1718
date: Date.parse(transaction[:date]),

app/services/ynab/bulk_transaction_creator.rb

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ class YNAB::BulkTransactionCreator
55
def initialize(transactions, budget_id: nil, account_id: nil)
66
@transactions = transactions
77
@client = YNAB::Client.new(ENV['YNAB_ACCESS_TOKEN'], budget_id, account_id)
8-
@import_id_creator = YNAB::ImportIdCreator.new
98
end
109

1110
def create
@@ -24,9 +23,8 @@ def create
2423

2524
transactions_to_create = []
2625
transactions.each do |transaction|
27-
2826
transactions_to_create << {
29-
import_id: @import_id_creator.import_id(transaction[:amount], transaction[:date].to_date),
27+
import_id: transaction[:id].to_s.truncate(36),
3028
account_id: @client.selected_account_id,
3129
payee_name: transaction[:payee_name],
3230
amount: transaction[:amount],
@@ -38,11 +36,7 @@ def create
3836
end
3937

4038
if transactions_to_create.any?
41-
begin
42-
Rails.logger.info(@client.create_transactions(transactions_to_create))
43-
rescue => e
44-
Rails.logger.error(e.response.body)
45-
end
39+
Rails.logger.info(@client.create_transactions(transactions_to_create))
4640
else
4741
Rails.logger.info(:no_transactions_to_create)
4842
end

app/services/ynab/client.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,10 @@ def create_transaction(id: nil, payee_id: nil, payee_name: nil, amount: nil, cle
3636
import_id: id
3737
}
3838
}).data.transaction
39-
rescue YnabApi::ApiError => e
40-
JSON.parse(e.response_body)
4139
end
4240

4341
def create_transactions(transactions)
4442
client.transactions.bulk_create_transactions(selected_budget_id, { transactions: transactions }).data.bulk
45-
rescue YnabApi::ApiError => e
46-
JSON.parse(e.response_body)
4743
end
4844

4945
def selected_budget_id

app/services/ynab/import_id_creator.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,6 @@ def initialize
33
@occurence = Hash.new
44
end
55

6-
def prefill!(ynab_client, start_date = nil)
7-
ynab_client.transactions(since_date: start_date).each do |transaction|
8-
import_id(transaction.amount.to_i, transaction.date)
9-
end
10-
end
11-
126
def import_id(amount, date)
137
key = ['YNAB', amount, date].join(':')
148
@occurence[key] ||= 0

app/services/ynab/transaction_creator.rb

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,12 @@ def initialize(id: nil, date: nil, amount: nil, payee_name: nil, description: tr
77
@description = description
88
@cleared = cleared
99
@flag = flag
10-
1110
@client = YNAB::Client.new(ENV['YNAB_ACCESS_TOKEN'], budget_id, account_id)
12-
@import_id_creator = YNAB::ImportIdCreator.new
1311
end
1412

1513
def create
16-
Rails.logger.info("Prefilling import ids")
17-
@import_id_creator.prefill!(@client, @date.to_date)
18-
1914
create = @client.create_transaction(
20-
id: @import_id_creator.import_id(@amount, @date.to_date),
15+
id: @id,
2116
payee_name: @payee_name,
2217
amount: @amount,
2318
cleared: @cleared,

0 commit comments

Comments
 (0)