Merge branch 'b-3.6.1' of ../kivitendo-erp_20220811
[kivitendo-erp.git] / SL / BackgroundJob / CsvImport.pm
index b5e6f29..00f76d5 100644 (file)
@@ -4,9 +4,9 @@ use strict;
 
 use parent qw(SL::BackgroundJob::Base);
 
-use YAML ();
+use SL::JSON;
+use SL::YAML;
 use SL::DB::CsvImportProfile;
-use SL::SessionFile::Random;
 
 sub create_job {
   my ($self_or_class, %params) = @_;
@@ -14,13 +14,8 @@ sub create_job {
   my $package       = ref($self_or_class) || $self_or_class;
   $package          =~ s/SL::BackgroundJob:://;
 
-  my $profile = delete $params{profile} || SL::DB::CsvImportProfile->new;
-  my $new_profile = $profile->clone_and_reset_deep;
-  $new_profile->save;
-
   my %data = (
     %params,
-    profile_id => $new_profile->id,
     session_id => $::auth->get_session_id,
   );
 
@@ -28,7 +23,7 @@ sub create_job {
     type         => 'once',
     active       => 1,
     package_name => $package,
-    data         => YAML::Dump(\%data),
+    data         => SL::YAML::Dump(\%data),
   );
 
   return $job;
@@ -38,7 +33,7 @@ sub profile {
   my ($self) = @_;
 
   if (!$self->{profile}) {
-    my $data = YAML::Load($self->{db_obj}->data);
+    my $data = SL::YAML::Load($self->{db_obj}->data);
     $self->{profile} = SL::DB::Manager::CsvImportProfile->find_by(id => $data->{profile_id});
   }
 
@@ -60,6 +55,7 @@ sub do_import {
   my $job = $self->{db_obj};
 
   $c->profile($self->profile);
+  $c->mappings(SL::JSON::from_json($self->profile->get('json_mappings'))) if $self->profile->get('json_mappings');
   $c->type($job->data_as_hash->{type});
   $c->{employee_id} = $job->data_as_hash->{employee_id};
 
@@ -85,18 +81,22 @@ sub do_import {
   my $session_id = $job->data_as_hash->{session_id};
 
   $c->test_and_import(test => $test, session_id => $session_id);
-
+  my $result;
   if ($c->errors) {
     $job->set_data(
       errors   => $c->errors,
     )->save;
+    $result = $::locale->text('Import finished with errors.');
   } else {
 
-    my $report_id = $c->save_report(session_id => $session_id);
+    my $report_id = $c->save_report(session_id => $session_id, test => $test);
     $job->set_data(report_id => $report_id)->save;
 
     $c->track_progress(finished => 1);
+    $result = $::locale->text('Import finished without errors.');
   }
+
+  return $result;
 }
 
 sub track_progress {