+ my %existing_bank_transactions;
+
+ if ((scalar(@{ $self->transactions }) - $errors) > 0) {
+ my @entries =
+ @{ SL::DB::Manager::BankTransaction->get_all(
+ where => [
+ transdate => { ge => $min_date },
+ transdate => { lt => $max_date->clone->add(days => 1) },
+ ],
+ inject_results => 1) };
+
+ %existing_bank_transactions = map { (make_transaction_idx($_) => 1) } @entries;
+ }
+
+ foreach my $transaction (@{ $self->transactions }) {
+ next if $transaction->{error};
+
+ if ($existing_bank_transactions{make_transaction_idx($transaction)}) {
+ $transaction->{duplicate} = 1;
+ $duplicates++;
+ next;
+ }
+ }
+
+ $self->statistics({
+ total => scalar(@{ $self->transactions }),
+ errors => $errors,
+ duplicates => $duplicates,
+ to_import => scalar(@{ $self->transactions }) - $errors - $duplicates,
+ });
+}
+
+sub import_transactions {
+ my ($self, %params) = @_;
+
+ my $imported = 0;
+
+ SL::DB::client->with_transaction(sub {
+ # make Emacs happy
+ 1;
+
+ foreach my $transaction (@{ $self->transactions }) {
+ next if $transaction->{error} || $transaction->{duplicate};
+
+ SL::DB::BankTransaction->new(
+ map { ($_ => $transaction->{$_}) } qw(amount currency_id local_bank_account_id purpose remote_account_number remote_bank_code remote_name transaction_code transdate valutadate)
+ )->save;
+
+ $imported++;
+ }
+
+ 1;
+ });
+
+ $self->statistics->{imported} = $imported;