From 0cfa64e1eae5bb203dae445d5f7719a87f585f0f Mon Sep 17 00:00:00 2001
From: Matt Blenkinsop <matt.blenkinsop@ptfs-europe.com>
Date: Wed, 12 Jun 2024 09:03:38 +0000
Subject: [PATCH] Bug 14787: Fix tidying issue in circulation.pl

There are large blocks of code in circulation.pl that are incorrectly indented. This means any new code placed within those blocks fails the QA tests as it automatically adds new untidy lines. This patch tidies the file to remove this issue and start from a clean position in terms of tidyness.
---
 circ/circulation.pl | 446 +++++++++++++++++++++++---------------------
 1 file changed, 229 insertions(+), 217 deletions(-)

diff --git a/circ/circulation.pl b/circ/circulation.pl
index c6b87f4f888..1f9fb0a985b 100755
--- a/circ/circulation.pl
+++ b/circ/circulation.pl
@@ -25,19 +25,19 @@
 # FIXME There are too many calls to Koha::Patrons->find in this script
 
 use Modern::Perl;
-use CGI qw ( -utf8 );
+use CGI         qw ( -utf8 );
 use URI::Escape qw( uri_escape_utf8 );
 use DateTime;
 use DateTime::Duration;
 use Scalar::Util qw( blessed looks_like_number );
 use Try::Tiny;
 use C4::Output qw( output_and_exit_if_error output_and_exit output_html_with_http_headers );
-use C4::Auth qw( get_session get_template_and_user );
+use C4::Auth   qw( get_session get_template_and_user );
 use C4::Koha;
 use C4::Circulation qw( barcodedecode CanBookBeIssued AddIssue AddReturn );
 use C4::Members;
-use C4::Biblio qw( TransformMarcToKoha );
-use C4::Search qw( new_record_from_zebra );
+use C4::Biblio   qw( TransformMarcToKoha );
+use C4::Search   qw( new_record_from_zebra );
 use C4::Reserves qw( ModReserveAffect );
 use Koha::Holds;
 use C4::Context;
@@ -69,13 +69,12 @@ my $borrowernumber = $query->param('borrowernumber');
 my $barcodes       = [];
 my $barcode        = $query->param('barcode');
 
-
 # Barcode given by user could be '0'
 if ( $barcode || ( defined($barcode) && $barcode eq '0' ) ) {
-    $barcodes = [ $barcode ];
+    $barcodes = [$barcode];
 } else {
     my $filefh = $query->upload('uploadfile');
-    if ( $filefh ) {
+    if ($filefh) {
         while ( my $content = <$filefh> ) {
             $content =~ s/[\r\n]*$//g;
             push @$barcodes, $content if $content;
@@ -90,13 +89,13 @@ if ( $barcode || ( defined($barcode) && $barcode eq '0' ) ) {
 $barcodes = [ uniq @$barcodes ];
 
 my $template_name = q|circ/circulation.tt|;
-my $patron = $borrowernumber ? Koha::Patrons->find( $borrowernumber ) : undef;
-my $batch = $query->param('batch');
+my $patron        = $borrowernumber ? Koha::Patrons->find($borrowernumber) : undef;
+my $batch         = $query->param('batch');
 my $batch_allowed = 0;
 if ( $batch && C4::Context->preference('BatchCheckouts') ) {
     $template_name = q|circ/circulation_batch_checkouts.tt|;
     my @batch_category_codes = split ',', C4::Context->preference('BatchCheckoutsValidCategories');
-    my $categorycode = $patron->categorycode;
+    my $categorycode         = $patron->categorycode;
     if ( $categorycode && grep { $_ eq $categorycode } @batch_category_codes ) {
         $batch_allowed = 1;
     } else {
@@ -104,12 +103,12 @@ if ( $batch && C4::Context->preference('BatchCheckouts') ) {
     }
 }
 
-my ( $template, $loggedinuser, $cookie ) = get_template_and_user (
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     {
-        template_name   => $template_name,
-        query           => $query,
-        type            => "intranet",
-        flagsrequired   => { circulate => 'circulate_remaining_permissions' },
+        template_name => $template_name,
+        query         => $query,
+        type          => "intranet",
+        flagsrequired => { circulate => 'circulate_remaining_permissions' },
     }
 );
 
@@ -135,7 +134,7 @@ if ( C4::Context->preference("AutoSwitchPatron") && $barcode ) {
         undef $barcode;
         undef $borrowernumber;
         undef $patron;
-        $barcodes = [];
+        $barcodes     = [];
         $autoswitched = 1;
     }
 }
@@ -154,17 +153,16 @@ if ( $op eq 'cud-confirm_hold' && $query->param('confirm_hold') ) {
     ModReserveAffect( $hold_itemnumber, $hold_borrowernumber, $diffBranchSend, $reserve_id, $desk_id );
 }
 
-
-my $logged_in_user = Koha::Patrons->find( $loggedinuser );
+my $logged_in_user = Koha::Patrons->find($loggedinuser);
 
 my $force_allow_issue = $query->param('forceallow') || 0;
-if (!C4::Auth::haspermission( $userenv->{id} , { circulate => 'force_checkout' } )) {
+if ( !C4::Auth::haspermission( $userenv->{id}, { circulate => 'force_checkout' } ) ) {
     $force_allow_issue = 0;
 }
 my $onsite_checkout = $query->param('onsite_checkout');
 
-if (C4::Context->preference("OnSiteCheckoutAutoCheck") && $onsite_checkout eq "on") {
-    $template->param(onsite_checkout => $onsite_checkout);
+if ( C4::Context->preference("OnSiteCheckoutAutoCheck") && $onsite_checkout eq "on" ) {
+    $template->param( onsite_checkout => $onsite_checkout );
 }
 
 my @failedrenews = $query->multi_param('failedrenew');    # expected to be itemnumbers
@@ -175,13 +173,13 @@ my @failedreturns = $query->multi_param('failedreturn');
 our %return_failed = ();
 for (@failedreturns) { $return_failed{$_} = 1; }
 
-for my $barcode ( @$barcodes ) {
-    $barcode = barcodedecode( $barcode ) if $barcode;
+for my $barcode (@$barcodes) {
+    $barcode = barcodedecode($barcode) if $barcode;
 }
 
-my $stickyduedate  = $query->param('stickyduedate') || $session->param('stickyduedate');
-my $duedatespec    = $query->param('duedatespec')   || $session->param('stickyduedate');
-my $restoreduedatespec  = $query->param('restoreduedatespec') || $duedatespec || $session->param('stickyduedate');
+my $stickyduedate      = $query->param('stickyduedate')      || $session->param('stickyduedate');
+my $duedatespec        = $query->param('duedatespec')        || $session->param('stickyduedate');
+my $restoreduedatespec = $query->param('restoreduedatespec') || $duedatespec || $session->param('stickyduedate');
 if ( $restoreduedatespec && $restoreduedatespec eq "highholds_empty" ) {
     undef $restoreduedatespec;
 }
@@ -189,47 +187,47 @@ my $issueconfirmed = $query->param('issueconfirmed');
 my $cancelreserve  = $query->param('cancelreserve');
 my $cancel_recall  = $query->param('cancel_recall');
 my $recall_id      = $query->param('recall_id');
-my $debt_confirmed = $query->param('debt_confirmed') || 0; # Don't show the debt error dialog twice
-my $charges        = $query->param('charges') || q{};
+my $debt_confirmed = $query->param('debt_confirmed') || 0;     # Don't show the debt error dialog twice
+my $charges        = $query->param('charges')        || q{};
 
 # Check if stickyduedate is turned off
-if ( @$barcodes ) {
+if (@$barcodes) {
+
     # was stickyduedate loaded from session?
-    if ( $stickyduedate && ! $query->param("stickyduedate") ) {
-        $session->clear( 'stickyduedate' );
-        $stickyduedate  = $query->param('stickyduedate');
-        $duedatespec    = $query->param('duedatespec');
+    if ( $stickyduedate && !$query->param("stickyduedate") ) {
+        $session->clear('stickyduedate');
+        $stickyduedate = $query->param('stickyduedate');
+        $duedatespec   = $query->param('duedatespec');
     }
-    $session->param('auto_renew', scalar $query->param('auto_renew'));
-}
-else {
+    $session->param( 'auto_renew', scalar $query->param('auto_renew') );
+} else {
     $session->clear('auto_renew');
 }
 
 $template->param( auto_renew => $session->param('auto_renew') );
 
-my ($datedue,$invalidduedate);
+my ( $datedue, $invalidduedate );
 
 my $duedatespec_allow = C4::Context->preference('SpecifyDueDate');
-if( $onsite_checkout && !$duedatespec_allow ) {
-    $datedue = dt_from_string()->truncate(to => 'day');
+if ( $onsite_checkout && !$duedatespec_allow ) {
+    $datedue = dt_from_string()->truncate( to => 'day' );
     $datedue->set_hour(23);
     $datedue->set_minute(59);
-} elsif( $duedatespec_allow ) {
-    if ( $duedatespec ) {
-        $datedue = eval { dt_from_string( $duedatespec ) };
-        if (! $datedue ) {
+} elsif ($duedatespec_allow) {
+    if ($duedatespec) {
+        $datedue = eval { dt_from_string($duedatespec) };
+        if ( !$datedue ) {
             $invalidduedate = 1;
-            $template->param( IMPOSSIBLE=>1, INVALID_DATE=>$duedatespec );
+            $template->param( IMPOSSIBLE => 1, INVALID_DATE => $duedatespec );
         }
     }
 }
 my $reduced_datedue = $query->param('reduceddue');
-if ( $reduced_datedue ) {
-    $datedue = dt_from_string( $reduced_datedue );
+if ($reduced_datedue) {
+    $datedue = dt_from_string($reduced_datedue);
 }
 
-my $inprocess = (@$barcodes == 0) ? '' : $query->param('inprocess');
+my $inprocess = ( @$barcodes == 0 ) ? '' : $query->param('inprocess');
 if ( @$barcodes == 0 && $charges eq 'yes' ) {
     $template->param(
         PAYCHARGES     => 'yes',
@@ -245,43 +243,50 @@ my $message;
 if ($findborrower) {
     Koha::Plugins->call( 'patron_barcode_transform', \$findborrower );
     my $patron = Koha::Patrons->find( { cardnumber => $findborrower } );
-    if ( $patron ) {
+    if ($patron) {
         $borrowernumber = $patron->borrowernumber;
     } else {
-        print $query->redirect( "/cgi-bin/koha/members/member.pl?quicksearch=1&circsearch=1&searchmember=" . uri_escape_utf8($findborrower) );
+        print $query->redirect( "/cgi-bin/koha/members/member.pl?quicksearch=1&circsearch=1&searchmember="
+                . uri_escape_utf8($findborrower) );
         exit;
     }
 }
 
 # get the borrower information.....
 my $balance = 0;
-$patron ||= Koha::Patrons->find( $borrowernumber ) if $borrowernumber;
+$patron ||= Koha::Patrons->find($borrowernumber) if $borrowernumber;
 if ($patron) {
 
     $template->param( borrowernumber => $patron->borrowernumber );
-    output_and_exit_if_error( $query, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } );
+    output_and_exit_if_error(
+        $query, $cookie, $template,
+        { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron }
+    );
 
     my $overdues = $patron->overdues;
-    my $issues = $patron->checkouts;
+    my $issues   = $patron->checkouts;
     $balance = $patron->account->balance;
 
-
     # if the expiry date is before today ie they have expired
     if ( $patron->is_expired ) {
+
         #borrowercard expired, no issues
         $template->param(
-            noissues => ($force_allow_issue) ? 0 : "1",
+            noissues   => ($force_allow_issue) ? 0 : "1",
             forceallow => $force_allow_issue,
-            expired => "1",
+            expired    => "1",
         );
     }
+
     # check for NotifyBorrowerDeparture
     elsif ( $patron->is_going_to_expire ) {
+
         # borrower card soon to expire warn librarian
-        $template->param( "warndeparture" => $patron->dateexpiry ,
-                        );
-        if (C4::Context->preference('ReturnBeforeExpiry')){
-            $template->param("returnbeforeexpiry" => 1);
+        $template->param(
+            "warndeparture" => $patron->dateexpiry,
+        );
+        if ( C4::Context->preference('ReturnBeforeExpiry') ) {
+            $template->param( "returnbeforeexpiry" => 1 );
         }
     }
     $template->param(
@@ -305,8 +310,8 @@ if ($patron) {
     # Calculate and display patron's age
     if ( !$patron->is_valid_age ) {
         $template->param( age_limitations => 1 );
-        $template->param( age_low => $patron->category->dateofbirthrequired );
-        $template->param( age_high => $patron->category->upperagelimit );
+        $template->param( age_low         => $patron->category->dateofbirthrequired );
+        $template->param( age_high        => $patron->category->upperagelimit );
     }
 
     unless (
@@ -320,9 +325,9 @@ if ($patron) {
 # STEP 3 : ISSUING
 #
 #
-if (@$barcodes && $op eq 'cud-checkout') {
+if ( @$barcodes && $op eq 'cud-checkout' ) {
     my $checkout_infos;
-    for my $barcode ( @$barcodes ) {
+    for my $barcode (@$barcodes) {
 
         my $template_params = {
             barcode         => $barcode,
@@ -354,13 +359,13 @@ if (@$barcodes && $op eq 'cud-checkout') {
 
         my $blocker = $invalidduedate ? 1 : 0;
 
-        $template_params->{alert} = $alerts;
+        $template_params->{alert}    = $alerts;
         $template_params->{messages} = $messages;
 
-        my $item = Koha::Items->find({ barcode => $barcode });
+        my $item = Koha::Items->find( { barcode => $barcode } );
 
         my $biblio;
-        if ( $item ) {
+        if ($item) {
             $biblio = $item->biblio;
         }
 
@@ -384,30 +389,29 @@ if (@$barcodes && $op eq 'cud-checkout') {
 
         # Fix for bug 7494: optional checkout-time fallback search for a book
 
-        if ( $issuingimpossible->{'UNKNOWN_BARCODE'}
+        if (   $issuingimpossible->{'UNKNOWN_BARCODE'}
             && C4::Context->preference("itemBarcodeFallbackSearch")
-            && not $batch
-        )
+            && not $batch )
         {
-        $template_params->{FALLBACK} = 1;
+            $template_params->{FALLBACK} = 1;
 
-            my $searcher = Koha::SearchEngine::Search->new({index => $Koha::SearchEngine::BIBLIOS_INDEX});
-            my $query = "kw=" . $barcode;
-            my ( $searcherror, $results, $total_hits ) = $searcher->simple_search_compat($query, 0, 10);
+            my $searcher = Koha::SearchEngine::Search->new( { index => $Koha::SearchEngine::BIBLIOS_INDEX } );
+            my $query    = "kw=" . $barcode;
+            my ( $searcherror, $results, $total_hits ) = $searcher->simple_search_compat( $query, 0, 10 );
 
             # if multiple hits, offer options to librarian
             if ( $total_hits > 0 ) {
                 my @barcodes;
                 foreach my $hit ( @{$results} ) {
-                    my $chosen = # Maybe easier to retrieve the itemnumber from $hit?
-                    TransformMarcToKoha({ record => C4::Search::new_record_from_zebra('biblioserver',$hit) });
+                    my $chosen =    # Maybe easier to retrieve the itemnumber from $hit?
+                        TransformMarcToKoha( { record => C4::Search::new_record_from_zebra( 'biblioserver', $hit ) } );
 
                     # offer all barcodes individually
                     if ( $chosen->{barcode} ) {
-                        push @barcodes, sort split(/\s*\|\s*/, $chosen->{barcode});
+                        push @barcodes, sort split( /\s*\|\s*/, $chosen->{barcode} );
                     }
                 }
-                my $items = Koha::Items->search({ barcode => {-in => \@barcodes}});
+                my $items = Koha::Items->search( { barcode => { -in => \@barcodes } } );
                 $template_params->{options} = $items;
             }
         }
@@ -425,8 +429,8 @@ if (@$barcodes && $op eq 'cud-checkout') {
             $blocker                              = 1;
         }
 
-        foreach my $code ( @blocking_error_codes ) {
-            if ($issuingimpossible->{$code}) {
+        foreach my $code (@blocking_error_codes) {
+            if ( $issuingimpossible->{$code} ) {
                 $template_params->{$code} = $issuingimpossible->{$code};
 
                 $template_params->{IMPOSSIBLE} = 1;
@@ -442,7 +446,6 @@ if (@$barcodes && $op eq 'cud-checkout') {
             my $claims = Koha::Checkouts::ReturnClaims->search(
                 {
                     itemnumber => $item->id,
-                    resolution => undef,
                 }
             );
             if ( $claims->count ) {
@@ -463,65 +466,71 @@ if (@$barcodes && $op eq 'cud-checkout') {
             }
         }
 
-    if( $item and ( !$blocker or $force_allow_issue ) ){
-        my $confirm_required = 0;
-        unless($issueconfirmed){
-            #  Get the item title for more information
-            my $materials = $item->materials;
-            my $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({ frameworkcode => $biblio->frameworkcode, kohafield => 'items.materials', authorised_value => $materials });
-            $materials = $descriptions->{lib} // $materials;
-            $template_params->{ADDITIONAL_MATERIALS} = $materials;
-            $template_params->{itemhomebranch} = $item->homebranch;
-
-            my $patron_session_confirmation = $query->cookie('patronSessionConfirmation') || undef;
-            my ( $patron_for_session, $session_confirmations ) = split( /:/, $patron_session_confirmation, 2 );
-            my $patron_match = $borrowernumber == $patron_for_session;
-            my @conf_keys    = split( /\|/, $session_confirmations );
-            $template_params->{sessionConfirmationKeys} = ();
-
-            # pass needsconfirmation to template if issuing is possible and user hasn't yet confirmed.
-            foreach my $needsconfirmation_key ( keys %$needsconfirmation ) {
-                if ( $needsconfirmation_key eq 'BOOKED_TO_ANOTHER' ) {
-                    my $rule = Koha::CirculationRules->get_effective_rule(
-                        {
-                            rule_name  => 'bookings_lead_period',
-                            itemtype   => $item->effective_itemtype,
-                            branchcode => "*"
-                        }
-                    );
-                    my $preparation_period = $rule ? $rule->rule_value : 1;
-                    my $reduceddue =
-                        dt_from_string( $$needsconfirmation{$needsconfirmation_key}->start_date )
-                        ->subtract( days => $preparation_period );
-                    $template_params->{reduceddue} = $reduceddue;
-                }
-                next
-                    if $patron_match
-                    && scalar(@conf_keys) > 0
-                    && grep( { $needsconfirmation_key eq $_ } @conf_keys );
-
-                $template_params->{$needsconfirmation_key}    = $needsconfirmation->{$needsconfirmation_key};
-                $template_params->{getTitleMessageIteminfo}   = $biblio->title;
-                $template_params->{getBarcodeMessageIteminfo} = $item->barcode;
-                $template_params->{NEEDSCONFIRMATION}         = 1;
-                $confirm_required                             = 1;
-                push( @{ $template_params->{sessionConfirmationKeys} }, $needsconfirmation_key );
-            }
-        }
-        unless ($confirm_required) {
-            my $switch_onsite_checkout = exists $messages->{ONSITE_CHECKOUT_WILL_BE_SWITCHED};
-            if ( C4::Context->preference('UseRecalls') && !$recall_id ) {
-                my $recall = Koha::Recalls->find(
+        if ( $item and ( !$blocker or $force_allow_issue ) ) {
+            my $confirm_required = 0;
+            unless ($issueconfirmed) {
+
+                #  Get the item title for more information
+                my $materials    = $item->materials;
+                my $descriptions = Koha::AuthorisedValues->get_description_by_koha_field(
                     {
-                        biblio_id => $item->biblionumber,
-                        item_id   => [ undef,       $item->itemnumber ],
-                        status    => [ 'requested', 'waiting' ],
-                        completed => 0,
-                        patron_id => $patron->borrowernumber,
+                        frameworkcode    => $biblio->frameworkcode, kohafield => 'items.materials',
+                        authorised_value => $materials
                     }
                 );
-                $recall_id = ( $recall and $recall->id ) ? $recall->id : undef;
+                $materials                               = $descriptions->{lib} // $materials;
+                $template_params->{ADDITIONAL_MATERIALS} = $materials;
+                $template_params->{itemhomebranch}       = $item->homebranch;
+
+                my $patron_session_confirmation = $query->cookie('patronSessionConfirmation') || undef;
+                my ( $patron_for_session, $session_confirmations ) = split( /:/, $patron_session_confirmation, 2 );
+                my $patron_match = $borrowernumber == $patron_for_session;
+                my @conf_keys    = split( /\|/, $session_confirmations );
+                $template_params->{sessionConfirmationKeys} = ();
+
+                # pass needsconfirmation to template if issuing is possible and user hasn't yet confirmed.
+                foreach my $needsconfirmation_key ( keys %$needsconfirmation ) {
+                    if ( $needsconfirmation_key eq 'BOOKED_TO_ANOTHER' ) {
+                        my $rule = Koha::CirculationRules->get_effective_rule(
+                            {
+                                rule_name  => 'bookings_lead_period',
+                                itemtype   => $item->effective_itemtype,
+                                branchcode => "*"
+                            }
+                        );
+                        my $preparation_period = $rule ? $rule->rule_value : 1;
+                        my $reduceddue = dt_from_string( $$needsconfirmation{$needsconfirmation_key}->start_date )
+
+                            ->subtract( days => $preparation_period );
+                        $template_params->{reduceddue} = $reduceddue;
+                    }
+                    next
+                        if $patron_match
+                        && scalar(@conf_keys) > 0
+                        && grep( { $needsconfirmation_key eq $_ } @conf_keys );
+
+                    $template_params->{$needsconfirmation_key}    = $needsconfirmation->{$needsconfirmation_key};
+                    $template_params->{getTitleMessageIteminfo}   = $biblio->title;
+                    $template_params->{getBarcodeMessageIteminfo} = $item->barcode;
+                    $template_params->{NEEDSCONFIRMATION}         = 1;
+                    $confirm_required                             = 1;
+                    push( @{ $template_params->{sessionConfirmationKeys} }, $needsconfirmation_key );
+                }
             }
+            unless ($confirm_required) {
+                my $switch_onsite_checkout = exists $messages->{ONSITE_CHECKOUT_WILL_BE_SWITCHED};
+                if ( C4::Context->preference('UseRecalls') && !$recall_id ) {
+                    my $recall = Koha::Recalls->find(
+                        {
+                            biblio_id => $item->biblionumber,
+                            item_id   => [ undef,       $item->itemnumber ],
+                            status    => [ 'requested', 'waiting' ],
+                            completed => 0,
+                            patron_id => $patron->borrowernumber,
+                        }
+                    );
+                    $recall_id = ( $recall and $recall->id ) ? $recall->id : undef;
+                }
 
                 # If booked (alerts or confirmation) update datedue to end of booking
                 if ( my $booked = $needsconfirmation->{BOOKED_EARLY} // $alerts->{BOOKED} ) {
@@ -532,7 +541,7 @@ if (@$barcodes && $op eq 'cud-checkout') {
                     $cancelreserve,
                     undef, undef,
                     {
-                        onsite_checkout        => $onsite_checkout,        auto_renew    => $session->param('auto_renew'),
+                        onsite_checkout        => $onsite_checkout,        auto_renew => $session->param('auto_renew'),
                         switch_onsite_checkout => $switch_onsite_checkout, cancel_recall => $cancel_recall,
                         recall_id              => $recall_id,
                     }
@@ -543,27 +552,30 @@ if (@$barcodes && $op eq 'cud-checkout') {
             }
         }
 
-        if ($needsconfirmation->{RESERVE_WAITING} or $needsconfirmation->{RESERVED} or $needsconfirmation->{TRANSFERRED} or $needsconfirmation->{PROCESSING}){
+        if (   $needsconfirmation->{RESERVE_WAITING}
+            or $needsconfirmation->{RESERVED}
+            or $needsconfirmation->{TRANSFERRED}
+            or $needsconfirmation->{PROCESSING} )
+        {
             $template->param(
                 reserveborrowernumber => $needsconfirmation->{'resborrowernumber'},
-                reserve_id => $needsconfirmation->{reserve_id},
+                reserve_id            => $needsconfirmation->{reserve_id},
             );
         }
 
-
         # FIXME If the issue is confirmed, we launch another time checkouts->count, now display the issue count after issue
-        $patron = Koha::Patrons->find( $borrowernumber );
+        $patron = Koha::Patrons->find($borrowernumber);
         $template_params->{issuecount} = $patron->checkouts->count;
 
-        if ( $item ) {
-            $template_params->{item} = $item;
-            $template_params->{biblio} = $biblio;
+        if ($item) {
+            $template_params->{item}             = $item;
+            $template_params->{biblio}           = $biblio;
             $template_params->{itembiblionumber} = $biblio->biblionumber;
         }
         push @$checkout_infos, $template_params;
     }
-    unless ( $batch ) {
-        $template->param( %{$checkout_infos->[0]} );
+    unless ($batch) {
+        $template->param( %{ $checkout_infos->[0] } );
         $template->param( barcode => $barcodes->[0] );
     } else {
         my $confirmation_needed = grep { $_->{NEEDSCONFIRMATION} } @$checkout_infos;
@@ -572,14 +584,14 @@ if (@$barcodes && $op eq 'cud-checkout') {
             onsite_checkout     => $onsite_checkout,
             confirmation_needed => $confirmation_needed,
         );
-     }
+    }
 }
 
 ##################################################################################
 # BUILD HTML
 # show all reserves of this borrower, and the position of the reservation ....
 if ($patron) {
-    my $holds = Koha::Holds->search( { borrowernumber => $borrowernumber } ); # FIXME must be Koha::Patron->holds
+    my $holds = Koha::Holds->search( { borrowernumber => $borrowernumber } );    # FIXME must be Koha::Patron->holds
     my $waiting_holds = $holds->waiting;
     $template->param(
         holds_count  => $holds->count(),
@@ -587,27 +599,27 @@ if ($patron) {
     );
 
     if ( C4::Context->preference('UseRecalls') ) {
-        my $waiting_recalls = $patron->recalls->search({ status => 'waiting' });
+        my $waiting_recalls = $patron->recalls->search( { status => 'waiting' } );
         $template->param(
-            recalls => $patron->recalls->filter_by_current->search({},{ order_by => { -asc => 'created_date' } }),
+            recalls => $patron->recalls->filter_by_current->search( {}, { order_by => { -asc => 'created_date' } } ),
             specific_patron => 1,
             waiting_recalls => $waiting_recalls,
         );
     }
 }
 
-if ( $patron ) {
+if ($patron) {
     my $noissues;
     if ( $patron->gonenoaddress ) {
         $template->param( gonenoaddress => 1 );
         $noissues = 1;
     }
     if ( $patron->lost ) {
-        $template->param( lost=> 1 );
+        $template->param( lost => 1 );
         $noissues = 1;
     }
     if ( $patron->is_debarred ) {
-        $template->param( is_debarred=> 1 );
+        $template->param( is_debarred => 1 );
         $noissues = 1;
     }
     if ( $patron->borrowernumber eq C4::Context->preference("AnonymousPatron") ) {
@@ -615,16 +627,18 @@ if ( $patron ) {
         $noissues = 1;
     }
     my $patron_charge_limits = $patron->is_patron_inside_charge_limits();
-    if( $patron_charge_limits->{noissuescharge}->{charge} > 0 ) {
-        my $noissuescharge = $patron_charge_limits->{noissuescharge}->{limit} || 5; # FIXME If noissuescharge == 0 then 5, why??
-        $noissues ||= ( not C4::Context->preference("AllowFineOverride") and $patron_charge_limits->{noissuescharge}->{overlimit} );
+    if ( $patron_charge_limits->{noissuescharge}->{charge} > 0 ) {
+        my $noissuescharge =
+            $patron_charge_limits->{noissuescharge}->{limit} || 5;    # FIXME If noissuescharge == 0 then 5, why??
+        $noissues ||= ( not C4::Context->preference("AllowFineOverride")
+                and $patron_charge_limits->{noissuescharge}->{overlimit} );
         $template->param(
-            charges => 1,
+            charges       => 1,
             chargesamount => $patron_charge_limits->{noissuescharge}->{charge},
-        )
+        );
     } elsif ( $balance < 0 ) {
         $template->param(
-            credits => 1,
+            credits       => 1,
             creditsamount => -$balance,
         );
     }
@@ -633,9 +647,8 @@ if ( $patron ) {
     my $no_issues_charge_guarantors = $patron_charge_limits->{NoIssuesChargeGuarantorsWithGuarantees}->{limit};
     if ($no_issues_charge_guarantors) {
         if ( $patron_charge_limits->{NoIssuesChargeGuarantorsWithGuarantees}->{overlimit} ) {
-            $template->param(
-                charges_guarantors_guarantees => $patron_charge_limits->{NoIssuesChargeGuarantorsWithGuarantees}->{charge}
-            );
+            $template->param( charges_guarantors_guarantees =>
+                    $patron_charge_limits->{NoIssuesChargeGuarantorsWithGuarantees}->{charge} );
             $noissues = 1 unless C4::Context->preference("allowfineoverride");
         }
     }
@@ -644,7 +657,7 @@ if ( $patron ) {
     if ( defined $no_issues_charge_guarantees ) {
         if ( $patron_charge_limits->{NoIssuesChargeGuarantees}->{overlimit} ) {
             $template->param(
-                charges_guarantees    => 1,
+                charges_guarantees       => 1,
                 chargesamount_guarantees => $patron_charge_limits->{NoIssuesChargeGuarantees}->{charge},
             );
             $noissues = 1 unless C4::Context->preference("allowfineoverride");
@@ -659,14 +672,14 @@ if ( $patron ) {
         my $borrowernotes = $patron->borrowernotes;
         $borrowernotes =~ s#\n#<br />#g;
         $template->param(
-            notes =>1,
+            notes    => 1,
             notesmsg => $borrowernotes,
-        )
+        );
     }
 
-    if ( $noissues ) {
+    if ($noissues) {
         $template->param(
-            noissues => ($force_allow_issue) ? 0 : 'true',
+            noissues   => ($force_allow_issue) ? 0 : 'true',
             forceallow => $force_allow_issue,
         );
     }
@@ -674,9 +687,9 @@ if ( $patron ) {
     my $patron_messages = $patron->messages->search(
         {},
         {
-           join => 'manager',
-           '+select' => ['manager.surname', 'manager.firstname' ],
-           '+as' => ['manager_surname', 'manager_firstname'],
+            join      => 'manager',
+            '+select' => [ 'manager.surname', 'manager.firstname' ],
+            '+as'     => [ 'manager_surname', 'manager_firstname' ],
         }
     );
     $template->param( patron_messages => $patron_messages );
@@ -689,15 +702,16 @@ if ( $patron ) {
 
 my $fast_cataloging = 0;
 if ( Koha::BiblioFrameworks->find('FA') ) {
-    $fast_cataloging = 1 
+    $fast_cataloging = 1;
 }
 
-my $view = $batch
-    ?'batch_checkout_view'
+my $view =
+    $batch
+    ? 'batch_checkout_view'
     : 'circview';
 
 my @relatives;
-if ( $patron ) {
+if ($patron) {
     if ( my @guarantors = $patron->guarantor_relationships()->guarantors->as_list ) {
         push( @relatives, $_->id ) for @guarantors;
         push( @relatives, $_->id ) for $patron->siblings->as_list;
@@ -706,75 +720,73 @@ if ( $patron ) {
     }
 }
 my $relatives_issues_count =
-  Koha::Database->new()->schema()->resultset('Issue')
-  ->count( { borrowernumber => \@relatives } );
+    Koha::Database->new()->schema()->resultset('Issue')->count( { borrowernumber => \@relatives } );
 
-if ( $patron ) {
-    my $av = Koha::AuthorisedValues->search({ category => 'ROADTYPE', authorised_value => $patron->streettype });
+if ($patron) {
+    my $av = Koha::AuthorisedValues->search( { category => 'ROADTYPE', authorised_value => $patron->streettype } );
     my $roadtype = $av->count ? $av->next->lib : '';
     $template->param(
-        roadtype          => $roadtype,
-        patron            => $patron,
-        categoryname      => $patron->category->description,
-        expiry            => $patron->dateexpiry,
+        roadtype     => $roadtype,
+        patron       => $patron,
+        categoryname => $patron->category->description,
+        expiry       => $patron->dateexpiry,
     );
 }
 
 # Restore date if changed by holds and/or save stickyduedate to session
-if ($restoreduedatespec || $stickyduedate) {
+if ( $restoreduedatespec || $stickyduedate ) {
     $duedatespec = $restoreduedatespec || $duedatespec;
 
     if ($stickyduedate) {
         $session->param( 'stickyduedate', $duedatespec );
     }
-} elsif (defined($duedatespec) && !defined($restoreduedatespec)) {
+} elsif ( defined($duedatespec) && !defined($restoreduedatespec) ) {
     undef $duedatespec;
 }
 
 $template->param(
-    borrowernumber    => $borrowernumber,
-    branch            => $branch,
-    was_renewed       => scalar $query->param('was_renewed') ? 1 : 0,
-    barcodes          => $barcodes,
-    stickyduedate     => $stickyduedate,
-    duedatespec       => $duedatespec,
-    restoreduedatespec => $restoreduedatespec,
-    message           => $message,
-    totaldue          => sprintf('%.2f', $balance), # FIXME not used in template?
-    inprocess         => $inprocess,
-    $view             => 1,
-    batch_allowed     => $batch_allowed,
-    batch             => $batch,
-    AudioAlerts           => C4::Context->preference("AudioAlerts"),
-    fast_cataloging   => $fast_cataloging,
-    CircAutoPrintQuickSlip   => C4::Context->preference("CircAutoPrintQuickSlip"),
-    RoutingSerials => C4::Context->preference('RoutingSerials'),
-    relatives_issues_count => $relatives_issues_count,
+    borrowernumber            => $borrowernumber,
+    branch                    => $branch,
+    was_renewed               => scalar $query->param('was_renewed') ? 1 : 0,
+    barcodes                  => $barcodes,
+    stickyduedate             => $stickyduedate,
+    duedatespec               => $duedatespec,
+    restoreduedatespec        => $restoreduedatespec,
+    message                   => $message,
+    totaldue                  => sprintf( '%.2f', $balance ),                         # FIXME not used in template?
+    inprocess                 => $inprocess,
+    $view                     => 1,
+    batch_allowed             => $batch_allowed,
+    batch                     => $batch,
+    AudioAlerts               => C4::Context->preference("AudioAlerts"),
+    fast_cataloging           => $fast_cataloging,
+    CircAutoPrintQuickSlip    => C4::Context->preference("CircAutoPrintQuickSlip"),
+    RoutingSerials            => C4::Context->preference('RoutingSerials'),
+    relatives_issues_count    => $relatives_issues_count,
     relatives_borrowernumbers => \@relatives,
 );
 
-
 if ( C4::Context->preference("ExportCircHistory") ) {
-    $template->param(csv_profiles => Koha::CsvProfiles->search({ type => 'marc' }));
+    $template->param( csv_profiles => Koha::CsvProfiles->search( { type => 'marc' } ) );
 }
 
-my ( $has_modifications, $patron_lists_count);
-if ( $patron ) {
-    $has_modifications = Koha::Patron::Modifications->search( { borrowernumber => $borrowernumber } )->count;
+my ( $has_modifications, $patron_lists_count );
+if ($patron) {
+    $has_modifications  = Koha::Patron::Modifications->search( { borrowernumber => $borrowernumber } )->count;
     $patron_lists_count = $patron->get_lists_with_patron->count();
 }
 $template->param(
-    debt_confirmed            => $debt_confirmed,
-    SpecifyDueDate            => $duedatespec_allow,
-    PatronAutoComplete        => C4::Context->preference("PatronAutoComplete"),
-    today_due_date_and_time   => dt_from_string()->set(hour => 23)->set(minute => 59),
-    restriction_types         => scalar Koha::Patron::Restriction::Types->search(),
-    has_modifications         => $has_modifications,
-    patron_lists_count        => $patron_lists_count,
-    override_high_holds       => $override_high_holds,
-    nopermission              => scalar $query->param('nopermission'),
-    autoswitched              => $autoswitched,
-    logged_in_user            => $logged_in_user,
+    debt_confirmed          => $debt_confirmed,
+    SpecifyDueDate          => $duedatespec_allow,
+    PatronAutoComplete      => C4::Context->preference("PatronAutoComplete"),
+    today_due_date_and_time => dt_from_string()->set( hour => 23 )->set( minute => 59 ),
+    restriction_types       => scalar Koha::Patron::Restriction::Types->search(),
+    has_modifications       => $has_modifications,
+    patron_lists_count      => $patron_lists_count,
+    override_high_holds     => $override_high_holds,
+    nopermission            => scalar $query->param('nopermission'),
+    autoswitched            => $autoswitched,
+    logged_in_user          => $logged_in_user,
 );
 
 output_html_with_http_headers $query, $cookie, $template->output;
-- 
2.39.3 (Apple Git-146)