X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDN.pm;h=b3c4d897a3f4d4cc038111f3c9e1d4b6710db78b;hb=e7c0d9cec5bc78093fa2b10ebc489f1b3bca4960;hp=f3969fc113a66d845af7ec7e63f20d77d5b0f488;hpb=4e36326b1705bf924a5cd909a9658a481249af7e;p=kivitendo-erp.git diff --git a/SL/DN.pm b/SL/DN.pm index f3969fc11..b3c4d897a 100644 --- a/SL/DN.pm +++ b/SL/DN.pm @@ -54,6 +54,7 @@ use SL::DB; use SL::Webdav; use File::Copy; +use File::Slurp qw(read_file); use strict; @@ -319,7 +320,16 @@ sub save_dunning { $form->{DUNNING_PDFS_STORAGE} = []; - my $rc = SL::DB->client->with_transaction(\&_save_dunning, $self, $myconfig, $form, $rows); + # Catch any error, either exception or a call to form->error + # and return it to the calling function. + my ($error, $rc); + eval { + local $form->{__ERROR_HANDLER} = sub { die @_ }; + $rc = SL::DB->client->with_transaction(\&_save_dunning, $self, $myconfig, $form, $rows); + 1; + } or do { + $error = $@; + }; # Save PDFs in filemanagement and webdav after transation succeeded, # because otherwise files in the storage may exists if the transaction @@ -329,9 +339,9 @@ sub save_dunning { _store_pdf_to_webdav_and_filemanagement($_->{dunning_id}, $_->{path}, $_->{name}) for @{ $form->{DUNNING_PDFS_STORAGE} }; } - if (!$rc) { - die SL::DB->client->error - } + $error = 'unknown errror' if !$error && !$rc; + $rc->{error} = $error if $error; + $::lxdebug->leave_sub; return $rc; @@ -413,7 +423,7 @@ sub _save_dunning { } # die this transaction, because for this customer only credit notes are # selected ... - return unless $customer_id; + die "only credit notes are selected for this customer\n" unless $customer_id; $h_update_ar->finish(); $h_insert_dunning->finish(); @@ -435,7 +445,7 @@ sub _save_dunning { $self->send_email($myconfig, $form, $dunning_id, $dbh); } - return 1; + return ({dunning_id => $dunning_id, print_original_invoice => $print_invoice, send_email => $send_email}); } sub send_email { @@ -495,6 +505,11 @@ sub send_email { $mail->{attachments} = $form->{DUNNING_PDFS_EMAIL}; } + $query = qq|SELECT id FROM dunning WHERE dunning_id = ?|; + my @ids = selectall_array_query($form, $dbh, $query, $dunning_id); + $mail->{record_id} = \@ids; + $mail->{record_type} = 'dunning'; + $mail->send(); $main::lxdebug->leave_sub(); @@ -737,6 +752,11 @@ sub get_dunning { push(@values, like($form->{$key})); } + if ($form->{dunning_id}) { + $where .= qq| AND da.dunning_id = ?|; + push(@values, conv_i($form->{dunning_id})); + } + if ($form->{dunning_level}) { $where .= qq| AND a.dunning_config_id = ?|; push(@values, conv_i($form->{dunning_level})); @@ -787,6 +807,7 @@ sub get_dunning { 'duedate' => [ qw(a.duedate a.invnumber) ], 'dunning_date' => [ qw(dunning_date da.dunning_id a.invnumber) ], 'dunning_duedate' => [ qw(dunning_duedate da.dunning_id a.invnumber) ], + 'dunning_id' => [ qw(dunning_id a.invnumber) ], 'salesman' => [ qw(salesman) ], ); @@ -799,6 +820,7 @@ sub get_dunning { ct.name AS customername, ct.id AS customer_id, a.duedate, da.fee, da.interest, dn.dunning_description, dn.dunning_level, da.transdate AS dunning_date, da.duedate AS dunning_duedate, da.dunning_id, da.dunning_config_id, + da.id AS dunning_table_id, e2.name AS salesman FROM ar a JOIN customer ct ON (a.customer_id = ct.id) @@ -820,7 +842,7 @@ sub melt_pdfs { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form, $copies) = @_; + my ($self, $myconfig, $form, $copies, %params) = @_; # Don't allow access outside of $spool. map { $_ =~ s|.*/||; } @{ $form->{DUNNING_PDFS} }; @@ -836,23 +858,30 @@ sub melt_pdfs { my $in = IO::File->new($::lx_office_conf{applications}->{ghostscript} . " -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=- $inputfiles |"); $form->error($main::locale->text('Could not spawn ghostscript.')) unless $in; - if ($form->{media} eq 'printer') { - $form->get_printer_code($myconfig); - my $out; - if ($form->{printer_command}) { - $out = IO::File->new("| $form->{printer_command}"); - } + my $dunning_filename = $form->get_formname_translation('dunning'); + my $attachment_filename = "${dunning_filename}_${dunning_id}.pdf"; + my $content; + if ($params{return_content}) { + $content = read_file($in); - $::locale->with_raw_io($out, sub { $out->print($_) while <$in> }); + } else { + if ($form->{media} eq 'printer') { + $form->get_printer_code($myconfig); + my $out; + if ($form->{printer_command}) { + $out = IO::File->new("| $form->{printer_command}"); + } - $form->error($main::locale->text('Could not spawn the printer command.')) unless $out; + $form->error($main::locale->text('Could not spawn the printer command.')) unless $out; - } else { - my $dunning_filename = $form->get_formname_translation('dunning'); - print qq|Content-Type: Application/PDF\n| . - qq|Content-Disposition: attachment; filename="${dunning_filename}_${dunning_id}.pdf"\n\n|; + $::locale->with_raw_io($out, sub { $out->print($_) while <$in> }); - $::locale->with_raw_io(\*STDOUT, sub { print while <$in> }); + } else { + print qq|Content-Type: Application/PDF\n| . + qq|Content-Disposition: attachment; filename=$attachment_filename\n\n|; + + $::locale->with_raw_io(\*STDOUT, sub { print while <$in> }); + } } $in->close(); @@ -860,6 +889,7 @@ sub melt_pdfs { map { unlink("$spool/$_") } @{ $form->{DUNNING_PDFS} }; $main::lxdebug->leave_sub(); + return ($attachment_filename, $content) if $params{return_content}; } sub print_dunning { @@ -1008,13 +1038,6 @@ sub print_dunning { delete $form->{tmpfile}; - push @{ $form->{DUNNING_PDFS} } , $filename; - push @{ $form->{DUNNING_PDFS_EMAIL} } , { 'path' => "${spool}/$filename", - 'name' => $form->get_formname_translation('dunning') . "_${dunning_id}.pdf" }; - push @{ $form->{DUNNING_PDFS_STORAGE} }, { 'dunning_id' => $dunning_id, - 'path' => "${spool}/$filename", - 'name' => $form->get_formname_translation('dunning') . "_${dunning_id}.pdf" }; - my $employee_id = ($::instance_conf->get_dunning_creator eq 'invoice_employee') ? $form->{employee_id} : SL::DB::Manager::Employee->current->id; @@ -1032,6 +1055,13 @@ sub print_dunning { # this generates the file in the spool directory $form->parse_template($myconfig); + push @{ $form->{DUNNING_PDFS} } , $filename; + push @{ $form->{DUNNING_PDFS_EMAIL} } , { 'path' => "${spool}/$filename", + 'name' => $form->get_formname_translation('dunning') . "_${dunning_id}.pdf" }; + push @{ $form->{DUNNING_PDFS_STORAGE} }, { 'dunning_id' => $dunning_id, + 'path' => "${spool}/$filename", + 'name' => $form->get_formname_translation('dunning') . "_${dunning_id}.pdf" }; + $main::lxdebug->leave_sub(); } @@ -1112,7 +1142,7 @@ sub print_invoice_for_fees { $self->set_customer_cvars($myconfig, $form); $self->set_template_options($myconfig, $form); - my $filename = Common::unique_id() . "dunning_invoice_${dunning_id}.pdf"; + my $filename = Common::unique_id() . "dunning_invoice_" . $form->{invnumber} . ".pdf"; my $spool = $::lx_office_conf{paths}->{spool}; $form->{OUT} = "$spool/$filename"; @@ -1121,7 +1151,7 @@ sub print_invoice_for_fees { map { delete $form->{$_} } grep /^[a-z_]+_\d+$/, keys %{ $form }; - my $attachment_filename = $form->get_formname_translation('dunning_invoice') . "_${dunning_id}.pdf"; + my $attachment_filename = $form->get_formname_translation('dunning_invoice') . "_" . $form->{invnumber} . ".pdf"; $form->{attachment_filename} = $attachment_filename; $form->{attachment_type} = "dunning"; $form->{attachment_id} = $invoice_id; @@ -1187,6 +1217,7 @@ sub print_original_invoice { longdescription => 'html', partnotes => 'html', notes => 'html', + $print_form->get_variable_content_types_for_cvars, }, );