X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FBackgroundJob%2FCsvImport.pm;h=b5e6f2908f2b75ebf6a6d38a8a10af212f2c02f6;hb=541a31c295de935edd2b357ba25d8da811bbf465;hp=e34edc3155ed078531b1b688d1737a223d41f380;hpb=82c3b7eb4f43a25499f55a5a72c761c08917e783;p=kivitendo-erp.git diff --git a/SL/BackgroundJob/CsvImport.pm b/SL/BackgroundJob/CsvImport.pm index e34edc315..b5e6f2908 100644 --- a/SL/BackgroundJob/CsvImport.pm +++ b/SL/BackgroundJob/CsvImport.pm @@ -15,12 +15,13 @@ sub create_job { $package =~ s/SL::BackgroundJob:://; my $profile = delete $params{profile} || SL::DB::CsvImportProfile->new; - my $result = delete $params{result} || SL::SessionFile::Random->new; + my $new_profile = $profile->clone_and_reset_deep; + $new_profile->save; my %data = ( - profile => { $profile->flatten }, - result => $result->file_name, %params, + profile_id => $new_profile->id, + session_id => $::auth->get_session_id, ); my $job = SL::DB::BackgroundJob->new( @@ -34,14 +35,11 @@ sub create_job { } sub profile { - my ($self, $db_obj) = @_; + my ($self) = @_; if (!$self->{profile}) { - $self->{profile} = SL::DB::CsvImportProfile->new; - my $data = YAML::Load($db_obj->data); - for (keys %$data) { - $self->{profile}->set($_ => $data->{$_}); - } + my $data = YAML::Load($self->{db_obj}->data); + $self->{profile} = SL::DB::Manager::CsvImportProfile->find_by(id => $data->{profile_id}); } return $self->{profile}; @@ -52,22 +50,64 @@ sub run { $self->{db_obj} = shift; $self->do_import; - - $self->cleanup; } sub do_import { my ($self) = @_; + require SL::Controller::CsvImport; my $c = SL::Controller::CsvImport->new; - $c->profile($self->{profile}); - $c->test_and_import(test => $self->); + my $job = $self->{db_obj}; + + $c->profile($self->profile); + $c->type($job->data_as_hash->{type}); + $c->{employee_id} = $job->data_as_hash->{employee_id}; + + my $test = $job->data_as_hash->{test}; + + + # $::locale->text('parsing csv') + # $::locale->text('building data') + # $::locale->text('saving data') + # $::locale->text('building report') + $self->track_progress( + progress => 0, + plan => { + 'parsing csv' => 1, + 'building data' => 2, + ( 'saving data' => 3, )x!$test, + 'building report' => ($test ? 3 : 4), + }, + num_phases => ($test ? 3 : 4), + ); + $c->add_progress_tracker($self); + + my $session_id = $job->data_as_hash->{session_id}; + $c->test_and_import(test => $test, session_id => $session_id); + if ($c->errors) { + $job->set_data( + errors => $c->errors, + )->save; + } else { + + my $report_id = $c->save_report(session_id => $session_id); + $job->set_data(report_id => $report_id)->save; + + $c->track_progress(finished => 1); + } } -sub cleanup { +sub track_progress { + my ($self, %params) = @_; + + my $data = $self->{db_obj}->data_as_hash; + my $progress = $data->{progress} || {}; + $progress->{$_} = $params{$_} for keys %params; + $self->{db_obj}->set_data(progress => $progress); + $self->{db_obj}->save; } 1;