use SL::Controller::CsvImport::Part;
use SL::Controller::CsvImport::Shipto;
use SL::Controller::CsvImport::Project;
+use SL::BackgroundJob::CsvImport;
+use SL::System::TaskServer;
use List::MoreUtils qw(none);
sub action_test {
my ($self) = @_;
- $self->test_and_import(test => 1);
+ $self->test_and_import_deferred(test => 1);
}
sub action_import {
my $self = shift;
- $self->test_and_import(test => 0);
+ $self->test_and_import_deferred(test => 0);
}
sub action_save {
$self->redirect_to(action => 'new', 'profile.type' => $self->type);
}
+sub action_result {
+ my $self = shift;
+
+ # load resultobject
+ $self->{background_job} = SL::DB::Manager::BackgroundJob->find_by(id => $::form->{job});
+
+ my $data = $self->{background_job}->data_as_hash;
+
+ my $profile = SL::DB::CsvImportProfile->new(type => $data->{type});
+ my $profile_data = $data->{profile};
+ for (keys %$profile_data) {
+ $profile->set($_ => $profile_data->{$_});
+ }
+
+ $self->profile($profile);
+
+ if ($data->{progress} < 100) {
+ $self->render('csv_import/_deferred_results', { no_layout => 1 });
+ } else {
+ die 'what? done? panic, no idea what to do';
+ }
+}
+
sub action_download_sample {
my $self = shift;
$self->render('csv_import/form', title => $title);
}
+sub test_and_import_deferred {
+ my ($self, %params) = @_;
+
+ $self->profile_from_form;
+
+ if ($::form->{file}) {
+ my $file = SL::SessionFile->new($self->csv_file_name, mode => '>');
+ $file->fh->print($::form->{file});
+ $file->fh->close;
+ }
+
+ $self->{background_job} = SL::BackgroundJob::CsvImport->create_job(
+ file => $self->csv_file_name,
+ profile => $self->profile,
+ type => $self->profile->type,
+ )->save;
+
+ SL::System::TaskServer->start_if_not_running;
+ SL::System::TaskServer->wake_up;
+
+ flash('info', $::locale->text('Your import is beig processed.'));
+
+ $self->{deferred} = 1;
+
+ $self->render_inputs;
+}
+
sub test_and_import {
my ($self, %params) = @_;
$self->import_status($params{test} ? 'tested' : 'imported');
flash('info', $::locale->text('Objects have been imported.')) if !$params{test};
-
- $self->action_new;
}
sub load_default_profile {
my $dbh = $::form->get_standard_dbh;
$dbh->begin_work;
- my $query = 'INSERT INTO csv_import_report_rows (csv_import_report_id, col, row, value) VALUES (?, ?, ?, ?)';
+ my $query = 'INSERT INTO csv_import_report_rows (csv_import_report_id, col, row, value) VALUES (?, ?, ?, ?)';
+ my $query2 = 'INSERT INTO csv_import_report_status (csv_import_report_id, row, type, value) VALUES (?, ?, ?, ?)';
my $sth = $dbh->prepare($query);
+ my $sth2 = $dbh->prepare($query2);
+
+# $::lxdebug->dump(0, "self", $self->info_headers);
+# $::lxdebug->dump(0, "self", $self->headers);
+# $::lxdebug->dump(0, "self", $self->raw_data_headers);
# save headers
my @headers = (
- @{ $self->info_headers->{headers} || [] },
- @{ $self->headers->{headers} || [] },
- @{ $self->raw_data_headers->{headers} || [] },
+ grep({ $self->info_headers->{used}->{$_} } @{ $self->info_headers->{headers} }),
+ grep({ $self->headers->{used}->{$_} } @{ $self->headers->{headers} }),
+ grep({ $self->raw_data_headers->{used}->{$_} } @{ $self->raw_data_headers->{headers} }),
);
- my @info_methods = keys %{ $self->info_headers->{methods} || {} };
- my @methods = @{ $self->headers->{methods} || [] };
- my @raw_methods = keys %{ $self->raw_data_headers->{used} || {} };
+ my @info_methods = grep { $self->info_headers->{used}->{$_} } @{ $self->info_headers->{headers} };
+ my @methods = grep { $self->headers->{used}->{$_} } @{ $self->headers->{methods} };
+ my @raw_methods = grep { $self->raw_data_headers->{used}->{$_} } @{ $self->raw_data_headers->{headers} };
$sth->execute($report->id, $_, 0, $headers[$_]) for 0 .. $#headers;
$sth->execute($report->id, $_, $row + 1, $data_row->{info_data}{ $info_methods[$_] }) for 0 .. $#info_methods;
$sth->execute($report->id, $o1 + $_, $row + 1, $data_row->{object}->${ \ $methods[$_] }) for 0 .. $#methods;
$sth->execute($report->id, $o2 + $_, $row + 1, $data_row->{raw_data}{ $raw_methods[$_] }) for 0 .. $#raw_methods;
+
+ $sth2->execute($report->id, $row + 1, 'information', $_) for @{ $data_row->{information} || [] };
+ $sth2->execute($report->id, $row + 1, 'errors', $_) for @{ $data_row->{errors} || [] };
}
$dbh->commit;