Keine Mixins in Mixins: Helper nur in Controller per "use" hinzufügen: Probleme beim...
[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
41   $form->prepare_for_printing;
42   $form->{attachment_filename} = $form->generate_attachment_filename;
43
44   my $pdf_filename = $self->create_pdf(%create_params);
45
46   if ( $::instance_conf->get_doc_storage && ! $form->{preview}) {
47     $self->append_general_pdf_attachments(filepath => $pdf_filename, type => $form->{type} );
48     $form->{tmpfile} = $pdf_filename;
49     $form->{id}      = $params{document}->id;
50     $self->store_pdf($form);
51   }
52   $form->{id} = $params{document}->id;
53   if ( ! $form->{preview} ) {
54     if ( ref($params{document}) eq 'SL::DB::DeliveryOrder' ) {
55       $form->{snumbers} = "ordnumber_" . $params{document}->donumber;
56     }
57     else {
58       $form->{snumbers} = "unknown";
59     }
60     $form->{addition} = "PRINTED";
61     $form->{what_done} = $::form->{type};
62     $form->save_history;
63   }
64   return $pdf_filename;
65 }
66
67 sub merge_massprint_pdf {
68   my ($self, %params)     = @_;
69   return unless $params{file_names} && $params{type};
70
71   my $job_obj = $self->{job_obj};
72   my $data    = $job_obj->data_as_hash;
73   my @pdf_file_names = @{$params{file_names}};
74
75   eval {
76     my $file_name = 'mass_'.$params{type}.'_'.$job_obj->id . '.pdf';
77     my $sfile     = SL::SessionFile->new($file_name, mode => 'w', session_id => $data->{session_id});
78     $sfile->fh->close;
79     $data->{pdf_file_name} = $sfile->file_name;
80
81     $self->merge_pdfs(file_names => \@pdf_file_names, bothsided => $data->{bothsided}, out_path => $data->{pdf_file_name});
82     unlink @pdf_file_names;
83
84     1;
85
86   } or do {
87     push @{ $data->{print_errors} }, { message => $@ };
88   };
89
90   $job_obj->update_attributes(data_as_hash => $data);
91 }
92
93 sub print_pdfs {
94   my ($self)     = @_;
95
96   my $job_obj         = $self->{job_obj};
97   my $data            = $job_obj->data_as_hash;
98   my $printer_id      = $data->{printer_id};
99   my $copy_printer_id = $data->{copy_printer_id};
100
101   return if !$printer_id;
102
103   my $out;
104
105   foreach  my $local_printer_id ($printer_id, $copy_printer_id) {
106     next unless $local_printer_id;
107     SL::DB::Printer
108       ->new(id => $local_printer_id)
109       ->load
110       ->print_document(file_name => $data->{pdf_file_name});
111   }
112
113 }
114
115 1;
116
117 __END__
118
119 =encoding utf-8
120
121 =head1 NAME
122
123 SL::Helper::MassPrint_CreatePDF
124
125
126 =head1 DESCRIPTION
127
128 This Helper used bei Background Processing for Mass Printing.
129 The redundant way to fill data for createPDF is concentrated into this helper.
130 There are some additional settings for printing which are missed in CreatePDF Helper
131 and also the appending of generic PDF-Documents.
132
133 (This extension may be included in the CreatePDF Helper).
134
135
136 =head1 REQUIRES
137
138 L<SL::Helper::CreatePDF>
139
140 =head1 METHODS
141
142 =head2 C<create_massprint_pdf PARAMS>
143
144 a tempory $form is used to set
145
146 =over 2
147
148 =item 1. content types
149
150 =item 2. flatten_to_form
151
152 =item 3. prepare_for_printing
153
154 =item 4. set history
155
156 =back
157
158 before printing is done
159
160
161 =head1 AUTHOR
162
163 Martin Helmling E<lt>martin.helmling@opendynamic.deE<gt>
164
165
166 =cut