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 => { },
$self->profile($profile);
if ($data->{errors} and my $first_error = $data->{errors}->[0]) {
- flash('error', $::locale->text('There was an error parsing the csv file: #1 in line #2.', $first_error->[2], $first_error->[0]));
+ flash('error', $::locale->text('There was an error parsing the csv file: #1 in line #2: #3', $first_error->[2], $first_error->[0], $first_error->[1]));
}
if ($data->{progress}{finished} || $data->{errors}) {
my $csv = Text::CSV_XS->new({ binary => 1, map { ( $_ => $self->profile->get($_) ) } qw(sep_char escape_char quote_char),});
if ($self->worker->is_multiplexed) {
- foreach my $ri (keys %{ $self->displayable_columns }) {
- $csv->print($file->fh, [ map { $_->{name} } @{ $self->displayable_columns->{$ri} } ]);
+ foreach my $p (@{ $self->worker->profile }) {
+ $csv->print($file->fh, [ map { $_->{name} } @{ $self->displayable_columns->{$p->{row_ident}} } ]);
$file->fh->print("\r\n");
}
- foreach my $ri (keys %{ $self->displayable_columns }) {
- $csv->print($file->fh, [ map { $_->{description} } @{ $self->displayable_columns->{$ri} } ]);
+ foreach my $p (@{ $self->worker->profile }) {
+ $csv->print($file->fh, [ map { $_->{description} } @{ $self->displayable_columns->{$p->{row_ident}} } ]);
$file->fh->print("\r\n");
}
} else {
my $pages = {};
$pages->{per_page} = $::form->{per_page} || 20;
$pages->{max} = SL::DB::Helper::Paginated::ceil($num_rows, $pages->{per_page}) || 1;
- $pages->{cur} = $page < 1 ? 1
+ $pages->{page} = $page < 1 ? 1
: $page > $pages->{max} ? $pages->{max}
: $page;
- $pages->{common} = [ grep { $_->{visible} } @{ SL::DB::Helper::Paginated::make_common_pages($pages->{cur}, $pages->{max}) } ];
+ $pages->{common} = [ grep { $_->{visible} } @{ SL::DB::Helper::Paginated::make_common_pages($pages->{page}, $pages->{max}) } ];
$self->{report_numheaders} = $self->{report}->numheaders;
my $first_row_header = 0;
my $last_row_header = $self->{report_numheaders} - 1;
- my $first_row_data = $pages->{per_page} * ($pages->{cur}-1) + $self->{report_numheaders};
- my $last_row_data = min($pages->{per_page} * $pages->{cur}, $num_rows) + $self->{report_numheaders} - 1;
+ my $first_row_data = $pages->{per_page} * ($pages->{page}-1) + $self->{report_numheaders};
+ my $last_row_data = min($pages->{per_page} * $pages->{page}, $num_rows) + $self->{report_numheaders} - 1;
$self->{display_rows} = [
$first_row_header
..
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);
$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')
: 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);
sub test_and_import_deferred {
my ($self, %params) = @_;
- $self->profile_from_form;
+ if ( $::form->{force_profile} && $::form->{profile}->{id} ) {
+ $self->load_default_profile;
+ } else {
+ $self->profile_from_form;
+ };
if ($::form->{file}) {
my $file = SL::SessionFile->new($self->csv_file_name, mode => '>');
$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 {
$profile ||= SL::DB::CsvImportProfile->new(type => $self->{type}, login => $::myconfig{login});
$self->profile($profile);
+ $self->worker->set_profile_defaults;
$self->profile->set_defaults;
}
where => [
type => $self->type,
login => $::myconfig{login},
+ '!name' => '',
],
sort_by => 'name'));
}
}
sub save_report {
- my ($self, $report_id) = @_;
+ my ($self, %params) = @_;
if ($self->worker->is_multiplexed) {
- return $self->save_report_multi($report_id);
+ return $self->save_report_multi(%params);
} else {
- return $self->save_report_single($report_id);
+ return $self->save_report_single(%params);
}
}
sub save_report_single {
- my ($self, $report_id) = @_;
+ my ($self, %params) = @_;
$self->track_progress(phase => 'building report', progress => 0);
$clone_profile->save; # weird bug. if this isn't saved before adding it to the report, it will default back to the last profile.
my $report = SL::DB::CsvImportReport->new(
- session_id => $::auth->create_or_refresh_session,
+ session_id => $params{session_id},
profile => $clone_profile,
type => $self->type,
file => '',
}
sub save_report_multi {
- my ($self, $report_id) = @_;
+ my ($self, %params) = @_;
$self->track_progress(phase => 'building report', progress => 0);
$clone_profile->save; # weird bug. if this isn't saved before adding it to the report, it will default back to the last profile.
my $report = SL::DB::CsvImportReport->new(
- session_id => $::auth->create_or_refresh_session,
+ session_id => $params{session_id},
profile => $clone_profile,
type => $self->type,
file => '',
: $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)
: die "Program logic error";
}