Bug 8007: (QA followup) Add error handling when generating the pdf
authorJonathan Druart <jonathan.druart@biblibre.com>
Tue, 28 Apr 2015 08:59:42 +0000 (10:59 +0200)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Thu, 30 Apr 2015 15:34:21 +0000 (12:34 -0300)
If error occurs when generating the pdf, it would be better to get an
encapsulated error instead of the "software error" message in the pdf
file.
To test this patch I added this change:

b/Koha/Borrower/Discharge.pm
-115,6 +115,7 @@ sub generate_as_pdf {
     say $html_fh $html_content;
     close $html_fh;
     my $pdf = PDF::FromHTML->new( encoding => 'utf-8' );
+    $html_path .= "poeut";
     $pdf->load_file( $html_path );
     $pdf->convert;

Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>

koha-tmpl/intranet-tmpl/prog/en/modules/members/discharge.tt
koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-discharge.tt
members/discharge.pl
opac/opac-discharge.pl

index c487506..9e1f4fc 100644 (file)
     <div class="yui-b">
 <div class="yui-g">
 <h3>Discharge</h3>
+[% FOR message IN messages %]
+    <div class="dialog [% message.type %]">
+    [% IF message.code == "unable_to_generate_pdf" %]
+        An error occurs when generating the pdf file.
+        Please contact the administrator to resolve this problem.
+    [% END %]
+    </div>
+[% END %]
 [% UNLESS can_be_discharged %]
     <p>Cannot edit discharge: borrower has issues.</p>
 [% ELSE %]
index c775336..d8f5648 100644 (file)
             <div class="span10">
                 <div id="discharge" class="maincontainer">
                     <h1>Discharge</h1>
+                    [% FOR message IN messages %]
+                        <div class="dialog [% message.type %]">
+                        [% IF message.code == "unable_to_generate_pdf" %]
+                            An error occurs when generating the pdf file.
+                            Please contact the staff to resolve this problem.
+                        [% END %]
+                        </div>
+                    [% END %]
+
                     [% IF success %]
                         <p>Your discharge request has been sent. Your discharge will be available on this page within a few days.</p>
                     [% ELSIF available %]
@@ -31,7 +40,7 @@
                         <p>Your discharge will be available on this page within a few days.</p>
                     [% ELSIF has_issues %]
                         <p>You cannot be discharged, you have issues. Please return items before asking for a discharge.</p>
-                    [% ELSE %]
+                    [% ELSIF not messages %]
                         <h2>What is a discharge?</h2>
                         <p>This document certifies that you have returned all borrowed items. It is sometimes asked during a file transfer from a school to another. The discharge is sent by us to your school. You will also find it available on your reader account.</p>
                         <p><strong>Warning</strong>: This request is only valid if you are in good standing with the library. Once the application is made, you can not borrow library materials.</p>
index e2f703d..2144af9 100755 (executable)
@@ -28,6 +28,7 @@ Allows librarian to edit and/or manage borrowers' discharges
 =cut
 
 use Modern::Perl;
+use Carp;
 
 use CGI qw( -utf8 );
 use C4::Auth;
@@ -75,20 +76,26 @@ if ( $input->param('borrowernumber') ) {
                 borrowernumber => $borrowernumber
             });
         }
-        my $pdf_path = Koha::Borrower::Discharge::generate_as_pdf(
-            { borrowernumber => $borrowernumber, } );
-
-        binmode(STDOUT);
-        print $input->header(
-            -type       => 'application/pdf',
-            -charset    => 'utf-8',
-            -attachment => "discharge_$borrowernumber.pdf",
-        );
-        open my $fh, '<', $pdf_path;
-        my @lines = <$fh>;
-        close $fh;
-        print @lines;
-        exit;
+        eval {
+            my $pdf_path = Koha::Borrower::Discharge::generate_as_pdf(
+                { borrowernumber => $borrowernumber, } );
+
+            binmode(STDOUT);
+            print $input->header(
+                -type       => 'application/pdf',
+                -charset    => 'utf-8',
+                -attachment => "discharge_$borrowernumber.pdf",
+            );
+            open my $fh, '<', $pdf_path;
+            my @lines = <$fh>;
+            close $fh;
+            print @lines;
+            exit;
+        };
+        if ( $@ ) {
+            carp $@;
+            $template->param( messages => [ {type => 'error', code => 'unable_to_generate_pdf'} ] );
+        }
     }
 
     $template->param(
index e6eca73..800222c 100755 (executable)
@@ -18,6 +18,7 @@
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use Modern::Perl;
+use Carp;
 
 use C4::Auth qw(:DEFAULT get_session);
 use CGI qw( -utf8 );
@@ -55,21 +56,27 @@ if ( $op eq 'request' ) {
     }
 }
 elsif ( $op eq 'get' ) {
-    my $pdf_path = Koha::Borrower::Discharge::generate_as_pdf({
-        borrowernumber => $loggedinuser
-    });
+    eval {
+        my $pdf_path = Koha::Borrower::Discharge::generate_as_pdf({
+            borrowernumber => $loggedinuser
+        });
 
-    binmode(STDOUT);
-    print $input->header(
-        -type       => 'application/pdf',
-        -charset    => 'utf-8',
-        -attachment => "discharge_$loggedinuser.pdf",
-    );
-    open my $fh, '<', $pdf_path;
-    my @lines = <$fh>;
-    close $fh;
-    print @lines;
-    exit;
+        binmode(STDOUT);
+        print $input->header(
+            -type       => 'application/pdf',
+            -charset    => 'utf-8',
+            -attachment => "discharge_$loggedinuser.pdf",
+        );
+        open my $fh, '<', $pdf_path;
+        my @lines = <$fh>;
+        close $fh;
+        print @lines;
+        exit;
+    };
+    if ( $@ ) {
+        carp $@;
+        $template->param( messages => [ {type => 'error', code => 'unable_to_generate_pdf'} ] );
+    }
 }
 else {
     my $pending = Koha::Borrower::Discharge::count({