X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FCsvImportReport.pm;h=5249410c8c41d5df4d592c6d5ef88a03ac6b6cb0;hb=293607842ff6fe3f2bed0cf1c316f80f53a14107;hp=38d9e697e3ea137da932fd971975ccfe158dffa7;hpb=a5a42ed1bf23da4a35b675ce00781fea99df2acd;p=kivitendo-erp.git diff --git a/SL/DB/CsvImportReport.pm b/SL/DB/CsvImportReport.pm index 38d9e697e..5249410c8 100644 --- a/SL/DB/CsvImportReport.pm +++ b/SL/DB/CsvImportReport.pm @@ -4,8 +4,11 @@ package SL::DB::CsvImportReport; use strict; +use SL::DB; +use SL::DBUtils; use SL::DB::MetaSetup::CsvImportReport; +use SL::DB::Manager::CsvImportReport; __PACKAGE__->meta->add_relationships( rows => { @@ -20,47 +23,62 @@ __PACKAGE__->meta->add_relationships( }, ); -__PACKAGE__->meta->make_manager_class; __PACKAGE__->meta->initialize; sub folded_rows { - my ($self) = @_; - - $self->_fold_rows unless $self->{folded_rows}; - - return $self->{folded_rows}; -} + my ($self, %params) = @_; -sub folded_status { - my ($self) = @_; + my $folded_rows = {}; - $self->_fold_status unless $self->{folded_status}; + for my $row_obj (@{ $params{rows} || $self->rows }) { + $folded_rows->{ $row_obj->row } ||= []; + $folded_rows->{ $row_obj->row }[ $row_obj->col ] = $row_obj->value; + } - return $self->{folded_status}; + $folded_rows; } -sub _fold_rows { - my ($self) = @_; +sub folded_status { + my ($self, %params) = @_; - $self->{folded_rows} = []; + my $folded_status = {}; - for my $row_obj (@{ $self->rows }) { - $self->{folded_rows}->[ $row_obj->row ] ||= []; - $self->{folded_rows}->[ $row_obj->row ][ $row_obj->col ] = $row_obj->value; + for my $status_obj (@{ $params{status} || $self->status }) { + $folded_status->{ $status_obj->row } ||= {}; + $folded_status->{ $status_obj->row }{information} ||= []; + $folded_status->{ $status_obj->row }{errors} ||= []; + push @{ $folded_status->{ $status_obj->row }{ $status_obj->type } }, $status_obj->value; } + + $folded_status; } -sub _fold_status { +# implementes cascade delete as per documentation +sub destroy { my ($self) = @_; - $self->{folded_status} = []; - - for my $status_obj (@{ $self->status }) { - $self->{folded_status}->[ $status_obj->row ] ||= {}; - $self->{folded_status}->[ $status_obj->row ]{information} ||= []; - $self->{folded_status}->[ $status_obj->row ]{errors} ||= []; - push @{ $self->{folded_status}->[ $status_obj->row ]{ $status_obj->type } }, $status_obj->value; - } + SL::DB->client->with_transaction(sub { + my $dbh = SL::DB->client->dbh; + + do_query($::form, $dbh, 'DELETE FROM csv_import_report_status WHERE csv_import_report_id = ?', $self->id); + do_query($::form, $dbh, 'DELETE FROM csv_import_report_rows WHERE csv_import_report_id = ?', $self->id); + do_query($::form, $dbh, 'DELETE FROM csv_import_reports WHERE id = ?', $self->id); + + if ($self->profile_id) { + my ($is_profile_used_elsewhere) = selectfirst_array_query($::form, $dbh, <profile_id); + SELECT id + FROM csv_import_reports + WHERE profile_id = ? + LIMIT 1 +SQL + + if (!$is_profile_used_elsewhere) { + do_query($::form, $dbh, 'DELETE FROM csv_import_profile_settings WHERE csv_import_profile_id = ?', $self->profile_id); + do_query($::form, $dbh, 'DELETE FROM csv_import_profiles WHERE id = ?', $self->profile_id); + } + } + 1; + }) or do { die SL::DB->client->error }; } 1;