MT940: Zeichensatz der Datei bei Import auswählen können
authorMoritz Bunkus <m.bunkus@linet.de>
Thu, 18 Mar 2021 11:29:47 +0000 (12:29 +0100)
committerMoritz Bunkus <m.bunkus@linet.de>
Thu, 18 Mar 2021 11:33:31 +0000 (12:33 +0100)
SL/Controller/BankImport.pm
SL/MT940.pm
locale/de/all
templates/webpages/bank_import/import_mt940.html
templates/webpages/bank_import/upload_mt940.html

index 04d72d3..1b20dec 100644 (file)
@@ -16,7 +16,7 @@ use SL::SessionFile::Random;
 
 use Rose::Object::MakeMethods::Generic
 (
-  scalar                  => [ qw(file_name transactions statistics) ],
+  scalar                  => [ qw(file_name transactions statistics charset) ],
   'scalar --get_set_init' => [ qw(bank_accounts) ],
 );
 
@@ -43,6 +43,7 @@ sub action_import_mt940_preview {
   $file->fh->print($::form->{file});
   $file->fh->close;
 
+  $self->charset($::form->{charset});
   $self->file_name($file->file_name);
   $self->parse_and_analyze_transactions;
 
@@ -56,6 +57,7 @@ sub action_import_mt940 {
   die "missing file for action import_mt940" unless $::form->{file_name};
 
   $self->file_name($::form->{file_name});
+  $self->charset($::form->{charset});
   $self->parse_and_analyze_transactions;
   $self->import_transactions;
 
@@ -71,7 +73,7 @@ sub parse_and_analyze_transactions {
 
   my $currency_id = SL::DB::Default->get->currency_id;
 
-  $self->transactions([ sort { $a->{transdate} cmp $b->{transdate} } SL::MT940->parse($self->file_name) ]);
+  $self->transactions([ sort { $a->{transdate} cmp $b->{transdate} } SL::MT940->parse($self->file_name, charset => $self->charset) ]);
 
   foreach my $transaction (@{ $self->transactions }) {
     $transaction->{bank_account}   = $self->bank_accounts->{ make_bank_account_idx($transaction->{local_bank_code}, $transaction->{local_account_number}) };
index dd965de..2a97e5e 100644 (file)
@@ -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;
@@ -40,7 +40,7 @@ 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++;
 
index 23c8fcc..878561b 100755 (executable)
@@ -1680,7 +1680,6 @@ $self->{texts} = {
   'Import CSV'                  => 'CSV-Import',
   'Import Status'               => 'Import Status',
   'Import a Factur-X/ZUGFeRD file:' => 'Eine Factur-X-/ZUGFeRD-Datei importieren',
-  'Import a MT940 file:'        => 'Laden Sie eine MT940 Datei hoch:',
   'Import all'                  => 'Importiere Alle',
   'Import documents from #1'    => 'Importiere Dateien von Quelle \'#1\'',
   'Import file'                 => 'Import-Datei',
@@ -1929,6 +1928,7 @@ $self->{texts} = {
   'MAILED'                      => 'Gesendet',
   'MD'                          => 'PT',
   'MIME type'                   => 'MIME-Typ',
+  'MT940 file'                  => 'MT940-Datei',
   'MT940 import'                => 'MT940 Import',
   'MT940 import preview'        => 'MT940-Import-Vorschau',
   'MT940 import result'         => 'MT940-Import-Ergebnis',
index b08eaa8..e2baa5f 100644 (file)
@@ -8,6 +8,7 @@
 [% IF preview %]
   <form method="post" action="controller.pl" enctype="multipart/form-data" id="form">
     [% L.hidden_tag('file_name', SELF.file_name) %]
+    [% L.hidden_tag('charset', SELF.charset) %]
   </form>
 [% END %]
 
index b451856..7d3233f 100644 (file)
@@ -7,10 +7,16 @@
 
 <h1>[% FORM.title %]</h1>
 
-<p>
-  [% "Import a MT940 file:" | $T8 %]
-</p>
-
 <form method="post" action="controller.pl" enctype="multipart/form-data" id="form">
-  [% L.input_tag('file', '', type => 'file', accept => '*') %]
+  <table>
+    <tr>
+      <td>[% LxERP.t8("Charset") %]:</td>
+      <td>[% L.select_tag('charset', [ [ 'ISO-8859-15', 'ISO-8859-15 (Latin 1)' ], [ 'UTF-8', 'UTF-8' ], [ 'Windows-1252', 'Windows-1252' ] ], default='UTF-8') %]</td>
+    </tr>
+
+    <tr>
+      <td>[% LxERP.t8("MT940 file") %]:</td>
+      <td>[% L.input_tag('file', '', type => 'file', accept => '*') %]</td>
+    </tr>
+  </table>
 </form>