|
package SL::Helper::MassPrintCreatePDF;
|
|
|
|
use strict;
|
|
|
|
use SL::Webdav;
|
|
|
|
use Exporter 'import';
|
|
our @EXPORT_OK = qw(create_massprint_pdf merge_massprint_pdf create_pdfs print_pdfs);
|
|
our %EXPORT_TAGS = (
|
|
all => \@EXPORT_OK,
|
|
);
|
|
|
|
sub create_pdfs {
|
|
my ($self, %params) = @_;
|
|
my @pdf_file_names;
|
|
foreach my $document (@{ $params{documents} }) {
|
|
$params{document} = $document;
|
|
push @pdf_file_names, $self->create_massprint_pdf(%params);
|
|
}
|
|
|
|
return @pdf_file_names;
|
|
}
|
|
|
|
sub create_massprint_pdf {
|
|
my ($self, %params) = @_;
|
|
my $form = Form->new('');
|
|
my %create_params = (
|
|
variables => $form,
|
|
record => $params{document},
|
|
return => 'file_name',
|
|
);
|
|
## find_template may return a list !
|
|
$create_params{template} = $self->find_template(name => $params{variables}->{formname}, printer_id => $params{printer_id});
|
|
$form->{cwd}= POSIX::getcwd();
|
|
|
|
$form->{$_} = $params{variables}->{$_} for keys %{ $params{variables} };
|
|
|
|
$create_params{variable_content_types} = $form->get_variable_content_types();
|
|
$params{document}->flatten_to_form($form, format_amounts => 1);
|
|
# flatten_to_form sets payment_terms from customer/vendor - we do not want that here
|
|
# really ??
|
|
delete $form->{payment_terms} if !$form->{payment_id};
|
|
for my $i (1 .. $form->{rowcount}) {
|
|
$form->{"sellprice_$i"} = $form->{"fxsellprice_$i"};
|
|
}
|
|
|
|
$form->prepare_for_printing;
|
|
|
|
$form->{language} = '_' . $form->{language};
|
|
$form->{attachment_filename} = $form->generate_attachment_filename;
|
|
|
|
my $pdf_filename = $self->create_pdf(%create_params);
|
|
|
|
if ($::instance_conf->get_webdav_documents && !$form->{preview}) {
|
|
my $webdav = SL::Webdav->new(
|
|
type => $params{document}->type,
|
|
number => $params{document}->record_number,
|
|
);
|
|
my $webdav_file = SL::Webdav::File->new(
|
|
webdav => $webdav,
|
|
filename => $form->{attachment_filename},
|
|
);
|
|
eval {
|
|
$webdav_file->store(file => $pdf_filename);
|
|
1;
|
|
} or do {
|
|
push @{ $params{errors} }, $@ if exists $params{errors};
|
|
}
|
|
}
|
|
|
|
if ( $::instance_conf->get_doc_storage && ! $form->{preview}) {
|
|
$self->append_general_pdf_attachments(filepath => $pdf_filename, type => $form->{type} );
|
|
$form->{tmpfile} = $pdf_filename;
|
|
$form->{id} = $params{document}->id;
|
|
$self->store_pdf($form);
|
|
}
|
|
$form->{id} = $params{document}->id;
|
|
if ( ! $form->{preview} ) {
|
|
if ( ref($params{document}) eq 'SL::DB::DeliveryOrder' ) {
|
|
$form->{snumbers} = "ordnumber_" . $params{document}->donumber;
|
|
}
|
|
else {
|
|
$form->{snumbers} = "unknown";
|
|
}
|
|
$form->{addition} = "PRINTED";
|
|
$form->{what_done} = $::form->{type};
|
|
$form->save_history;
|
|
}
|
|
return $pdf_filename;
|
|
}
|
|
|
|
sub merge_massprint_pdf {
|
|
my ($self, %params) = @_;
|
|
return unless $params{file_names} && $params{type};
|
|
|
|
my $job_obj = $self->{job_obj};
|
|
my $data = $job_obj->data_as_hash;
|
|
my @pdf_file_names = @{$params{file_names}};
|
|
|
|
eval {
|
|
my $file_name = 'mass_'.$params{type}.'_'.$job_obj->id . '.pdf';
|
|
my $sfile = SL::SessionFile->new($file_name, mode => 'w', session_id => $data->{session_id});
|
|
$sfile->fh->close;
|
|
$data->{pdf_file_name} = $sfile->file_name;
|
|
|
|
$self->merge_pdfs(file_names => \@pdf_file_names, bothsided => $data->{bothsided}, out_path => $data->{pdf_file_name});
|
|
unlink @pdf_file_names;
|
|
|
|
1;
|
|
|
|
} or do {
|
|
push @{ $data->{print_errors} }, { message => $@ };
|
|
};
|
|
|
|
$job_obj->update_attributes(data_as_hash => $data);
|
|
}
|
|
|
|
sub print_pdfs {
|
|
my ($self) = @_;
|
|
|
|
my $job_obj = $self->{job_obj};
|
|
my $data = $job_obj->data_as_hash;
|
|
my $printer_id = $data->{printer_id};
|
|
my $copy_printer_id = $data->{copy_printer_id};
|
|
|
|
return if !$printer_id;
|
|
|
|
my $out;
|
|
|
|
foreach my $local_printer_id ($printer_id, $copy_printer_id) {
|
|
next unless $local_printer_id;
|
|
SL::DB::Printer
|
|
->new(id => $local_printer_id)
|
|
->load
|
|
->print_document(file_name => $data->{pdf_file_name});
|
|
}
|
|
|
|
}
|
|
|
|
1;
|
|
|
|
__END__
|
|
|
|
=encoding utf-8
|
|
|
|
=head1 NAME
|
|
|
|
SL::Helper::MassPrint_CreatePDF
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This Helper used bei Background Processing for Mass Printing.
|
|
The redundant way to fill data for createPDF is concentrated into this helper.
|
|
There are some additional settings for printing which are missed in CreatePDF Helper
|
|
and also the appending of generic PDF-Documents.
|
|
|
|
(This extension may be included in the CreatePDF Helper).
|
|
|
|
|
|
=head1 REQUIRES
|
|
|
|
L<SL::Helper::CreatePDF>
|
|
|
|
=head1 METHODS
|
|
|
|
=head2 C<create_massprint_pdf PARAMS>
|
|
|
|
a tempory $form is used to set
|
|
|
|
=over 2
|
|
|
|
=item 1. content types
|
|
|
|
=item 2. flatten_to_form
|
|
|
|
=item 3. prepare_for_printing
|
|
|
|
=item 4. set history
|
|
|
|
=back
|
|
|
|
before printing is done
|
|
|
|
Recognized parameters are (not a complete list):
|
|
|
|
=over 2
|
|
|
|
=item * C<errors> – optional. If given, it must be an array ref. This will be
|
|
filled with potential errors.
|
|
|
|
=back
|
|
|
|
|
|
=head1 AUTHOR
|
|
|
|
Martin Helmling E<lt>martin.helmling@opendynamic.deE<gt>
|
|
|
|
|
|
=cut
|