Keine Weiche für mt940 in SL/Controller/CsvImport.pm mehr
[kivitendo-erp.git] / SL / Helper / MT940.pm
diff --git a/SL/Helper/MT940.pm b/SL/Helper/MT940.pm
new file mode 100644 (file)
index 0000000..5c8865d
--- /dev/null
@@ -0,0 +1,31 @@
+package SL::Helper::MT940;
+
+use strict;
+
+sub convert_mt940_data {
+  my ($mt940_data) = @_;
+
+  # takes the data from an uploaded mt940 file, converts it to csv via aqbanking and returns the converted data
+  # The uploaded file data is stored as a session file, just like the aqbanking settings file.
+
+  my $import_filename = 'bank_transfer.940';
+  my $sfile = SL::SessionFile->new($import_filename, mode => '>');
+  $sfile->fh->print($mt940_data);
+  $sfile->fh->close;
+
+  my $aqbin = $::lx_office_conf{applications}->{aqbanking};
+  die "Can't find aqbanking-cli, please check your configuration file.\n" unless -f $aqbin;
+  my $cmd = "$aqbin --cfgdir=\"" . $sfile->get_path . "\" import --importer=\"swift\" --profile=\"SWIFT-MT940\" -f " . $sfile->get_path . "/$import_filename | $aqbin --cfgdir=\"" . $sfile->get_path . "\" listtrans --exporter=\"csv\" --profile=\"AqMoney2\" ";
+
+  my $converted_data = '"empty";"local_bank_code";"local_account_number";"remote_bank_code";"remote_account_number";"transdate";"valutadate";"amount";"currency";"remote_name";"remote_name_1";"purpose";"purpose1";"purpose2";"purpose3";"purpose4";"purpose5";"purpose6";"purpose7";"purpose8";"purpose9";"purpose10";"purpose11"' . "\n";
+
+  open my $mt, "-|", "$cmd" || die "Problem with executing aqbanking\n";
+  my $headerline = <$mt>;  # discard original aqbanking header line
+  while (<$mt>) {
+    $converted_data .= $_;
+  };
+  close $mt;
+  return $converted_data;
+};
+
+1;