diff --git a/lib/bank_account_information_importer.rb b/lib/bank_account_information_importer.rb index 517f91c2..bebc1ff4 100644 --- a/lib/bank_account_information_importer.rb +++ b/lib/bank_account_information_importer.rb @@ -6,8 +6,10 @@ class BankAccountInformationImporter def import!(content) return nil if content.empty? - data = JSON.parse content, symbolize_names: true + import_data! JSON.parse(content, symbolize_names: true) + end + def import_data!(data) return 0 if data.empty? booked = data.fetch(:transactions, {}).fetch(:booked, []) @@ -17,30 +19,31 @@ class BankAccountInformationImporter amount = parse_account_information_amount t[:transactionAmount] entityName = amount < 0 ? t[:creditorName] : t[:debtorName] entityAccount = amount < 0 ? t[:creditorAccount] : t[:debtorAccount] + reference = [t[:endToEndId], t[:remittanceInformationUnstructured]].join("\n").strip @bank_account.bank_transactions.where(external_id: t[:transactionId]).first_or_create.update({ date: t[:bookingDate], amount: amount, iban: entityAccount && entityAccount[:iban], - reference: t[:remittanceInformationUnstructured], + reference: reference, text: entityName, - receipt: t[:additionalInformation], + receipt: t[:additionalInformation] }) ret += 1 end - balances = Hash[data[:balances] ? data[:balances].map { |b| [b[:balanceType], b[:balanceAmount]] } : []] + balances = (data[:balances] ? data[:balances].map { |b| [b[:balanceType], b[:balanceAmount]] } : []).to_h balance = balances.values.first %w(closingBooked expected authorised openingBooked interimAvailable forwardAvailable nonInvoiced).each do |type| value = balances[type] - if value then + if value balance = value break end end @bank_account.balance = parse_account_information_amount(balance) || @bank_account.bank_transactions.sum(:amount) - @bank_account.import_continuation_point = booked.first&.fetch(:entryReference, nil) + @bank_account.import_continuation_point = booked.first&.fetch(:entryReference, nil) unless booked.empty? @bank_account.last_import = Time.now @bank_account.save! diff --git a/spec/lib/bank_account_information_importer_spec.rb b/spec/lib/bank_account_information_importer_spec.rb index a98441d2..3937056c 100644 --- a/spec/lib/bank_account_information_importer_spec.rb +++ b/spec/lib/bank_account_information_importer_spec.rb @@ -242,7 +242,7 @@ describe BankTransaction do expect(bt.date).to eq('2019-02-13'.to_date) expect(bt.text).to eq('Hammersmith Inc.') expect(bt.iban).to be(nil) - expect(bt.reference).to eq('Martin Schöneicher, Inv# 123453423, Thx') + expect(bt.reference).to eq("Corvette Ersatzteile\nMartin Schöneicher, Inv# 123453423, Thx") expect(bt.receipt).to eq('Auslands-Überweisung') end @@ -318,7 +318,7 @@ describe BankTransaction do expect(bt.date).to eq('2019-02-14'.to_date) expect(bt.text).to eq('Maria Reithuber') expect(bt.iban).to eq('AT251657674147449499') - expect(bt.reference).to eq("Danke für's Auslegen") + expect(bt.reference).to eq("Auslage von Martin S.\nDanke für's Auslegen") expect(bt.receipt).to eq('Gutschrift') end @@ -390,7 +390,7 @@ describe BankTransaction do expect(bt1.date).to eq('2020-01-01'.to_date) expect(bt1.text).to eq('DN1') expect(bt1.iban).to eq('DE72957284895783674747') - expect(bt1.reference).to be(nil) + expect(bt1.reference).to eq('') expect(bt1.receipt).to eq('AI1') bt2 = bank_account.bank_transactions.find_by_external_id("T2") @@ -406,7 +406,7 @@ describe BankTransaction do expect(bt3.date).to eq('2000-03-01'.to_date) expect(bt3.text).to eq('DN3') expect(bt3.iban).to be(nil) - expect(bt3.reference).to be(nil) + expect(bt3.reference).to eq('') expect(bt3.receipt).to be(nil) end end