$self->controller->track_progress(phase => 'building data', progress => 0);
my $update_policy = $self->controller->profile->get('update_policy') || 'skip';
- my $i;
+ my $i = 0;
my $num_data = scalar @{ $self->controller->data };
foreach my $entry (@{ $self->controller->data }) {
$self->controller->track_progress(progress => $i/$num_data * 100) if $i % 100 == 0;
# * transdate
# * remote_account_number (may be empty for records of our own bank)
# * amount
+ # * local_bank_account_id (case flatrate bank charges for two accounts in one bank: same purpose, transdate, remote_account_number(empty), amount. Just different local_bank_account_id)
my $num;
- if ( $num = SL::DB::Manager::BankTransaction->get_all_count(query =>[ remote_account_number => $object->remote_account_number, transdate => $object->transdate, purpose => $object->purpose, amount => $object->amount] ) ) {
+ if ( $num = SL::DB::Manager::BankTransaction->get_all_count(query =>[ remote_account_number => $object->remote_account_number, transdate => $object->transdate, purpose => $object->purpose, amount => $object->amount, local_bank_account_id => $object->local_bank_account_id] ) ) {
push(@{$entry->{errors}}, $::locale->text('Skipping due to existing bank transaction in database'));
};
} else {
my $object = $entry->{object};
- my $purpose = join(' ', $entry->{raw_data}->{purpose},
- $entry->{raw_data}->{purpose1},
- $entry->{raw_data}->{purpose2},
- $entry->{raw_data}->{purpose3},
- $entry->{raw_data}->{purpose4},
- $entry->{raw_data}->{purpose5},
- $entry->{raw_data}->{purpose6},
- $entry->{raw_data}->{purpose7},
- $entry->{raw_data}->{purpose8},
- $entry->{raw_data}->{purpose9},
- $entry->{raw_data}->{purpose10},
- $entry->{raw_data}->{purpose11},
- $entry->{raw_data}->{purpose12},
- $entry->{raw_data}->{purpose13} );
+ my $purpose =
+ join ' ',
+ grep { ($_ // '') !~ m{^ *$} }
+ map { $entry->{raw_data}->{"purpose$_"} }
+ ('', 1..13);
+
$object->purpose($purpose);
}