package SL::ReportGenerator;
use IO::Wrap;
+use List::Util qw(max);
use Text::CSV_XS;
use SL::Form;
'margin_bottom' => 1.5,
'margin_right' => 1.5,
'number' => 1,
+ 'print' => 0,
+ 'printer_id' => 0,
+ 'copies' => 1,
},
'csv_export' => {
'quote_char' => '"',
};
}
-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};
$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 {
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.'));
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.'));
#
######################################################################
+use List::Util qw(max);
+
use SL::Form;
use SL::Common;
use SL::MoreCommon;
$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;
}
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();
}
'Print' => 'Drucken',
'Print and Post' => 'Drucken und Buchen',
'Print dunnings' => 'Mahnungen drucken',
+ 'Print list' => 'Liste ausdrucken',
'Print options' => 'Druckoptionen',
'Printer' => 'Drucker',
'Printer Command' => 'Druckbefehl',
<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>
<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>