Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 324726ac

Von Jan Büren vor fast 6 Jahren hinzugefügt

  • ID 324726acd30b8992854a2d59fec2a50265613eef
  • Vorgänger a9903fd7
  • Nachfolger f40cd4e1

Fixt #348 DatevExport kommt mit bestimmten Zeichen im Buchungstext nicht klar

In der Mandantenkonfiguration befindet sich jetzt eine Einstellung,
welche die Kodierung des DATEV-Exports steuert. DATEV erwartet CP1252.
kivitendo kann diese Kodierung so vom kivitendo Nutzer einfordern, alternativ nicht
vorhandenen Zeichen versuchen zu ersetzen oder die DATEV-Erwartung ignorieren
und UTF-8 liefern. Voreingestellt ist CP1252 mit Ersetzungen

Unterschiede anzeigen:

SL/DATEV.pm
35 35
use SL::DATEV::CSV;
36 36
use SL::DB;
37 37
use SL::HTML::Util ();
38
use SL::Iconv;
38 39
use SL::Locale::String qw(t8);
39 40

  
40 41
use Data::Dumper;
......
393 394
                eol          => "\r\n",
394 395
              }) or die "Cannot use CSV: ".Text::CSV_XS->error_diag();
395 396

  
396
    my $csv_file = IO::File->new($self->export_path . '/' . $filename, '>:encoding(cp1252)') or die "Can't open: $!";
397
    # get encoding from defaults - use cp1252 if DATEV strict export is used
398
    my $enc = ($::instance_conf->get_datev_export_format eq 'cp1252') ? 'cp1252' : 'utf-8';
399
    my $csv_file = IO::File->new($self->export_path . '/' . $filename, ">:encoding($enc)") or die "Can't open: $!";
400

  
397 401
    $csv->print($csv_file, $_) for @{ $datev_csv->header };
398 402
    $csv->print($csv_file, $_) for @{ $datev_csv->lines  };
399 403
    $csv_file->close;
400 404
    $self->{warnings} = $datev_csv->warnings;
401 405

  
406
    # convert utf-8 to cp1252//translit if set
407
    if ($::instance_conf->get_datev_export_format eq 'cp1252-translit') {
408

  
409
      my $filename_translit = "EXTF_DATEV_kivitendo_translit" . $self->from->ymd() . '-' . $self->to->ymd() . ".csv";
410
      open my $fh_in,  '<:encoding(UTF-8)',  $self->export_path . '/' . $filename or die "could not open $filename for reading: $!";
411
      open my $fh_out, '>', $self->export_path . '/' . $filename_translit         or die "could not open $filename_translit for writing: $!";
412

  
413
      my $converter = SL::Iconv->new("utf-8", "cp1252//translit");
414

  
415
      print $fh_out $converter->convert($_) while <$fh_in>;
416
      close $fh_in;
417
      close $fh_out;
418

  
419
      unlink $self->export_path . '/' . $filename or warn "Could not unlink $filename: $!";
420
      $filename = $filename_translit;
421
    }
422

  
402 423
    return { download_token => $self->download_token, filenames => $filename };
403 424

  
404 425
  } elsif ($self->exporttype == DATEV_ET_STAMM) {

Auch abrufbar als: Unified diff