X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FBackgroundJob%2FMassDeliveryOrderPrinting.pm;fp=SL%2FBackgroundJob%2FMassDeliveryOrderPrinting.pm;h=772d566b65ff20a1b896838fe6fa0667185e3875;hb=53593baa211863fbf66540cf1bcc36c8fb37257f;hp=0000000000000000000000000000000000000000;hpb=deb4d2dbb676d7d6f69dfe7815d6e0cb09bd4a44;p=kivitendo-erp.git diff --git a/SL/BackgroundJob/MassDeliveryOrderPrinting.pm b/SL/BackgroundJob/MassDeliveryOrderPrinting.pm new file mode 100644 index 000000000..772d566b6 --- /dev/null +++ b/SL/BackgroundJob/MassDeliveryOrderPrinting.pm @@ -0,0 +1,104 @@ +package SL::BackgroundJob::MassDeliveryOrderPrinting; + +use strict; +use warnings; + +use parent qw(SL::BackgroundJob::Base); + +use SL::DB::DeliveryOrder; +use SL::DB::Order; # origin order to delivery_order +use SL::DB::Printer; +use SL::SessionFile; +use SL::Template; +use SL::Helper::MassPrintCreatePDF qw(:all); +use SL::Helper::CreatePDF qw(:all); +use SL::Helper::File qw(store_pdf append_general_pdf_attachments doc_storage_enabled); + +use constant WAITING_FOR_EXECUTION => 0; +use constant PRINTING_DELIVERY_ORDERS => 1; +use constant DONE => 2; + +# Data format: +# my $data = { +# record_ids => [ 123, 124, 127, ], +# printer_id => 4711, +# num_created => 0, +# num_printed => 0, +# printed_ids => [ 234, 235, ], +# conversion_errors => [ { id => 124, number => 'A981723', message => "Stuff went boom" }, ], +# print_errors => [ { id => 234, number => 'L87123123', message => "Printer is out of coffee" }, ], +# pdf_file_name => 'qweqwe.pdf', +# session_id => $::auth->get_session_id, +# }; + + +sub convert_deliveryorders_to_pdf { + my ($self) = @_; + + my $job_obj = $self->{job_obj}; + my $db = $job_obj->db; + + $job_obj->set_data(status => PRINTING_DELIVERY_ORDERS())->save; + my $data = $job_obj->data_as_hash; + + my $printer_id = $data->{printer_id}; + if ( $data->{media} ne 'printer' ) { + undef $printer_id; + $data->{media} = 'file'; + } + my %variables = ( + type => 'delivery_order', + formname => $data->{formname}, + format => $data->{format}, + media => $data->{media}, + printer_id => $printer_id, + copies => $data->{copies}, + ); + + my @pdf_file_names; + foreach my $delivery_order_id (@{ $data->{record_ids} }) { + my $number = $delivery_order_id; + my $delivery_order = SL::DB::DeliveryOrder->new(id => $delivery_order_id)->load; + + eval { + $number = $delivery_order->donumber; + + my %params = ( + variables => \%variables, + document => $delivery_order, + return => 'file_name', + ); + + push @pdf_file_names, $self->create_massprint_pdf(%params); + + $data->{num_created}++; + + 1; + + } or do { + push @{ $data->{conversion_errors} }, { id => $delivery_order->id, number => $number, message => $@ }; + }; + + $job_obj->update_attributes(data_as_hash => $data); + } + + $self->merge_massprint_pdf(file_names => \@pdf_file_names, type => 'delivery_order' ) if scalar(@pdf_file_names) > 0; +} + +sub run { + my ($self, $job_obj) = @_; + + $self->{job_obj} = $job_obj; + + $self->convert_deliveryorders_to_pdf; + $self->print_pdfs; + + my $data = $job_obj->data_as_hash; + $data->{num_printed} = $data->{num_created}; + $job_obj->update_attributes(data_as_hash => $data); + $job_obj->set_data(status => DONE())->save; + + return 1; +} + +1;