]> wagnertech.de Git - mfinanz.git/blobdiff - SL/Controller/CsvImport.pm
scripts/image_maps.pl: korrigiere Schreibfehler
[mfinanz.git] / SL / Controller / CsvImport.pm
index af70dac3d85dfedee7ea397552d74f1892f5513a..2a3e062bbed314fd4e4778cc35e5fe5a6bc05c9d 100644 (file)
@@ -163,7 +163,21 @@ sub action_report {
     $::form->error(t8('No report with id #1', $report_id));
   }
 
-  my $num_rows               = $self->{report}->numrows;
+  my $show_info_err = ($self->{report}->profile->get('full_preview', 0) == 1);
+  my $show_first_20 = ($self->{report}->profile->get('full_preview', 0) == 2);
+
+  my $num_rows = 0;
+  if ($show_first_20) {
+    $num_rows  = min($self->{report}->numrows, 20);
+  } elsif ($show_info_err) {
+    # count each status row only once
+    $num_rows  = SL::DB::Manager::CsvImportReportStatus->get_all_count(query    => [csv_import_report_id => $report_id],
+                                                                       select   => ['row'],
+                                                                       distinct => 1,);
+  } else {
+    # show all
+    $num_rows  = $self->{report}->numrows;
+  }
 
   # manual paginating, yuck
   my $page                   = $::form->{page} || 1;
@@ -180,31 +194,35 @@ sub action_report {
   my $last_row_header        = $self->{report_numheaders} - 1;
   my $first_row_data         = $pages->{per_page} * ($pages->{page}-1) + $self->{report_numheaders};
   my $last_row_data          = min($pages->{per_page} * $pages->{page}, $num_rows) + $self->{report_numheaders} - 1;
-  $self->{display_rows}      = [
-    $first_row_header
-      ..
-    $last_row_header,
-    $first_row_data
-      ..
-    $last_row_data
-  ];
+
+
+  $self->{display_rows} = [];
+  if ($show_info_err) {
+    my $limit    = $last_row_data  - $first_row_data + 1;
+    my $offset   = $first_row_data - $self->{report_numheaders};
+    my @err_rows = map { $_->row } @{SL::DB::Manager::CsvImportReportStatus->get_all(query    => [csv_import_report_id => $report_id],
+                                                                                     distinct => 1,
+                                                                                     select   => ['row'],
+                                                                                     limit    => $limit,
+                                                                                     offset   => $offset,
+                                                                                     sort_by  => 'row')};
+    $self->{display_rows} = [ $first_row_header .. $last_row_header,
+                              @err_rows ];
+
+  } else {
+
+    $self->{display_rows} = [ $first_row_header .. $last_row_header,
+                              $first_row_data   .. $last_row_data ];
+  }
 
   my @query = (
+    row                  => $self->{display_rows},
     csv_import_report_id => $report_id,
-    or => [
-      and => [
-        row => { ge => $first_row_header },
-        row => { le => $last_row_header },
-      ],
-      and => [
-        row => { ge => $first_row_data },
-        row => { le => $last_row_data },
-      ]
-    ]
   );
 
-  my $rows               = SL::DB::Manager::CsvImportReportRow   ->get_all(query => \@query);
-  my $status             = SL::DB::Manager::CsvImportReportStatus->get_all(query => \@query);
+  my $rows               = SL::DB::Manager::CsvImportReportRow   ->get_all(query => \@query, sort_by => 'row');
+  my $status             = SL::DB::Manager::CsvImportReportStatus->get_all(query => \@query, sort_by => 'row');
+  $self->{num_errors}    = SL::DB::Manager::CsvImportReportStatus->get_all_count(query => [csv_import_report_id => $report_id, type => 'errors']);
 
   $self->{report_rows}   = $self->{report}->folded_rows(rows => $rows);
   $self->{report_status} = $self->{report}->folded_status(status => $status);
@@ -488,7 +506,7 @@ sub profile_from_form {
     $::form->{settings}->{sellprice_adjustment} = $::form->parse_amount(\%::myconfig, $::form->{settings}->{sellprice_adjustment});
   }
 
-  if ($self->type eq 'orders') {
+  if ($self->type eq 'orders' or $self->{type} eq 'ar_transactions') {
     $::form->{settings}->{max_amount_diff} = $::form->parse_amount(\%::myconfig, $::form->{settings}->{max_amount_diff});
   }
 
@@ -733,9 +751,13 @@ sub cleanup_reports {
 }
 
 sub check_task_server {
+  if (!$::auth->client->{task_server_user_id}) {
+    flash('error', t8('The task server is required for this module but not enabled for the current client. Please enable it for the client "#1" in the administration section.', $::auth->client->{name}));
+  }
+
   return 1 if $_[0]->task_server->is_running;
 
-  flash('info', t8('The task server is not running at the moment but needed for this module'));
+  flash('warning', t8('The task server is not running at the moment but needed for this module'));
 
   1;
 }