X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/b2930e37cd4bfd276be6c785e1cd7fff0f503aef..8ae2bc4fb4c72f3ac907a3e47c0cbd5da23f62c5:/SL/Controller/CsvImport.pm?ds=inline diff --git a/SL/Controller/CsvImport.pm b/SL/Controller/CsvImport.pm index 681ebdd47..8834b2024 100644 --- a/SL/Controller/CsvImport.pm +++ b/SL/Controller/CsvImport.pm @@ -6,6 +6,7 @@ use SL::DB::Buchungsgruppe; use SL::DB::CsvImportProfile; use SL::DB::CsvImportReport; use SL::DB::Unit; +use SL::DB::Helper::Paginated (); use SL::Helper::Flash; use SL::SessionFile; use SL::Controller::CsvImport::Contact; @@ -17,6 +18,7 @@ use SL::BackgroundJob::CsvImport; use SL::System::TaskServer; use List::MoreUtils qw(none); +use List::Util qw(min); use parent qw(SL::Controller::Base); @@ -36,6 +38,8 @@ __PACKAGE__->run_before('ensure_form_structure'); __PACKAGE__->run_before('check_type', except => [ qw(report) ]); __PACKAGE__->run_before('load_all_profiles'); +__PACKAGE__->run_after('cleanup_reports'); + # # actions # @@ -94,7 +98,7 @@ sub action_result { } if ($data->{progress}{finished} || $data->{errors}) { - $self->action_report(report_id => $data->{report_id}, no_layout => 1); + $self->render('csv_import/_deferred_report', { no_layout => 1 }); } else { $self->render('csv_import/_deferred_results', { no_layout => 1 }); } @@ -123,9 +127,49 @@ sub action_download_sample { sub action_report { my ($self, %params) = @_; - $self->{report} = SL::DB::Manager::CsvImportReport->find_by(id => $params{report_id} || $::form->{id}); + my $report_id = $params{report_id} || $::form->{id}; + + $self->{report} = SL::DB::Manager::CsvImportReport->find_by(id => $report_id); + my $num_rows = SL::DB::Manager::CsvImportReportRow->get_all_count(query => [ csv_import_report_id => $report_id ]); + my $num_cols = SL::DB::Manager::CsvImportReportRow->get_all_count(query => [ csv_import_report_id => $report_id, row => 0 ]); + + # manual paginating, yuck + my $page = $::form->{page} || 1; + my $pages = {}; + $pages->{per_page} = $::form->{per_page} || 20; + $pages->{max} = SL::DB::Helper::Paginated::ceil($num_rows / ($num_cols || 1), $pages->{per_page}) || 1; + $pages->{cur} = $page < 1 ? 1 + : $page > $pages->{max} ? $pages->{max} + : $page; + $pages->{common} = SL::DB::Helper::Paginated::make_common_pages($pages->{cur}, $pages->{max}); + + $self->{display_rows} = [ + 0, + $pages->{per_page} * ($pages->{cur}-1) + 1 + .. + min($pages->{per_page} * $pages->{cur}, $num_rows / ($num_cols || 1) - 1) + ]; + + my @query = ( + csv_import_report_id => $report_id, + or => [ + row => 0, + and => [ + row => { gt => $pages->{per_page} * ($pages->{cur}-1) }, + row => { le => $pages->{per_page} * $pages->{cur} }, + ] + ] + ); + + my $rows = SL::DB::Manager::CsvImportReportRow->get_all(query => \@query); + my $status = SL::DB::Manager::CsvImportReportStatus->get_all(query => \@query); + + $self->{report_rows} = $self->{report}->folded_rows(rows => $rows); + $self->{report_status} = $self->{report}->folded_status(status => $status); + $self->{pages} = $pages; + $self->{base_url} = $self->url_for(action => 'report', id => $report_id, no_layout => $params{no_layout} || $::form->{no_layout} ); - $self->render('csv_import/report', { no_layout => $params{no_layout} }); + $self->render('csv_import/report', { no_layout => $params{no_layout} || $::form->{no_layout} }); } @@ -360,12 +404,6 @@ sub save_report { push @raw_methods, $self->raw_data_headers->{headers}->[$i]; } - $::lxdebug->dump(0, "methods", - [ \@info_methods, - \@methods, - \@raw_methods ] - ); - $sth->execute($report->id, $_, 0, $headers[$_]) for 0 .. $#headers; # col offsets @@ -426,4 +464,8 @@ sub track_progress { } +sub cleanup_reports { + SL::DB::Manager::CsvImportReport->cleanup; +} + 1;