Bug 19080: Handle non-existing patrons gratefully
[koha.git] / members / discharge.pl
index b24c41b..a0af828 100755 (executable)
@@ -58,85 +58,86 @@ unless ( C4::Context->preference('useDischarge') ) {
    exit;
 }
 
-if ( $input->param('borrowernumber') ) {
-    $borrowernumber = $input->param('borrowernumber');
+$borrowernumber = $input->param('borrowernumber');
 
-    # Getting member data
-    my $patron = Koha::Patrons->find( $borrowernumber );
+my $patron = Koha::Patrons->find( $borrowernumber );
+unless ( $patron ) {
+    print $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber");
+    exit;
+}
 
-    my $can_be_discharged = Koha::Patron::Discharge::can_be_discharged({
-        borrowernumber => $borrowernumber
-    });
+my $can_be_discharged = Koha::Patron::Discharge::can_be_discharged({
+    borrowernumber => $borrowernumber
+});
 
-    my $holds = $patron->holds;
-    my $has_reserves = $holds->count;
+my $holds = $patron->holds;
+my $has_reserves = $holds->count;
 
-    # Generating discharge if needed
-    if ( $input->param('discharge') and $can_be_discharged ) {
-        my $is_discharged = Koha::Patron::Discharge::is_discharged({
-            borrowernumber => $borrowernumber,
+# Generating discharge if needed
+if ( $input->param('discharge') and $can_be_discharged ) {
+    my $is_discharged = Koha::Patron::Discharge::is_discharged({
+        borrowernumber => $borrowernumber,
+    });
+    unless ($is_discharged) {
+        Koha::Patron::Discharge::discharge({
+            borrowernumber => $borrowernumber
         });
-        unless ($is_discharged) {
-            Koha::Patron::Discharge::discharge({
-                borrowernumber => $borrowernumber
-            });
-        }
-        eval {
-            my $pdf_path = Koha::Patron::Discharge::generate_as_pdf(
-                { borrowernumber => $borrowernumber, branchcode => $patron->branchcode } );
-
-            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'} ] );
-        }
     }
+    eval {
+        my $pdf_path = Koha::Patron::Discharge::generate_as_pdf(
+            { borrowernumber => $borrowernumber, branchcode => $patron->branchcode } );
+
+        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'} ] );
+    }
+}
 
-    # Already generated discharges
-    my $validated_discharges = Koha::Patron::Discharge::get_validated({
-        borrowernumber => $borrowernumber,
-    });
+# Already generated discharges
+my $validated_discharges = Koha::Patron::Discharge::get_validated({
+    borrowernumber => $borrowernumber,
+});
 
-    $template->param( picture => 1 ) if $patron->image;
-
-    $template->param(
-        # FIXME The patron object should be passed to the template
-        borrowernumber    => $borrowernumber,
-        title             => $patron->title,
-        initials          => $patron->initials,
-        surname           => $patron->surname,
-        borrowernumber    => $borrowernumber,
-        firstname         => $patron->firstname,
-        cardnumber        => $patron->cardnumber,
-        categorycode      => $patron->categorycode,
-        category_type     => $patron->category->category_type,
-        categoryname      => $patron->category->description,
-        address           => $patron->address,
-        streetnumber      => $patron->streetnumber,
-        streettype        => $patron->streettype,
-        address2          => $patron->address2,
-        city              => $patron->city,
-        zipcode           => $patron->zipcode,
-        country           => $patron->country,
-        phone             => $patron->phone,
-        email             => $patron->email,
-        branchcode        => $patron->branchcode,
-        has_reserves      => $has_reserves,
-        can_be_discharged => $can_be_discharged,
-        validated_discharges => $validated_discharges,
-    );
-}
+$template->param( picture => 1 ) if $patron->image;
+
+$template->param(
+    # FIXME The patron object should be passed to the template
+    borrowernumber    => $borrowernumber,
+    title             => $patron->title,
+    initials          => $patron->initials,
+    surname           => $patron->surname,
+    borrowernumber    => $borrowernumber,
+    firstname         => $patron->firstname,
+    cardnumber        => $patron->cardnumber,
+    categorycode      => $patron->categorycode,
+    category_type     => $patron->category->category_type,
+    categoryname      => $patron->category->description,
+    address           => $patron->address,
+    streetnumber      => $patron->streetnumber,
+    streettype        => $patron->streettype,
+    address2          => $patron->address2,
+    city              => $patron->city,
+    zipcode           => $patron->zipcode,
+    country           => $patron->country,
+    phone             => $patron->phone,
+    email             => $patron->email,
+    branchcode        => $patron->branchcode,
+    has_reserves      => $has_reserves,
+    can_be_discharged => $can_be_discharged,
+    validated_discharges => $validated_discharges,
+);
 
 $template->param( dischargeview => 1, );