66fbaf2b90a8065fa327d0f4e1eba296c3fc1ada
[kivitendo-erp.git] / SL / Helper / MassPrintCreatePDF.pm
1 package SL::Helper::MassPrintCreatePDF;
2
3 use strict;
4
5 use Exporter 'import';
6 our @EXPORT_OK = qw(create_massprint_pdf merge_massprint_pdf create_pdfs print_pdfs);
7 our %EXPORT_TAGS = (
8   all => \@EXPORT_OK,
9 );
10
11 sub create_pdfs {
12   my ($self, %params) = @_;
13   my @pdf_file_names;
14   foreach my $document (@{ $params{documents} }) {
15     $params{document} = $document;
16     push @pdf_file_names, $self->create_massprint_pdf(%params);
17   }
18
19   return @pdf_file_names;
20 }
21
22 sub create_massprint_pdf {
23   my ($self, %params) = @_;
24   my $form = Form->new('');
25   my %create_params = (
26       variables => $form,
27       return    => 'file_name',
28   );
29   ## find_template may return a list !
30   $create_params{template} = $self->find_template(name => $params{variables}->{formname}, printer_id => $params{printer_id});
31   $form->{cwd}= POSIX::getcwd();
32
33   $form->{$_} = $params{variables}->{$_} for keys %{ $params{variables} };
34
35   $create_params{variable_content_types} = $form->get_variable_content_types();
36   $params{document}->flatten_to_form($form, format_amounts => 1);
37   # flatten_to_form sets payment_terms from customer/vendor - we do not want that here
38   # really ??
39   delete $form->{payment_terms} if !$form->{payment_id};
40   for my $i (1 .. $form->{rowcount}) {
41     $form->{"sellprice_$i"} = $form->{"fxsellprice_$i"};
42   }
43
44   $form->prepare_for_printing;
45   $form->{attachment_filename} = $form->generate_attachment_filename;
46
47   my $pdf_filename = $self->create_pdf(%create_params);
48
49   if ( $::instance_conf->get_doc_storage && ! $form->{preview}) {
50     $self->append_general_pdf_attachments(filepath => $pdf_filename, type => $form->{type} );
51     $form->{tmpfile} = $pdf_filename;
52     $form->{id}      = $params{document}->id;
53     $self->store_pdf($form);
54   }
55   $form->{id} = $params{document}->id;
56   if ( ! $form->{preview} ) {
57     if ( ref($params{document}) eq 'SL::DB::DeliveryOrder' ) {
58       $form->{snumbers} = "ordnumber_" . $params{document}->donumber;
59     }
60     else {
61       $form->{snumbers} = "unknown";
62     }
63     $form->{addition} = "PRINTED";
64     $form->{what_done} = $::form->{type};
65     $form->save_history;
66   }
67   return $pdf_filename;
68 }
69
70 sub merge_massprint_pdf {
71   my ($self, %params)     = @_;
72   return unless $params{file_names} && $params{type};
73
74   my $job_obj = $self->{job_obj};
75   my $data    = $job_obj->data_as_hash;
76   my @pdf_file_names = @{$params{file_names}};
77
78   eval {
79     my $file_name = 'mass_'.$params{type}.'_'.$job_obj->id . '.pdf';
80     my $sfile     = SL::SessionFile->new($file_name, mode => 'w', session_id => $data->{session_id});
81     $sfile->fh->close;
82     $data->{pdf_file_name} = $sfile->file_name;
83
84     $self->merge_pdfs(file_names => \@pdf_file_names, bothsided => $data->{bothsided}, out_path => $data->{pdf_file_name});
85     unlink @pdf_file_names;
86
87     1;
88
89   } or do {
90     push @{ $data->{print_errors} }, { message => $@ };
91   };
92
93   $job_obj->update_attributes(data_as_hash => $data);
94 }
95
96 sub print_pdfs {
97   my ($self)     = @_;
98
99   my $job_obj         = $self->{job_obj};
100   my $data            = $job_obj->data_as_hash;
101   my $printer_id      = $data->{printer_id};
102   my $copy_printer_id = $data->{copy_printer_id};
103
104   return if !$printer_id;
105
106   my $out;
107
108   foreach  my $local_printer_id ($printer_id, $copy_printer_id) {
109     next unless $local_printer_id;
110     SL::DB::Printer
111       ->new(id => $local_printer_id)
112       ->load
113       ->print_document(file_name => $data->{pdf_file_name});
114   }
115
116 }
117
118 1;
119
120 __END__
121
122 =encoding utf-8
123
124 =head1 NAME
125
126 SL::Helper::MassPrint_CreatePDF
127
128
129 =head1 DESCRIPTION
130
131 This Helper used bei Background Processing for Mass Printing.
132 The redundant way to fill data for createPDF is concentrated into this helper.
133 There are some additional settings for printing which are missed in CreatePDF Helper
134 and also the appending of generic PDF-Documents.
135
136 (This extension may be included in the CreatePDF Helper).
137
138
139 =head1 REQUIRES
140
141 L<SL::Helper::CreatePDF>
142
143 =head1 METHODS
144
145 =head2 C<create_massprint_pdf PARAMS>
146
147 a tempory $form is used to set
148
149 =over 2
150
151 =item 1. content types
152
153 =item 2. flatten_to_form
154
155 =item 3. prepare_for_printing
156
157 =item 4. set history
158
159 =back
160
161 before printing is done
162
163
164 =head1 AUTHOR
165
166 Martin Helmling E<lt>martin.helmling@opendynamic.deE<gt>
167
168
169 =cut