1 package SL::Helper::MassPrintCreatePDF;
8 our @EXPORT_OK = qw(create_massprint_pdf merge_massprint_pdf create_pdfs print_pdfs);
14 my ($self, %params) = @_;
16 foreach my $document (@{ $params{documents} }) {
17 $params{document} = $document;
18 push @pdf_file_names, $self->create_massprint_pdf(%params);
21 return @pdf_file_names;
24 sub create_massprint_pdf {
25 my ($self, %params) = @_;
26 my $form = Form->new('');
29 return => 'file_name',
31 ## find_template may return a list !
32 $create_params{template} = $self->find_template(name => $params{variables}->{formname}, printer_id => $params{printer_id});
33 $form->{cwd}= POSIX::getcwd();
35 $form->{$_} = $params{variables}->{$_} for keys %{ $params{variables} };
37 $create_params{variable_content_types} = $form->get_variable_content_types();
38 $params{document}->flatten_to_form($form, format_amounts => 1);
39 # flatten_to_form sets payment_terms from customer/vendor - we do not want that here
41 delete $form->{payment_terms} if !$form->{payment_id};
42 for my $i (1 .. $form->{rowcount}) {
43 $form->{"sellprice_$i"} = $form->{"fxsellprice_$i"};
46 $form->prepare_for_printing;
47 $form->{attachment_filename} = $form->generate_attachment_filename;
49 my $pdf_filename = $self->create_pdf(%create_params);
51 if ($::instance_conf->get_webdav_documents && !$form->{preview}) {
52 my $webdav = SL::Webdav->new(
53 type => $params{document}->type,
54 number => $params{document}->record_number,
56 my $webdav_file = SL::Webdav::File->new(
58 filename => $form->{attachment_filename},
61 $webdav_file->store(file => $pdf_filename);
64 push @{ $params{errors} }, $@ if exists $params{errors};
68 if ( $::instance_conf->get_doc_storage && ! $form->{preview}) {
69 $self->append_general_pdf_attachments(filepath => $pdf_filename, type => $form->{type} );
70 $form->{tmpfile} = $pdf_filename;
71 $form->{id} = $params{document}->id;
72 $self->store_pdf($form);
74 $form->{id} = $params{document}->id;
75 if ( ! $form->{preview} ) {
76 if ( ref($params{document}) eq 'SL::DB::DeliveryOrder' ) {
77 $form->{snumbers} = "ordnumber_" . $params{document}->donumber;
80 $form->{snumbers} = "unknown";
82 $form->{addition} = "PRINTED";
83 $form->{what_done} = $::form->{type};
89 sub merge_massprint_pdf {
90 my ($self, %params) = @_;
91 return unless $params{file_names} && $params{type};
93 my $job_obj = $self->{job_obj};
94 my $data = $job_obj->data_as_hash;
95 my @pdf_file_names = @{$params{file_names}};
98 my $file_name = 'mass_'.$params{type}.'_'.$job_obj->id . '.pdf';
99 my $sfile = SL::SessionFile->new($file_name, mode => 'w', session_id => $data->{session_id});
101 $data->{pdf_file_name} = $sfile->file_name;
103 $self->merge_pdfs(file_names => \@pdf_file_names, bothsided => $data->{bothsided}, out_path => $data->{pdf_file_name});
104 unlink @pdf_file_names;
109 push @{ $data->{print_errors} }, { message => $@ };
112 $job_obj->update_attributes(data_as_hash => $data);
118 my $job_obj = $self->{job_obj};
119 my $data = $job_obj->data_as_hash;
120 my $printer_id = $data->{printer_id};
121 my $copy_printer_id = $data->{copy_printer_id};
123 return if !$printer_id;
127 foreach my $local_printer_id ($printer_id, $copy_printer_id) {
128 next unless $local_printer_id;
130 ->new(id => $local_printer_id)
132 ->print_document(file_name => $data->{pdf_file_name});
145 SL::Helper::MassPrint_CreatePDF
150 This Helper used bei Background Processing for Mass Printing.
151 The redundant way to fill data for createPDF is concentrated into this helper.
152 There are some additional settings for printing which are missed in CreatePDF Helper
153 and also the appending of generic PDF-Documents.
155 (This extension may be included in the CreatePDF Helper).
160 L<SL::Helper::CreatePDF>
164 =head2 C<create_massprint_pdf PARAMS>
166 a tempory $form is used to set
170 =item 1. content types
172 =item 2. flatten_to_form
174 =item 3. prepare_for_printing
180 before printing is done
182 Recognized parameters are (not a complete list):
186 =item * C<errors> – optional. If given, it must be an array ref. This will be
187 filled with potential errors.
194 Martin Helmling E<lt>martin.helmling@opendynamic.deE<gt>