Auftrags-Controller: PDF-Download per ajax-send_file
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Wed, 9 Oct 2019 09:06:19 +0000 (11:06 +0200)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Wed, 9 Oct 2019 13:34:51 +0000 (15:34 +0200)
SL/Controller/Order.pm
js/kivi.Order.js

index 771b160..9b4f42f 100644 (file)
@@ -242,11 +242,8 @@ sub action_save_as_new {
 # print the order
 #
 # This is called if "print" is pressed in the print dialog.
-# If PDF creation was requested and succeeded, the pdf is stored in a session
-# file and the filename is stored as session value with an unique key. A
-# javascript function with this key is then called. This function calls the
-# download action below (action_download_pdf), which offers the file for
-# download.
+# If PDF creation was requested and succeeded, the pdf is offered for download
+# via send_file (which uses ajax in this case).
 sub action_print {
   my ($self) = @_;
 
@@ -298,16 +295,13 @@ sub action_print {
 
   if ($media eq 'screen') {
     # screen/download
-    my $sfile = SL::SessionFile::Random->new(mode => "w");
-    $sfile->fh->print($pdf);
-    $sfile->fh->close;
-
-    my $key = join('_', Time::HiRes::gettimeofday(), int rand 1000000000000);
-    $::auth->set_session_value("Order::print-${key}" => $sfile->file_name);
-
-    $self->js
-    ->run('kivi.Order.download_pdf', $pdf_filename, $key)
-    ->flash('info', t8('The PDF has been created'));
+    $self->js->flash('info', t8('The PDF has been created'));
+    $self->send_file(
+      \$pdf,
+      type         => SL::MIME->mime_type_from_ext($pdf_filename),
+      name         => $pdf_filename,
+      js_no_render => 1,
+    );
 
   } elsif ($media eq 'printer') {
     # printer
@@ -354,21 +348,6 @@ sub action_print {
   $self->js->render;
 }
 
-# offer pdf for download
-#
-# It needs to get the key for the session value to get the pdf file.
-sub action_download_pdf {
-  my ($self) = @_;
-
-  my $key = $::form->{key};
-  my $tmp_filename = $::auth->get_session_value("Order::print-${key}");
-  return $self->send_file(
-    $tmp_filename,
-    type => SL::MIME->mime_type_from_ext($::form->{pdf_filename}),
-    name => $::form->{pdf_filename},
-  );
-}
-
 # open the email dialog
 sub action_show_email_dialog {
   my ($self) = @_;
index 3421f9f..e77b63e 100644 (file)
@@ -87,14 +87,6 @@ namespace('kivi.Order', function(ns) {
     $.post("controller.pl", data, kivi.eval_json_result);
   };
 
-  ns.download_pdf = function(pdf_filename, key) {
-    var data = [{ name: 'action',       value: 'Order/download_pdf' },
-                { name: 'type',         value: $('#type').val()     },
-                { name: 'pdf_filename', value: pdf_filename         },
-                { name: 'key',          value: key                  }];
-    $.download("controller.pl", data);
-  };
-
   ns.email = function(warn_on_duplicates) {
     if (warn_on_duplicates && !ns.check_duplicate_parts(kivi.t8("Do you really want to send by mail?"))) return;
     if (!ns.check_cv()) return;