X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FMT940.pm;h=2a97e5e797461d5e585057a0757ab95a69a19e2e;hb=73f7989fcf23410ebd879d5150f6a13913ca2b90;hp=2fbbad696390210a69474f4d319afe1e2c7101c7;hpb=50e99be3f71714e54a62c431b644aeeab3773517;p=kivitendo-erp.git diff --git a/SL/MT940.pm b/SL/MT940.pm index 2fbbad696..2a97e5e79 100644 --- a/SL/MT940.pm +++ b/SL/MT940.pm @@ -24,7 +24,7 @@ sub _join_entries { } sub parse { - my ($class, $file_name) = @_; + my ($class, $file_name, %params) = @_; my ($local_bank_code, $local_account_number, %transaction, @transactions, @lines); my $line_number = 0; @@ -37,15 +37,25 @@ sub parse { } }; + my ($active_field); foreach my $line (read_file($file_name)) { chomp $line; - $line = Encode::decode('UTF-8', $line); + $line = Encode::decode($params{charset} // 'UTF-8', $line); $line =~ s{\r+}{}; $line_number++; + my $current_field; + if ($line =~ m{^:(\d+[a-z]*):}i) { + $current_field = $1; + $active_field = $1; + } + if (@lines && ($line =~ m{^\%})) { $lines[-1]->[0] .= substr($line, 1); + } elsif (@lines && ($active_field eq '86') && !$current_field) { + $lines[-1]->[0] .= $line; + } else { push @lines, [ $line, $line_number ]; }