Reportgenerator: Beim Listenexport als PDF kann das PDF auch direkt ausgedruckt werden.
authorMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 14 Jun 2007 13:28:57 +0000 (13:28 +0000)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 14 Jun 2007 13:28:57 +0000 (13:28 +0000)
SL/ReportGenerator.pm
bin/mozilla/report_generator.pl
locale/de/all
templates/webpages/report_generator/pdf_export_options_de.html
templates/webpages/report_generator/pdf_export_options_master.html

index 306236f..dbdbf72 100644 (file)
@@ -1,6 +1,7 @@
 package SL::ReportGenerator;
 
 use IO::Wrap;
+use List::Util qw(max);
 use Text::CSV_XS;
 
 use SL::Form;
@@ -28,6 +29,9 @@ sub new {
       'margin_bottom'       => 1.5,
       'margin_right'        => 1.5,
       'number'              => 1,
+      'print'               => 0,
+      'printer_id'          => 0,
+      'copies'              => 1,
     },
     'csv_export'            => {
       'quote_char'          => '"',
@@ -154,28 +158,6 @@ sub set_export_options {
   };
 }
 
-sub generate_content {
-  my $self   = shift;
-  my $format = lc $self->{options}->{output_format};
-
-  if (!$self->{columns}) {
-    $self->{form}->error('Incorrect usage -- no columns specified');
-  }
-
-  if ($format eq 'html') {
-    return $self->generate_html_content();
-
-  } elsif ($format eq 'csv') {
-    return $self->generate_csv_content();
-
-  } elsif ($format eq 'pdf') {
-    return $self->generate_pdf_content();
-
-  } else {
-    $self->{form}->error('Incorrect usage -- unknown format (supported are HTML, CSV, PDF)');
-  }
-}
-
 sub generate_with_headers {
   my $self   = shift;
   my $format = lc $self->{options}->{output_format};
@@ -199,8 +181,6 @@ sub generate_with_headers {
     $self->generate_csv_content();
 
   } elsif ($format eq 'pdf') {
-    print qq|content-type: application/pdf\n|;
-    print qq|content-disposition: attachment; filename=${filename}.pdf\n\n|;
     $self->generate_pdf_content();
 
   } else {
@@ -368,6 +348,13 @@ BODY {
 END
   ;
 
+  my $printer_command;
+  if ($opt->{print} && $opt->{printer_id}) {
+    $form->{printer_id} = $opt->{printer_id};
+    $form->get_printer_code($myconfig);
+    $printer_command = $form->{printer_command};
+  }
+
   my $cfg_file_name = Common::tmpname() . '-html2ps-config';
   my $cfg_file      = IO::File->new($cfg_file_name, 'w') || $form->error($locale->text('Could not write the html2ps config file.'));
 
@@ -391,12 +378,38 @@ END
 
   my $gs = IO::File->new("${cmdline} |");
   if ($gs) {
-    while (my $line = <$gs>) {
-      print $line;
+    my $content;
+
+    if (!$printer_command) {
+      print qq|content-type: application/pdf\n|;
+      print qq|content-disposition: attachment; filename=${filename}.pdf\n\n|;
+
+      while (my $line = <$gs>) {
+        print $line;
+      }
+
+    } else {
+      while (my $line = <$gs>) {
+        $content .= $line;
+      }
     }
+
     $gs->close();
     unlink $cfg_file_name, $html_file_name;
 
+    if ($printer_command && $content) {
+      foreach my $i (1 .. max $opt->{copies}, 1) {
+        my $printer = IO::File->new("| ${printer_command}");
+        if (!$printer) {
+          $form->error($locale->text('Could not spawn the printer command.'));
+        }
+        $printer->print($content);
+        $printer->close();
+      }
+
+      $form->{report_generator_printed} = 1;
+    }
+
   } else {
     unlink $cfg_file_name, $html_file_name;
     $form->error($locale->text('Could not spawn html2ps or GhostScript.'));
index db65eb0..112116d 100644 (file)
@@ -9,6 +9,8 @@
 #
 ######################################################################
 
+use List::Util qw(max);
+
 use SL::Form;
 use SL::Common;
 use SL::MoreCommon;
@@ -18,7 +20,16 @@ sub report_generator_export_as_pdf {
   $lxdebug->enter_sub();
 
   if ($form->{report_generator_pdf_options_set}) {
+    my $saved_form = save_form();
+
     report_generator_do('PDF');
+
+    if ($form->{report_generator_printed}) {
+      restore_form($saved_form);
+      $form->{MESSAGE} = $locale->text('The list has been printed.');
+      report_generator_do('HTML');
+    }
+
     $lxdebug->leave_sub();
     return;
   }
@@ -26,11 +37,18 @@ sub report_generator_export_as_pdf {
   my @form_values;
   map { push @form_values, { 'key' => $_, 'value' => $form->{$_} } } keys %{ $form };
 
+  $form->get_lists('printers' => 'ALL_PRINTERS');
+  map { $_->{selected} = $myconfig{default_printer_id} == $_->{id} } @{ $form->{ALL_PRINTERS} };
+
+  $form->{copies} = max $myconfig{copies} * 1, 1;
+
   $form->{title} = $locale->text('PDF export -- options');
   $form->header();
   print $form->parse_html_template('report_generator/pdf_export_options',
                                    { 'HIDDEN'         => \@form_values,
-                                     'default_margin' => $form->format_amount(\%myconfig, 1.5) });
+                                     'default_margin' => $form->format_amount(\%myconfig, 1.5),
+                                     'SHOW_PRINTERS'  => scalar @{ $form->{ALL_PRINTERS} },
+                                   });
 
   $lxdebug->leave_sub();
 }
index 67b8462..13182a5 100644 (file)
@@ -874,6 +874,7 @@ aktualisieren wollen?',
   'Print'                       => 'Drucken',
   'Print and Post'              => 'Drucken und Buchen',
   'Print dunnings'              => 'Mahnungen drucken',
+  'Print list'                  => 'Liste ausdrucken',
   'Print options'               => 'Druckoptionen',
   'Printer'                     => 'Drucker',
   'Printer Command'             => 'Druckbefehl',
index 6c30322..3febc08 100644 (file)
     <td valign="top">
      <input type="checkbox" name="report_generator_pdf_options_number" value="1" checked>
      Seiten nummerieren
+     <TMPL_IF SHOW_PRINTERS>
+      <br>
+      <input type="checkbox" name="report_generator_pdf_options_print" value="1">
+      Liste ausdrucken
+     </TMPL_IF>
     </td>
    </tr>
 
-
+   <TMPL_IF SHOW_PRINTERS>
+    <tr>
+     <td align="right">Drucker</td>
+     <td>
+      <select name="report_generator_pdf_options_printer_id">
+       <TMPL_LOOP ALL_PRINTERS><option value="<TMPL_VAR id ESCAPE=HTML>"<TMPL_IF selected> selected</TMPL_IF>><TMPL_VAR printer_description ESCAPE=HTML></option></TMPL_LOOP>
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <td align="right">Kopien</td>
+     <td><input name="report_generator_pdf_options_copies" size="4" value="<TMPL_VAR copies ESCAPE=HTML>"></td>
+    </tr>
+   </TMPL_IF>
   </table>
 
   <p>
index 066e4d7..481a0cd 100644 (file)
     <td valign="top">
      <input type="checkbox" name="report_generator_pdf_options_number" value="1" checked>
      <translate>Number pages</translate>
+     <TMPL_IF SHOW_PRINTERS>
+      <br>
+      <input type="checkbox" name="report_generator_pdf_options_print" value="1">
+      <translate>Print list</translate>
+     </TMPL_IF>
     </td>
    </tr>
 
-
+   <TMPL_IF SHOW_PRINTERS>
+    <tr>
+     <td align="right"><translate>Printer</translate></td>
+     <td>
+      <select name="report_generator_pdf_options_printer_id">
+       <TMPL_LOOP ALL_PRINTERS><option value="<TMPL_VAR id ESCAPE=HTML>"<TMPL_IF selected> selected</TMPL_IF>><TMPL_VAR printer_description ESCAPE=HTML></option></TMPL_LOOP>
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <td align="right"><translate>Copies</translate></td>
+     <td><input name="report_generator_pdf_options_copies" size="4" value="<TMPL_VAR copies ESCAPE=HTML>"></td>
+    </tr>
+   </TMPL_IF>
   </table>
 
   <p>