use SL::Controller::CsvImport::Contact;
use SL::Controller::CsvImport::CustomerVendor;
use SL::Controller::CsvImport::Part;
+use SL::Controller::CsvImport::Inventory;
use SL::Controller::CsvImport::Shipto;
use SL::Controller::CsvImport::Project;
use SL::Controller::CsvImport::Order;
+use SL::JSON;
+use SL::Controller::CsvImport::BankTransaction;
use SL::BackgroundJob::CsvImport;
use SL::System::TaskServer;
use Rose::Object::MakeMethods::Generic
(
scalar => [ qw(type profile file all_profiles all_charsets sep_char all_sep_chars quote_char all_quote_chars escape_char all_escape_chars all_buchungsgruppen all_units
- import_status errors headers raw_data_headers info_headers data num_imported num_importable displayable_columns file) ],
+ import_status errors headers raw_data_headers info_headers data num_imported num_importable displayable_columns file all_taxzones) ],
'scalar --get_set_init' => [ qw(worker task_server) ],
'array' => [
progress_tracker => { },
sub check_type {
my ($self) = @_;
- die "Invalid CSV import type" if none { $_ eq $::form->{profile}->{type} } qw(parts customers_vendors addresses contacts projects orders);
+ die "Invalid CSV import type" if none { $_ eq $::form->{profile}->{type} } qw(parts inventories customers_vendors addresses contacts projects orders bank_transactions mt940);
$self->type($::form->{profile}->{type});
}
: $self->type eq 'addresses' ? $::locale->text('CSV import: shipping addresses')
: $self->type eq 'contacts' ? $::locale->text('CSV import: contacts')
: $self->type eq 'parts' ? $::locale->text('CSV import: parts and services')
+ : $self->type eq 'inventories' ? $::locale->text('CSV import: inventories')
: $self->type eq 'projects' ? $::locale->text('CSV import: projects')
: $self->type eq 'orders' ? $::locale->text('CSV import: orders')
+ : $self->type eq 'bank_transactions' ? $::locale->text('CSV import: bank transactions')
+ : $self->type eq 'mt940' ? $::locale->text('CSV import: MT940')
: die;
+ if ($self->{type} eq 'customers_vendors' or $self->{type} eq 'orders' ) {
+ $self->all_taxzones(SL::DB::Manager::TaxZone->get_all_sorted(query => [ obsolete => 0 ]));
+ };
+
if ($self->{type} eq 'parts') {
$self->all_buchungsgruppen(SL::DB::Manager::Buchungsgruppe->get_all_sorted);
$self->all_units(SL::DB::Manager::Unit->get_all_sorted);
$self->profile_from_form;
- if ($::form->{file}) {
+ if ( $::form->{file} && $::form->{FILENAME} =~ /\.940$/ ) {
+ my $mt940_file = SL::SessionFile->new($::form->{FILENAME}, mode => '>');
+ $mt940_file->fh->print($::form->{file});
+ $mt940_file->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=\"users\" import --importer=\"swift\" --profile=\"SWIFT-MT940\" -f " . $mt940_file->file_name . " | $aqbin --cfgdir=\"users\" listtrans --exporter=\"csv\" --profile=\"AqMoney2\" ";
+ my $converted_mt940;
+ open(MT, "$cmd |");
+ $converted_mt940 .= '"transaction_id";"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";
+ my $headerline = <MT>; # discard original header line
+ while (<MT>) {
+ $converted_mt940 .= $_;
+ };
my $file = SL::SessionFile->new($self->csv_file_name, mode => '>');
- $file->fh->print($::form->{file});
+ $file->fh->print($converted_mt940);
$file->fh->close;
+ } elsif ($::form->{file}) {
+ my $file = SL::SessionFile->new($self->csv_file_name, mode => '>');
+ $file->fh->print($::form->{file});
+ $file->fh->close;
}
my $file = SL::SessionFile->new($self->csv_file_name, mode => '<', encoding => $self->profile->get('charset'));
$self->task_server->start;
}
- flash('info', $::locale->text('Your import is beig processed.'));
+ flash('info', $::locale->text('Your import is being processed.'));
$self->{deferred} = 1;
- $self->render_inputs;
+ if ($::request->type eq 'json') {
+ $self->render(\ SL::JSON::to_json($self->{background_job}->as_tree), { type => 'json' })
+ } else {
+ $self->render_inputs;
+ }
}
sub test_and_import {
where => [
type => $self->type,
login => $::myconfig{login},
+ '!name' => '',
],
sort_by => 'name'));
}
: $self->{type} eq 'contacts' ? SL::Controller::CsvImport::Contact->new(@args)
: $self->{type} eq 'addresses' ? SL::Controller::CsvImport::Shipto->new(@args)
: $self->{type} eq 'parts' ? SL::Controller::CsvImport::Part->new(@args)
+ : $self->{type} eq 'inventories' ? SL::Controller::CsvImport::Inventory->new(@args)
: $self->{type} eq 'projects' ? SL::Controller::CsvImport::Project->new(@args)
: $self->{type} eq 'orders' ? SL::Controller::CsvImport::Order->new(@args)
+ : $self->{type} eq 'bank_transactions' ? SL::Controller::CsvImport::BankTransaction->new(@args)
+ : $self->{type} eq 'mt940' ? SL::Controller::CsvImport::BankTransaction->new(@args)
: die "Program logic error";
}