applied various perltidy styles to Circ.pm master
authorMason James <mtj@kohaaloha.com>
Sat, 1 Oct 2011 07:45:41 +0000 (20:45 +1300)
committerMason James <mtj@kohaaloha.com>
Sun, 2 Oct 2011 02:43:32 +0000 (15:43 +1300)
 perltidy -gnu ./Circulation.pm.gnu-style
 perltidy -pbp ./Circulation.pm.pbp-style
 perltidy -nopro ./Circulation.pm.perlstyle-style
 perltidy --profile='./koha-master/xt/perltidyrc' ./Circulation.pm.koha-style

Circulation.pm.gnu-style
Circulation.pm.koha-style
Circulation.pm.pbp-style
Circulation.pm.perlstyle-style

index 520c116..aad5632 100644 (file)
@@ -18,8 +18,8 @@ package C4::Circulation;
 # with Koha; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-
 use strict;
+
 #use warnings; FIXME - Bug 2505
 use C4::Context;
 use C4::Stats;
@@ -42,63 +42,63 @@ use Date::Calc qw(
   Add_Delta_DHMS
   Date_to_Days
   Day_of_Week
-  Add_Delta_Days       
-);
+  Add_Delta_Days
+  );
 use POSIX qw(strftime);
-use C4::Branch; # GetBranches
-use C4::Log; # logaction
+use C4::Branch;    # GetBranches
+use C4::Log;       # logaction
 
 use Data::Dumper;
 
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
-       require Exporter;
-       $VERSION = 3.02;        # for version checking
-       @ISA    = qw(Exporter);
-
-       # FIXME subs that should probably be elsewhere
-       push @EXPORT, qw(
-               &FixOverduesOnReturn
-               &barcodedecode
-       );
-
-       # subs to deal with issuing a book
-       push @EXPORT, qw(
-               &CanBookBeIssued
-               &CanBookBeRenewed
-               &AddIssue
-               &AddRenewal
-               &GetRenewCount
-               &GetItemIssue
-               &GetItemIssues
-               &GetBorrowerIssues
-               &GetIssuingCharges
-               &GetIssuingRule
-        &GetBranchBorrowerCircRule
-        &GetBranchItemRule
-               &GetBiblioIssues
-               &GetOpenIssue
-               &AnonymiseIssueHistory
-       );
-
-       # subs to deal with returns
-       push @EXPORT, qw(
-               &AddReturn
-        &MarkIssueReturned
-       );
-
-       # subs to deal with transfers
-       push @EXPORT, qw(
-               &transferbook
-               &GetTransfers
-               &GetTransfersFromTo
-               &updateWrongTransfer
-               &DeleteTransfer
-                &IsBranchTransferAllowed
-                &CreateBranchTransferLimit
-                &DeleteBranchTransferLimits
-       );
+    require Exporter;
+    $VERSION = 3.02;           # for version checking
+    @ISA     = qw(Exporter);
+
+    # FIXME subs that should probably be elsewhere
+    push @EXPORT, qw(
+      &FixOverduesOnReturn
+      &barcodedecode
+      );
+
+    # subs to deal with issuing a book
+    push @EXPORT, qw(
+      &CanBookBeIssued
+      &CanBookBeRenewed
+      &AddIssue
+      &AddRenewal
+      &GetRenewCount
+      &GetItemIssue
+      &GetItemIssues
+      &GetBorrowerIssues
+      &GetIssuingCharges
+      &GetIssuingRule
+      &GetBranchBorrowerCircRule
+      &GetBranchItemRule
+      &GetBiblioIssues
+      &GetOpenIssue
+      &AnonymiseIssueHistory
+      );
+
+    # subs to deal with returns
+    push @EXPORT, qw(
+      &AddReturn
+      &MarkIssueReturned
+      );
+
+    # subs to deal with transfers
+    push @EXPORT, qw(
+      &transferbook
+      &GetTransfers
+      &GetTransfersFromTo
+      &updateWrongTransfer
+      &DeleteTransfer
+      &IsBranchTransferAllowed
+      &CreateBranchTransferLimit
+      &DeleteBranchTransferLimits
+      );
 }
 
 =head1 NAME
@@ -141,33 +141,34 @@ sub barcodedecode {
     my ($barcode, $filter) = @_;
     my $branch = C4::Branch::mybranch();
     $filter = C4::Context->preference('itemBarcodeInputFilter') unless $filter;
-    $filter or return $barcode;     # ensure filter is defined, else return untouched barcode
-       if ($filter eq 'whitespace') {
-               $barcode =~ s/\s//g;
-       } elsif ($filter eq 'cuecat') {
-               chomp($barcode);
-           my @fields = split( /\./, $barcode );
-           my @results = map( decode($_), @fields[ 1 .. $#fields ] );
-           ($#results == 2) and return $results[2];
-       } elsif ($filter eq 'T-prefix') {
-               if ($barcode =~ /^[Tt](\d)/) {
-                       (defined($1) and $1 eq '0') and return $barcode;
-            $barcode = substr($barcode, 2) + 0;     # FIXME: probably should be substr($barcode, 1)
-               }
+    $filter or return $barcode;    # ensure filter is defined, else return untouched barcode
+    if ($filter eq 'whitespace') {
+        $barcode =~ s/\s//g;
+    } elsif ($filter eq 'cuecat') {
+        chomp($barcode);
+        my @fields = split(/\./, $barcode);
+        my @results = map(decode($_), @fields[1 .. $#fields]);
+        ($#results == 2) and return $results[2];
+    } elsif ($filter eq 'T-prefix') {
+        if ($barcode =~ /^[Tt](\d)/) {
+            (defined($1) and $1 eq '0') and return $barcode;
+            $barcode = substr($barcode, 2) + 0;    # FIXME: probably should be substr($barcode, 1)
+        }
         return sprintf("T%07d", $barcode);
+
         # FIXME: $barcode could be "T1", causing warning: substr outside of string
         # Why drop the nonzero digit after the T?
         # Why pass non-digits (or empty string) to "T%07d"?
-       } elsif ($filter eq 'libsuite8') {
-               unless($barcode =~ m/^($branch)-/i){    #if barcode starts with branch code its in Koha style. Skip it.
-                       if($barcode =~ m/^(\d)/i){      #Some barcodes even start with 0's & numbers and are assumed to have b as the item type in the libsuite8 software
-                                $barcode =~ s/^[0]*(\d+)$/$branch-b-$1/i;
-                        }else{
-                               $barcode =~ s/^(\D+)[0]*(\d+)$/$branch-$1-$2/i;
-                       }
-               }
-       }
-    return $barcode;    # return barcode, modified or not
+    } elsif ($filter eq 'libsuite8') {
+        unless ($barcode =~ m/^($branch)-/i) {     #if barcode starts with branch code its in Koha style. Skip it.
+            if ($barcode =~ m/^(\d)/i) {           #Some barcodes even start with 0's & numbers and are assumed to have b as the item type in the libsuite8 software
+                $barcode =~ s/^[0]*(\d+)$/$branch-b-$1/i;
+            } else {
+                $barcode =~ s/^(\D+)[0]*(\d+)$/$branch-$1-$2/i;
+            }
+        }
+    }
+    return $barcode;                               # return barcode, modified or not
 }
 
 =head2 decode
@@ -184,12 +185,12 @@ or Javascript based decoding on the client side.
 
 sub decode {
     my ($encoded) = @_;
-    my $seq =
-      'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-';
-    my @s = map { index( $seq, $_ ); } split( //, $encoded );
-    my $l = ( $#s + 1 ) % 4;
+    my $seq = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-';
+    my @s = map { index($seq, $_); } split(//, $encoded);
+    my $l = ($#s + 1) % 4;
     if ($l) {
-        if ( $l == 1 ) {
+        if ($l == 1) {
+
             # warn "Error: Cuecat decode parsing failed!";
             return;
         }
@@ -197,15 +198,12 @@ sub decode {
         $#s += $l;
     }
     my $r = '';
-    while ( $#s >= 0 ) {
-        my $n = ( ( $s[0] << 6 | $s[1] ) << 6 | $s[2] ) << 6 | $s[3];
-        $r .=
-            chr( ( $n >> 16 ) ^ 67 )
-         .chr( ( $n >> 8 & 255 ) ^ 67 )
-         .chr( ( $n & 255 ) ^ 67 );
-        @s = @s[ 4 .. $#s ];
-    }
-    $r = substr( $r, 0, length($r) - $l );
+    while ($#s >= 0) {
+        my $n = (($s[0] << 6 | $s[1]) << 6 | $s[2]) << 6 | $s[3];
+        $r .= chr(($n >> 16) ^ 67) . chr(($n >> 8 & 255) ^ 67) . chr(($n & 255) ^ 67);
+        @s = @s[4 .. $#s];
+    }
+    $r = substr($r, 0, length($r) - $l);
     return $r;
 }
 
@@ -268,16 +266,16 @@ The item was eligible to be transferred. Barring problems communicating with the
 =cut
 
 sub transferbook {
-    my ( $tbr, $barcode, $ignoreRs ) = @_;
+    my ($tbr, $barcode, $ignoreRs) = @_;
     my $messages;
-    my $dotransfer      = 1;
-    my $branches        = GetBranches();
-    my $itemnumber = GetItemnumberFromBarcode( $barcode );
+    my $dotransfer = 1;
+    my $branches   = GetBranches();
+    my $itemnumber = GetItemnumberFromBarcode($barcode);
     my $issue      = GetItemIssue($itemnumber);
-    my $biblio = GetBiblioFromItemNumber($itemnumber);
+    my $biblio     = GetBiblioFromItemNumber($itemnumber);
 
     # bad barcode..
-    if ( not $itemnumber ) {
+    if (not $itemnumber) {
         $messages->{'BadBarcode'} = $barcode;
         $dotransfer = 0;
     }
@@ -287,41 +285,40 @@ sub transferbook {
     my $fbr = $biblio->{'holdingbranch'};
 
     # if using Branch Transfer Limits
-    if ( C4::Context->preference("UseBranchTransferLimits") == 1 ) {
-        if ( C4::Context->preference("item-level_itypes") && C4::Context->preference("BranchTransferLimitsType") eq 'itemtype' ) {
-            if ( ! IsBranchTransferAllowed( $tbr, $fbr, $biblio->{'itype'} ) ) {
+    if (C4::Context->preference("UseBranchTransferLimits") == 1) {
+        if (C4::Context->preference("item-level_itypes") && C4::Context->preference("BranchTransferLimitsType") eq 'itemtype') {
+            if (!IsBranchTransferAllowed($tbr, $fbr, $biblio->{'itype'})) {
                 $messages->{'NotAllowed'} = $tbr . "::" . $biblio->{'itype'};
                 $dotransfer = 0;
             }
-        } elsif ( ! IsBranchTransferAllowed( $tbr, $fbr, $biblio->{ C4::Context->preference("BranchTransferLimitsType") } ) ) {
-            $messages->{'NotAllowed'} = $tbr . "::" . $biblio->{ C4::Context->preference("BranchTransferLimitsType") };
+        } elsif (!IsBranchTransferAllowed($tbr, $fbr, $biblio->{C4::Context->preference("BranchTransferLimitsType")})) {
+            $messages->{'NotAllowed'} = $tbr . "::" . $biblio->{C4::Context->preference("BranchTransferLimitsType")};
             $dotransfer = 0;
-       }
+        }
     }
 
     # if is permanent...
-    if ( $hbr && $branches->{$hbr}->{'PE'} ) {
+    if ($hbr && $branches->{$hbr}->{'PE'}) {
         $messages->{'IsPermanent'} = $hbr;
         $dotransfer = 0;
     }
 
     # can't transfer book if is already there....
-    if ( $fbr eq $tbr ) {
+    if ($fbr eq $tbr) {
         $messages->{'DestinationEqualsHolding'} = 1;
         $dotransfer = 0;
     }
 
     # check if it is still issued to someone, return it...
     if ($issue->{borrowernumber}) {
-        AddReturn( $barcode, $fbr );
+        AddReturn($barcode, $fbr);
         $messages->{'WasReturned'} = $issue->{borrowernumber};
     }
 
     # find reserves.....
     # That'll save a database query.
-    my ( $resfound, $resrec ) =
-      CheckReserves( $itemnumber );
-    if ( $resfound and not $ignoreRs ) {
+    my ($resfound, $resrec) = CheckReserves($itemnumber);
+    if ($resfound and not $ignoreRs) {
         $resrec->{'ResFound'} = $resfound;
 
         #         $messages->{'ResFound'} = $resrec;
@@ -330,30 +327,30 @@ sub transferbook {
 
     #actually do the transfer....
     if ($dotransfer) {
-        ModItemTransfer( $itemnumber, $fbr, $tbr );
+        ModItemTransfer($itemnumber, $fbr, $tbr);
 
         # don't need to update MARC anymore, we do it in batch now
         $messages->{'WasTransfered'} = 1;
 
     }
-    ModDateLastSeen( $itemnumber );
-    return ( $dotransfer, $messages, $biblio );
+    ModDateLastSeen($itemnumber);
+    return ($dotransfer, $messages, $biblio);
 }
 
-
 sub TooMany {
-    my $borrower        = shift;
+    my $borrower     = shift;
     my $biblionumber = shift;
-       my $item                = shift;
-    my $cat_borrower    = $borrower->{'categorycode'};
-    my $dbh             = C4::Context->dbh;
-       my $branch;
-       # Get which branchcode we need
-       $branch = _GetCircControlBranch($item,$borrower);
-       my $type = (C4::Context->preference('item-level_itypes')) 
-                       ? $item->{'itype'}         # item-level
-                       : $item->{'itemtype'};     # biblio-level
+    my $item         = shift;
+    my $cat_borrower = $borrower->{'categorycode'};
+    my $dbh          = C4::Context->dbh;
+    my $branch;
+
+    # Get which branchcode we need
+    $branch = _GetCircControlBranch($item, $borrower);
+    my $type = (C4::Context->preference('item-level_itypes'))
+      ? $item->{'itype'}        # item-level
+      : $item->{'itemtype'};    # biblio-level
+
     # given branch, patron category, and item type, determine
     # applicable issuing rule
     my $issuing_rule = GetIssuingRule($cat_borrower, $type, $branch);
@@ -368,6 +365,7 @@ sub TooMany {
 
         my $rule_itemtype = $issuing_rule->{itemtype};
         if ($rule_itemtype eq "*") {
+
             # matching rule has the default item type, so count only
             # those existing loans that don't fall under a more
             # specific rule
@@ -378,7 +376,7 @@ sub TooMany {
                                     AND   (categorycode = ? OR categorycode = ?)
                                     AND   itemtype <> '*'
                                   ) ";
-            } else { 
+            } else {
                 $count_query .= " JOIN  biblioitems USING (biblionumber) 
                                   WHERE biblioitems.itemtype NOT IN (
                                     SELECT itemtype FROM issuingrules
@@ -391,11 +389,12 @@ sub TooMany {
             push @bind_params, $issuing_rule->{categorycode};
             push @bind_params, $cat_borrower;
         } else {
+
             # rule has specific item type, so count loans of that
             # specific item type
             if (C4::Context->preference('item-level_itypes')) {
                 $count_query .= " WHERE items.itype = ? ";
-            } else { 
+            } else {
                 $count_query .= " JOIN  biblioitems USING (biblionumber) 
                                   WHERE biblioitems.itemtype= ? ";
             }
@@ -410,7 +409,7 @@ sub TooMany {
                 $count_query .= " AND issues.branchcode = ? ";
                 push @bind_params, $branch;
             } elsif (C4::Context->preference('CircControl') eq 'PatronLibrary') {
-                ; # if branch is the patron's home branch, then count all loans by patron
+                ;    # if branch is the patron's home branch, then count all loans by patron
             } else {
                 $count_query .= " AND items.homebranch = ? ";
                 push @bind_params, $branch;
@@ -430,7 +429,7 @@ sub TooMany {
     # Now count total loans against the limit for the branch
     my $branch_borrower_circ_rule = GetBranchBorrowerCircRule($branch, $cat_borrower);
     if (defined($branch_borrower_circ_rule->{maxissueqty})) {
-        my @bind_params = ();
+        my @bind_params        = ();
         my $branch_count_query = "SELECT COUNT(*) FROM issues 
                                   JOIN items USING (itemnumber)
                                   WHERE borrowernumber = ? ";
@@ -440,7 +439,7 @@ sub TooMany {
             $branch_count_query .= " AND issues.branchcode = ? ";
             push @bind_params, $branch;
         } elsif (C4::Context->preference('CircControl') eq 'PatronLibrary') {
-            ; # if branch is the patron's home branch, then count all loans by patron
+            ;    # if branch is the patron's home branch, then count all loans by patron
         } else {
             $branch_count_query .= " AND items.homebranch = ? ";
             push @bind_params, $branch;
@@ -505,17 +504,16 @@ The borrower number of the last three patrons who borrowed this item.
 
 #'
 sub itemissues {
-    my ( $bibitem, $biblio ) = @_;
+    my ($bibitem, $biblio) = @_;
     my $dbh = C4::Context->dbh;
-    my $sth =
-      $dbh->prepare("Select * from items where items.biblioitemnumber = ?")
+    my $sth = $dbh->prepare("Select * from items where items.biblioitemnumber = ?")
       || die $dbh->errstr;
     my $i = 0;
     my @results;
 
     $sth->execute($bibitem) || die $sth->errstr;
 
-    while ( my $data = $sth->fetchrow_hashref ) {
+    while (my $data = $sth->fetchrow_hashref) {
 
         # Find out who currently has this item.
         # FIXME - Wouldn't it be better to do this as a left join of
@@ -529,35 +527,32 @@ sub itemissues {
                 LEFT JOIN borrowers ON issues.borrowernumber = borrowers.borrowernumber
                 WHERE itemnumber = ?
             "
-        );
+                                );
 
-        $sth2->execute( $data->{'itemnumber'} );
-        if ( my $data2 = $sth2->fetchrow_hashref ) {
+        $sth2->execute($data->{'itemnumber'});
+        if (my $data2 = $sth2->fetchrow_hashref) {
             $data->{'date_due'} = $data2->{'date_due'};
             $data->{'card'}     = $data2->{'cardnumber'};
             $data->{'borrower'} = $data2->{'borrowernumber'};
-        }
-        else {
+        } else {
             $data->{'date_due'} = ($data->{'wthdrawn'} eq '1') ? 'Cancelled' : 'Available';
         }
 
-
         # Find the last 3 people who borrowed this item.
         $sth2 = $dbh->prepare(
             "SELECT * FROM old_issues
                 LEFT JOIN borrowers ON  issues.borrowernumber = borrowers.borrowernumber
                 WHERE itemnumber = ?
                 ORDER BY returndate DESC,timestamp DESC"
-        );
+                             );
 
-        $sth2->execute( $data->{'itemnumber'} );
-        for ( my $i2 = 0 ; $i2 < 2 ; $i2++ )
-        {    # FIXME : error if there is less than 3 pple borrowing this item
-            if ( my $data2 = $sth2->fetchrow_hashref ) {
+        $sth2->execute($data->{'itemnumber'});
+        for (my $i2 = 0 ; $i2 < 2 ; $i2++) {    # FIXME : error if there is less than 3 pple borrowing this item
+            if (my $data2 = $sth2->fetchrow_hashref) {
                 $data->{"timestamp$i2"} = $data2->{'timestamp'};
                 $data->{"card$i2"}      = $data2->{'cardnumber'};
                 $data->{"borrower$i2"}  = $data2->{'borrowernumber'};
-            }    # if
+            }                                   # if
         }    # for
 
         $results[$i] = $data;
@@ -661,30 +656,30 @@ if the borrower borrows to much things
 =cut
 
 sub CanBookBeIssued {
-    my ( $borrower, $barcode, $duedate, $inprocess ) = @_;
+    my ($borrower, $barcode, $duedate, $inprocess) = @_;
     my %needsconfirmation;    # filled with problems that needs confirmations
     my %issuingimpossible;    # filled with problems that causes the issue to be IMPOSSIBLE
-    my $item = GetItem(GetItemnumberFromBarcode( $barcode ));
-    my $issue = GetItemIssue($item->{itemnumber});
-       my $biblioitem = GetBiblioItemData($item->{biblioitemnumber});
-       $item->{'itemtype'}=$item->{'itype'}; 
-    my $dbh             = C4::Context->dbh;
+    my $item       = GetItem(GetItemnumberFromBarcode($barcode));
+    my $issue      = GetItemIssue($item->{itemnumber});
+    my $biblioitem = GetBiblioItemData($item->{biblioitemnumber});
+    $item->{'itemtype'} = $item->{'itype'};
+    my $dbh = C4::Context->dbh;
 
     # MANDATORY CHECKS - unless item exists, nothing else matters
-    unless ( $item->{barcode} ) {
+    unless ($item->{barcode}) {
         $issuingimpossible{UNKNOWN_BARCODE} = 1;
     }
-       return ( \%issuingimpossible, \%needsconfirmation ) if %issuingimpossible;
+    return (\%issuingimpossible, \%needsconfirmation) if %issuingimpossible;
 
     #
     # DUE DATE is OK ? -- should already have checked.
     #
-    unless ( $duedate ) {
-        my $issuedate = strftime( "%Y-%m-%d", localtime );
+    unless ($duedate) {
+        my $issuedate = strftime("%Y-%m-%d", localtime);
 
-        my $branch = _GetCircControlBranch($item,$borrower);
-        my $itype = ( C4::Context->preference('item-level_itypes') ) ? $item->{'itype'} : $biblioitem->{'itemtype'};
-        $duedate = CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $itype, $branch, $borrower );
+        my $branch = _GetCircControlBranch($item, $borrower);
+        my $itype = (C4::Context->preference('item-level_itypes')) ? $item->{'itype'} : $biblioitem->{'itemtype'};
+        $duedate = CalcDateDue(C4::Dates->new($issuedate, 'iso'), $itype, $branch, $borrower);
 
         # Offline circ calls AddIssue directly, doesn't run through here
         #  So issuingimpossible should be ok.
@@ -699,85 +694,88 @@ sub CanBookBeIssued {
     #
     # BORROWER STATUS
     #
-    if ( $borrower->{'category_type'} eq 'X' && (  $item->{barcode}  )) { 
-       # stats only borrower -- add entry to statistics table, and return issuingimpossible{STATS} = 1  .
-        &UpdateStats(C4::Context->userenv->{'branch'},'localuse','','',$item->{'itemnumber'},$item->{'itemtype'},$borrower->{'borrowernumber'});
-        ModDateLastSeen( $item->{'itemnumber'} );
-        return( { STATS => 1 }, {});
+    if ($borrower->{'category_type'} eq 'X' && ($item->{barcode})) {
+
+        # stats only borrower -- add entry to statistics table, and return issuingimpossible{STATS} = 1  .
+        &UpdateStats(C4::Context->userenv->{'branch'}, 'localuse', '', '', $item->{'itemnumber'}, $item->{'itemtype'}, $borrower->{'borrowernumber'});
+        ModDateLastSeen($item->{'itemnumber'});
+        return ({STATS => 1}, {});
     }
-    if ( $borrower->{flags}->{GNA} ) {
+    if ($borrower->{flags}->{GNA}) {
         $issuingimpossible{GNA} = 1;
     }
-    if ( $borrower->{flags}->{'LOST'} ) {
+    if ($borrower->{flags}->{'LOST'}) {
         $issuingimpossible{CARD_LOST} = 1;
     }
-    if ( $borrower->{flags}->{'DBARRED'} ) {
+    if ($borrower->{flags}->{'DBARRED'}) {
         $issuingimpossible{DEBARRED} = 1;
     }
-    if ( $borrower->{'dateexpiry'} eq '0000-00-00') {
+    if ($borrower->{'dateexpiry'} eq '0000-00-00') {
         $issuingimpossible{EXPIRED} = 1;
     } else {
-        my @expirydate=  split /-/,$borrower->{'dateexpiry'};
-        if($expirydate[0]==0 || $expirydate[1]==0|| $expirydate[2]==0 ||
-            Date_to_Days(Today) > Date_to_Days( @expirydate )) {
-            $issuingimpossible{EXPIRED} = 1;                                   
+        my @expirydate = split /-/, $borrower->{'dateexpiry'};
+        if (   $expirydate[0] == 0
+            || $expirydate[1] == 0
+            || $expirydate[2] == 0
+            || Date_to_Days(Today) > Date_to_Days(@expirydate)) {
+            $issuingimpossible{EXPIRED} = 1;
         }
     }
+
     #
     # BORROWER STATUS
     #
 
     # DEBTS
-    my ($amount) =
-      C4::Members::GetMemberAccountRecords( $borrower->{'borrowernumber'}, '' && $duedate->output('iso') );
-    my $amountlimit = C4::Context->preference("noissuescharge");
-    my $allowfineoverride = C4::Context->preference("AllowFineOverride");
+    my ($amount) = C4::Members::GetMemberAccountRecords($borrower->{'borrowernumber'}, '' && $duedate->output('iso'));
+    my $amountlimit          = C4::Context->preference("noissuescharge");
+    my $allowfineoverride    = C4::Context->preference("AllowFineOverride");
     my $allfinesneedoverride = C4::Context->preference("AllFinesNeedOverride");
-    if ( C4::Context->preference("IssuingInProcess") ) {
-        if ( $amount > $amountlimit && !$inprocess && !$allowfineoverride) {
-            $issuingimpossible{DEBT} = sprintf( "%.2f", $amount );
-        } elsif ( $amount > $amountlimit && !$inprocess && $allowfineoverride) {
-            $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
-        } elsif ( $allfinesneedoverride && $amount > 0 && $amount <= $amountlimit && !$inprocess ) {
-            $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
+    if (C4::Context->preference("IssuingInProcess")) {
+        if ($amount > $amountlimit && !$inprocess && !$allowfineoverride) {
+            $issuingimpossible{DEBT} = sprintf("%.2f", $amount);
+        } elsif ($amount > $amountlimit && !$inprocess && $allowfineoverride) {
+            $needsconfirmation{DEBT} = sprintf("%.2f", $amount);
+        } elsif ($allfinesneedoverride && $amount > 0 && $amount <= $amountlimit && !$inprocess) {
+            $needsconfirmation{DEBT} = sprintf("%.2f", $amount);
         }
-    }
-    else {
-        if ( $amount > $amountlimit && $allowfineoverride ) {
-            $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
-        } elsif ( $amount > $amountlimit && !$allowfineoverride) {
-            $issuingimpossible{DEBT} = sprintf( "%.2f", $amount );
-        } elsif ( $amount > 0 && $allfinesneedoverride ) {
-            $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
+    } else {
+        if ($amount > $amountlimit && $allowfineoverride) {
+            $needsconfirmation{DEBT} = sprintf("%.2f", $amount);
+        } elsif ($amount > $amountlimit && !$allowfineoverride) {
+            $issuingimpossible{DEBT} = sprintf("%.2f", $amount);
+        } elsif ($amount > 0 && $allfinesneedoverride) {
+            $needsconfirmation{DEBT} = sprintf("%.2f", $amount);
         }
     }
 
     my ($blocktype, $count) = C4::Members::IsMemberBlocked($borrower->{'borrowernumber'});
     if ($blocktype == -1) {
         ## patron has outstanding overdue loans
-           if ( C4::Context->preference("OverduesBlockCirc") eq 'block'){
-               $issuingimpossible{USERBLOCKEDOVERDUE} = $count;
-           }
-           elsif ( C4::Context->preference("OverduesBlockCirc") eq 'confirmation'){
-               $needsconfirmation{USERBLOCKEDOVERDUE} = $count;
-           }
-    } elsif($blocktype == 1) {
+        if (C4::Context->preference("OverduesBlockCirc") eq 'block') {
+            $issuingimpossible{USERBLOCKEDOVERDUE} = $count;
+        } elsif (C4::Context->preference("OverduesBlockCirc") eq 'confirmation') {
+            $needsconfirmation{USERBLOCKEDOVERDUE} = $count;
+        }
+    } elsif ($blocktype == 1) {
+
         # patron has accrued fine days
         $issuingimpossible{USERBLOCKEDREMAINING} = $count;
     }
 
-#
+    #
     # JB34 CHECKS IF BORROWERS DONT HAVE ISSUE TOO MANY BOOKS
     #
-       my ($current_loan_count, $max_loans_allowed) = TooMany( $borrower, $item->{biblionumber}, $item );
+    my ($current_loan_count, $max_loans_allowed) = TooMany($borrower, $item->{biblionumber}, $item);
+
     # if TooMany max_loans_allowed returns 0 the user doesn't have permission to check out this book
     if ($max_loans_allowed eq 0) {
         $needsconfirmation{PATRON_CANT} = 1;
     } else {
-        if($max_loans_allowed){
-            $needsconfirmation{TOO_MANY} = 1;
+        if ($max_loans_allowed) {
+            $needsconfirmation{TOO_MANY}           = 1;
             $needsconfirmation{current_loan_count} = $current_loan_count;
-            $needsconfirmation{max_loans_allowed} = $max_loans_allowed;
+            $needsconfirmation{max_loans_allowed}  = $max_loans_allowed;
         }
     }
 
@@ -785,21 +783,21 @@ sub CanBookBeIssued {
     # ITEM CHECKING
     #
     if (   $item->{'notforloan'}
-        && $item->{'notforloan'} > 0 )
-    {
-        if(!C4::Context->preference("AllowNotForLoanOverride")){
+        && $item->{'notforloan'} > 0) {
+        if (!C4::Context->preference("AllowNotForLoanOverride")) {
             $issuingimpossible{NOT_FOR_LOAN} = 1;
-        }else{
+        } else {
             $needsconfirmation{NOT_FOR_LOAN_FORCING} = 1;
         }
-    }
-    elsif ( !$item->{'notforloan'} ){
+    } elsif (!$item->{'notforloan'}) {
+
         # we have to check itemtypes.notforloan also
-        if (C4::Context->preference('item-level_itypes')){
+        if (C4::Context->preference('item-level_itypes')) {
+
             # this should probably be a subroutine
             my $sth = $dbh->prepare("SELECT notforloan FROM itemtypes WHERE itemtype = ?");
             $sth->execute($item->{'itemtype'});
-            my $notforloan=$sth->fetchrow_hashref();
+            my $notforloan = $sth->fetchrow_hashref();
             $sth->finish();
             if ($notforloan->{'notforloan'}) {
                 if (!C4::Context->preference("AllowNotForLoanOverride")) {
@@ -808,8 +806,7 @@ sub CanBookBeIssued {
                     $needsconfirmation{NOT_FOR_LOAN_FORCING} = 1;
                 }
             }
-        }
-        elsif ($biblioitem->{'notforloan'} == 1){
+        } elsif ($biblioitem->{'notforloan'} == 1) {
             if (!C4::Context->preference("AllowNotForLoanOverride")) {
                 $issuingimpossible{NOT_FOR_LOAN} = 1;
             } else {
@@ -817,88 +814,80 @@ sub CanBookBeIssued {
             }
         }
     }
-    if ( $item->{'wthdrawn'} && $item->{'wthdrawn'} > 0 )
-    {
+    if ($item->{'wthdrawn'} && $item->{'wthdrawn'} > 0) {
         $issuingimpossible{WTHDRAWN} = 1;
     }
     if (   $item->{'restricted'}
-        && $item->{'restricted'} == 1 )
-    {
+        && $item->{'restricted'} == 1) {
         $issuingimpossible{RESTRICTED} = 1;
     }
-    if ( C4::Context->preference("IndependantBranches") ) {
+    if (C4::Context->preference("IndependantBranches")) {
         my $userenv = C4::Context->userenv;
-        if ( ($userenv) && ( $userenv->{flags} % 2 != 1 ) ) {
+        if (($userenv) && ($userenv->{flags} % 2 != 1)) {
             $issuingimpossible{ITEMNOTSAMEBRANCH} = 1
-              if ( $item->{C4::Context->preference("HomeOrHoldingBranch")} ne $userenv->{branch} );
-            $needsconfirmation{BORRNOTSAMEBRANCH} = GetBranchName( $borrower->{'branchcode'} )
-              if ( $borrower->{'branchcode'} ne $userenv->{branch} );
+              if ($item->{C4::Context->preference("HomeOrHoldingBranch")} ne $userenv->{branch});
+            $needsconfirmation{BORRNOTSAMEBRANCH} = GetBranchName($borrower->{'branchcode'})
+              if ($borrower->{'branchcode'} ne $userenv->{branch});
         }
     }
 
     #
     # CHECK IF BOOK ALREADY ISSUED TO THIS BORROWER
     #
-    if ( $issue->{borrowernumber} && $issue->{borrowernumber} eq $borrower->{'borrowernumber'} )
-    {
+    if ($issue->{borrowernumber} && $issue->{borrowernumber} eq $borrower->{'borrowernumber'}) {
 
         # Already issued to current borrower. Ask whether the loan should
         # be renewed.
-        my ($CanBookBeRenewed,$renewerror) = CanBookBeRenewed(
-            $borrower->{'borrowernumber'},
-            $item->{'itemnumber'}
-        );
-        if ( $CanBookBeRenewed == 0 ) {    # no more renewals allowed
+        my ($CanBookBeRenewed, $renewerror) = CanBookBeRenewed($borrower->{'borrowernumber'}, $item->{'itemnumber'});
+        if ($CanBookBeRenewed == 0) {    # no more renewals allowed
             $issuingimpossible{NO_MORE_RENEWALS} = 1;
-        }
-        else {
+        } else {
             $needsconfirmation{RENEW_ISSUE} = 1;
         }
-    }
-    elsif ($issue->{borrowernumber}) {
+    } elsif ($issue->{borrowernumber}) {
 
         # issued to someone else
-        my $currborinfo =    C4::Members::GetMemberDetails( $issue->{borrowernumber} );
+        my $currborinfo = C4::Members::GetMemberDetails($issue->{borrowernumber});
 
-#        warn "=>.$currborinfo->{'firstname'} $currborinfo->{'surname'} ($currborinfo->{'cardnumber'})";
-        $needsconfirmation{ISSUED_TO_ANOTHER} = 1;
-        $needsconfirmation{issued_firstname} = $currborinfo->{'firstname'};
-        $needsconfirmation{issued_surname} = $currborinfo->{'surname'};
-        $needsconfirmation{issued_cardnumber} = $currborinfo->{'cardnumber'};
+        #        warn "=>.$currborinfo->{'firstname'} $currborinfo->{'surname'} ($currborinfo->{'cardnumber'})";
+        $needsconfirmation{ISSUED_TO_ANOTHER}     = 1;
+        $needsconfirmation{issued_firstname}      = $currborinfo->{'firstname'};
+        $needsconfirmation{issued_surname}        = $currborinfo->{'surname'};
+        $needsconfirmation{issued_cardnumber}     = $currborinfo->{'cardnumber'};
         $needsconfirmation{issued_borrowernumber} = $currborinfo->{'borrowernumber'};
     }
 
     # See if the item is on reserve.
-    my ( $restype, $res ) = C4::Reserves::CheckReserves( $item->{'itemnumber'} );
+    my ($restype, $res) = C4::Reserves::CheckReserves($item->{'itemnumber'});
     if ($restype) {
-               my $resbor = $res->{'borrowernumber'};
-               my ( $resborrower ) = C4::Members::GetMemberDetails( $resbor, 0 );
-               my $branches  = GetBranches();
-               my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'};
-        if ( $resbor ne $borrower->{'borrowernumber'} && $restype eq "Waiting" )
-        {
+        my $resbor = $res->{'borrowernumber'};
+        my ($resborrower) = C4::Members::GetMemberDetails($resbor, 0);
+        my $branches      = GetBranches();
+        my $branchname    = $branches->{$res->{'branchcode'}}->{'branchname'};
+        if ($resbor ne $borrower->{'borrowernumber'} && $restype eq "Waiting") {
+
             # The item is on reserve and waiting, but has been
             # reserved by some other patron.
-            $needsconfirmation{RESERVE_WAITING} = 1;
-            $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'};
-            $needsconfirmation{'ressurname'} = $resborrower->{'surname'};
-            $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'};
+            $needsconfirmation{RESERVE_WAITING}     = 1;
+            $needsconfirmation{'resfirstname'}      = $resborrower->{'firstname'};
+            $needsconfirmation{'ressurname'}        = $resborrower->{'surname'};
+            $needsconfirmation{'rescardnumber'}     = $resborrower->{'cardnumber'};
             $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'};
-            $needsconfirmation{'resbranchname'} = $branchname;
-            $needsconfirmation{'reswaitingdate'} = format_date($res->{'waitingdate'});
-        }
-        elsif ( $restype eq "Reserved" ) {
+            $needsconfirmation{'resbranchname'}     = $branchname;
+            $needsconfirmation{'reswaitingdate'}    = format_date($res->{'waitingdate'});
+        } elsif ($restype eq "Reserved") {
+
             # The item is on reserve for someone else.
-            $needsconfirmation{RESERVED} = 1;
-            $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'};
-            $needsconfirmation{'ressurname'} = $resborrower->{'surname'};
-            $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'};
+            $needsconfirmation{RESERVED}            = 1;
+            $needsconfirmation{'resfirstname'}      = $resborrower->{'firstname'};
+            $needsconfirmation{'ressurname'}        = $resborrower->{'surname'};
+            $needsconfirmation{'rescardnumber'}     = $resborrower->{'cardnumber'};
             $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'};
-            $needsconfirmation{'resbranchname'} = $branchname;
-            $needsconfirmation{'resreservedate'} = format_date($res->{'reservedate'});
+            $needsconfirmation{'resbranchname'}     = $branchname;
+            $needsconfirmation{'resreservedate'}    = format_date($res->{'reservedate'});
         }
     }
-       return ( \%issuingimpossible, \%needsconfirmation );
+    return (\%issuingimpossible, \%needsconfirmation);
 }
 
 =head2 AddIssue
@@ -940,173 +929,162 @@ AddIssue does the following things :
 =cut
 
 sub AddIssue {
-    my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode) = @_;
-    my $dbh = C4::Context->dbh;
-       my $barcodecheck=CheckValidBarcode($barcode);
+    my ($borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode) = @_;
+    my $dbh          = C4::Context->dbh;
+    my $barcodecheck = CheckValidBarcode($barcode);
+
     # $issuedate defaults to today.
-    if ( ! defined $issuedate ) {
-        $issuedate = strftime( "%Y-%m-%d", localtime );
+    if (!defined $issuedate) {
+        $issuedate = strftime("%Y-%m-%d", localtime);
+
         # TODO: for hourly circ, this will need to be a C4::Dates object
         # and all calls to AddIssue including issuedate will need to pass a Dates object.
     }
-       if ($borrower and $barcode and $barcodecheck ne '0'){
-               # find which item we issue
-               my $item = GetItem('', $barcode) or return undef;       # if we don't get an Item, abort.
-               my $branch = _GetCircControlBranch($item,$borrower);
-               
-               # get actual issuing if there is one
-               my $actualissue = GetItemIssue( $item->{itemnumber});
-               
-               # get biblioinformation for this item
-               my $biblio = GetBiblioFromItemNumber($item->{itemnumber});
-               
-               #
-               # check if we just renew the issue.
-               #
-               if ($actualissue->{borrowernumber} eq $borrower->{'borrowernumber'}) {
-                       $datedue = AddRenewal(
-                               $borrower->{'borrowernumber'},
-                               $item->{'itemnumber'},
-                               $branch,
-                               $datedue,
-                $issuedate, # here interpreted as the renewal date
-                       );
-               }
-               else {
-        # it's NOT a renewal
-                       if ( $actualissue->{borrowernumber}) {
-                               # This book is currently on loan, but not to the person
-                               # who wants to borrow it now. mark it returned before issuing to the new borrower
-                               AddReturn(
-                                       $item->{'barcode'},
-                                       C4::Context->userenv->{'branch'}
-                               );
-                       }
-
-                       # See if the item is on reserve.
-                       my ( $restype, $res ) =
-                         C4::Reserves::CheckReserves( $item->{'itemnumber'} );
-                       if ($restype) {
-                               my $resbor = $res->{'borrowernumber'};
-                               if ( $resbor eq $borrower->{'borrowernumber'} ) {
-                                       # The item is reserved by the current patron
-                                       ModReserveFill($res);
-                               }
-                               elsif ( $restype eq "Waiting" ) {
-                                       # warn "Waiting";
-                                       # The item is on reserve and waiting, but has been
-                                       # reserved by some other patron.
-                               }
-                               elsif ( $restype eq "Reserved" ) {
-                                       # warn "Reserved";
-                                       # The item is reserved by someone else.
-                                       if ($cancelreserve) { # cancel reserves on this item
-                                               CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'});
-                                       }
-                               }
-                               if ($cancelreserve) {
-                                       CancelReserve($res->{'biblionumber'}, 0, $res->{'borrowernumber'});
-                               }
-                               else {
-                                       # set waiting reserve to first in reserve queue as book isn't waiting now
-                                       ModReserve(1,
-                                               $res->{'biblionumber'},
-                                               $res->{'borrowernumber'},
-                                               $res->{'branchcode'}
-                                       );
-                               }
-                       }
-
-                       # Starting process for transfer job (checking transfert and validate it if we have one)
+    if ($borrower and $barcode and $barcodecheck ne '0') {
+
+        # find which item we issue
+        my $item = GetItem('', $barcode) or return undef;    # if we don't get an Item, abort.
+        my $branch = _GetCircControlBranch($item, $borrower);
+
+        # get actual issuing if there is one
+        my $actualissue = GetItemIssue($item->{itemnumber});
+
+        # get biblioinformation for this item
+        my $biblio = GetBiblioFromItemNumber($item->{itemnumber});
+
+        #
+        # check if we just renew the issue.
+        #
+        if ($actualissue->{borrowernumber} eq $borrower->{'borrowernumber'}) {
+            $datedue = AddRenewal($borrower->{'borrowernumber'},
+                                  $item->{'itemnumber'},
+                                  $branch,
+                                  $datedue,
+                                  $issuedate,                      # here interpreted as the renewal date
+                                 );
+        } else {
+
+            # it's NOT a renewal
+            if ($actualissue->{borrowernumber}) {
+
+                # This book is currently on loan, but not to the person
+                # who wants to borrow it now. mark it returned before issuing to the new borrower
+                AddReturn($item->{'barcode'}, C4::Context->userenv->{'branch'});
+            }
+
+            # See if the item is on reserve.
+            my ($restype, $res) = C4::Reserves::CheckReserves($item->{'itemnumber'});
+            if ($restype) {
+                my $resbor = $res->{'borrowernumber'};
+                if ($resbor eq $borrower->{'borrowernumber'}) {
+
+                    # The item is reserved by the current patron
+                    ModReserveFill($res);
+                } elsif ($restype eq "Waiting") {
+
+                    # warn "Waiting";
+                    # The item is on reserve and waiting, but has been
+                    # reserved by some other patron.
+                } elsif ($restype eq "Reserved") {
+
+                    # warn "Reserved";
+                    # The item is reserved by someone else.
+                    if ($cancelreserve) {    # cancel reserves on this item
+                        CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'});
+                    }
+                }
+                if ($cancelreserve) {
+                    CancelReserve($res->{'biblionumber'}, 0, $res->{'borrowernumber'});
+                } else {
+
+                    # set waiting reserve to first in reserve queue as book isn't waiting now
+                    ModReserve(1, $res->{'biblionumber'}, $res->{'borrowernumber'}, $res->{'branchcode'});
+                }
+            }
+
+            # Starting process for transfer job (checking transfert and validate it if we have one)
             my ($datesent) = GetTransfers($item->{'itemnumber'});
             if ($datesent) {
-        #      updating line of branchtranfert to finish it, and changing the to branch value, implement a comment for visibility of this case (maybe for stats ....)
-                my $sth =
-                    $dbh->prepare(
+
+                #      updating line of branchtranfert to finish it, and changing the to branch value, implement a comment for visibility of this case (maybe for stats ....)
+                my $sth = $dbh->prepare(
                     "UPDATE branchtransfers 
                         SET datearrived = now(),
                         tobranch = ?,
                         comments = 'Forced branchtransfer'
                     WHERE itemnumber= ? AND datearrived IS NULL"
-                    );
-                $sth->execute(C4::Context->userenv->{'branch'},$item->{'itemnumber'});
+                                       );
+                $sth->execute(C4::Context->userenv->{'branch'}, $item->{'itemnumber'});
             }
 
-        # Record in the database the fact that the book was issued.
-        my $sth =
-          $dbh->prepare(
+            # Record in the database the fact that the book was issued.
+            my $sth = $dbh->prepare(
                 "INSERT INTO issues 
                     (borrowernumber, itemnumber,issuedate, date_due, branchcode)
                 VALUES (?,?,?,?,?)"
-          );
-        unless ($datedue) {
-            my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'};
-            $datedue = CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $itype, $branch, $borrower );
+                                   );
+            unless ($datedue) {
+                my $itype = (C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'};
+                $datedue = CalcDateDue(C4::Dates->new($issuedate, 'iso'), $itype, $branch, $borrower);
 
-        }
-        $sth->execute(
-            $borrower->{'borrowernumber'},      # borrowernumber
-            $item->{'itemnumber'},              # itemnumber
-            $issuedate,                         # issuedate
-            $datedue->output('iso'),            # date_due
-            C4::Context->userenv->{'branch'}    # branchcode
-        );
-        $sth->finish;
-        if ( C4::Context->preference('ReturnToShelvingCart') ) { ## ReturnToShelvingCart is on, anything issued should be taken off the cart.
-          CartToShelf( $item->{'itemnumber'} );
-        }
-        $item->{'issues'}++;
-        ModItem({ issues           => $item->{'issues'},
-                  holdingbranch    => C4::Context->userenv->{'branch'},
-                  itemlost         => 0,
-                  datelastborrowed => C4::Dates->new()->output('iso'),
-                  onloan           => $datedue->output('iso'),
-                }, $item->{'biblionumber'}, $item->{'itemnumber'});
-        ModDateLastSeen( $item->{'itemnumber'} );
-
-        # If it costs to borrow this book, charge it to the patron's account.
-        my ( $charge, $itemtype ) = GetIssuingCharges(
-            $item->{'itemnumber'},
-            $borrower->{'borrowernumber'}
-        );
-        if ( $charge > 0 ) {
-            AddIssuingCharge(
-                $item->{'itemnumber'},
-                $borrower->{'borrowernumber'}, $charge
-            );
-            $item->{'charge'} = $charge;
-        }
+            }
+            $sth->execute($borrower->{'borrowernumber'},      # borrowernumber
+                          $item->{'itemnumber'},              # itemnumber
+                          $issuedate,                         # issuedate
+                          $datedue->output('iso'),            # date_due
+                          C4::Context->userenv->{'branch'}    # branchcode
+                         );
+            $sth->finish;
+            if (C4::Context->preference('ReturnToShelvingCart')) {    ## ReturnToShelvingCart is on, anything issued should be taken off the cart.
+                CartToShelf($item->{'itemnumber'});
+            }
+            $item->{'issues'}++;
+            ModItem(
+                    {issues           => $item->{'issues'},
+                     holdingbranch    => C4::Context->userenv->{'branch'},
+                     itemlost         => 0,
+                     datelastborrowed => C4::Dates->new()->output('iso'),
+                     onloan           => $datedue->output('iso'),
+                    },
+                    $item->{'biblionumber'},
+                    $item->{'itemnumber'}
+                   );
+            ModDateLastSeen($item->{'itemnumber'});
+
+            # If it costs to borrow this book, charge it to the patron's account.
+            my ($charge, $itemtype) = GetIssuingCharges($item->{'itemnumber'}, $borrower->{'borrowernumber'});
+            if ($charge > 0) {
+                AddIssuingCharge($item->{'itemnumber'}, $borrower->{'borrowernumber'}, $charge);
+                $item->{'charge'} = $charge;
+            }
 
-        # Record the fact that this book was issued.
-        &UpdateStats(
-            C4::Context->userenv->{'branch'},
-            'issue', $charge,
-            ($sipmode ? "SIP-$sipmode" : ''), $item->{'itemnumber'},
-            $item->{'itype'}, $borrower->{'borrowernumber'}
-        );
-
-        # Send a checkout slip.
-        my $circulation_alert = 'C4::ItemCirculationAlertPreference';
-        my %conditions = (
-            branchcode   => $branch,
-            categorycode => $borrower->{categorycode},
-            item_type    => $item->{itype},
-            notification => 'CHECKOUT',
-        );
-        if ($circulation_alert->is_enabled_for(\%conditions)) {
-            SendCirculationAlert({
-                type     => 'CHECKOUT',
-                item     => $item,
-                borrower => $borrower,
-                branch   => $branch,
-            });
+            # Record the fact that this book was issued.
+            &UpdateStats(C4::Context->userenv->{'branch'},
+                         'issue', $charge, ($sipmode ? "SIP-$sipmode" : ''),
+                         $item->{'itemnumber'}, $item->{'itype'}, $borrower->{'borrowernumber'});
+
+            # Send a checkout slip.
+            my $circulation_alert = 'C4::ItemCirculationAlertPreference';
+            my %conditions = (branchcode   => $branch,
+                              categorycode => $borrower->{categorycode},
+                              item_type    => $item->{itype},
+                              notification => 'CHECKOUT',
+                             );
+            if ($circulation_alert->is_enabled_for(\%conditions)) {
+                SendCirculationAlert(
+                                     {type     => 'CHECKOUT',
+                                      item     => $item,
+                                      borrower => $borrower,
+                                      branch   => $branch,
+                                     }
+                                    );
+            }
         }
-    }
 
-    logaction("CIRCULATION", "ISSUE", $borrower->{'borrowernumber'}, $biblio->{'biblionumber'})
-        if C4::Context->preference("IssueLog");
-  }
-  return ($datedue);   # not necessarily the same as when it came in!
+        logaction("CIRCULATION", "ISSUE", $borrower->{'borrowernumber'}, $biblio->{'biblionumber'})
+          if C4::Context->preference("IssueLog");
+    }
+    return ($datedue);    # not necessarily the same as when it came in!
 }
 
 =head2 GetLoanLength
@@ -1118,51 +1096,49 @@ Get loan length for an itemtype, a borrower type and a branch
 =cut
 
 sub GetLoanLength {
-    my ( $borrowertype, $itemtype, $branchcode ) = @_;
+    my ($borrowertype, $itemtype, $branchcode) = @_;
     my $dbh = C4::Context->dbh;
-    my $sth =
-      $dbh->prepare(
-"select issuelength from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null"
-      );
-# warn "in get loan lenght $borrowertype $itemtype $branchcode ";
-# try to find issuelength & return the 1st available.
-# check with borrowertype, itemtype and branchcode, then without one of those parameters
-    $sth->execute( $borrowertype, $itemtype, $branchcode );
+    my $sth = $dbh->prepare("select issuelength from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null");
+
+    # warn "in get loan lenght $borrowertype $itemtype $branchcode ";
+    # try to find issuelength & return the 1st available.
+    # check with borrowertype, itemtype and branchcode, then without one of those parameters
+    $sth->execute($borrowertype, $itemtype, $branchcode);
     my $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
       if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
-    $sth->execute( $borrowertype, "*", $branchcode );
+    $sth->execute($borrowertype, "*", $branchcode);
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
       if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
-    $sth->execute( "*", $itemtype, $branchcode );
+    $sth->execute("*", $itemtype, $branchcode);
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
       if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
-    $sth->execute( "*", "*", $branchcode );
+    $sth->execute("*", "*", $branchcode);
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
       if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
-    $sth->execute( $borrowertype, $itemtype, "*" );
+    $sth->execute($borrowertype, $itemtype, "*");
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
       if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
-    $sth->execute( $borrowertype, "*", "*" );
+    $sth->execute($borrowertype, "*", "*");
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
       if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
-    $sth->execute( "*", $itemtype, "*" );
+    $sth->execute("*", $itemtype, "*");
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
       if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
-    $sth->execute( "*", "*", "*" );
+    $sth->execute("*", "*", "*");
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
       if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
@@ -1171,7 +1147,6 @@ sub GetLoanLength {
     return 21;
 }
 
-
 =head2 GetHardDueDate
 
   my ($hardduedate,$hardduedatecompare) = &GetHardDueDate($borrowertype,$itemtype,branchcode)
@@ -1181,50 +1156,47 @@ Get the Hard Due Date and it's comparison for an itemtype, a borrower type and a
 =cut
 
 sub GetHardDueDate {
-    my ( $borrowertype, $itemtype, $branchcode ) = @_;
+    my ($borrowertype, $itemtype, $branchcode) = @_;
     my $dbh = C4::Context->dbh;
-    my $sth =
-      $dbh->prepare(
-"select hardduedate, hardduedatecompare from issuingrules where categorycode=? and itemtype=? and branchcode=?"
-      );
-    $sth->execute( $borrowertype, $itemtype, $branchcode );
+    my $sth = $dbh->prepare("select hardduedate, hardduedatecompare from issuingrules where categorycode=? and itemtype=? and branchcode=?");
+    $sth->execute($borrowertype, $itemtype, $branchcode);
     my $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return (C4::Dates->new($results->{hardduedate}, 'iso'), $results->{hardduedatecompare})
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
-    $sth->execute( $borrowertype, "*", $branchcode );
+    $sth->execute($borrowertype, "*", $branchcode);
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return (C4::Dates->new($results->{hardduedate}, 'iso'), $results->{hardduedatecompare})
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
-    $sth->execute( "*", $itemtype, $branchcode );
+    $sth->execute("*", $itemtype, $branchcode);
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return (C4::Dates->new($results->{hardduedate}, 'iso'), $results->{hardduedatecompare})
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
-    $sth->execute( "*", "*", $branchcode );
+    $sth->execute("*", "*", $branchcode);
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return (C4::Dates->new($results->{hardduedate}, 'iso'), $results->{hardduedatecompare})
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
-    $sth->execute( $borrowertype, $itemtype, "*" );
+    $sth->execute($borrowertype, $itemtype, "*");
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return (C4::Dates->new($results->{hardduedate}, 'iso'), $results->{hardduedatecompare})
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
-    $sth->execute( $borrowertype, "*", "*" );
+    $sth->execute($borrowertype, "*", "*");
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return (C4::Dates->new($results->{hardduedate}, 'iso'), $results->{hardduedatecompare})
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
-    $sth->execute( "*", $itemtype, "*" );
+    $sth->execute("*", $itemtype, "*");
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return (C4::Dates->new($results->{hardduedate}, 'iso'), $results->{hardduedatecompare})
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
-    $sth->execute( "*", "*", "*" );
+    $sth->execute("*", "*", "*");
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return (C4::Dates->new($results->{hardduedate}, 'iso'), $results->{hardduedatecompare})
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
     # if no rule is set => return undefined
@@ -1245,42 +1217,42 @@ Returns a hashref from the issuingrules table.
 =cut
 
 sub GetIssuingRule {
-    my ( $borrowertype, $itemtype, $branchcode ) = @_;
+    my ($borrowertype, $itemtype, $branchcode) = @_;
     my $dbh = C4::Context->dbh;
-    my $sth =  $dbh->prepare( "select * from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null"  );
+    my $sth = $dbh->prepare("select * from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null");
     my $irule;
 
-       $sth->execute( $borrowertype, $itemtype, $branchcode );
+    $sth->execute($borrowertype, $itemtype, $branchcode);
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
-    $sth->execute( $borrowertype, "*", $branchcode );
+    $sth->execute($borrowertype, "*", $branchcode);
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
-    $sth->execute( "*", $itemtype, $branchcode );
+    $sth->execute("*", $itemtype, $branchcode);
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
-    $sth->execute( "*", "*", $branchcode );
+    $sth->execute("*", "*", $branchcode);
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
-    $sth->execute( $borrowertype, $itemtype, "*" );
+    $sth->execute($borrowertype, $itemtype, "*");
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
-    $sth->execute( $borrowertype, "*", "*" );
+    $sth->execute($borrowertype, "*", "*");
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
-    $sth->execute( "*", $itemtype, "*" );
+    $sth->execute("*", $itemtype, "*");
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
-    $sth->execute( "*", "*", "*" );
+    $sth->execute("*", "*", "*");
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     # if no rule matches,
     return undef;
@@ -1319,7 +1291,7 @@ wildcards.
 =cut
 
 sub GetBranchBorrowerCircRule {
-    my $branchcode = shift;
+    my $branchcode   = shift;
     my $categorycode = shift;
 
     my $branch_cat_query = "SELECT maxissueqty
@@ -1353,7 +1325,7 @@ sub GetBranchBorrowerCircRule {
     if ($result = $sth->fetchrow_hashref()) {
         return $result;
     }
-  
+
     # try default branch, default borrower category
     my $default_query = "SELECT maxissueqty
                           FROM default_circ_rules";
@@ -1362,11 +1334,9 @@ sub GetBranchBorrowerCircRule {
     if ($result = $sth->fetchrow_hashref()) {
         return $result;
     }
-    
+
     # built-in default circulation rule
-    return {
-        maxissueqty => undef,
-    };
+    return {maxissueqty => undef,};
 }
 
 =head2 GetBranchItemRule
@@ -1395,23 +1365,27 @@ Neither C<$branchcode> nor C<$categorycode> should be '*'.
 =cut
 
 sub GetBranchItemRule {
-    my ( $branchcode, $itemtype ) = @_;
-    my $dbh = C4::Context->dbh();
+    my ($branchcode, $itemtype) = @_;
+    my $dbh    = C4::Context->dbh();
     my $result = {};
 
     my @attempts = (
         ['SELECT holdallowed
             FROM branch_item_rules
             WHERE branchcode = ?
-              AND itemtype = ?', $branchcode, $itemtype],
+              AND itemtype = ?', $branchcode, $itemtype
+        ],
         ['SELECT holdallowed
             FROM default_branch_circ_rules
-            WHERE branchcode = ?', $branchcode],
+            WHERE branchcode = ?', $branchcode
+        ],
         ['SELECT holdallowed
             FROM default_branch_item_rules
-            WHERE itemtype = ?', $itemtype],
+            WHERE itemtype = ?', $itemtype
+        ],
         ['SELECT holdallowed
-            FROM default_circ_rules'],
+            FROM default_circ_rules'
+        ],
     );
 
     foreach my $attempt (@attempts) {
@@ -1420,13 +1394,11 @@ sub GetBranchItemRule {
         # Since branch/category and branch/itemtype use the same per-branch
         # defaults tables, we have to check that the key we want is set, not
         # just that a row was returned
-        return $result if ( defined( $result->{'holdallowed'} = $dbh->selectrow_array( $query, {}, @bind_params ) ) );
+        return $result if (defined($result->{'holdallowed'} = $dbh->selectrow_array($query, {}, @bind_params)));
     }
-    
+
     # built-in default circulation rule
-    return {
-        holdallowed => 2,
-    };
+    return {holdallowed => 2,};
 }
 
 =head2 AddReturn
@@ -1504,68 +1476,73 @@ patron who last borrowed the book.
 =cut
 
 sub AddReturn {
-    my ( $barcode, $branch, $exemptfine, $dropbox ) = @_;
+    my ($barcode, $branch, $exemptfine, $dropbox) = @_;
     if ($branch and not GetBranchDetail($branch)) {
         warn "AddReturn error: branch '$branch' not found.  Reverting to " . C4::Context->userenv->{'branch'};
         undef $branch;
     }
-    $branch = C4::Context->userenv->{'branch'} unless $branch;  # we trust userenv to be a safe fallback/default
+    $branch = C4::Context->userenv->{'branch'} unless $branch;    # we trust userenv to be a safe fallback/default
     my $messages;
     my $borrower;
     my $biblio;
     my $doreturn       = 1;
     my $validTransfert = 0;
-    
+
     # get information on item
-    my $itemnumber = GetItemnumberFromBarcode( $barcode );
+    my $itemnumber = GetItemnumberFromBarcode($barcode);
     unless ($itemnumber) {
-        return (0, { BadBarcode => $barcode }); # no barcode means no item or borrower.  bail out.
+        return (0, {BadBarcode => $barcode});                     # no barcode means no item or borrower.  bail out.
     }
-    my $issue  = GetItemIssue($itemnumber);
-#   warn Dumper($iteminformation);
+    my $issue = GetItemIssue($itemnumber);
+
+    #   warn Dumper($iteminformation);
     if ($issue and $issue->{borrowernumber}) {
         $borrower = C4::Members::GetMemberDetails($issue->{borrowernumber})
-            or die "Data inconsistency: barcode $barcode (itemnumber:$itemnumber) claims to be issued to non-existant borrowernumber '$issue->{borrowernumber}'\n"
-                . Dumper($issue) . "\n";
+          or die "Data inconsistency: barcode $barcode (itemnumber:$itemnumber) claims to be issued to non-existant borrowernumber '$issue->{borrowernumber}'\n"
+          . Dumper($issue) . "\n";
     } else {
         $messages->{'NotIssued'} = $barcode;
+
         # even though item is not on loan, it may still be transferred;  therefore, get current branch info
         $doreturn = 0;
+
         # No issue, no borrowernumber.  ONLY if $doreturn, *might* you have a $borrower later.
     }
 
     my $item = GetItem($itemnumber) or die "GetItem($itemnumber) failed";
-        # full item data, but no borrowernumber or checkout info (no issue)
-        # we know GetItem should work because GetItemnumberFromBarcode worked
-    my $hbr      = C4::Context->preference("HomeOrHoldingBranchReturn") || "homebranch";
+
+    # full item data, but no borrowernumber or checkout info (no issue)
+    # we know GetItem should work because GetItemnumberFromBarcode worked
+    my $hbr = C4::Context->preference("HomeOrHoldingBranchReturn") || "homebranch";
     $hbr = $item->{$hbr} || '';
-        # item must be from items table -- issues table has branchcode and issuingbranch, not homebranch nor holdingbranch
+
+    # item must be from items table -- issues table has branchcode and issuingbranch, not homebranch nor holdingbranch
 
     my $borrowernumber = $borrower->{'borrowernumber'} || undef;    # we don't know if we had a borrower or not
 
     # check if the book is in a permanent collection....
     # FIXME -- This 'PE' attribute is largely undocumented.  afaict, there's no user interface that reflects this functionality.
-    if ( $hbr ) {
-        my $branches = GetBranches();    # a potentially expensive call for a non-feature.
+    if ($hbr) {
+        my $branches = GetBranches();                               # a potentially expensive call for a non-feature.
         $branches->{$hbr}->{PE} and $messages->{'IsPermanent'} = $hbr;
     }
 
     # if indy branches and returning to different branch, refuse the return
-    if ($hbr ne $branch && C4::Context->preference("IndependantBranches")){
-        $messages->{'Wrongbranch'} = {
-            Wrongbranch => $branch,
-            Rightbranch => $hbr,
-        };
+    if ($hbr ne $branch && C4::Context->preference("IndependantBranches")) {
+        $messages->{'Wrongbranch'} = {Wrongbranch => $branch,
+                                      Rightbranch => $hbr,
+                                     };
         $doreturn = 0;
+
         # bailing out here - in this case, current desired behavior
         # is to act as if no return ever happened at all.
         # FIXME - even in an indy branches situation, there should
         # still be an option for the library to accept the item
         # and transfer it to its owning library.
-        return ( $doreturn, $messages, $issue, $borrower );
+        return ($doreturn, $messages, $issue, $borrower);
     }
 
-    if ( $item->{'wthdrawn'} ) { # book has been cancelled
+    if ($item->{'wthdrawn'}) {    # book has been cancelled
         $messages->{'wthdrawn'} = 1;
         $doreturn = 0;
     }
@@ -1573,12 +1550,13 @@ sub AddReturn {
     # case of a return of document (deal with issues and holdingbranch)
     if ($doreturn) {
         $borrower or warn "AddReturn without current borrower";
-               my $circControlBranch;
+        my $circControlBranch;
         if ($dropbox) {
+
             # define circControlBranch only if dropbox mode is set
             # don't allow dropbox mode to create an invalid entry in issues (issuedate > today)
             # FIXME: check issuedate > returndate, factoring in holidays
-            $circControlBranch = _GetCircControlBranch($item,$borrower) unless ( $item->{'issuedate'} eq C4::Dates->today('iso') );;
+            $circControlBranch = _GetCircControlBranch($item, $borrower) unless ($item->{'issuedate'} eq C4::Dates->today('iso'));
         }
 
         if ($borrowernumber) {
@@ -1586,27 +1564,26 @@ sub AddReturn {
             $messages->{'WasReturned'} = 1;    # FIXME is the "= 1" right?  This could be the borrower hash.
         }
 
-        ModItem({ onloan => undef }, $issue->{'biblionumber'}, $item->{'itemnumber'});
+        ModItem({onloan => undef}, $issue->{'biblionumber'}, $item->{'itemnumber'});
     }
 
     # the holdingbranch is updated if the document is returned to another location.
     # this is always done regardless of whether the item was on loan or not
     if ($item->{'holdingbranch'} ne $branch) {
         UpdateHoldingbranch($branch, $item->{'itemnumber'});
-        $item->{'holdingbranch'} = $branch; # update item data holdingbranch too
+        $item->{'holdingbranch'} = $branch;    # update item data holdingbranch too
     }
-    ModDateLastSeen( $item->{'itemnumber'} );
+    ModDateLastSeen($item->{'itemnumber'});
 
     # check if we have a transfer for this document
-    my ($datesent,$frombranch,$tobranch) = GetTransfers( $item->{'itemnumber'} );
+    my ($datesent, $frombranch, $tobranch) = GetTransfers($item->{'itemnumber'});
 
     # if we have a transfer to do, we update the line of transfers with the datearrived
     if ($datesent) {
-        if ( $tobranch eq $branch ) {
-            my $sth = C4::Context->dbh->prepare(
-                "UPDATE branchtransfers SET datearrived = now() WHERE itemnumber= ? AND datearrived IS NULL"
-            );
-            $sth->execute( $item->{'itemnumber'} );
+        if ($tobranch eq $branch) {
+            my $sth = C4::Context->dbh->prepare("UPDATE branchtransfers SET datearrived = now() WHERE itemnumber= ? AND datearrived IS NULL");
+            $sth->execute($item->{'itemnumber'});
+
             # if we have a reservation with valid transfer, we can set it's status to 'W'
             C4::Reserves::ModReserveStatus($item->{'itemnumber'}, 'W');
         } else {
@@ -1625,64 +1602,59 @@ sub AddReturn {
     # fix up the overdues in accounts...
     if ($borrowernumber) {
         my $fix = _FixOverduesOnReturn($borrowernumber, $item->{itemnumber}, $exemptfine, $dropbox);
-        defined($fix) or warn "_FixOverduesOnReturn($borrowernumber, $item->{itemnumber}...) failed!";  # zero is OK, check defined
+        defined($fix) or warn "_FixOverduesOnReturn($borrowernumber, $item->{itemnumber}...) failed!";    # zero is OK, check defined
     }
 
     # find reserves.....
     # if we don't have a reserve with the status W, we launch the Checkreserves routine
-    my ($resfound, $resrec) = C4::Reserves::CheckReserves( $item->{'itemnumber'} );
+    my ($resfound, $resrec) = C4::Reserves::CheckReserves($item->{'itemnumber'});
     if ($resfound) {
-          $resrec->{'ResFound'} = $resfound;
+        $resrec->{'ResFound'}   = $resfound;
         $messages->{'ResFound'} = $resrec;
     }
 
     # update stats?
     # Record the fact that this book was returned.
-    UpdateStats(
-        $branch, 'return', '0', '',
-        $item->{'itemnumber'},
-        $biblio->{'itemtype'},
-        $borrowernumber
-    );
+    UpdateStats($branch, 'return', '0', '', $item->{'itemnumber'}, $biblio->{'itemtype'}, $borrowernumber);
 
     # Send a check-in slip. # NOTE: borrower may be undef.  probably shouldn't try to send messages then.
     my $circulation_alert = 'C4::ItemCirculationAlertPreference';
-    my %conditions = (
-        branchcode   => $branch,
-        categorycode => $borrower->{categorycode},
-        item_type    => $item->{itype},
-        notification => 'CHECKIN',
-    );
+    my %conditions = (branchcode   => $branch,
+                      categorycode => $borrower->{categorycode},
+                      item_type    => $item->{itype},
+                      notification => 'CHECKIN',
+                     );
     if ($doreturn && $circulation_alert->is_enabled_for(\%conditions)) {
-        SendCirculationAlert({
-            type     => 'CHECKIN',
-            item     => $item,
-            borrower => $borrower,
-            branch   => $branch,
-        });
-    }
-    
+        SendCirculationAlert(
+                             {type     => 'CHECKIN',
+                              item     => $item,
+                              borrower => $borrower,
+                              branch   => $branch,
+                             }
+                            );
+    }
+
     logaction("CIRCULATION", "RETURN", $borrowernumber, $item->{'biblionumber'})
-        if C4::Context->preference("ReturnLog");
-    
+      if C4::Context->preference("ReturnLog");
+
     # FIXME: make this comment intelligible.
     #adding message if holdingbranch is non equal a userenv branch to return the document to homebranch
     #we check, if we don't have reserv or transfert for this document, if not, return it to homebranch .
 
-    if (($doreturn or $messages->{'NotIssued'}) and !$resfound and ($branch ne $hbr) and not $messages->{'WrongTransfer'}){
-        if ( C4::Context->preference("AutomaticItemReturn"    ) or
-            (C4::Context->preference("UseBranchTransferLimits") and
-             ! IsBranchTransferAllowed($branch, $hbr, $item->{C4::Context->preference("BranchTransferLimitsType")} )
-           )) {
-            $debug and warn sprintf "about to call ModItemTransfer(%s, %s, %s)", $item->{'itemnumber'},$branch, $hbr;
+    if (($doreturn or $messages->{'NotIssued'}) and !$resfound and ($branch ne $hbr) and not $messages->{'WrongTransfer'}) {
+        if (C4::Context->preference("AutomaticItemReturn")
+            or (C4::Context->preference("UseBranchTransferLimits")
+                and !IsBranchTransferAllowed($branch, $hbr, $item->{C4::Context->preference("BranchTransferLimitsType")}))
+          ) {
+            $debug and warn sprintf "about to call ModItemTransfer(%s, %s, %s)", $item->{'itemnumber'}, $branch, $hbr;
             $debug and warn "item: " . Dumper($item);
             ModItemTransfer($item->{'itemnumber'}, $branch, $hbr);
             $messages->{'WasTransfered'} = 1;
         } else {
-            $messages->{'NeedsTransfer'} = 1;   # TODO: instead of 1, specify branchcode that the transfer SHOULD go to, $item->{homebranch}
+            $messages->{'NeedsTransfer'} = 1;    # TODO: instead of 1, specify branchcode that the transfer SHOULD go to, $item->{homebranch}
         }
     }
-    return ( $doreturn, $messages, $issue, $borrower );
+    return ($doreturn, $messages, $issue, $borrower);
 }
 
 =head2 MarkIssueReturned
@@ -1709,13 +1681,13 @@ routine in C<C4::Accounts>.
 =cut
 
 sub MarkIssueReturned {
-    my ( $borrowernumber, $itemnumber, $dropbox_branch, $returndate, $privacy ) = @_;
+    my ($borrowernumber, $itemnumber, $dropbox_branch, $returndate, $privacy) = @_;
     my $dbh   = C4::Context->dbh;
     my $query = "UPDATE issues SET returndate=";
     my @bind;
     if ($dropbox_branch) {
-        my $calendar = C4::Calendar->new( branchcode => $dropbox_branch );
-        my $dropboxdate = $calendar->addDate( C4::Dates->new(), -1 );
+        my $calendar = C4::Calendar->new(branchcode => $dropbox_branch);
+        my $dropboxdate = $calendar->addDate(C4::Dates->new(), -1);
         $query .= " ? ";
         push @bind, $dropboxdate->output('iso');
     } elsif ($returndate) {
@@ -1726,26 +1698,35 @@ sub MarkIssueReturned {
     }
     $query .= " WHERE  borrowernumber = ?  AND itemnumber = ?";
     push @bind, $borrowernumber, $itemnumber;
+
     # FIXME transaction
-    my $sth_upd  = $dbh->prepare($query);
+    my $sth_upd = $dbh->prepare($query);
     $sth_upd->execute(@bind);
-    my $sth_copy = $dbh->prepare("INSERT INTO old_issues SELECT * FROM issues 
+    my $sth_copy = $dbh->prepare(
+        "INSERT INTO old_issues SELECT * FROM issues 
                                   WHERE borrowernumber = ?
-                                  AND itemnumber = ?");
+                                  AND itemnumber = ?"
+                                );
     $sth_copy->execute($borrowernumber, $itemnumber);
+
     # anonymise patron checkout immediately if $privacy set to 2 and AnonymousPatron is set to a valid borrowernumber
-    if ( $privacy == 2) {
+    if ($privacy == 2) {
+
         # The default of 0 does not work due to foreign key constraints
         # The anonymisation will fail quietly if AnonymousPatron is not a valid entry
         my $anonymouspatron = (C4::Context->preference('AnonymousPatron')) ? C4::Context->preference('AnonymousPatron') : 0;
-        my $sth_ano = $dbh->prepare("UPDATE old_issues SET borrowernumber=?
+        my $sth_ano = $dbh->prepare(
+            "UPDATE old_issues SET borrowernumber=?
                                   WHERE borrowernumber = ?
-                                  AND itemnumber = ?");
-       $sth_ano->execute($anonymouspatron, $borrowernumber, $itemnumber);
+                                  AND itemnumber = ?"
+                                   );
+        $sth_ano->execute($anonymouspatron, $borrowernumber, $itemnumber);
     }
-    my $sth_del  = $dbh->prepare("DELETE FROM issues
+    my $sth_del = $dbh->prepare(
+        "DELETE FROM issues
                                   WHERE borrowernumber = ?
-                                  AND itemnumber = ?");
+                                  AND itemnumber = ?"
+                               );
     $sth_del->execute($borrowernumber, $itemnumber);
 }
 
@@ -1778,10 +1759,8 @@ sub _FixOverduesOnReturn {
     my $dbh = C4::Context->dbh;
 
     # check for overdue fine
-    my $sth = $dbh->prepare(
-"SELECT * FROM accountlines WHERE (borrowernumber = ?) AND (itemnumber = ?) AND (accounttype='FU' OR accounttype='O')"
-    );
-    $sth->execute( $borrowernumber, $item );
+    my $sth = $dbh->prepare("SELECT * FROM accountlines WHERE (borrowernumber = ?) AND (itemnumber = ?) AND (accounttype='FU' OR accounttype='O')");
+    $sth->execute($borrowernumber, $item);
 
     # alter fine to show that the book has been returned
     my $data = $sth->fetchrow_hashref;
@@ -1792,18 +1771,18 @@ sub _FixOverduesOnReturn {
     if ($exemptfine) {
         $uquery = "update accountlines set accounttype='FFOR', amountoutstanding=0";
         if (C4::Context->preference("FinesLog")) {
-            &logaction("FINES", 'MODIFY',$borrowernumber,"Overdue forgiven: item $item");
+            &logaction("FINES", 'MODIFY', $borrowernumber, "Overdue forgiven: item $item");
         }
     } elsif ($dropbox && $data->{lastincrement}) {
-        my $outstanding = $data->{amountoutstanding} - $data->{lastincrement} ;
-        my $amt = $data->{amount} - $data->{lastincrement} ;
+        my $outstanding = $data->{amountoutstanding} - $data->{lastincrement};
+        my $amt         = $data->{amount} - $data->{lastincrement};
         if (C4::Context->preference("FinesLog")) {
-            &logaction("FINES", 'MODIFY',$borrowernumber,"Dropbox adjustment $amt, item $item");
+            &logaction("FINES", 'MODIFY', $borrowernumber, "Dropbox adjustment $amt, item $item");
         }
-         $uquery = "update accountlines set accounttype='F' ";
-         if($outstanding  >= 0 && $amt >=0) {
+        $uquery = "update accountlines set accounttype='F' ";
+        if ($outstanding >= 0 && $amt >= 0) {
             $uquery .= ", amount = ? , amountoutstanding=? ";
-            unshift @bind, ($amt, $outstanding) ;
+            unshift @bind, ($amt, $outstanding);
         }
     } else {
         $uquery = "update accountlines set accounttype='F' ";
@@ -1827,78 +1806,93 @@ FIXME: Give a positive return value on success.  It might be the $borrowernumber
 =cut
 
 sub _FixAccountForLostAndReturned {
-    my $itemnumber     = shift or return;
+    my $itemnumber = shift or return;
     my $borrowernumber = @_ ? shift : undef;
-    my $item_id        = @_ ? shift : $itemnumber;  # Send the barcode if you want that logged in the description
-    my $dbh = C4::Context->dbh;
+    my $item_id        = @_ ? shift : $itemnumber;    # Send the barcode if you want that logged in the description
+    my $dbh            = C4::Context->dbh;
+
     # check for charge made for lost book
     my $sth = $dbh->prepare("SELECT * FROM accountlines WHERE (itemnumber = ?) AND (accounttype='L' OR accounttype='Rep') ORDER BY date DESC");
     $sth->execute($itemnumber);
     my $data = $sth->fetchrow_hashref;
-    $data or return;    # bail if there is nothing to do
+    $data or return;                                  # bail if there is nothing to do
 
     # writeoff this amount
     my $offset;
     my $amount = $data->{'amount'};
     my $acctno = $data->{'accountno'};
-    my $amountleft;                                             # Starts off undef/zero.
+    my $amountleft;                                   # Starts off undef/zero.
     if ($data->{'amountoutstanding'} == $amount) {
         $offset     = $data->{'amount'};
-        $amountleft = 0;                                        # Hey, it's zero here, too.
+        $amountleft = 0;                              # Hey, it's zero here, too.
     } else {
-        $offset     = $amount - $data->{'amountoutstanding'};   # Um, isn't this the same as ZERO?  We just tested those two things are ==
-        $amountleft = $data->{'amountoutstanding'} - $amount;   # Um, isn't this the same as ZERO?  We just tested those two things are ==
+        $offset     = $amount - $data->{'amountoutstanding'};    # Um, isn't this the same as ZERO?  We just tested those two things are ==
+        $amountleft = $data->{'amountoutstanding'} - $amount;    # Um, isn't this the same as ZERO?  We just tested those two things are ==
     }
-    my $usth = $dbh->prepare("UPDATE accountlines SET accounttype = 'LR',amountoutstanding='0'
+    my $usth = $dbh->prepare(
+        "UPDATE accountlines SET accounttype = 'LR',amountoutstanding='0'
         WHERE (borrowernumber = ?)
-        AND (itemnumber = ?) AND (accountno = ?) ");
-    $usth->execute($data->{'borrowernumber'},$itemnumber,$acctno);      # We might be adjusting an account for some OTHER borrowernumber now.  Not the one we passed in.  
-    #check if any credit is left if so writeoff other accounts
+        AND (itemnumber = ?) AND (accountno = ?) "
+                            );
+    $usth->execute($data->{'borrowernumber'}, $itemnumber, $acctno);    # We might be adjusting an account for some OTHER borrowernumber now.  Not the one we passed in.
+                                                                        #check if any credit is left if so writeoff other accounts
     my $nextaccntno = getnextacctno($data->{'borrowernumber'});
     $amountleft *= -1 if ($amountleft < 0);
     if ($amountleft > 0) {
-        my $msth = $dbh->prepare("SELECT * FROM accountlines WHERE (borrowernumber = ?)
-                            AND (amountoutstanding >0) ORDER BY date");     # might want to order by amountoustanding ASC (pay smallest first)
+        my $msth = $dbh->prepare(
+            "SELECT * FROM accountlines WHERE (borrowernumber = ?)
+                            AND (amountoutstanding >0) ORDER BY date");                                      # might want to order by amountoustanding ASC (pay smallest first)
         $msth->execute($data->{'borrowernumber'});
+
         # offset transactions
         my $newamtos;
         my $accdata;
-        while (($accdata=$msth->fetchrow_hashref) and ($amountleft>0)){
+        while (($accdata = $msth->fetchrow_hashref) and ($amountleft > 0)) {
             if ($accdata->{'amountoutstanding'} < $amountleft) {
                 $newamtos = 0;
                 $amountleft -= $accdata->{'amountoutstanding'};
-            }  else {
-                $newamtos = $accdata->{'amountoutstanding'} - $amountleft;
+            } else {
+                $newamtos   = $accdata->{'amountoutstanding'} - $amountleft;
                 $amountleft = 0;
             }
             my $thisacct = $accdata->{'accountno'};
+
             # FIXME: move prepares outside while loop!
-            my $usth = $dbh->prepare("UPDATE accountlines SET amountoutstanding= ?
+            my $usth = $dbh->prepare(
+                "UPDATE accountlines SET amountoutstanding= ?
                     WHERE (borrowernumber = ?)
-                    AND (accountno=?)");
-            $usth->execute($newamtos,$data->{'borrowernumber'},'$thisacct');    # FIXME: '$thisacct' is a string literal!
-            $usth = $dbh->prepare("INSERT INTO accountoffsets
+                    AND (accountno=?)"
+                                    );
+            $usth->execute($newamtos, $data->{'borrowernumber'}, '$thisacct');    # FIXME: '$thisacct' is a string literal!
+            $usth = $dbh->prepare(
+                "INSERT INTO accountoffsets
                 (borrowernumber, accountno, offsetaccount,  offsetamount)
                 VALUES
-                (?,?,?,?)");
-            $usth->execute($data->{'borrowernumber'},$accdata->{'accountno'},$nextaccntno,$newamtos);
+                (?,?,?,?)"
+                                 );
+            $usth->execute($data->{'borrowernumber'}, $accdata->{'accountno'}, $nextaccntno, $newamtos);
         }
-        $msth->finish;  # $msth might actually have data left
+        $msth->finish;                                                            # $msth might actually have data left
     }
     $amountleft *= -1 if ($amountleft > 0);
     my $desc = "Item Returned " . $item_id;
-    $usth = $dbh->prepare("INSERT INTO accountlines
+    $usth = $dbh->prepare(
+        "INSERT INTO accountlines
         (borrowernumber,accountno,date,amount,description,accounttype,amountoutstanding)
-        VALUES (?,?,now(),?,?,'CR',?)");
-    $usth->execute($data->{'borrowernumber'},$nextaccntno,0-$amount,$desc,$amountleft);
+        VALUES (?,?,now(),?,?,'CR',?)"
+                         );
+    $usth->execute($data->{'borrowernumber'}, $nextaccntno, 0 - $amount, $desc, $amountleft);
     if ($borrowernumber) {
+
         # FIXME: same as query above.  use 1 sth for both
-        $usth = $dbh->prepare("INSERT INTO accountoffsets
+        $usth = $dbh->prepare(
+            "INSERT INTO accountoffsets
             (borrowernumber, accountno, offsetaccount,  offsetamount)
-            VALUES (?,?,?,?)");
+            VALUES (?,?,?,?)"
+                             );
         $usth->execute($borrowernumber, $data->{'accountno'}, $nextaccntno, $offset);
     }
-    ModItem({ paidfor => '' }, undef, $itemnumber);
+    ModItem({paidfor => ''}, undef, $itemnumber);
     return;
 }
 
@@ -1924,12 +1918,13 @@ sub _GetCircControlBranch {
     my $branch;
 
     if ($circcontrol eq 'PickupLibrary') {
-        $branch= C4::Context->userenv->{'branch'} if C4::Context->userenv;
+        $branch = C4::Context->userenv->{'branch'} if C4::Context->userenv;
     } elsif ($circcontrol eq 'PatronLibrary') {
-        $branch=$borrower->{branchcode};
+        $branch = $borrower->{branchcode};
     } else {
         my $branchfield = C4::Context->preference('HomeOrHoldingBranch') || 'homebranch';
         $branch = $item->{$branchfield};
+
         # default to item home branch if holdingbranch is used
         # and is not defined
         if (!defined($branch) && $branchfield eq 'holdingbranch') {
@@ -1939,11 +1934,6 @@ sub _GetCircControlBranch {
     return $branch;
 }
 
-
-
-
-
-
 =head2 GetItemIssue
 
   $issue = &GetItemIssue($itemnumber);
@@ -1963,7 +1953,8 @@ sub GetItemIssue {
         "SELECT *
         FROM issues 
         LEFT JOIN items ON issues.itemnumber=items.itemnumber
-        WHERE issues.itemnumber=?");
+        WHERE issues.itemnumber=?"
+                                       );
     $sth->execute($itemnumber);
     my $data = $sth->fetchrow_hashref;
     return unless $data;
@@ -1984,13 +1975,13 @@ Returns a hashref
 =cut
 
 sub GetOpenIssue {
-  my ( $itemnumber ) = @_;
+    my ($itemnumber) = @_;
 
-  my $dbh = C4::Context->dbh;  
-  my $sth = $dbh->prepare( "SELECT * FROM issues WHERE itemnumber = ? AND returndate IS NULL" );
-  $sth->execute( $itemnumber );
-  my $issue = $sth->fetchrow_hashref();
-  return $issue;
+    my $dbh = C4::Context->dbh;
+    my $sth = $dbh->prepare("SELECT * FROM issues WHERE itemnumber = ? AND returndate IS NULL");
+    $sth->execute($itemnumber);
+    my $issue = $sth->fetchrow_hashref();
+    return $issue;
 }
 
 =head2 GetItemIssues
@@ -2008,10 +1999,10 @@ Returns reference to an array of hashes
 =cut
 
 sub GetItemIssues {
-    my ( $itemnumber, $history ) = @_;
-    
-    my $today = C4::Dates->today('iso');  # get today date
-    my $sql = "SELECT * FROM issues 
+    my ($itemnumber, $history) = @_;
+
+    my $today = C4::Dates->today('iso');    # get today date
+    my $sql   = "SELECT * FROM issues 
               JOIN borrowers USING (borrowernumber)
               JOIN items     USING (itemnumber)
               WHERE issues.itemnumber = ? ";
@@ -2074,7 +2065,7 @@ sub GetBiblioIssues {
     $sth->execute($biblionumber, $biblionumber);
 
     my @issues;
-    while ( my $data = $sth->fetchrow_hashref ) {
+    while (my $data = $sth->fetchrow_hashref) {
         push @issues, $data;
     }
     return \@issues;
@@ -2101,10 +2092,10 @@ WhERE returndate is NULL
 AND ( TO_DAYS( NOW() )-TO_DAYS( date_due ) ) < ?
 END_SQL
 
-    my @bind_parameters = ( $params->{'days_in_advance'} );
-    
-    my $sth = $dbh->prepare( $statement );
-    $sth->execute( @bind_parameters );
+    my @bind_parameters = ($params->{'days_in_advance'});
+
+    my $sth = $dbh->prepare($statement);
+    $sth->execute(@bind_parameters);
     my $upcoming_dues = $sth->fetchall_arrayref({});
     $sth->finish;
 
@@ -2138,25 +2129,24 @@ already renewed the loan. $error will contain the reason the renewal can not pro
 sub CanBookBeRenewed {
 
     # check renewal status
-    my ( $borrowernumber, $itemnumber, $override_limit ) = @_;
+    my ($borrowernumber, $itemnumber, $override_limit) = @_;
     my $dbh       = C4::Context->dbh;
     my $renews    = 1;
     my $renewokay = 0;
-       my $error;
+    my $error;
 
     # Look in the issues table for this item, lent to this borrower,
     # and not yet returned.
 
     # Look in the issues table for this item, lent to this borrower,
     # and not yet returned.
-    my %branch = (
-            'ItemHomeLibrary' => 'items.homebranch',
-            'PickupLibrary'   => 'items.holdingbranch',
-            'PatronLibrary'   => 'borrowers.branchcode'
-            );
+    my %branch = ('ItemHomeLibrary' => 'items.homebranch',
+                  'PickupLibrary'   => 'items.holdingbranch',
+                  'PatronLibrary'   => 'borrowers.branchcode'
+                 );
     my $controlbranch = $branch{C4::Context->preference('CircControl')};
-    my $itype         = C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype';
-    
+    my $itype = C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype';
+
     my $sthcount = $dbh->prepare("
                    SELECT 
                     borrowers.categorycode, biblioitems.itemtype, issues.renewals, renewalsallowed, $controlbranch
@@ -2183,24 +2173,23 @@ sub CanBookBeRenewed {
                    LIMIT 1;
                   ");
 
-    $sthcount->execute( $borrowernumber, $itemnumber );
-    if ( my $data1 = $sthcount->fetchrow_hashref ) {
-        
-        if ( ( $data1->{renewalsallowed} && $data1->{renewalsallowed} > $data1->{renewals} ) || $override_limit ) {
+    $sthcount->execute($borrowernumber, $itemnumber);
+    if (my $data1 = $sthcount->fetchrow_hashref) {
+
+        if (($data1->{renewalsallowed} && $data1->{renewalsallowed} > $data1->{renewals}) || $override_limit) {
             $renewokay = 1;
+        } else {
+            $error = "too_many";
         }
-        else {
-                       $error="too_many";
-               }
-               
-        my ( $resfound, $resrec ) = C4::Reserves::CheckReserves($itemnumber);
+
+        my ($resfound, $resrec) = C4::Reserves::CheckReserves($itemnumber);
         if ($resfound) {
             $renewokay = 0;
-                       $error="on_reserve"
+            $error     = "on_reserve";
         }
 
     }
-    return ($renewokay,$error);
+    return ($renewokay, $error);
 }
 
 =head2 AddRenewal
@@ -2228,89 +2217,93 @@ from the book's item type.
 =cut
 
 sub AddRenewal {
-    my $borrowernumber  = shift or return undef;
-    my $itemnumber      = shift or return undef;
-    my $branch          = shift;
-    my $datedue         = shift;
+    my $borrowernumber = shift or return undef;
+    my $itemnumber     = shift or return undef;
+    my $branch         = shift;
+    my $datedue        = shift;
     my $lastreneweddate = shift || C4::Dates->new()->output('iso');
-    my $item   = GetItem($itemnumber) or return undef;
+    my $item = GetItem($itemnumber) or return undef;
     my $biblio = GetBiblioFromItemNumber($itemnumber) or return undef;
 
     my $dbh = C4::Context->dbh;
+
     # Find the issues record for this book
-    my $sth =
-      $dbh->prepare("SELECT * FROM issues
+    my $sth = $dbh->prepare(
+        "SELECT * FROM issues
                         WHERE borrowernumber=? 
                         AND itemnumber=?"
-      );
-    $sth->execute( $borrowernumber, $itemnumber );
+                           );
+    $sth->execute($borrowernumber, $itemnumber);
     my $issuedata = $sth->fetchrow_hashref;
     $sth->finish;
-    if($datedue && ! $datedue->output('iso')){
+    if ($datedue && !$datedue->output('iso')) {
         warn "Invalid date passed to AddRenewal.";
         return undef;
     }
+
     # If the due date wasn't specified, calculate it by adding the
     # book's loan length to today's date or the current due date
     # based on the value of the RenewalPeriodBase syspref.
     unless ($datedue) {
 
-        my $borrower = C4::Members::GetMemberDetails( $borrowernumber, 0 ) or return undef;
+        my $borrower = C4::Members::GetMemberDetails($borrowernumber, 0) or return undef;
         my $itemtype = (C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'};
 
-        $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ?
-                                        C4::Dates->new($issuedata->{date_due}, 'iso') :
-                                        C4::Dates->new();
-        $datedue =  CalcDateDue($datedue,$itemtype,$issuedata->{'branchcode'},$borrower);
+        $datedue =
+          (C4::Context->preference('RenewalPeriodBase') eq 'date_due')
+          ? C4::Dates->new($issuedata->{date_due}, 'iso')
+          : C4::Dates->new();
+        $datedue = CalcDateDue($datedue, $itemtype, $issuedata->{'branchcode'}, $borrower);
     }
 
     # Update the issues record to have the new due date, and a new count
     # of how many times it has been renewed.
     my $renews = $issuedata->{'renewals'} + 1;
-    $sth = $dbh->prepare("UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = ?
+    $sth = $dbh->prepare(
+        "UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = ?
                             WHERE borrowernumber=? 
                             AND itemnumber=?"
-    );
-    $sth->execute( $datedue->output('iso'), $renews, $lastreneweddate, $borrowernumber, $itemnumber );
+                        );
+    $sth->execute($datedue->output('iso'), $renews, $lastreneweddate, $borrowernumber, $itemnumber);
     $sth->finish;
 
     # Update the renewal count on the item, and tell zebra to reindex
     $renews = $biblio->{'renewals'} + 1;
-    ModItem({ renewals => $renews, onloan => $datedue->output('iso') }, $biblio->{'biblionumber'}, $itemnumber);
+    ModItem({renewals => $renews, onloan => $datedue->output('iso')}, $biblio->{'biblionumber'}, $itemnumber);
 
     # Charge a new rental fee, if applicable?
-    my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber );
-    if ( $charge > 0 ) {
-        my $accountno = getnextacctno( $borrowernumber );
-        my $item = GetBiblioFromItemNumber($itemnumber);
+    my ($charge, $type) = GetIssuingCharges($itemnumber, $borrowernumber);
+    if ($charge > 0) {
+        my $accountno  = getnextacctno($borrowernumber);
+        my $item       = GetBiblioFromItemNumber($itemnumber);
         my $manager_id = 0;
-        $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; 
+        $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;
         $sth = $dbh->prepare(
-                "INSERT INTO accountlines
+            "INSERT INTO accountlines
                     (date, borrowernumber, accountno, amount, manager_id,
                     description,accounttype, amountoutstanding, itemnumber)
                     VALUES (now(),?,?,?,?,?,?,?,?)"
-        );
-        $sth->execute( $borrowernumber, $accountno, $charge, $manager_id,
-            "Renewal of Rental Item $item->{'title'} $item->{'barcode'}",
-            'Rent', $charge, $itemnumber );
+                            );
+        $sth->execute($borrowernumber, $accountno, $charge, $manager_id, "Renewal of Rental Item $item->{'title'} $item->{'barcode'}", 'Rent', $charge, $itemnumber);
         $sth->finish;
     }
+
     # Log the renewal
-    UpdateStats( $branch, 'renew', $charge, '', $itemnumber, $item->{itype}, $borrowernumber);
-       return $datedue;
+    UpdateStats($branch, 'renew', $charge, '', $itemnumber, $item->{itype}, $borrowernumber);
+    return $datedue;
 }
 
 sub GetRenewCount {
+
     # check renewal status
-    my ( $bornum, $itemno ) = @_;
+    my ($bornum, $itemno) = @_;
     my $dbh           = C4::Context->dbh;
     my $renewcount    = 0;
     my $renewsallowed = 0;
     my $renewsleft    = 0;
 
     my $borrower = C4::Members::GetMemberDetails($bornum);
-    my $item     = GetItem($itemno); 
+    my $item     = GetItem($itemno);
 
     # Look in the issues table for this item, lent to this borrower,
     # and not yet returned.
@@ -2320,20 +2313,21 @@ sub GetRenewCount {
         "select * from issues
                                 where (borrowernumber = ?)
                                 and (itemnumber = ?)"
-    );
-    $sth->execute( $bornum, $itemno );
+                           );
+    $sth->execute($bornum, $itemno);
     my $data = $sth->fetchrow_hashref;
     $renewcount = $data->{'renewals'} if $data->{'renewals'};
     $sth->finish;
+
     # $item and $borrower should be calculated
     my $branchcode = _GetCircControlBranch($item, $borrower);
-    
+
     my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branchcode);
-    
+
     $renewsallowed = $issuingrule->{'renewalsallowed'};
     $renewsleft    = $renewsallowed - $renewcount;
-    if($renewsleft < 0){ $renewsleft = 0; }
-    return ( $renewcount, $renewsallowed, $renewsleft );
+    if ($renewsleft < 0) { $renewsleft = 0; }
+    return ($renewcount, $renewsallowed, $renewsleft);
 }
 
 =head2 GetIssuingCharges
@@ -2356,7 +2350,7 @@ if it's a video).
 sub GetIssuingCharges {
 
     # calculate charges due
-    my ( $itemnumber, $borrowernumber ) = @_;
+    my ($itemnumber, $borrowernumber) = @_;
     my $charge = 0;
     my $dbh    = C4::Context->dbh;
     my $item_type;
@@ -2364,18 +2358,19 @@ sub GetIssuingCharges {
     # Get the book's item type and rental charge (via its biblioitem).
     my $charge_query = 'SELECT itemtypes.itemtype,rentalcharge FROM items
         LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber';
-    $charge_query .= (C4::Context->preference('item-level_itypes'))
-        ? ' LEFT JOIN itemtypes ON items.itype = itemtypes.itemtype'
-        : ' LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype';
+    $charge_query .=
+      (C4::Context->preference('item-level_itypes'))
+      ? ' LEFT JOIN itemtypes ON items.itype = itemtypes.itemtype'
+      : ' LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype';
 
     $charge_query .= ' WHERE items.itemnumber =?';
 
     my $sth = $dbh->prepare($charge_query);
     $sth->execute($itemnumber);
-    if ( my $item_data = $sth->fetchrow_hashref ) {
+    if (my $item_data = $sth->fetchrow_hashref) {
         $item_type = $item_data->{itemtype};
         $charge    = $item_data->{rentalcharge};
-        my $branch = C4::Branch::mybranch();
+        my $branch         = C4::Branch::mybranch();
         my $discount_query = q|SELECT rentaldiscount,
             issuingrules.itemtype, issuingrules.branchcode
             FROM borrowers
@@ -2384,17 +2379,19 @@ sub GetIssuingCharges {
             AND (issuingrules.itemtype = ? OR issuingrules.itemtype = '*')
             AND (issuingrules.branchcode = ? OR issuingrules.branchcode = '*')|;
         my $discount_sth = $dbh->prepare($discount_query);
-        $discount_sth->execute( $borrowernumber, $item_type, $branch );
+        $discount_sth->execute($borrowernumber, $item_type, $branch);
         my $discount_rules = $discount_sth->fetchall_arrayref({});
+
         if (@{$discount_rules}) {
+
             # We may have multiple rules so get the most specific
             my $discount = _get_discount_from_rule($discount_rules, $branch, $item_type);
-            $charge = ( $charge * ( 100 - $discount ) ) / 100;
+            $charge = ($charge * (100 - $discount)) / 100;
         }
     }
 
-    $sth->finish; # we havent _explicitly_ fetched all rows
-    return ( $charge, $item_type );
+    $sth->finish;    # we havent _explicitly_ fetched all rows
+    return ($charge, $item_type);
 }
 
 # Select most appropriate discount rule from those returned
@@ -2402,34 +2399,39 @@ sub _get_discount_from_rule {
     my ($rules_ref, $branch, $itemtype) = @_;
     my $discount;
 
-    if (@{$rules_ref} == 1) { # only 1 applicable rule use it
+    if (@{$rules_ref} == 1) {    # only 1 applicable rule use it
         $discount = $rules_ref->[0]->{rentaldiscount};
         return (defined $discount) ? $discount : 0;
     }
+
     # could have up to 4 does one match $branch and $itemtype
     my @d = grep { $_->{branchcode} eq $branch && $_->{itemtype} eq $itemtype } @{$rules_ref};
     if (@d) {
         $discount = $d[0]->{rentaldiscount};
         return (defined $discount) ? $discount : 0;
     }
+
     # do we have item type + all branches
     @d = grep { $_->{branchcode} eq q{*} && $_->{itemtype} eq $itemtype } @{$rules_ref};
     if (@d) {
         $discount = $d[0]->{rentaldiscount};
         return (defined $discount) ? $discount : 0;
     }
+
     # do we all item types + this branch
     @d = grep { $_->{branchcode} eq $branch && $_->{itemtype} eq q{*} } @{$rules_ref};
     if (@d) {
         $discount = $d[0]->{rentaldiscount};
         return (defined $discount) ? $discount : 0;
     }
+
     # so all and all (surely we wont get here)
     @d = grep { $_->{branchcode} eq q{*} && $_->{itemtype} eq q{*} } @{$rules_ref};
     if (@d) {
         $discount = $d[0]->{rentaldiscount};
         return (defined $discount) ? $discount : 0;
     }
+
     # none of the above
     return 0;
 }
@@ -2441,12 +2443,12 @@ sub _get_discount_from_rule {
 =cut
 
 sub AddIssuingCharge {
-    my ( $itemnumber, $borrowernumber, $charge ) = @_;
-    my $dbh = C4::Context->dbh;
-    my $nextaccntno = getnextacctno( $borrowernumber );
-    my $manager_id = 0;
+    my ($itemnumber, $borrowernumber, $charge) = @_;
+    my $dbh         = C4::Context->dbh;
+    my $nextaccntno = getnextacctno($borrowernumber);
+    my $manager_id  = 0;
     $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;
-    my $query ="
+    my $query = "
         INSERT INTO accountlines
             (borrowernumber, itemnumber, accountno,
             date, amount, description, accounttype,
@@ -2454,7 +2456,7 @@ sub AddIssuingCharge {
         VALUES (?, ?, ?,now(), ?, 'Rental', 'Rent',?,?)
     ";
     my $sth = $dbh->prepare($query);
-    $sth->execute( $borrowernumber, $itemnumber, $nextaccntno, $charge, $charge, $manager_id );
+    $sth->execute($borrowernumber, $itemnumber, $nextaccntno, $charge, $charge, $manager_id);
     $sth->finish;
 }
 
@@ -2493,8 +2495,8 @@ Returns the list of pending transfers between $from and $to branch
 =cut
 
 sub GetTransfersFromTo {
-    my ( $frombranch, $tobranch ) = @_;
-    return unless ( $frombranch && $tobranch );
+    my ($frombranch, $tobranch) = @_;
+    return unless ($frombranch && $tobranch);
     my $dbh   = C4::Context->dbh;
     my $query = "
         SELECT itemnumber,datesent,frombranch
@@ -2504,10 +2506,10 @@ sub GetTransfersFromTo {
           AND datearrived IS NULL
     ";
     my $sth = $dbh->prepare($query);
-    $sth->execute( $frombranch, $tobranch );
+    $sth->execute($frombranch, $tobranch);
     my @gettransfers;
 
-    while ( my $data = $sth->fetchrow_hashref ) {
+    while (my $data = $sth->fetchrow_hashref) {
         push @gettransfers, $data;
     }
     $sth->finish;
@@ -2522,12 +2524,12 @@ sub GetTransfersFromTo {
 
 sub DeleteTransfer {
     my ($itemnumber) = @_;
-    my $dbh          = C4::Context->dbh;
-    my $sth          = $dbh->prepare(
+    my $dbh = C4::Context->dbh;
+    my $sth = $dbh->prepare(
         "DELETE FROM branchtransfers
          WHERE itemnumber=?
          AND datearrived IS NULL "
-    );
+                           );
     $sth->execute($itemnumber);
     $sth->finish;
 }
@@ -2562,14 +2564,14 @@ sub AnonymiseIssueHistory {
     my $anonymouspatron = (C4::Context->preference('AnonymousPatron')) ? C4::Context->preference('AnonymousPatron') : 0;
     my @bind_params = ($anonymouspatron, $date);
     if (defined $borrowernumber) {
-       $query .= " AND borrowernumber = ?";
-       push @bind_params, $borrowernumber;
+        $query .= " AND borrowernumber = ?";
+        push @bind_params, $borrowernumber;
     } else {
-       $query .= " AND (SELECT privacy FROM borrowers WHERE borrowers.borrowernumber=old_issues.borrowernumber) <> 0";
+        $query .= " AND (SELECT privacy FROM borrowers WHERE borrowers.borrowernumber=old_issues.borrowernumber) <> 0";
     }
     my $sth = $dbh->prepare($query);
     $sth->execute(@bind_params);
-    my $rows_affected = $sth->rows;  ### doublecheck row count return function
+    my $rows_affected = $sth->rows;    ### doublecheck row count return function
     return $rows_affected;
 }
 
@@ -2612,30 +2614,32 @@ B<Example>:
 
 sub SendCirculationAlert {
     my ($opts) = @_;
-    my ($type, $item, $borrower, $branch) =
-        ($opts->{type}, $opts->{item}, $opts->{borrower}, $opts->{branch});
-    my %message_name = (
-        CHECKIN  => 'Item_Check_in',
-        CHECKOUT => 'Item_Checkout',
-    );
-    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences({
-        borrowernumber => $borrower->{borrowernumber},
-        message_name   => $message_name{$type},
-    });
+    my ($type, $item, $borrower, $branch) = ($opts->{type}, $opts->{item}, $opts->{borrower}, $opts->{branch});
+    my %message_name = (CHECKIN  => 'Item_Check_in',
+                        CHECKOUT => 'Item_Checkout',);
+    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences(
+                                                                               {borrowernumber => $borrower->{borrowernumber},
+                                                                                message_name   => $message_name{$type},
+                                                                               }
+                                                                              );
     my $letter = C4::Letters::getletter('circulation', $type);
     C4::Letters::parseletter($letter, 'biblio',      $item->{biblionumber});
     C4::Letters::parseletter($letter, 'biblioitems', $item->{biblionumber});
     C4::Letters::parseletter($letter, 'borrowers',   $borrower->{borrowernumber});
     C4::Letters::parseletter($letter, 'branches',    $branch);
-    my @transports = @{ $borrower_preferences->{transports} };
+    my @transports = @{$borrower_preferences->{transports}};
+
     # warn "no transports" unless @transports;
     for (@transports) {
+
         # warn "transport: $_";
         my $message = C4::Message->find_last_message($borrower, $type, $_);
         if (!$message) {
+
             #warn "create new message";
             C4::Message->enqueue($letter, $borrower, $_);
         } else {
+
             #warn "append to old message";
             $message->append($letter);
             $message->update;
@@ -2653,21 +2657,19 @@ This function validate the line of brachtransfer but with the wrong destination
 =cut
 
 sub updateWrongTransfer {
-       my ( $itemNumber,$waitingAtLibrary,$FromLibrary ) = @_;
-       my $dbh = C4::Context->dbh;     
-# first step validate the actual line of transfert .
-       my $sth =
-               $dbh->prepare(
-                       "update branchtransfers set datearrived = now(),tobranch=?,comments='wrongtransfer' where itemnumber= ? AND datearrived IS NULL"
-               );
-               $sth->execute($FromLibrary,$itemNumber);
-               $sth->finish;
-
-# second step create a new line of branchtransfer to the right location .
-       ModItemTransfer($itemNumber, $FromLibrary, $waitingAtLibrary);
-
-#third step changing holdingbranch of item
-       UpdateHoldingbranch($FromLibrary,$itemNumber);
+    my ($itemNumber, $waitingAtLibrary, $FromLibrary) = @_;
+    my $dbh = C4::Context->dbh;
+
+    # first step validate the actual line of transfert .
+    my $sth = $dbh->prepare("update branchtransfers set datearrived = now(),tobranch=?,comments='wrongtransfer' where itemnumber= ? AND datearrived IS NULL");
+    $sth->execute($FromLibrary, $itemNumber);
+    $sth->finish;
+
+    # second step create a new line of branchtransfer to the right location .
+    ModItemTransfer($itemNumber, $FromLibrary, $waitingAtLibrary);
+
+    #third step changing holdingbranch of item
+    UpdateHoldingbranch($FromLibrary, $itemNumber);
 }
 
 =head2 UpdateHoldingbranch
@@ -2679,8 +2681,8 @@ Simple methode for updating hodlingbranch in items BDD line
 =cut
 
 sub UpdateHoldingbranch {
-       my ( $branch,$itemnumber ) = @_;
-    ModItem({ holdingbranch => $branch }, undef, $itemnumber);
+    my ($branch, $itemnumber) = @_;
+    ModItem({holdingbranch => $branch}, undef, $itemnumber);
 }
 
 =head2 CalcDateDue
@@ -2696,50 +2698,56 @@ C<$borrower> = Borrower object
 
 =cut
 
-sub CalcDateDue { 
-       my ($startdate,$itemtype,$branch,$borrower) = @_;
-       my $datedue;
-        my $loanlength = GetLoanLength($borrower->{'categorycode'},$itemtype, $branch);
-
-       # if globalDueDate ON the datedue is set to that date
-       if ( C4::Context->preference('globalDueDate')
-             && ( C4::Context->preference('globalDueDate') =~ C4::Dates->regexp('syspref') ) ) {
-            $datedue = C4::Dates->new( C4::Context->preference('globalDueDate') );
-       } else {
-       # otherwise, calculate the datedue as normal
-               if(C4::Context->preference('useDaysMode') eq 'Days') {  # ignoring calendar
-                       my $timedue = time + ($loanlength) * 86400;
-               #FIXME - assumes now even though we take a startdate 
-                       my @datearr  = localtime($timedue);
-                       $datedue = C4::Dates->new( sprintf("%04d-%02d-%02d", 1900 + $datearr[5], $datearr[4] + 1, $datearr[3]), 'iso');
-               } else {
-                       my $calendar = C4::Calendar->new(  branchcode => $branch );
-                       $datedue = $calendar->addDate($startdate, $loanlength);
-               }
-       }
-
-       # if Hard Due Dates are used, retreive them and apply as necessary
-        my ($hardduedate, $hardduedatecompare) = GetHardDueDate($borrower->{'categorycode'},$itemtype, $branch);
-       if ( $hardduedate && $hardduedate->output('iso') && $hardduedate->output('iso') ne '0000-00-00') {
-            # if the calculated due date is after the 'before' Hard Due Date (ceiling), override
-            if ( $datedue->output( 'iso' ) gt $hardduedate->output( 'iso' ) && $hardduedatecompare == -1) {
-                $datedue = $hardduedate;
+sub CalcDateDue {
+    my ($startdate, $itemtype, $branch, $borrower) = @_;
+    my $datedue;
+    my $loanlength = GetLoanLength($borrower->{'categorycode'}, $itemtype, $branch);
+
+    # if globalDueDate ON the datedue is set to that date
+    if (C4::Context->preference('globalDueDate')
+        && (C4::Context->preference('globalDueDate') =~ C4::Dates->regexp('syspref'))) {
+        $datedue = C4::Dates->new(C4::Context->preference('globalDueDate'));
+    } else {
+
+        # otherwise, calculate the datedue as normal
+        if (C4::Context->preference('useDaysMode') eq 'Days') {    # ignoring calendar
+            my $timedue = time + ($loanlength) * 86400;
+
+            #FIXME - assumes now even though we take a startdate
+            my @datearr = localtime($timedue);
+            $datedue = C4::Dates->new(sprintf("%04d-%02d-%02d", 1900 + $datearr[5], $datearr[4] + 1, $datearr[3]), 'iso');
+        } else {
+            my $calendar = C4::Calendar->new(branchcode => $branch);
+            $datedue = $calendar->addDate($startdate, $loanlength);
+        }
+    }
+
+    # if Hard Due Dates are used, retreive them and apply as necessary
+    my ($hardduedate, $hardduedatecompare) = GetHardDueDate($borrower->{'categorycode'}, $itemtype, $branch);
+    if ($hardduedate && $hardduedate->output('iso') && $hardduedate->output('iso') ne '0000-00-00') {
+
+        # if the calculated due date is after the 'before' Hard Due Date (ceiling), override
+        if ($datedue->output('iso') gt $hardduedate->output('iso') && $hardduedatecompare == -1) {
+            $datedue = $hardduedate;
+
             # if the calculated date is before the 'after' Hard Due Date (floor), override
-            } elsif ( $datedue->output( 'iso' ) lt $hardduedate->output( 'iso' ) && $hardduedatecompare == 1) {
-                $datedue = $hardduedate;               
+        } elsif ($datedue->output('iso') lt $hardduedate->output('iso') && $hardduedatecompare == 1) {
+            $datedue = $hardduedate;
+
             # if the hard due date is set to 'exactly', overrride
-            } elsif ( $hardduedatecompare == 0) {
-                $datedue = $hardduedate;
-            }
-            # in all other cases, keep the date due as it is
-       }
+        } elsif ($hardduedatecompare == 0) {
+            $datedue = $hardduedate;
+        }
 
-       # if ReturnBeforeExpiry ON the datedue can't be after borrower expirydate
-       if ( C4::Context->preference('ReturnBeforeExpiry') && $datedue->output('iso') gt $borrower->{dateexpiry} ) {
-           $datedue = C4::Dates->new( $borrower->{dateexpiry}, 'iso' );
-       }
+        # in all other cases, keep the date due as it is
+    }
 
-       return $datedue;
+    # if ReturnBeforeExpiry ON the datedue can't be after borrower expirydate
+    if (C4::Context->preference('ReturnBeforeExpiry') && $datedue->output('iso') gt $borrower->{dateexpiry}) {
+        $datedue = C4::Dates->new($borrower->{dateexpiry}, 'iso');
+    }
+
+    return $datedue;
 }
 
 =head2 CheckValidDatedue
@@ -2758,29 +2766,29 @@ C<$loanlength>  = loan length prior to adjustment
 =cut
 
 sub CheckValidDatedue {
-my ($date_due,$itemnumber,$branchcode)=@_;
-my @datedue=split('-',$date_due->output('iso'));
-my $years=$datedue[0];
-my $month=$datedue[1];
-my $day=$datedue[2];
-# die "Item# $itemnumber ($branchcode) due: " . ${date_due}->output() . "\n(Y,M,D) = ($years,$month,$day)":
-my $dow;
-for (my $i=0;$i<2;$i++){
-    $dow=Day_of_Week($years,$month,$day);
-    ($dow=0) if ($dow>6);
-    my $result=CheckRepeatableHolidays($itemnumber,$dow,$branchcode);
-    my $countspecial=CheckSpecialHolidays($years,$month,$day,$itemnumber,$branchcode);
-    my $countspecialrepeatable=CheckRepeatableSpecialHolidays($month,$day,$itemnumber,$branchcode);
-        if (($result ne '0') or ($countspecial ne '0') or ($countspecialrepeatable ne '0') ){
-        $i=0;
-        (($years,$month,$day) = Add_Delta_Days($years,$month,$day, 1))if ($i ne '1');
+    my ($date_due, $itemnumber, $branchcode) = @_;
+    my @datedue = split('-', $date_due->output('iso'));
+    my $years   = $datedue[0];
+    my $month   = $datedue[1];
+    my $day     = $datedue[2];
+
+    # die "Item# $itemnumber ($branchcode) due: " . ${date_due}->output() . "\n(Y,M,D) = ($years,$month,$day)":
+    my $dow;
+    for (my $i = 0 ; $i < 2 ; $i++) {
+        $dow = Day_of_Week($years, $month, $day);
+        ($dow = 0) if ($dow > 6);
+        my $result = CheckRepeatableHolidays($itemnumber, $dow, $branchcode);
+        my $countspecial = CheckSpecialHolidays($years, $month, $day, $itemnumber, $branchcode);
+        my $countspecialrepeatable = CheckRepeatableSpecialHolidays($month, $day, $itemnumber, $branchcode);
+        if (($result ne '0') or ($countspecial ne '0') or ($countspecialrepeatable ne '0')) {
+            $i = 0;
+            (($years, $month, $day) = Add_Delta_Days($years, $month, $day, 1)) if ($i ne '1');
         }
     }
-    my $newdatedue=C4::Dates->new(sprintf("%04d-%02d-%02d",$years,$month,$day),'iso');
-return $newdatedue;
+    my $newdatedue = C4::Dates->new(sprintf("%04d-%02d-%02d", $years, $month, $day), 'iso');
+    return $newdatedue;
 }
 
-
 =head2 CheckRepeatableHolidays
 
   $countrepeatable = CheckRepeatableHoliday($itemnumber,$week_day,$branchcode);
@@ -2793,21 +2801,20 @@ C<$branchcode>  = localisation of issue
 
 =cut
 
-sub CheckRepeatableHolidays{
-my($itemnumber,$week_day,$branchcode)=@_;
-my $dbh = C4::Context->dbh;
-my $query = qq|SELECT count(*)  
+sub CheckRepeatableHolidays {
+    my ($itemnumber, $week_day, $branchcode) = @_;
+    my $dbh   = C4::Context->dbh;
+    my $query = qq|SELECT count(*)  
        FROM repeatable_holidays 
        WHERE branchcode=?
        AND weekday=?|;
-my $sth = $dbh->prepare($query);
-$sth->execute($branchcode,$week_day);
-my $result=$sth->fetchrow;
-$sth->finish;
-return $result;
+    my $sth = $dbh->prepare($query);
+    $sth->execute($branchcode, $week_day);
+    my $result = $sth->fetchrow;
+    $sth->finish;
+    return $result;
 }
 
-
 =head2 CheckSpecialHolidays
 
   $countspecial = CheckSpecialHolidays($years,$month,$day,$itemnumber,$branchcode);
@@ -2822,21 +2829,21 @@ C<$branchcode>  = localisation of issue
 
 =cut
 
-sub CheckSpecialHolidays{
-my ($years,$month,$day,$itemnumber,$branchcode) = @_;
-my $dbh = C4::Context->dbh;
-my $query=qq|SELECT count(*) 
+sub CheckSpecialHolidays {
+    my ($years, $month, $day, $itemnumber, $branchcode) = @_;
+    my $dbh   = C4::Context->dbh;
+    my $query = qq|SELECT count(*) 
             FROM `special_holidays`
             WHERE year=?
             AND month=?
             AND day=?
              AND branchcode=?
            |;
-my $sth = $dbh->prepare($query);
-$sth->execute($years,$month,$day,$branchcode);
-my $countspecial=$sth->fetchrow ;
-$sth->finish;
-return $countspecial;
+    my $sth = $dbh->prepare($query);
+    $sth->execute($years, $month, $day, $branchcode);
+    my $countspecial = $sth->fetchrow;
+    $sth->finish;
+    return $countspecial;
 }
 
 =head2 CheckRepeatableSpecialHolidays
@@ -2852,36 +2859,34 @@ C<$branchcode>  = localisation of issue
 
 =cut
 
-sub CheckRepeatableSpecialHolidays{
-my ($month,$day,$itemnumber,$branchcode) = @_;
-my $dbh = C4::Context->dbh;
-my $query=qq|SELECT count(*) 
+sub CheckRepeatableSpecialHolidays {
+    my ($month, $day, $itemnumber, $branchcode) = @_;
+    my $dbh   = C4::Context->dbh;
+    my $query = qq|SELECT count(*) 
             FROM `repeatable_holidays`
             WHERE month=?
             AND day=?
              AND branchcode=?
            |;
-my $sth = $dbh->prepare($query);
-$sth->execute($month,$day,$branchcode);
-my $countspecial=$sth->fetchrow ;
-$sth->finish;
-return $countspecial;
+    my $sth = $dbh->prepare($query);
+    $sth->execute($month, $day, $branchcode);
+    my $countspecial = $sth->fetchrow;
+    $sth->finish;
+    return $countspecial;
 }
 
-
-
-sub CheckValidBarcode{
-my ($barcode) = @_;
-my $dbh = C4::Context->dbh;
-my $query=qq|SELECT count(*) 
+sub CheckValidBarcode {
+    my ($barcode) = @_;
+    my $dbh       = C4::Context->dbh;
+    my $query     = qq|SELECT count(*) 
             FROM items 
              WHERE barcode=?
            |;
-my $sth = $dbh->prepare($query);
-$sth->execute($barcode);
-my $exist=$sth->fetchrow ;
-$sth->finish;
-return $exist;
+    my $sth = $dbh->prepare($query);
+    $sth->execute($barcode);
+    my $exist = $sth->fetchrow;
+    $sth->finish;
+    return $exist;
 }
 
 =head2 IsBranchTransferAllowed
@@ -2893,24 +2898,24 @@ Code is either an itemtype or collection doe depending on the pref BranchTransfe
 =cut
 
 sub IsBranchTransferAllowed {
-       my ( $toBranch, $fromBranch, $code ) = @_;
-
-       if ( $toBranch eq $fromBranch ) { return 1; } ## Short circuit for speed.
-        
-       my $limitType = C4::Context->preference("BranchTransferLimitsType");   
-       my $dbh = C4::Context->dbh;
-            
-       my $sth = $dbh->prepare("SELECT * FROM branch_transfer_limits WHERE toBranch = ? AND fromBranch = ? AND $limitType = ?");
-       $sth->execute( $toBranch, $fromBranch, $code );
-       my $limit = $sth->fetchrow_hashref();
-                        
-       ## If a row is found, then that combination is not allowed, if no matching row is found, then the combination *is allowed*
-       if ( $limit->{'limitId'} ) {
-               return 0;
-       } else {
-               return 1;
-       }
-}                                                        
+    my ($toBranch, $fromBranch, $code) = @_;
+
+    if ($toBranch eq $fromBranch) { return 1; }    ## Short circuit for speed.
+
+    my $limitType = C4::Context->preference("BranchTransferLimitsType");
+    my $dbh       = C4::Context->dbh;
+
+    my $sth = $dbh->prepare("SELECT * FROM branch_transfer_limits WHERE toBranch = ? AND fromBranch = ? AND $limitType = ?");
+    $sth->execute($toBranch, $fromBranch, $code);
+    my $limit = $sth->fetchrow_hashref();
+
+    ## If a row is found, then that combination is not allowed, if no matching row is found, then the combination *is allowed*
+    if ($limit->{'limitId'}) {
+        return 0;
+    } else {
+        return 1;
+    }
+}
 
 =head2 CreateBranchTransferLimit
 
@@ -2921,14 +2926,14 @@ $code is either itemtype or collection code depending on what the pref BranchTra
 =cut
 
 sub CreateBranchTransferLimit {
-   my ( $toBranch, $fromBranch, $code ) = @_;
-
-   my $limitType = C4::Context->preference("BranchTransferLimitsType");
-   
-   my $dbh = C4::Context->dbh;
-   
-   my $sth = $dbh->prepare("INSERT INTO branch_transfer_limits ( $limitType, toBranch, fromBranch ) VALUES ( ?, ?, ? )");
-   $sth->execute( $code, $toBranch, $fromBranch );
+    my ($toBranch, $fromBranch, $code) = @_;
+
+    my $limitType = C4::Context->preference("BranchTransferLimitsType");
+
+    my $dbh = C4::Context->dbh;
+
+    my $sth = $dbh->prepare("INSERT INTO branch_transfer_limits ( $limitType, toBranch, fromBranch ) VALUES ( ?, ?, ? )");
+    $sth->execute($code, $toBranch, $fromBranch);
 }
 
 =head2 DeleteBranchTransferLimits
@@ -2938,13 +2943,12 @@ sub CreateBranchTransferLimit {
 =cut
 
 sub DeleteBranchTransferLimits {
-   my $dbh = C4::Context->dbh;
-   my $sth = $dbh->prepare("TRUNCATE TABLE branch_transfer_limits");
-   $sth->execute();
+    my $dbh = C4::Context->dbh;
+    my $sth = $dbh->prepare("TRUNCATE TABLE branch_transfer_limits");
+    $sth->execute();
 }
 
-
-  1;
+1;
 
 __END__
 
index 520c116..d85534c 100644 (file)
@@ -18,8 +18,8 @@ package C4::Circulation;
 # with Koha; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-
 use strict;
+
 #use warnings; FIXME - Bug 2505
 use C4::Context;
 use C4::Stats;
@@ -42,63 +42,63 @@ use Date::Calc qw(
   Add_Delta_DHMS
   Date_to_Days
   Day_of_Week
-  Add_Delta_Days       
+  Add_Delta_Days
 );
 use POSIX qw(strftime);
-use C4::Branch; # GetBranches
-use C4::Log; # logaction
+use C4::Branch;    # GetBranches
+use C4::Log;       # logaction
 
 use Data::Dumper;
 
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
-       require Exporter;
-       $VERSION = 3.02;        # for version checking
-       @ISA    = qw(Exporter);
-
-       # FIXME subs that should probably be elsewhere
-       push @EXPORT, qw(
-               &FixOverduesOnReturn
-               &barcodedecode
-       );
-
-       # subs to deal with issuing a book
-       push @EXPORT, qw(
-               &CanBookBeIssued
-               &CanBookBeRenewed
-               &AddIssue
-               &AddRenewal
-               &GetRenewCount
-               &GetItemIssue
-               &GetItemIssues
-               &GetBorrowerIssues
-               &GetIssuingCharges
-               &GetIssuingRule
-        &GetBranchBorrowerCircRule
-        &GetBranchItemRule
-               &GetBiblioIssues
-               &GetOpenIssue
-               &AnonymiseIssueHistory
-       );
-
-       # subs to deal with returns
-       push @EXPORT, qw(
-               &AddReturn
-        &MarkIssueReturned
-       );
-
-       # subs to deal with transfers
-       push @EXPORT, qw(
-               &transferbook
-               &GetTransfers
-               &GetTransfersFromTo
-               &updateWrongTransfer
-               &DeleteTransfer
-                &IsBranchTransferAllowed
-                &CreateBranchTransferLimit
-                &DeleteBranchTransferLimits
-       );
+    require Exporter;
+    $VERSION = 3.02;           # for version checking
+    @ISA     = qw(Exporter);
+
+    # FIXME subs that should probably be elsewhere
+    push @EXPORT, qw(
+      &FixOverduesOnReturn
+      &barcodedecode
+    );
+
+    # subs to deal with issuing a book
+    push @EXPORT, qw(
+      &CanBookBeIssued
+      &CanBookBeRenewed
+      &AddIssue
+      &AddRenewal
+      &GetRenewCount
+      &GetItemIssue
+      &GetItemIssues
+      &GetBorrowerIssues
+      &GetIssuingCharges
+      &GetIssuingRule
+      &GetBranchBorrowerCircRule
+      &GetBranchItemRule
+      &GetBiblioIssues
+      &GetOpenIssue
+      &AnonymiseIssueHistory
+    );
+
+    # subs to deal with returns
+    push @EXPORT, qw(
+      &AddReturn
+      &MarkIssueReturned
+    );
+
+    # subs to deal with transfers
+    push @EXPORT, qw(
+      &transferbook
+      &GetTransfers
+      &GetTransfersFromTo
+      &updateWrongTransfer
+      &DeleteTransfer
+      &IsBranchTransferAllowed
+      &CreateBranchTransferLimit
+      &DeleteBranchTransferLimits
+    );
 }
 
 =head1 NAME
@@ -138,36 +138,37 @@ System Pref options.
 # FIXME -- these plugins should be moved out of Circulation.pm
 #
 sub barcodedecode {
-    my ($barcode, $filter) = @_;
+    my ( $barcode, $filter ) = @_;
     my $branch = C4::Branch::mybranch();
     $filter = C4::Context->preference('itemBarcodeInputFilter') unless $filter;
-    $filter or return $barcode;     # ensure filter is defined, else return untouched barcode
-       if ($filter eq 'whitespace') {
-               $barcode =~ s/\s//g;
-       } elsif ($filter eq 'cuecat') {
-               chomp($barcode);
-           my @fields = split( /\./, $barcode );
-           my @results = map( decode($_), @fields[ 1 .. $#fields ] );
-           ($#results == 2) and return $results[2];
-       } elsif ($filter eq 'T-prefix') {
-               if ($barcode =~ /^[Tt](\d)/) {
-                       (defined($1) and $1 eq '0') and return $barcode;
-            $barcode = substr($barcode, 2) + 0;     # FIXME: probably should be substr($barcode, 1)
-               }
-        return sprintf("T%07d", $barcode);
+    $filter or return $barcode;    # ensure filter is defined, else return untouched barcode
+    if ( $filter eq 'whitespace' ) {
+        $barcode =~ s/\s//g;
+    } elsif ( $filter eq 'cuecat' ) {
+        chomp($barcode);
+        my @fields = split( /\./, $barcode );
+        my @results = map( decode($_), @fields[ 1 .. $#fields ] );
+        ( $#results == 2 ) and return $results[2];
+    } elsif ( $filter eq 'T-prefix' ) {
+        if ( $barcode =~ /^[Tt](\d)/ ) {
+            ( defined($1) and $1 eq '0' ) and return $barcode;
+            $barcode = substr( $barcode, 2 ) + 0;    # FIXME: probably should be substr($barcode, 1)
+        }
+        return sprintf( "T%07d", $barcode );
+
         # FIXME: $barcode could be "T1", causing warning: substr outside of string
         # Why drop the nonzero digit after the T?
         # Why pass non-digits (or empty string) to "T%07d"?
-       } elsif ($filter eq 'libsuite8') {
-               unless($barcode =~ m/^($branch)-/i){    #if barcode starts with branch code its in Koha style. Skip it.
-                       if($barcode =~ m/^(\d)/i){      #Some barcodes even start with 0's & numbers and are assumed to have b as the item type in the libsuite8 software
-                                $barcode =~ s/^[0]*(\d+)$/$branch-b-$1/i;
-                        }else{
-                               $barcode =~ s/^(\D+)[0]*(\d+)$/$branch-$1-$2/i;
-                       }
-               }
-       }
-    return $barcode;    # return barcode, modified or not
+    } elsif ( $filter eq 'libsuite8' ) {
+        unless ( $barcode =~ m/^($branch)-/i ) {     #if barcode starts with branch code its in Koha style. Skip it.
+            if ( $barcode =~ m/^(\d)/i ) {           #Some barcodes even start with 0's & numbers and are assumed to have b as the item type in the libsuite8 software
+                $barcode =~ s/^[0]*(\d+)$/$branch-b-$1/i;
+            } else {
+                $barcode =~ s/^(\D+)[0]*(\d+)$/$branch-$1-$2/i;
+            }
+        }
+    }
+    return $barcode;                                 # return barcode, modified or not
 }
 
 =head2 decode
@@ -184,12 +185,12 @@ or Javascript based decoding on the client side.
 
 sub decode {
     my ($encoded) = @_;
-    my $seq =
-      'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-';
+    my $seq = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-';
     my @s = map { index( $seq, $_ ); } split( //, $encoded );
     my $l = ( $#s + 1 ) % 4;
     if ($l) {
         if ( $l == 1 ) {
+
             # warn "Error: Cuecat decode parsing failed!";
             return;
         }
@@ -199,10 +200,7 @@ sub decode {
     my $r = '';
     while ( $#s >= 0 ) {
         my $n = ( ( $s[0] << 6 | $s[1] ) << 6 | $s[2] ) << 6 | $s[3];
-        $r .=
-            chr( ( $n >> 16 ) ^ 67 )
-         .chr( ( $n >> 8 & 255 ) ^ 67 )
-         .chr( ( $n & 255 ) ^ 67 );
+        $r .= chr( ( $n >> 16 ) ^ 67 ) . chr( ( $n >> 8 & 255 ) ^ 67 ) . chr( ( $n & 255 ) ^ 67 );
         @s = @s[ 4 .. $#s ];
     }
     $r = substr( $r, 0, length($r) - $l );
@@ -270,11 +268,11 @@ The item was eligible to be transferred. Barring problems communicating with the
 sub transferbook {
     my ( $tbr, $barcode, $ignoreRs ) = @_;
     my $messages;
-    my $dotransfer      = 1;
-    my $branches        = GetBranches();
-    my $itemnumber = GetItemnumberFromBarcode( $barcode );
+    my $dotransfer = 1;
+    my $branches   = GetBranches();
+    my $itemnumber = GetItemnumberFromBarcode($barcode);
     my $issue      = GetItemIssue($itemnumber);
-    my $biblio = GetBiblioFromItemNumber($itemnumber);
+    my $biblio     = GetBiblioFromItemNumber($itemnumber);
 
     # bad barcode..
     if ( not $itemnumber ) {
@@ -289,14 +287,14 @@ sub transferbook {
     # if using Branch Transfer Limits
     if ( C4::Context->preference("UseBranchTransferLimits") == 1 ) {
         if ( C4::Context->preference("item-level_itypes") && C4::Context->preference("BranchTransferLimitsType") eq 'itemtype' ) {
-            if ( ! IsBranchTransferAllowed( $tbr, $fbr, $biblio->{'itype'} ) ) {
+            if ( !IsBranchTransferAllowed( $tbr, $fbr, $biblio->{'itype'} ) ) {
                 $messages->{'NotAllowed'} = $tbr . "::" . $biblio->{'itype'};
                 $dotransfer = 0;
             }
-        } elsif ( ! IsBranchTransferAllowed( $tbr, $fbr, $biblio->{ C4::Context->preference("BranchTransferLimitsType") } ) ) {
+        } elsif ( !IsBranchTransferAllowed( $tbr, $fbr, $biblio->{ C4::Context->preference("BranchTransferLimitsType") } ) ) {
             $messages->{'NotAllowed'} = $tbr . "::" . $biblio->{ C4::Context->preference("BranchTransferLimitsType") };
             $dotransfer = 0;
-       }
+        }
     }
 
     # if is permanent...
@@ -312,15 +310,14 @@ sub transferbook {
     }
 
     # check if it is still issued to someone, return it...
-    if ($issue->{borrowernumber}) {
+    if ( $issue->{borrowernumber} ) {
         AddReturn( $barcode, $fbr );
         $messages->{'WasReturned'} = $issue->{borrowernumber};
     }
 
     # find reserves.....
     # That'll save a database query.
-    my ( $resfound, $resrec ) =
-      CheckReserves( $itemnumber );
+    my ( $resfound, $resrec ) = CheckReserves($itemnumber);
     if ( $resfound and not $ignoreRs ) {
         $resrec->{'ResFound'} = $resfound;
 
@@ -336,49 +333,50 @@ sub transferbook {
         $messages->{'WasTransfered'} = 1;
 
     }
-    ModDateLastSeen( $itemnumber );
+    ModDateLastSeen($itemnumber);
     return ( $dotransfer, $messages, $biblio );
 }
 
-
 sub TooMany {
-    my $borrower        = shift;
+    my $borrower     = shift;
     my $biblionumber = shift;
-       my $item                = shift;
-    my $cat_borrower    = $borrower->{'categorycode'};
-    my $dbh             = C4::Context->dbh;
-       my $branch;
-       # Get which branchcode we need
-       $branch = _GetCircControlBranch($item,$borrower);
-       my $type = (C4::Context->preference('item-level_itypes')) 
-                       ? $item->{'itype'}         # item-level
-                       : $item->{'itemtype'};     # biblio-level
+    my $item         = shift;
+    my $cat_borrower = $borrower->{'categorycode'};
+    my $dbh          = C4::Context->dbh;
+    my $branch;
+
+    # Get which branchcode we need
+    $branch = _GetCircControlBranch( $item, $borrower );
+    my $type = ( C4::Context->preference('item-level_itypes') )
+      ? $item->{'itype'}        # item-level
+      : $item->{'itemtype'};    # biblio-level
+
     # given branch, patron category, and item type, determine
     # applicable issuing rule
-    my $issuing_rule = GetIssuingRule($cat_borrower, $type, $branch);
+    my $issuing_rule = GetIssuingRule( $cat_borrower, $type, $branch );
 
     # if a rule is found and has a loan limit set, count
     # how many loans the patron already has that meet that
     # rule
-    if (defined($issuing_rule) and defined($issuing_rule->{'maxissueqty'})) {
+    if ( defined($issuing_rule) and defined( $issuing_rule->{'maxissueqty'} ) ) {
         my @bind_params;
         my $count_query = "SELECT COUNT(*) FROM issues
                            JOIN items USING (itemnumber) ";
 
         my $rule_itemtype = $issuing_rule->{itemtype};
-        if ($rule_itemtype eq "*") {
+        if ( $rule_itemtype eq "*" ) {
+
             # matching rule has the default item type, so count only
             # those existing loans that don't fall under a more
             # specific rule
-            if (C4::Context->preference('item-level_itypes')) {
+            if ( C4::Context->preference('item-level_itypes') ) {
                 $count_query .= " WHERE items.itype NOT IN (
                                     SELECT itemtype FROM issuingrules
                                     WHERE branchcode = ?
                                     AND   (categorycode = ? OR categorycode = ?)
                                     AND   itemtype <> '*'
                                   ) ";
-            } else { 
+            } else {
                 $count_query .= " JOIN  biblioitems USING (biblionumber) 
                                   WHERE biblioitems.itemtype NOT IN (
                                     SELECT itemtype FROM issuingrules
@@ -391,11 +389,12 @@ sub TooMany {
             push @bind_params, $issuing_rule->{categorycode};
             push @bind_params, $cat_borrower;
         } else {
+
             # rule has specific item type, so count loans of that
             # specific item type
-            if (C4::Context->preference('item-level_itypes')) {
+            if ( C4::Context->preference('item-level_itypes') ) {
                 $count_query .= " WHERE items.itype = ? ";
-            } else { 
+            } else {
                 $count_query .= " JOIN  biblioitems USING (biblionumber) 
                                   WHERE biblioitems.itemtype= ? ";
             }
@@ -405,12 +404,12 @@ sub TooMany {
         $count_query .= " AND borrowernumber = ? ";
         push @bind_params, $borrower->{'borrowernumber'};
         my $rule_branch = $issuing_rule->{branchcode};
-        if ($rule_branch ne "*") {
-            if (C4::Context->preference('CircControl') eq 'PickupLibrary') {
+        if ( $rule_branch ne "*" ) {
+            if ( C4::Context->preference('CircControl') eq 'PickupLibrary' ) {
                 $count_query .= " AND issues.branchcode = ? ";
                 push @bind_params, $branch;
-            } elsif (C4::Context->preference('CircControl') eq 'PatronLibrary') {
-                ; # if branch is the patron's home branch, then count all loans by patron
+            } elsif ( C4::Context->preference('CircControl') eq 'PatronLibrary' ) {
+                ;    # if branch is the patron's home branch, then count all loans by patron
             } else {
                 $count_query .= " AND items.homebranch = ? ";
                 push @bind_params, $branch;
@@ -422,25 +421,25 @@ sub TooMany {
         my ($current_loan_count) = $count_sth->fetchrow_array;
 
         my $max_loans_allowed = $issuing_rule->{'maxissueqty'};
-        if ($current_loan_count >= $max_loans_allowed) {
-            return ($current_loan_count, $max_loans_allowed);
+        if ( $current_loan_count >= $max_loans_allowed ) {
+            return ( $current_loan_count, $max_loans_allowed );
         }
     }
 
     # Now count total loans against the limit for the branch
-    my $branch_borrower_circ_rule = GetBranchBorrowerCircRule($branch, $cat_borrower);
-    if (defined($branch_borrower_circ_rule->{maxissueqty})) {
-        my @bind_params = ();
+    my $branch_borrower_circ_rule = GetBranchBorrowerCircRule( $branch, $cat_borrower );
+    if ( defined( $branch_borrower_circ_rule->{maxissueqty} ) ) {
+        my @bind_params        = ();
         my $branch_count_query = "SELECT COUNT(*) FROM issues 
                                   JOIN items USING (itemnumber)
                                   WHERE borrowernumber = ? ";
         push @bind_params, $borrower->{borrowernumber};
 
-        if (C4::Context->preference('CircControl') eq 'PickupLibrary') {
+        if ( C4::Context->preference('CircControl') eq 'PickupLibrary' ) {
             $branch_count_query .= " AND issues.branchcode = ? ";
             push @bind_params, $branch;
-        } elsif (C4::Context->preference('CircControl') eq 'PatronLibrary') {
-            ; # if branch is the patron's home branch, then count all loans by patron
+        } elsif ( C4::Context->preference('CircControl') eq 'PatronLibrary' ) {
+            ;    # if branch is the patron's home branch, then count all loans by patron
         } else {
             $branch_count_query .= " AND items.homebranch = ? ";
             push @bind_params, $branch;
@@ -450,8 +449,8 @@ sub TooMany {
         my ($current_loan_count) = $branch_count_sth->fetchrow_array;
 
         my $max_loans_allowed = $branch_borrower_circ_rule->{maxissueqty};
-        if ($current_loan_count >= $max_loans_allowed) {
-            return ($current_loan_count, $max_loans_allowed);
+        if ( $current_loan_count >= $max_loans_allowed ) {
+            return ( $current_loan_count, $max_loans_allowed );
         }
     }
 
@@ -507,8 +506,7 @@ The borrower number of the last three patrons who borrowed this item.
 sub itemissues {
     my ( $bibitem, $biblio ) = @_;
     my $dbh = C4::Context->dbh;
-    my $sth =
-      $dbh->prepare("Select * from items where items.biblioitemnumber = ?")
+    my $sth = $dbh->prepare("Select * from items where items.biblioitemnumber = ?")
       || die $dbh->errstr;
     my $i = 0;
     my @results;
@@ -536,12 +534,10 @@ sub itemissues {
             $data->{'date_due'} = $data2->{'date_due'};
             $data->{'card'}     = $data2->{'cardnumber'};
             $data->{'borrower'} = $data2->{'borrowernumber'};
-        }
-        else {
-            $data->{'date_due'} = ($data->{'wthdrawn'} eq '1') ? 'Cancelled' : 'Available';
+        } else {
+            $data->{'date_due'} = ( $data->{'wthdrawn'} eq '1' ) ? 'Cancelled' : 'Available';
         }
 
-
         # Find the last 3 people who borrowed this item.
         $sth2 = $dbh->prepare(
             "SELECT * FROM old_issues
@@ -551,13 +547,12 @@ sub itemissues {
         );
 
         $sth2->execute( $data->{'itemnumber'} );
-        for ( my $i2 = 0 ; $i2 < 2 ; $i2++ )
-        {    # FIXME : error if there is less than 3 pple borrowing this item
+        for ( my $i2 = 0 ; $i2 < 2 ; $i2++ ) {    # FIXME : error if there is less than 3 pple borrowing this item
             if ( my $data2 = $sth2->fetchrow_hashref ) {
                 $data->{"timestamp$i2"} = $data2->{'timestamp'};
                 $data->{"card$i2"}      = $data2->{'cardnumber'};
                 $data->{"borrower$i2"}  = $data2->{'borrowernumber'};
-            }    # if
+            }                                     # if
         }    # for
 
         $results[$i] = $data;
@@ -664,25 +659,25 @@ sub CanBookBeIssued {
     my ( $borrower, $barcode, $duedate, $inprocess ) = @_;
     my %needsconfirmation;    # filled with problems that needs confirmations
     my %issuingimpossible;    # filled with problems that causes the issue to be IMPOSSIBLE
-    my $item = GetItem(GetItemnumberFromBarcode( $barcode ));
-    my $issue = GetItemIssue($item->{itemnumber});
-       my $biblioitem = GetBiblioItemData($item->{biblioitemnumber});
-       $item->{'itemtype'}=$item->{'itype'}; 
-    my $dbh             = C4::Context->dbh;
+    my $item       = GetItem( GetItemnumberFromBarcode($barcode) );
+    my $issue      = GetItemIssue( $item->{itemnumber} );
+    my $biblioitem = GetBiblioItemData( $item->{biblioitemnumber} );
+    $item->{'itemtype'} = $item->{'itype'};
+    my $dbh = C4::Context->dbh;
 
     # MANDATORY CHECKS - unless item exists, nothing else matters
     unless ( $item->{barcode} ) {
         $issuingimpossible{UNKNOWN_BARCODE} = 1;
     }
-       return ( \%issuingimpossible, \%needsconfirmation ) if %issuingimpossible;
+    return ( \%issuingimpossible, \%needsconfirmation ) if %issuingimpossible;
 
     #
     # DUE DATE is OK ? -- should already have checked.
     #
-    unless ( $duedate ) {
+    unless ($duedate) {
         my $issuedate = strftime( "%Y-%m-%d", localtime );
 
-        my $branch = _GetCircControlBranch($item,$borrower);
+        my $branch = _GetCircControlBranch( $item, $borrower );
         my $itype = ( C4::Context->preference('item-level_itypes') ) ? $item->{'itype'} : $biblioitem->{'itemtype'};
         $duedate = CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $itype, $branch, $borrower );
 
@@ -699,11 +694,12 @@ sub CanBookBeIssued {
     #
     # BORROWER STATUS
     #
-    if ( $borrower->{'category_type'} eq 'X' && (  $item->{barcode}  )) { 
-       # stats only borrower -- add entry to statistics table, and return issuingimpossible{STATS} = 1  .
-        &UpdateStats(C4::Context->userenv->{'branch'},'localuse','','',$item->{'itemnumber'},$item->{'itemtype'},$borrower->{'borrowernumber'});
+    if ( $borrower->{'category_type'} eq 'X' && ( $item->{barcode} ) ) {
+
+        # stats only borrower -- add entry to statistics table, and return issuingimpossible{STATS} = 1  .
+        &UpdateStats( C4::Context->userenv->{'branch'}, 'localuse', '', '', $item->{'itemnumber'}, $item->{'itemtype'}, $borrower->{'borrowernumber'} );
         ModDateLastSeen( $item->{'itemnumber'} );
-        return( { STATS => 1 }, {});
+        return ( { STATS => 1 }, {} );
     }
     if ( $borrower->{flags}->{GNA} ) {
         $issuingimpossible{GNA} = 1;
@@ -714,70 +710,72 @@ sub CanBookBeIssued {
     if ( $borrower->{flags}->{'DBARRED'} ) {
         $issuingimpossible{DEBARRED} = 1;
     }
-    if ( $borrower->{'dateexpiry'} eq '0000-00-00') {
+    if ( $borrower->{'dateexpiry'} eq '0000-00-00' ) {
         $issuingimpossible{EXPIRED} = 1;
     } else {
-        my @expirydate=  split /-/,$borrower->{'dateexpiry'};
-        if($expirydate[0]==0 || $expirydate[1]==0|| $expirydate[2]==0 ||
-            Date_to_Days(Today) > Date_to_Days( @expirydate )) {
-            $issuingimpossible{EXPIRED} = 1;                                   
+        my @expirydate = split /-/, $borrower->{'dateexpiry'};
+        if (   $expirydate[0] == 0
+            || $expirydate[1] == 0
+            || $expirydate[2] == 0
+            || Date_to_Days(Today) > Date_to_Days(@expirydate) ) {
+            $issuingimpossible{EXPIRED} = 1;
         }
     }
+
     #
     # BORROWER STATUS
     #
 
     # DEBTS
-    my ($amount) =
-      C4::Members::GetMemberAccountRecords( $borrower->{'borrowernumber'}, '' && $duedate->output('iso') );
-    my $amountlimit = C4::Context->preference("noissuescharge");
-    my $allowfineoverride = C4::Context->preference("AllowFineOverride");
+    my ($amount) = C4::Members::GetMemberAccountRecords( $borrower->{'borrowernumber'}, '' && $duedate->output('iso') );
+    my $amountlimit          = C4::Context->preference("noissuescharge");
+    my $allowfineoverride    = C4::Context->preference("AllowFineOverride");
     my $allfinesneedoverride = C4::Context->preference("AllFinesNeedOverride");
     if ( C4::Context->preference("IssuingInProcess") ) {
-        if ( $amount > $amountlimit && !$inprocess && !$allowfineoverride) {
+        if ( $amount > $amountlimit && !$inprocess && !$allowfineoverride ) {
             $issuingimpossible{DEBT} = sprintf( "%.2f", $amount );
-        } elsif ( $amount > $amountlimit && !$inprocess && $allowfineoverride) {
+        } elsif ( $amount > $amountlimit && !$inprocess && $allowfineoverride ) {
             $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
         } elsif ( $allfinesneedoverride && $amount > 0 && $amount <= $amountlimit && !$inprocess ) {
             $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
         }
-    }
-    else {
+    } else {
         if ( $amount > $amountlimit && $allowfineoverride ) {
             $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
-        } elsif ( $amount > $amountlimit && !$allowfineoverride) {
+        } elsif ( $amount > $amountlimit && !$allowfineoverride ) {
             $issuingimpossible{DEBT} = sprintf( "%.2f", $amount );
         } elsif ( $amount > 0 && $allfinesneedoverride ) {
             $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
         }
     }
 
-    my ($blocktype, $count) = C4::Members::IsMemberBlocked($borrower->{'borrowernumber'});
-    if ($blocktype == -1) {
+    my ( $blocktype, $count ) = C4::Members::IsMemberBlocked( $borrower->{'borrowernumber'} );
+    if ( $blocktype == -1 ) {
         ## patron has outstanding overdue loans
-           if ( C4::Context->preference("OverduesBlockCirc") eq 'block'){
-               $issuingimpossible{USERBLOCKEDOVERDUE} = $count;
-           }
-           elsif ( C4::Context->preference("OverduesBlockCirc") eq 'confirmation'){
-               $needsconfirmation{USERBLOCKEDOVERDUE} = $count;
-           }
-    } elsif($blocktype == 1) {
+        if ( C4::Context->preference("OverduesBlockCirc") eq 'block' ) {
+            $issuingimpossible{USERBLOCKEDOVERDUE} = $count;
+        } elsif ( C4::Context->preference("OverduesBlockCirc") eq 'confirmation' ) {
+            $needsconfirmation{USERBLOCKEDOVERDUE} = $count;
+        }
+    } elsif ( $blocktype == 1 ) {
+
         # patron has accrued fine days
         $issuingimpossible{USERBLOCKEDREMAINING} = $count;
     }
 
-#
+    #
     # JB34 CHECKS IF BORROWERS DONT HAVE ISSUE TOO MANY BOOKS
     #
-       my ($current_loan_count, $max_loans_allowed) = TooMany( $borrower, $item->{biblionumber}, $item );
+    my ( $current_loan_count, $max_loans_allowed ) = TooMany( $borrower, $item->{biblionumber}, $item );
+
     # if TooMany max_loans_allowed returns 0 the user doesn't have permission to check out this book
-    if ($max_loans_allowed eq 0) {
+    if ( $max_loans_allowed eq 0 ) {
         $needsconfirmation{PATRON_CANT} = 1;
     } else {
-        if($max_loans_allowed){
-            $needsconfirmation{TOO_MANY} = 1;
+        if ($max_loans_allowed) {
+            $needsconfirmation{TOO_MANY}           = 1;
             $needsconfirmation{current_loan_count} = $current_loan_count;
-            $needsconfirmation{max_loans_allowed} = $max_loans_allowed;
+            $needsconfirmation{max_loans_allowed}  = $max_loans_allowed;
         }
     }
 
@@ -785,52 +783,49 @@ sub CanBookBeIssued {
     # ITEM CHECKING
     #
     if (   $item->{'notforloan'}
-        && $item->{'notforloan'} > 0 )
-    {
-        if(!C4::Context->preference("AllowNotForLoanOverride")){
+        && $item->{'notforloan'} > 0 ) {
+        if ( !C4::Context->preference("AllowNotForLoanOverride") ) {
             $issuingimpossible{NOT_FOR_LOAN} = 1;
-        }else{
+        } else {
             $needsconfirmation{NOT_FOR_LOAN_FORCING} = 1;
         }
-    }
-    elsif ( !$item->{'notforloan'} ){
+    } elsif ( !$item->{'notforloan'} ) {
+
         # we have to check itemtypes.notforloan also
-        if (C4::Context->preference('item-level_itypes')){
+        if ( C4::Context->preference('item-level_itypes') ) {
+
             # this should probably be a subroutine
             my $sth = $dbh->prepare("SELECT notforloan FROM itemtypes WHERE itemtype = ?");
-            $sth->execute($item->{'itemtype'});
-            my $notforloan=$sth->fetchrow_hashref();
+            $sth->execute( $item->{'itemtype'} );
+            my $notforloan = $sth->fetchrow_hashref();
             $sth->finish();
-            if ($notforloan->{'notforloan'}) {
-                if (!C4::Context->preference("AllowNotForLoanOverride")) {
+            if ( $notforloan->{'notforloan'} ) {
+                if ( !C4::Context->preference("AllowNotForLoanOverride") ) {
                     $issuingimpossible{NOT_FOR_LOAN} = 1;
                 } else {
                     $needsconfirmation{NOT_FOR_LOAN_FORCING} = 1;
                 }
             }
-        }
-        elsif ($biblioitem->{'notforloan'} == 1){
-            if (!C4::Context->preference("AllowNotForLoanOverride")) {
+        } elsif ( $biblioitem->{'notforloan'} == 1 ) {
+            if ( !C4::Context->preference("AllowNotForLoanOverride") ) {
                 $issuingimpossible{NOT_FOR_LOAN} = 1;
             } else {
                 $needsconfirmation{NOT_FOR_LOAN_FORCING} = 1;
             }
         }
     }
-    if ( $item->{'wthdrawn'} && $item->{'wthdrawn'} > 0 )
-    {
+    if ( $item->{'wthdrawn'} && $item->{'wthdrawn'} > 0 ) {
         $issuingimpossible{WTHDRAWN} = 1;
     }
     if (   $item->{'restricted'}
-        && $item->{'restricted'} == 1 )
-    {
+        && $item->{'restricted'} == 1 ) {
         $issuingimpossible{RESTRICTED} = 1;
     }
     if ( C4::Context->preference("IndependantBranches") ) {
         my $userenv = C4::Context->userenv;
         if ( ($userenv) && ( $userenv->{flags} % 2 != 1 ) ) {
             $issuingimpossible{ITEMNOTSAMEBRANCH} = 1
-              if ( $item->{C4::Context->preference("HomeOrHoldingBranch")} ne $userenv->{branch} );
+              if ( $item->{ C4::Context->preference("HomeOrHoldingBranch") } ne $userenv->{branch} );
             $needsconfirmation{BORRNOTSAMEBRANCH} = GetBranchName( $borrower->{'branchcode'} )
               if ( $borrower->{'branchcode'} ne $userenv->{branch} );
         }
@@ -839,66 +834,60 @@ sub CanBookBeIssued {
     #
     # CHECK IF BOOK ALREADY ISSUED TO THIS BORROWER
     #
-    if ( $issue->{borrowernumber} && $issue->{borrowernumber} eq $borrower->{'borrowernumber'} )
-    {
+    if ( $issue->{borrowernumber} && $issue->{borrowernumber} eq $borrower->{'borrowernumber'} ) {
 
         # Already issued to current borrower. Ask whether the loan should
         # be renewed.
-        my ($CanBookBeRenewed,$renewerror) = CanBookBeRenewed(
-            $borrower->{'borrowernumber'},
-            $item->{'itemnumber'}
-        );
+        my ( $CanBookBeRenewed, $renewerror ) = CanBookBeRenewed( $borrower->{'borrowernumber'}, $item->{'itemnumber'} );
         if ( $CanBookBeRenewed == 0 ) {    # no more renewals allowed
             $issuingimpossible{NO_MORE_RENEWALS} = 1;
-        }
-        else {
+        } else {
             $needsconfirmation{RENEW_ISSUE} = 1;
         }
-    }
-    elsif ($issue->{borrowernumber}) {
+    } elsif ( $issue->{borrowernumber} ) {
 
         # issued to someone else
-        my $currborinfo =    C4::Members::GetMemberDetails( $issue->{borrowernumber} );
+        my $currborinfo = C4::Members::GetMemberDetails( $issue->{borrowernumber} );
 
-#        warn "=>.$currborinfo->{'firstname'} $currborinfo->{'surname'} ($currborinfo->{'cardnumber'})";
-        $needsconfirmation{ISSUED_TO_ANOTHER} = 1;
-        $needsconfirmation{issued_firstname} = $currborinfo->{'firstname'};
-        $needsconfirmation{issued_surname} = $currborinfo->{'surname'};
-        $needsconfirmation{issued_cardnumber} = $currborinfo->{'cardnumber'};
+        #        warn "=>.$currborinfo->{'firstname'} $currborinfo->{'surname'} ($currborinfo->{'cardnumber'})";
+        $needsconfirmation{ISSUED_TO_ANOTHER}     = 1;
+        $needsconfirmation{issued_firstname}      = $currborinfo->{'firstname'};
+        $needsconfirmation{issued_surname}        = $currborinfo->{'surname'};
+        $needsconfirmation{issued_cardnumber}     = $currborinfo->{'cardnumber'};
         $needsconfirmation{issued_borrowernumber} = $currborinfo->{'borrowernumber'};
     }
 
     # See if the item is on reserve.
     my ( $restype, $res ) = C4::Reserves::CheckReserves( $item->{'itemnumber'} );
     if ($restype) {
-               my $resbor = $res->{'borrowernumber'};
-               my ( $resborrower ) = C4::Members::GetMemberDetails( $resbor, 0 );
-               my $branches  = GetBranches();
-               my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'};
-        if ( $resbor ne $borrower->{'borrowernumber'} && $restype eq "Waiting" )
-        {
+        my $resbor = $res->{'borrowernumber'};
+        my ($resborrower) = C4::Members::GetMemberDetails( $resbor, 0 );
+        my $branches      = GetBranches();
+        my $branchname    = $branches->{ $res->{'branchcode'} }->{'branchname'};
+        if ( $resbor ne $borrower->{'borrowernumber'} && $restype eq "Waiting" ) {
+
             # The item is on reserve and waiting, but has been
             # reserved by some other patron.
-            $needsconfirmation{RESERVE_WAITING} = 1;
-            $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'};
-            $needsconfirmation{'ressurname'} = $resborrower->{'surname'};
-            $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'};
+            $needsconfirmation{RESERVE_WAITING}     = 1;
+            $needsconfirmation{'resfirstname'}      = $resborrower->{'firstname'};
+            $needsconfirmation{'ressurname'}        = $resborrower->{'surname'};
+            $needsconfirmation{'rescardnumber'}     = $resborrower->{'cardnumber'};
             $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'};
-            $needsconfirmation{'resbranchname'} = $branchname;
-            $needsconfirmation{'reswaitingdate'} = format_date($res->{'waitingdate'});
-        }
-        elsif ( $restype eq "Reserved" ) {
+            $needsconfirmation{'resbranchname'}     = $branchname;
+            $needsconfirmation{'reswaitingdate'}    = format_date( $res->{'waitingdate'} );
+        } elsif ( $restype eq "Reserved" ) {
+
             # The item is on reserve for someone else.
-            $needsconfirmation{RESERVED} = 1;
-            $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'};
-            $needsconfirmation{'ressurname'} = $resborrower->{'surname'};
-            $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'};
+            $needsconfirmation{RESERVED}            = 1;
+            $needsconfirmation{'resfirstname'}      = $resborrower->{'firstname'};
+            $needsconfirmation{'ressurname'}        = $resborrower->{'surname'};
+            $needsconfirmation{'rescardnumber'}     = $resborrower->{'cardnumber'};
             $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'};
-            $needsconfirmation{'resbranchname'} = $branchname;
-            $needsconfirmation{'resreservedate'} = format_date($res->{'reservedate'});
+            $needsconfirmation{'resbranchname'}     = $branchname;
+            $needsconfirmation{'resreservedate'}    = format_date( $res->{'reservedate'} );
         }
     }
-       return ( \%issuingimpossible, \%needsconfirmation );
+    return ( \%issuingimpossible, \%needsconfirmation );
 }
 
 =head2 AddIssue
@@ -940,173 +929,167 @@ AddIssue does the following things :
 =cut
 
 sub AddIssue {
-    my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode) = @_;
-    my $dbh = C4::Context->dbh;
-       my $barcodecheck=CheckValidBarcode($barcode);
+    my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode ) = @_;
+    my $dbh          = C4::Context->dbh;
+    my $barcodecheck = CheckValidBarcode($barcode);
+
     # $issuedate defaults to today.
-    if ( ! defined $issuedate ) {
+    if ( !defined $issuedate ) {
         $issuedate = strftime( "%Y-%m-%d", localtime );
+
         # TODO: for hourly circ, this will need to be a C4::Dates object
         # and all calls to AddIssue including issuedate will need to pass a Dates object.
     }
-       if ($borrower and $barcode and $barcodecheck ne '0'){
-               # find which item we issue
-               my $item = GetItem('', $barcode) or return undef;       # if we don't get an Item, abort.
-               my $branch = _GetCircControlBranch($item,$borrower);
-               
-               # get actual issuing if there is one
-               my $actualissue = GetItemIssue( $item->{itemnumber});
-               
-               # get biblioinformation for this item
-               my $biblio = GetBiblioFromItemNumber($item->{itemnumber});
-               
-               #
-               # check if we just renew the issue.
-               #
-               if ($actualissue->{borrowernumber} eq $borrower->{'borrowernumber'}) {
-                       $datedue = AddRenewal(
-                               $borrower->{'borrowernumber'},
-                               $item->{'itemnumber'},
-                               $branch,
-                               $datedue,
-                $issuedate, # here interpreted as the renewal date
-                       );
-               }
-               else {
-        # it's NOT a renewal
-                       if ( $actualissue->{borrowernumber}) {
-                               # This book is currently on loan, but not to the person
-                               # who wants to borrow it now. mark it returned before issuing to the new borrower
-                               AddReturn(
-                                       $item->{'barcode'},
-                                       C4::Context->userenv->{'branch'}
-                               );
-                       }
-
-                       # See if the item is on reserve.
-                       my ( $restype, $res ) =
-                         C4::Reserves::CheckReserves( $item->{'itemnumber'} );
-                       if ($restype) {
-                               my $resbor = $res->{'borrowernumber'};
-                               if ( $resbor eq $borrower->{'borrowernumber'} ) {
-                                       # The item is reserved by the current patron
-                                       ModReserveFill($res);
-                               }
-                               elsif ( $restype eq "Waiting" ) {
-                                       # warn "Waiting";
-                                       # The item is on reserve and waiting, but has been
-                                       # reserved by some other patron.
-                               }
-                               elsif ( $restype eq "Reserved" ) {
-                                       # warn "Reserved";
-                                       # The item is reserved by someone else.
-                                       if ($cancelreserve) { # cancel reserves on this item
-                                               CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'});
-                                       }
-                               }
-                               if ($cancelreserve) {
-                                       CancelReserve($res->{'biblionumber'}, 0, $res->{'borrowernumber'});
-                               }
-                               else {
-                                       # set waiting reserve to first in reserve queue as book isn't waiting now
-                                       ModReserve(1,
-                                               $res->{'biblionumber'},
-                                               $res->{'borrowernumber'},
-                                               $res->{'branchcode'}
-                                       );
-                               }
-                       }
-
-                       # Starting process for transfer job (checking transfert and validate it if we have one)
-            my ($datesent) = GetTransfers($item->{'itemnumber'});
+    if ( $borrower and $barcode and $barcodecheck ne '0' ) {
+
+        # find which item we issue
+        my $item = GetItem( '', $barcode ) or return undef;    # if we don't get an Item, abort.
+        my $branch = _GetCircControlBranch( $item, $borrower );
+
+        # get actual issuing if there is one
+        my $actualissue = GetItemIssue( $item->{itemnumber} );
+
+        # get biblioinformation for this item
+        my $biblio = GetBiblioFromItemNumber( $item->{itemnumber} );
+
+        #
+        # check if we just renew the issue.
+        #
+        if ( $actualissue->{borrowernumber} eq $borrower->{'borrowernumber'} ) {
+            $datedue = AddRenewal(
+                $borrower->{'borrowernumber'},
+                $item->{'itemnumber'},
+                $branch,
+                $datedue,
+                $issuedate,    # here interpreted as the renewal date
+            );
+        } else {
+
+            # it's NOT a renewal
+            if ( $actualissue->{borrowernumber} ) {
+
+                # This book is currently on loan, but not to the person
+                # who wants to borrow it now. mark it returned before issuing to the new borrower
+                AddReturn( $item->{'barcode'}, C4::Context->userenv->{'branch'} );
+            }
+
+            # See if the item is on reserve.
+            my ( $restype, $res ) = C4::Reserves::CheckReserves( $item->{'itemnumber'} );
+            if ($restype) {
+                my $resbor = $res->{'borrowernumber'};
+                if ( $resbor eq $borrower->{'borrowernumber'} ) {
+
+                    # The item is reserved by the current patron
+                    ModReserveFill($res);
+                } elsif ( $restype eq "Waiting" ) {
+
+                    # warn "Waiting";
+                    # The item is on reserve and waiting, but has been
+                    # reserved by some other patron.
+                } elsif ( $restype eq "Reserved" ) {
+
+                    # warn "Reserved";
+                    # The item is reserved by someone else.
+                    if ($cancelreserve) {    # cancel reserves on this item
+                        CancelReserve( 0, $res->{'itemnumber'}, $res->{'borrowernumber'} );
+                    }
+                }
+                if ($cancelreserve) {
+                    CancelReserve( $res->{'biblionumber'}, 0, $res->{'borrowernumber'} );
+                } else {
+
+                    # set waiting reserve to first in reserve queue as book isn't waiting now
+                    ModReserve( 1, $res->{'biblionumber'}, $res->{'borrowernumber'}, $res->{'branchcode'} );
+                }
+            }
+
+            # Starting process for transfer job (checking transfert and validate it if we have one)
+            my ($datesent) = GetTransfers( $item->{'itemnumber'} );
             if ($datesent) {
-        #      updating line of branchtranfert to finish it, and changing the to branch value, implement a comment for visibility of this case (maybe for stats ....)
-                my $sth =
-                    $dbh->prepare(
+
+                #      updating line of branchtranfert to finish it, and changing the to branch value, implement a comment for visibility of this case (maybe for stats ....)
+                my $sth = $dbh->prepare(
                     "UPDATE branchtransfers 
                         SET datearrived = now(),
                         tobranch = ?,
                         comments = 'Forced branchtransfer'
                     WHERE itemnumber= ? AND datearrived IS NULL"
-                    );
-                $sth->execute(C4::Context->userenv->{'branch'},$item->{'itemnumber'});
+                );
+                $sth->execute( C4::Context->userenv->{'branch'}, $item->{'itemnumber'} );
             }
 
-        # Record in the database the fact that the book was issued.
-        my $sth =
-          $dbh->prepare(
+            # Record in the database the fact that the book was issued.
+            my $sth = $dbh->prepare(
                 "INSERT INTO issues 
                     (borrowernumber, itemnumber,issuedate, date_due, branchcode)
                 VALUES (?,?,?,?,?)"
-          );
-        unless ($datedue) {
-            my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'};
-            $datedue = CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $itype, $branch, $borrower );
-
-        }
-        $sth->execute(
-            $borrower->{'borrowernumber'},      # borrowernumber
-            $item->{'itemnumber'},              # itemnumber
-            $issuedate,                         # issuedate
-            $datedue->output('iso'),            # date_due
-            C4::Context->userenv->{'branch'}    # branchcode
-        );
-        $sth->finish;
-        if ( C4::Context->preference('ReturnToShelvingCart') ) { ## ReturnToShelvingCart is on, anything issued should be taken off the cart.
-          CartToShelf( $item->{'itemnumber'} );
-        }
-        $item->{'issues'}++;
-        ModItem({ issues           => $item->{'issues'},
-                  holdingbranch    => C4::Context->userenv->{'branch'},
-                  itemlost         => 0,
-                  datelastborrowed => C4::Dates->new()->output('iso'),
-                  onloan           => $datedue->output('iso'),
-                }, $item->{'biblionumber'}, $item->{'itemnumber'});
-        ModDateLastSeen( $item->{'itemnumber'} );
+            );
+            unless ($datedue) {
+                my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'};
+                $datedue = CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $itype, $branch, $borrower );
 
-        # If it costs to borrow this book, charge it to the patron's account.
-        my ( $charge, $itemtype ) = GetIssuingCharges(
-            $item->{'itemnumber'},
-            $borrower->{'borrowernumber'}
-        );
-        if ( $charge > 0 ) {
-            AddIssuingCharge(
-                $item->{'itemnumber'},
-                $borrower->{'borrowernumber'}, $charge
+            }
+            $sth->execute(
+                $borrower->{'borrowernumber'},      # borrowernumber
+                $item->{'itemnumber'},              # itemnumber
+                $issuedate,                         # issuedate
+                $datedue->output('iso'),            # date_due
+                C4::Context->userenv->{'branch'}    # branchcode
             );
-            $item->{'charge'} = $charge;
-        }
+            $sth->finish;
+            if ( C4::Context->preference('ReturnToShelvingCart') ) {    ## ReturnToShelvingCart is on, anything issued should be taken off the cart.
+                CartToShelf( $item->{'itemnumber'} );
+            }
+            $item->{'issues'}++;
+            ModItem(
+                {   issues           => $item->{'issues'},
+                    holdingbranch    => C4::Context->userenv->{'branch'},
+                    itemlost         => 0,
+                    datelastborrowed => C4::Dates->new()->output('iso'),
+                    onloan           => $datedue->output('iso'),
+                },
+                $item->{'biblionumber'},
+                $item->{'itemnumber'}
+            );
+            ModDateLastSeen( $item->{'itemnumber'} );
 
-        # Record the fact that this book was issued.
-        &UpdateStats(
-            C4::Context->userenv->{'branch'},
-            'issue', $charge,
-            ($sipmode ? "SIP-$sipmode" : ''), $item->{'itemnumber'},
-            $item->{'itype'}, $borrower->{'borrowernumber'}
-        );
+            # If it costs to borrow this book, charge it to the patron's account.
+            my ( $charge, $itemtype ) = GetIssuingCharges( $item->{'itemnumber'}, $borrower->{'borrowernumber'} );
+            if ( $charge > 0 ) {
+                AddIssuingCharge( $item->{'itemnumber'}, $borrower->{'borrowernumber'}, $charge );
+                $item->{'charge'} = $charge;
+            }
 
-        # Send a checkout slip.
-        my $circulation_alert = 'C4::ItemCirculationAlertPreference';
-        my %conditions = (
-            branchcode   => $branch,
-            categorycode => $borrower->{categorycode},
-            item_type    => $item->{itype},
-            notification => 'CHECKOUT',
-        );
-        if ($circulation_alert->is_enabled_for(\%conditions)) {
-            SendCirculationAlert({
-                type     => 'CHECKOUT',
-                item     => $item,
-                borrower => $borrower,
-                branch   => $branch,
-            });
+            # Record the fact that this book was issued.
+            &UpdateStats(
+                C4::Context->userenv->{'branch'},
+                'issue', $charge, ( $sipmode ? "SIP-$sipmode" : '' ),
+                $item->{'itemnumber'}, $item->{'itype'}, $borrower->{'borrowernumber'}
+            );
+
+            # Send a checkout slip.
+            my $circulation_alert = 'C4::ItemCirculationAlertPreference';
+            my %conditions        = (
+                branchcode   => $branch,
+                categorycode => $borrower->{categorycode},
+                item_type    => $item->{itype},
+                notification => 'CHECKOUT',
+            );
+            if ( $circulation_alert->is_enabled_for( \%conditions ) ) {
+                SendCirculationAlert(
+                    {   type     => 'CHECKOUT',
+                        item     => $item,
+                        borrower => $borrower,
+                        branch   => $branch,
+                    }
+                );
+            }
         }
-    }
 
-    logaction("CIRCULATION", "ISSUE", $borrower->{'borrowernumber'}, $biblio->{'biblionumber'})
-        if C4::Context->preference("IssueLog");
-  }
-  return ($datedue);   # not necessarily the same as when it came in!
+        logaction( "CIRCULATION", "ISSUE", $borrower->{'borrowernumber'}, $biblio->{'biblionumber'} )
+          if C4::Context->preference("IssueLog");
+    }
+    return ($datedue);    # not necessarily the same as when it came in!
 }
 
 =head2 GetLoanLength
@@ -1120,13 +1103,11 @@ Get loan length for an itemtype, a borrower type and a branch
 sub GetLoanLength {
     my ( $borrowertype, $itemtype, $branchcode ) = @_;
     my $dbh = C4::Context->dbh;
-    my $sth =
-      $dbh->prepare(
-"select issuelength from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null"
-      );
-# warn "in get loan lenght $borrowertype $itemtype $branchcode ";
-# try to find issuelength & return the 1st available.
-# check with borrowertype, itemtype and branchcode, then without one of those parameters
+    my $sth = $dbh->prepare( "select issuelength from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null" );
+
+    # warn "in get loan lenght $borrowertype $itemtype $branchcode ";
+    # try to find issuelength & return the 1st available.
+    # check with borrowertype, itemtype and branchcode, then without one of those parameters
     $sth->execute( $borrowertype, $itemtype, $branchcode );
     my $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
@@ -1171,7 +1152,6 @@ sub GetLoanLength {
     return 21;
 }
 
-
 =head2 GetHardDueDate
 
   my ($hardduedate,$hardduedatecompare) = &GetHardDueDate($borrowertype,$itemtype,branchcode)
@@ -1183,52 +1163,49 @@ Get the Hard Due Date and it's comparison for an itemtype, a borrower type and a
 sub GetHardDueDate {
     my ( $borrowertype, $itemtype, $branchcode ) = @_;
     my $dbh = C4::Context->dbh;
-    my $sth =
-      $dbh->prepare(
-"select hardduedate, hardduedatecompare from issuingrules where categorycode=? and itemtype=? and branchcode=?"
-      );
+    my $sth = $dbh->prepare( "select hardduedate, hardduedatecompare from issuingrules where categorycode=? and itemtype=? and branchcode=?" );
     $sth->execute( $borrowertype, $itemtype, $branchcode );
     my $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ), $results->{hardduedatecompare} )
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( $borrowertype, "*", $branchcode );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ), $results->{hardduedatecompare} )
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( "*", $itemtype, $branchcode );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ), $results->{hardduedatecompare} )
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( "*", "*", $branchcode );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ), $results->{hardduedatecompare} )
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( $borrowertype, $itemtype, "*" );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ), $results->{hardduedatecompare} )
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( $borrowertype, "*", "*" );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ), $results->{hardduedatecompare} )
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( "*", $itemtype, "*" );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ), $results->{hardduedatecompare} )
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( "*", "*", "*" );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ), $results->{hardduedatecompare} )
       if defined($results) && $results->{hardduedate} ne 'NULL';
 
     # if no rule is set => return undefined
-    return (undef, undef);
+    return ( undef, undef );
 }
 
 =head2 GetIssuingRule
@@ -1247,40 +1224,40 @@ Returns a hashref from the issuingrules table.
 sub GetIssuingRule {
     my ( $borrowertype, $itemtype, $branchcode ) = @_;
     my $dbh = C4::Context->dbh;
-    my $sth =  $dbh->prepare( "select * from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null"  );
+    my $sth = $dbh->prepare("select * from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null");
     my $irule;
 
-       $sth->execute( $borrowertype, $itemtype, $branchcode );
+    $sth->execute( $borrowertype, $itemtype, $branchcode );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     $sth->execute( $borrowertype, "*", $branchcode );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     $sth->execute( "*", $itemtype, $branchcode );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     $sth->execute( "*", "*", $branchcode );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     $sth->execute( $borrowertype, $itemtype, "*" );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     $sth->execute( $borrowertype, "*", "*" );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     $sth->execute( "*", $itemtype, "*" );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     $sth->execute( "*", "*", "*" );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     # if no rule matches,
     return undef;
@@ -1319,7 +1296,7 @@ wildcards.
 =cut
 
 sub GetBranchBorrowerCircRule {
-    my $branchcode = shift;
+    my $branchcode   = shift;
     my $categorycode = shift;
 
     my $branch_cat_query = "SELECT maxissueqty
@@ -1328,9 +1305,9 @@ sub GetBranchBorrowerCircRule {
                             AND   categorycode = ?";
     my $dbh = C4::Context->dbh();
     my $sth = $dbh->prepare($branch_cat_query);
-    $sth->execute($branchcode, $categorycode);
+    $sth->execute( $branchcode, $categorycode );
     my $result;
-    if ($result = $sth->fetchrow_hashref()) {
+    if ( $result = $sth->fetchrow_hashref() ) {
         return $result;
     }
 
@@ -1340,7 +1317,7 @@ sub GetBranchBorrowerCircRule {
                         WHERE branchcode = ?";
     $sth = $dbh->prepare($branch_query);
     $sth->execute($branchcode);
-    if ($result = $sth->fetchrow_hashref()) {
+    if ( $result = $sth->fetchrow_hashref() ) {
         return $result;
     }
 
@@ -1350,23 +1327,21 @@ sub GetBranchBorrowerCircRule {
                           WHERE categorycode = ?";
     $sth = $dbh->prepare($category_query);
     $sth->execute($categorycode);
-    if ($result = $sth->fetchrow_hashref()) {
+    if ( $result = $sth->fetchrow_hashref() ) {
         return $result;
     }
-  
+
     # try default branch, default borrower category
     my $default_query = "SELECT maxissueqty
                           FROM default_circ_rules";
     $sth = $dbh->prepare($default_query);
     $sth->execute();
-    if ($result = $sth->fetchrow_hashref()) {
+    if ( $result = $sth->fetchrow_hashref() ) {
         return $result;
     }
-    
+
     # built-in default circulation rule
-    return {
-        maxissueqty => undef,
-    };
+    return { maxissueqty => undef, };
 }
 
 =head2 GetBranchItemRule
@@ -1396,37 +1371,39 @@ Neither C<$branchcode> nor C<$categorycode> should be '*'.
 
 sub GetBranchItemRule {
     my ( $branchcode, $itemtype ) = @_;
-    my $dbh = C4::Context->dbh();
+    my $dbh    = C4::Context->dbh();
     my $result = {};
 
     my @attempts = (
-        ['SELECT holdallowed
+        [   'SELECT holdallowed
             FROM branch_item_rules
             WHERE branchcode = ?
-              AND itemtype = ?', $branchcode, $itemtype],
-        ['SELECT holdallowed
+              AND itemtype = ?', $branchcode, $itemtype
+        ],
+        [   'SELECT holdallowed
             FROM default_branch_circ_rules
-            WHERE branchcode = ?', $branchcode],
-        ['SELECT holdallowed
+            WHERE branchcode = ?', $branchcode
+        ],
+        [   'SELECT holdallowed
             FROM default_branch_item_rules
-            WHERE itemtype = ?', $itemtype],
-        ['SELECT holdallowed
-            FROM default_circ_rules'],
+            WHERE itemtype = ?', $itemtype
+        ],
+        [   'SELECT holdallowed
+            FROM default_circ_rules'
+        ],
     );
 
     foreach my $attempt (@attempts) {
-        my ($query, @bind_params) = @{$attempt};
+        my ( $query, @bind_params ) = @{$attempt};
 
         # Since branch/category and branch/itemtype use the same per-branch
         # defaults tables, we have to check that the key we want is set, not
         # just that a row was returned
         return $result if ( defined( $result->{'holdallowed'} = $dbh->selectrow_array( $query, {}, @bind_params ) ) );
     }
-    
+
     # built-in default circulation rule
-    return {
-        holdallowed => 2,
-    };
+    return { holdallowed => 2, };
 }
 
 =head2 AddReturn
@@ -1505,58 +1482,64 @@ patron who last borrowed the book.
 
 sub AddReturn {
     my ( $barcode, $branch, $exemptfine, $dropbox ) = @_;
-    if ($branch and not GetBranchDetail($branch)) {
+    if ( $branch and not GetBranchDetail($branch) ) {
         warn "AddReturn error: branch '$branch' not found.  Reverting to " . C4::Context->userenv->{'branch'};
         undef $branch;
     }
-    $branch = C4::Context->userenv->{'branch'} unless $branch;  # we trust userenv to be a safe fallback/default
+    $branch = C4::Context->userenv->{'branch'} unless $branch;    # we trust userenv to be a safe fallback/default
     my $messages;
     my $borrower;
     my $biblio;
     my $doreturn       = 1;
     my $validTransfert = 0;
-    
+
     # get information on item
-    my $itemnumber = GetItemnumberFromBarcode( $barcode );
+    my $itemnumber = GetItemnumberFromBarcode($barcode);
     unless ($itemnumber) {
-        return (0, { BadBarcode => $barcode }); # no barcode means no item or borrower.  bail out.
-    }
-    my $issue  = GetItemIssue($itemnumber);
-#   warn Dumper($iteminformation);
-    if ($issue and $issue->{borrowernumber}) {
-        $borrower = C4::Members::GetMemberDetails($issue->{borrowernumber})
-            or die "Data inconsistency: barcode $barcode (itemnumber:$itemnumber) claims to be issued to non-existant borrowernumber '$issue->{borrowernumber}'\n"
-                . Dumper($issue) . "\n";
+        return ( 0, { BadBarcode => $barcode } );                 # no barcode means no item or borrower.  bail out.
+    }
+    my $issue = GetItemIssue($itemnumber);
+
+    #   warn Dumper($iteminformation);
+    if ( $issue and $issue->{borrowernumber} ) {
+        $borrower = C4::Members::GetMemberDetails( $issue->{borrowernumber} )
+          or die "Data inconsistency: barcode $barcode (itemnumber:$itemnumber) claims to be issued to non-existant borrowernumber '$issue->{borrowernumber}'\n"
+          . Dumper($issue) . "\n";
     } else {
         $messages->{'NotIssued'} = $barcode;
+
         # even though item is not on loan, it may still be transferred;  therefore, get current branch info
         $doreturn = 0;
+
         # No issue, no borrowernumber.  ONLY if $doreturn, *might* you have a $borrower later.
     }
 
     my $item = GetItem($itemnumber) or die "GetItem($itemnumber) failed";
-        # full item data, but no borrowernumber or checkout info (no issue)
-        # we know GetItem should work because GetItemnumberFromBarcode worked
-    my $hbr      = C4::Context->preference("HomeOrHoldingBranchReturn") || "homebranch";
+
+    # full item data, but no borrowernumber or checkout info (no issue)
+    # we know GetItem should work because GetItemnumberFromBarcode worked
+    my $hbr = C4::Context->preference("HomeOrHoldingBranchReturn") || "homebranch";
     $hbr = $item->{$hbr} || '';
-        # item must be from items table -- issues table has branchcode and issuingbranch, not homebranch nor holdingbranch
+
+    # item must be from items table -- issues table has branchcode and issuingbranch, not homebranch nor holdingbranch
 
     my $borrowernumber = $borrower->{'borrowernumber'} || undef;    # we don't know if we had a borrower or not
 
     # check if the book is in a permanent collection....
     # FIXME -- This 'PE' attribute is largely undocumented.  afaict, there's no user interface that reflects this functionality.
-    if ( $hbr ) {
-        my $branches = GetBranches();    # a potentially expensive call for a non-feature.
+    if ($hbr) {
+        my $branches = GetBranches();                               # a potentially expensive call for a non-feature.
         $branches->{$hbr}->{PE} and $messages->{'IsPermanent'} = $hbr;
     }
 
     # if indy branches and returning to different branch, refuse the return
-    if ($hbr ne $branch && C4::Context->preference("IndependantBranches")){
+    if ( $hbr ne $branch && C4::Context->preference("IndependantBranches") ) {
         $messages->{'Wrongbranch'} = {
             Wrongbranch => $branch,
             Rightbranch => $hbr,
         };
         $doreturn = 0;
+
         # bailing out here - in this case, current desired behavior
         # is to act as if no return ever happened at all.
         # FIXME - even in an indy branches situation, there should
@@ -1565,7 +1548,7 @@ sub AddReturn {
         return ( $doreturn, $messages, $issue, $borrower );
     }
 
-    if ( $item->{'wthdrawn'} ) { # book has been cancelled
+    if ( $item->{'wthdrawn'} ) {    # book has been cancelled
         $messages->{'wthdrawn'} = 1;
         $doreturn = 0;
     }
@@ -1573,42 +1556,42 @@ sub AddReturn {
     # case of a return of document (deal with issues and holdingbranch)
     if ($doreturn) {
         $borrower or warn "AddReturn without current borrower";
-               my $circControlBranch;
+        my $circControlBranch;
         if ($dropbox) {
+
             # define circControlBranch only if dropbox mode is set
             # don't allow dropbox mode to create an invalid entry in issues (issuedate > today)
             # FIXME: check issuedate > returndate, factoring in holidays
-            $circControlBranch = _GetCircControlBranch($item,$borrower) unless ( $item->{'issuedate'} eq C4::Dates->today('iso') );;
+            $circControlBranch = _GetCircControlBranch( $item, $borrower ) unless ( $item->{'issuedate'} eq C4::Dates->today('iso') );
         }
 
         if ($borrowernumber) {
-            MarkIssueReturned($borrowernumber, $item->{'itemnumber'}, $circControlBranch, '', $borrower->{'privacy'});
+            MarkIssueReturned( $borrowernumber, $item->{'itemnumber'}, $circControlBranch, '', $borrower->{'privacy'} );
             $messages->{'WasReturned'} = 1;    # FIXME is the "= 1" right?  This could be the borrower hash.
         }
 
-        ModItem({ onloan => undef }, $issue->{'biblionumber'}, $item->{'itemnumber'});
+        ModItem( { onloan => undef }, $issue->{'biblionumber'}, $item->{'itemnumber'} );
     }
 
     # the holdingbranch is updated if the document is returned to another location.
     # this is always done regardless of whether the item was on loan or not
-    if ($item->{'holdingbranch'} ne $branch) {
-        UpdateHoldingbranch($branch, $item->{'itemnumber'});
-        $item->{'holdingbranch'} = $branch; # update item data holdingbranch too
+    if ( $item->{'holdingbranch'} ne $branch ) {
+        UpdateHoldingbranch( $branch, $item->{'itemnumber'} );
+        $item->{'holdingbranch'} = $branch;    # update item data holdingbranch too
     }
     ModDateLastSeen( $item->{'itemnumber'} );
 
     # check if we have a transfer for this document
-    my ($datesent,$frombranch,$tobranch) = GetTransfers( $item->{'itemnumber'} );
+    my ( $datesent, $frombranch, $tobranch ) = GetTransfers( $item->{'itemnumber'} );
 
     # if we have a transfer to do, we update the line of transfers with the datearrived
     if ($datesent) {
         if ( $tobranch eq $branch ) {
-            my $sth = C4::Context->dbh->prepare(
-                "UPDATE branchtransfers SET datearrived = now() WHERE itemnumber= ? AND datearrived IS NULL"
-            );
+            my $sth = C4::Context->dbh->prepare( "UPDATE branchtransfers SET datearrived = now() WHERE itemnumber= ? AND datearrived IS NULL" );
             $sth->execute( $item->{'itemnumber'} );
+
             # if we have a reservation with valid transfer, we can set it's status to 'W'
-            C4::Reserves::ModReserveStatus($item->{'itemnumber'}, 'W');
+            C4::Reserves::ModReserveStatus( $item->{'itemnumber'}, 'W' );
         } else {
             $messages->{'WrongTransfer'}     = $tobranch;
             $messages->{'WrongTransferItem'} = $item->{'itemnumber'};
@@ -1617,69 +1600,65 @@ sub AddReturn {
     }
 
     # fix up the accounts.....
-    if ($item->{'itemlost'}) {
-        _FixAccountForLostAndReturned($item->{'itemnumber'}, $borrowernumber, $barcode);    # can tolerate undef $borrowernumber
+    if ( $item->{'itemlost'} ) {
+        _FixAccountForLostAndReturned( $item->{'itemnumber'}, $borrowernumber, $barcode );    # can tolerate undef $borrowernumber
         $messages->{'WasLost'} = 1;
     }
 
     # fix up the overdues in accounts...
     if ($borrowernumber) {
-        my $fix = _FixOverduesOnReturn($borrowernumber, $item->{itemnumber}, $exemptfine, $dropbox);
-        defined($fix) or warn "_FixOverduesOnReturn($borrowernumber, $item->{itemnumber}...) failed!";  # zero is OK, check defined
+        my $fix = _FixOverduesOnReturn( $borrowernumber, $item->{itemnumber}, $exemptfine, $dropbox );
+        defined($fix) or warn "_FixOverduesOnReturn($borrowernumber, $item->{itemnumber}...) failed!";    # zero is OK, check defined
     }
 
     # find reserves.....
     # if we don't have a reserve with the status W, we launch the Checkreserves routine
-    my ($resfound, $resrec) = C4::Reserves::CheckReserves( $item->{'itemnumber'} );
+    my ( $resfound, $resrec ) = C4::Reserves::CheckReserves( $item->{'itemnumber'} );
     if ($resfound) {
-          $resrec->{'ResFound'} = $resfound;
+        $resrec->{'ResFound'}   = $resfound;
         $messages->{'ResFound'} = $resrec;
     }
 
     # update stats?
     # Record the fact that this book was returned.
-    UpdateStats(
-        $branch, 'return', '0', '',
-        $item->{'itemnumber'},
-        $biblio->{'itemtype'},
-        $borrowernumber
-    );
+    UpdateStats( $branch, 'return', '0', '', $item->{'itemnumber'}, $biblio->{'itemtype'}, $borrowernumber );
 
     # Send a check-in slip. # NOTE: borrower may be undef.  probably shouldn't try to send messages then.
     my $circulation_alert = 'C4::ItemCirculationAlertPreference';
-    my %conditions = (
+    my %conditions        = (
         branchcode   => $branch,
         categorycode => $borrower->{categorycode},
         item_type    => $item->{itype},
         notification => 'CHECKIN',
     );
-    if ($doreturn && $circulation_alert->is_enabled_for(\%conditions)) {
-        SendCirculationAlert({
-            type     => 'CHECKIN',
-            item     => $item,
-            borrower => $borrower,
-            branch   => $branch,
-        });
-    }
-    
-    logaction("CIRCULATION", "RETURN", $borrowernumber, $item->{'biblionumber'})
-        if C4::Context->preference("ReturnLog");
-    
+    if ( $doreturn && $circulation_alert->is_enabled_for( \%conditions ) ) {
+        SendCirculationAlert(
+            {   type     => 'CHECKIN',
+                item     => $item,
+                borrower => $borrower,
+                branch   => $branch,
+            }
+        );
+    }
+
+    logaction( "CIRCULATION", "RETURN", $borrowernumber, $item->{'biblionumber'} )
+      if C4::Context->preference("ReturnLog");
+
     # FIXME: make this comment intelligible.
     #adding message if holdingbranch is non equal a userenv branch to return the document to homebranch
     #we check, if we don't have reserv or transfert for this document, if not, return it to homebranch .
 
-    if (($doreturn or $messages->{'NotIssued'}) and !$resfound and ($branch ne $hbr) and not $messages->{'WrongTransfer'}){
-        if ( C4::Context->preference("AutomaticItemReturn"    ) or
-            (C4::Context->preference("UseBranchTransferLimits") and
-             ! IsBranchTransferAllowed($branch, $hbr, $item->{C4::Context->preference("BranchTransferLimitsType")} )
-           )) {
-            $debug and warn sprintf "about to call ModItemTransfer(%s, %s, %s)", $item->{'itemnumber'},$branch, $hbr;
+    if ( ( $doreturn or $messages->{'NotIssued'} ) and !$resfound and ( $branch ne $hbr ) and not $messages->{'WrongTransfer'} ) {
+        if (C4::Context->preference("AutomaticItemReturn")
+            or ( C4::Context->preference("UseBranchTransferLimits")
+                and !IsBranchTransferAllowed( $branch, $hbr, $item->{ C4::Context->preference("BranchTransferLimitsType") } ) )
+          ) {
+            $debug and warn sprintf "about to call ModItemTransfer(%s, %s, %s)", $item->{'itemnumber'}, $branch, $hbr;
             $debug and warn "item: " . Dumper($item);
-            ModItemTransfer($item->{'itemnumber'}, $branch, $hbr);
+            ModItemTransfer( $item->{'itemnumber'}, $branch, $hbr );
             $messages->{'WasTransfered'} = 1;
         } else {
-            $messages->{'NeedsTransfer'} = 1;   # TODO: instead of 1, specify branchcode that the transfer SHOULD go to, $item->{homebranch}
+            $messages->{'NeedsTransfer'} = 1;    # TODO: instead of 1, specify branchcode that the transfer SHOULD go to, $item->{homebranch}
         }
     }
     return ( $doreturn, $messages, $issue, $borrower );
@@ -1726,27 +1705,36 @@ sub MarkIssueReturned {
     }
     $query .= " WHERE  borrowernumber = ?  AND itemnumber = ?";
     push @bind, $borrowernumber, $itemnumber;
+
     # FIXME transaction
-    my $sth_upd  = $dbh->prepare($query);
+    my $sth_upd = $dbh->prepare($query);
     $sth_upd->execute(@bind);
-    my $sth_copy = $dbh->prepare("INSERT INTO old_issues SELECT * FROM issues 
+    my $sth_copy = $dbh->prepare(
+        "INSERT INTO old_issues SELECT * FROM issues 
                                   WHERE borrowernumber = ?
-                                  AND itemnumber = ?");
-    $sth_copy->execute($borrowernumber, $itemnumber);
+                                  AND itemnumber = ?"
+    );
+    $sth_copy->execute( $borrowernumber, $itemnumber );
+
     # anonymise patron checkout immediately if $privacy set to 2 and AnonymousPatron is set to a valid borrowernumber
-    if ( $privacy == 2) {
+    if ( $privacy == 2 ) {
+
         # The default of 0 does not work due to foreign key constraints
         # The anonymisation will fail quietly if AnonymousPatron is not a valid entry
-        my $anonymouspatron = (C4::Context->preference('AnonymousPatron')) ? C4::Context->preference('AnonymousPatron') : 0;
-        my $sth_ano = $dbh->prepare("UPDATE old_issues SET borrowernumber=?
+        my $anonymouspatron = ( C4::Context->preference('AnonymousPatron') ) ? C4::Context->preference('AnonymousPatron') : 0;
+        my $sth_ano = $dbh->prepare(
+            "UPDATE old_issues SET borrowernumber=?
                                   WHERE borrowernumber = ?
-                                  AND itemnumber = ?");
-       $sth_ano->execute($anonymouspatron, $borrowernumber, $itemnumber);
+                                  AND itemnumber = ?"
+        );
+        $sth_ano->execute( $anonymouspatron, $borrowernumber, $itemnumber );
     }
-    my $sth_del  = $dbh->prepare("DELETE FROM issues
+    my $sth_del = $dbh->prepare(
+        "DELETE FROM issues
                                   WHERE borrowernumber = ?
-                                  AND itemnumber = ?");
-    $sth_del->execute($borrowernumber, $itemnumber);
+                                  AND itemnumber = ?"
+    );
+    $sth_del->execute( $borrowernumber, $itemnumber );
 }
 
 =head2 _FixOverduesOnReturn
@@ -1765,22 +1753,20 @@ Internal function, called only by AddReturn
 =cut
 
 sub _FixOverduesOnReturn {
-    my ($borrowernumber, $item);
-    unless ($borrowernumber = shift) {
+    my ( $borrowernumber, $item );
+    unless ( $borrowernumber = shift ) {
         warn "_FixOverduesOnReturn() not supplied valid borrowernumber";
         return;
     }
-    unless ($item = shift) {
+    unless ( $item = shift ) {
         warn "_FixOverduesOnReturn() not supplied valid itemnumber";
         return;
     }
-    my ($exemptfine, $dropbox) = @_;
+    my ( $exemptfine, $dropbox ) = @_;
     my $dbh = C4::Context->dbh;
 
     # check for overdue fine
-    my $sth = $dbh->prepare(
-"SELECT * FROM accountlines WHERE (borrowernumber = ?) AND (itemnumber = ?) AND (accounttype='FU' OR accounttype='O')"
-    );
+    my $sth = $dbh->prepare( "SELECT * FROM accountlines WHERE (borrowernumber = ?) AND (itemnumber = ?) AND (accounttype='FU' OR accounttype='O')" );
     $sth->execute( $borrowernumber, $item );
 
     # alter fine to show that the book has been returned
@@ -1788,22 +1774,22 @@ sub _FixOverduesOnReturn {
     return 0 unless $data;    # no warning, there's just nothing to fix
 
     my $uquery;
-    my @bind = ($borrowernumber, $item, $data->{'accountno'});
+    my @bind = ( $borrowernumber, $item, $data->{'accountno'} );
     if ($exemptfine) {
         $uquery = "update accountlines set accounttype='FFOR', amountoutstanding=0";
-        if (C4::Context->preference("FinesLog")) {
-            &logaction("FINES", 'MODIFY',$borrowernumber,"Overdue forgiven: item $item");
+        if ( C4::Context->preference("FinesLog") ) {
+            &logaction( "FINES", 'MODIFY', $borrowernumber, "Overdue forgiven: item $item" );
         }
-    } elsif ($dropbox && $data->{lastincrement}) {
-        my $outstanding = $data->{amountoutstanding} - $data->{lastincrement} ;
-        my $amt = $data->{amount} - $data->{lastincrement} ;
-        if (C4::Context->preference("FinesLog")) {
-            &logaction("FINES", 'MODIFY',$borrowernumber,"Dropbox adjustment $amt, item $item");
+    } elsif ( $dropbox && $data->{lastincrement} ) {
+        my $outstanding = $data->{amountoutstanding} - $data->{lastincrement};
+        my $amt         = $data->{amount} - $data->{lastincrement};
+        if ( C4::Context->preference("FinesLog") ) {
+            &logaction( "FINES", 'MODIFY', $borrowernumber, "Dropbox adjustment $amt, item $item" );
         }
-         $uquery = "update accountlines set accounttype='F' ";
-         if($outstanding  >= 0 && $amt >=0) {
+        $uquery = "update accountlines set accounttype='F' ";
+        if ( $outstanding >= 0 && $amt >= 0 ) {
             $uquery .= ", amount = ? , amountoutstanding=? ";
-            unshift @bind, ($amt, $outstanding) ;
+            unshift @bind, ( $amt, $outstanding );
         }
     } else {
         $uquery = "update accountlines set accounttype='F' ";
@@ -1827,78 +1813,94 @@ FIXME: Give a positive return value on success.  It might be the $borrowernumber
 =cut
 
 sub _FixAccountForLostAndReturned {
-    my $itemnumber     = shift or return;
+    my $itemnumber = shift or return;
     my $borrowernumber = @_ ? shift : undef;
-    my $item_id        = @_ ? shift : $itemnumber;  # Send the barcode if you want that logged in the description
-    my $dbh = C4::Context->dbh;
+    my $item_id        = @_ ? shift : $itemnumber;    # Send the barcode if you want that logged in the description
+    my $dbh            = C4::Context->dbh;
+
     # check for charge made for lost book
     my $sth = $dbh->prepare("SELECT * FROM accountlines WHERE (itemnumber = ?) AND (accounttype='L' OR accounttype='Rep') ORDER BY date DESC");
     $sth->execute($itemnumber);
     my $data = $sth->fetchrow_hashref;
-    $data or return;    # bail if there is nothing to do
+    $data or return;                                  # bail if there is nothing to do
 
     # writeoff this amount
     my $offset;
     my $amount = $data->{'amount'};
     my $acctno = $data->{'accountno'};
-    my $amountleft;                                             # Starts off undef/zero.
-    if ($data->{'amountoutstanding'} == $amount) {
+    my $amountleft;                                   # Starts off undef/zero.
+    if ( $data->{'amountoutstanding'} == $amount ) {
         $offset     = $data->{'amount'};
-        $amountleft = 0;                                        # Hey, it's zero here, too.
+        $amountleft = 0;                              # Hey, it's zero here, too.
     } else {
-        $offset     = $amount - $data->{'amountoutstanding'};   # Um, isn't this the same as ZERO?  We just tested those two things are ==
-        $amountleft = $data->{'amountoutstanding'} - $amount;   # Um, isn't this the same as ZERO?  We just tested those two things are ==
+        $offset     = $amount - $data->{'amountoutstanding'};    # Um, isn't this the same as ZERO?  We just tested those two things are ==
+        $amountleft = $data->{'amountoutstanding'} - $amount;    # Um, isn't this the same as ZERO?  We just tested those two things are ==
     }
-    my $usth = $dbh->prepare("UPDATE accountlines SET accounttype = 'LR',amountoutstanding='0'
+    my $usth = $dbh->prepare(
+        "UPDATE accountlines SET accounttype = 'LR',amountoutstanding='0'
         WHERE (borrowernumber = ?)
-        AND (itemnumber = ?) AND (accountno = ?) ");
-    $usth->execute($data->{'borrowernumber'},$itemnumber,$acctno);      # We might be adjusting an account for some OTHER borrowernumber now.  Not the one we passed in.  
-    #check if any credit is left if so writeoff other accounts
-    my $nextaccntno = getnextacctno($data->{'borrowernumber'});
-    $amountleft *= -1 if ($amountleft < 0);
-    if ($amountleft > 0) {
-        my $msth = $dbh->prepare("SELECT * FROM accountlines WHERE (borrowernumber = ?)
-                            AND (amountoutstanding >0) ORDER BY date");     # might want to order by amountoustanding ASC (pay smallest first)
-        $msth->execute($data->{'borrowernumber'});
+        AND (itemnumber = ?) AND (accountno = ?) "
+    );
+    $usth->execute( $data->{'borrowernumber'}, $itemnumber, $acctno );    # We might be adjusting an account for some OTHER borrowernumber now.  Not the one we passed in.
+                                                                          #check if any credit is left if so writeoff other accounts
+    my $nextaccntno = getnextacctno( $data->{'borrowernumber'} );
+    $amountleft *= -1 if ( $amountleft < 0 );
+    if ( $amountleft > 0 ) {
+        my $msth = $dbh->prepare(
+            "SELECT * FROM accountlines WHERE (borrowernumber = ?)
+                            AND (amountoutstanding >0) ORDER BY date"
+        );                                                                # might want to order by amountoustanding ASC (pay smallest first)
+        $msth->execute( $data->{'borrowernumber'} );
+
         # offset transactions
         my $newamtos;
         my $accdata;
-        while (($accdata=$msth->fetchrow_hashref) and ($amountleft>0)){
-            if ($accdata->{'amountoutstanding'} < $amountleft) {
+        while ( ( $accdata = $msth->fetchrow_hashref ) and ( $amountleft > 0 ) ) {
+            if ( $accdata->{'amountoutstanding'} < $amountleft ) {
                 $newamtos = 0;
                 $amountleft -= $accdata->{'amountoutstanding'};
-            }  else {
-                $newamtos = $accdata->{'amountoutstanding'} - $amountleft;
+            } else {
+                $newamtos   = $accdata->{'amountoutstanding'} - $amountleft;
                 $amountleft = 0;
             }
             my $thisacct = $accdata->{'accountno'};
+
             # FIXME: move prepares outside while loop!
-            my $usth = $dbh->prepare("UPDATE accountlines SET amountoutstanding= ?
+            my $usth = $dbh->prepare(
+                "UPDATE accountlines SET amountoutstanding= ?
                     WHERE (borrowernumber = ?)
-                    AND (accountno=?)");
-            $usth->execute($newamtos,$data->{'borrowernumber'},'$thisacct');    # FIXME: '$thisacct' is a string literal!
-            $usth = $dbh->prepare("INSERT INTO accountoffsets
+                    AND (accountno=?)"
+            );
+            $usth->execute( $newamtos, $data->{'borrowernumber'}, '$thisacct' );    # FIXME: '$thisacct' is a string literal!
+            $usth = $dbh->prepare(
+                "INSERT INTO accountoffsets
                 (borrowernumber, accountno, offsetaccount,  offsetamount)
                 VALUES
-                (?,?,?,?)");
-            $usth->execute($data->{'borrowernumber'},$accdata->{'accountno'},$nextaccntno,$newamtos);
+                (?,?,?,?)"
+            );
+            $usth->execute( $data->{'borrowernumber'}, $accdata->{'accountno'}, $nextaccntno, $newamtos );
         }
-        $msth->finish;  # $msth might actually have data left
+        $msth->finish;                                                              # $msth might actually have data left
     }
-    $amountleft *= -1 if ($amountleft > 0);
+    $amountleft *= -1 if ( $amountleft > 0 );
     my $desc = "Item Returned " . $item_id;
-    $usth = $dbh->prepare("INSERT INTO accountlines
+    $usth = $dbh->prepare(
+        "INSERT INTO accountlines
         (borrowernumber,accountno,date,amount,description,accounttype,amountoutstanding)
-        VALUES (?,?,now(),?,?,'CR',?)");
-    $usth->execute($data->{'borrowernumber'},$nextaccntno,0-$amount,$desc,$amountleft);
+        VALUES (?,?,now(),?,?,'CR',?)"
+    );
+    $usth->execute( $data->{'borrowernumber'}, $nextaccntno, 0 - $amount, $desc, $amountleft );
     if ($borrowernumber) {
+
         # FIXME: same as query above.  use 1 sth for both
-        $usth = $dbh->prepare("INSERT INTO accountoffsets
+        $usth = $dbh->prepare(
+            "INSERT INTO accountoffsets
             (borrowernumber, accountno, offsetaccount,  offsetamount)
-            VALUES (?,?,?,?)");
-        $usth->execute($borrowernumber, $data->{'accountno'}, $nextaccntno, $offset);
+            VALUES (?,?,?,?)"
+        );
+        $usth->execute( $borrowernumber, $data->{'accountno'}, $nextaccntno, $offset );
     }
-    ModItem({ paidfor => '' }, undef, $itemnumber);
+    ModItem( { paidfor => '' }, undef, $itemnumber );
     return;
 }
 
@@ -1919,31 +1921,27 @@ C<$borrower> is a hashref to borrower. Only {branchcode} is used.
 =cut
 
 sub _GetCircControlBranch {
-    my ($item, $borrower) = @_;
+    my ( $item, $borrower ) = @_;
     my $circcontrol = C4::Context->preference('CircControl');
     my $branch;
 
-    if ($circcontrol eq 'PickupLibrary') {
-        $branch= C4::Context->userenv->{'branch'} if C4::Context->userenv;
-    } elsif ($circcontrol eq 'PatronLibrary') {
-        $branch=$borrower->{branchcode};
+    if ( $circcontrol eq 'PickupLibrary' ) {
+        $branch = C4::Context->userenv->{'branch'} if C4::Context->userenv;
+    } elsif ( $circcontrol eq 'PatronLibrary' ) {
+        $branch = $borrower->{branchcode};
     } else {
         my $branchfield = C4::Context->preference('HomeOrHoldingBranch') || 'homebranch';
         $branch = $item->{$branchfield};
+
         # default to item home branch if holdingbranch is used
         # and is not defined
-        if (!defined($branch) && $branchfield eq 'holdingbranch') {
+        if ( !defined($branch) && $branchfield eq 'holdingbranch' ) {
             $branch = $item->{homebranch};
         }
     }
     return $branch;
 }
 
-
-
-
-
-
 =head2 GetItemIssue
 
   $issue = &GetItemIssue($itemnumber);
@@ -1963,11 +1961,12 @@ sub GetItemIssue {
         "SELECT *
         FROM issues 
         LEFT JOIN items ON issues.itemnumber=items.itemnumber
-        WHERE issues.itemnumber=?");
+        WHERE issues.itemnumber=?"
+    );
     $sth->execute($itemnumber);
     my $data = $sth->fetchrow_hashref;
     return unless $data;
-    $data->{'overdue'} = ($data->{'date_due'} lt C4::Dates->today('iso')) ? 1 : 0;
+    $data->{'overdue'} = ( $data->{'date_due'} lt C4::Dates->today('iso') ) ? 1 : 0;
     return ($data);
 }
 
@@ -1984,13 +1983,13 @@ Returns a hashref
 =cut
 
 sub GetOpenIssue {
-  my ( $itemnumber ) = @_;
+    my ($itemnumber) = @_;
 
-  my $dbh = C4::Context->dbh;  
-  my $sth = $dbh->prepare( "SELECT * FROM issues WHERE itemnumber = ? AND returndate IS NULL" );
-  $sth->execute( $itemnumber );
-  my $issue = $sth->fetchrow_hashref();
-  return $issue;
+    my $dbh = C4::Context->dbh;
+    my $sth = $dbh->prepare("SELECT * FROM issues WHERE itemnumber = ? AND returndate IS NULL");
+    $sth->execute($itemnumber);
+    my $issue = $sth->fetchrow_hashref();
+    return $issue;
 }
 
 =head2 GetItemIssues
@@ -2009,9 +2008,9 @@ Returns reference to an array of hashes
 
 sub GetItemIssues {
     my ( $itemnumber, $history ) = @_;
-    
-    my $today = C4::Dates->today('iso');  # get today date
-    my $sql = "SELECT * FROM issues 
+
+    my $today = C4::Dates->today('iso');    # get today date
+    my $sql   = "SELECT * FROM issues 
               JOIN borrowers USING (borrowernumber)
               JOIN items     USING (itemnumber)
               WHERE issues.itemnumber = ? ";
@@ -2025,13 +2024,13 @@ sub GetItemIssues {
     $sql .= "ORDER BY date_due DESC";
     my $sth = C4::Context->dbh->prepare($sql);
     if ($history) {
-        $sth->execute($itemnumber, $itemnumber);
+        $sth->execute( $itemnumber, $itemnumber );
     } else {
         $sth->execute($itemnumber);
     }
-    my $results = $sth->fetchall_arrayref({});
+    my $results = $sth->fetchall_arrayref( {} );
     foreach (@$results) {
-        $_->{'overdue'} = ($_->{'date_due'} lt $today) ? 1 : 0;
+        $_->{'overdue'} = ( $_->{'date_due'} lt $today ) ? 1 : 0;
     }
     return $results;
 }
@@ -2071,7 +2070,7 @@ sub GetBiblioIssues {
         ORDER BY timestamp
     ";
     my $sth = $dbh->prepare($query);
-    $sth->execute($biblionumber, $biblionumber);
+    $sth->execute( $biblionumber, $biblionumber );
 
     my @issues;
     while ( my $data = $sth->fetchrow_hashref ) {
@@ -2102,10 +2101,10 @@ AND ( TO_DAYS( NOW() )-TO_DAYS( date_due ) ) < ?
 END_SQL
 
     my @bind_parameters = ( $params->{'days_in_advance'} );
-    
-    my $sth = $dbh->prepare( $statement );
-    $sth->execute( @bind_parameters );
-    my $upcoming_dues = $sth->fetchall_arrayref({});
+
+    my $sth = $dbh->prepare($statement);
+    $sth->execute(@bind_parameters);
+    my $upcoming_dues = $sth->fetchall_arrayref( {} );
     $sth->finish;
 
     return $upcoming_dues;
@@ -2142,7 +2141,7 @@ sub CanBookBeRenewed {
     my $dbh       = C4::Context->dbh;
     my $renews    = 1;
     my $renewokay = 0;
-       my $error;
+    my $error;
 
     # Look in the issues table for this item, lent to this borrower,
     # and not yet returned.
@@ -2150,14 +2149,14 @@ sub CanBookBeRenewed {
     # Look in the issues table for this item, lent to this borrower,
     # and not yet returned.
     my %branch = (
-            'ItemHomeLibrary' => 'items.homebranch',
-            'PickupLibrary'   => 'items.holdingbranch',
-            'PatronLibrary'   => 'borrowers.branchcode'
-            );
-    my $controlbranch = $branch{C4::Context->preference('CircControl')};
-    my $itype         = C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype';
-    
-    my $sthcount = $dbh->prepare("
+        'ItemHomeLibrary' => 'items.homebranch',
+        'PickupLibrary'   => 'items.holdingbranch',
+        'PatronLibrary'   => 'borrowers.branchcode'
+    );
+    my $controlbranch = $branch{ C4::Context->preference('CircControl') };
+    my $itype = C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype';
+
+    my $sthcount = $dbh->prepare( "
                    SELECT 
                     borrowers.categorycode, biblioitems.itemtype, issues.renewals, renewalsallowed, $controlbranch
                    FROM  issuingrules, 
@@ -2181,26 +2180,25 @@ sub CanBookBeRenewed {
                     issuingrules.itemtype desc,
                     issuingrules.branchcode desc
                    LIMIT 1;
-                  ");
+                  " );
 
     $sthcount->execute( $borrowernumber, $itemnumber );
     if ( my $data1 = $sthcount->fetchrow_hashref ) {
-        
+
         if ( ( $data1->{renewalsallowed} && $data1->{renewalsallowed} > $data1->{renewals} ) || $override_limit ) {
             $renewokay = 1;
+        } else {
+            $error = "too_many";
         }
-        else {
-                       $error="too_many";
-               }
-               
+
         my ( $resfound, $resrec ) = C4::Reserves::CheckReserves($itemnumber);
         if ($resfound) {
             $renewokay = 0;
-                       $error="on_reserve"
+            $error     = "on_reserve";
         }
 
     }
-    return ($renewokay,$error);
+    return ( $renewokay, $error );
 }
 
 =head2 AddRenewal
@@ -2228,46 +2226,50 @@ from the book's item type.
 =cut
 
 sub AddRenewal {
-    my $borrowernumber  = shift or return undef;
-    my $itemnumber      = shift or return undef;
-    my $branch          = shift;
-    my $datedue         = shift;
+    my $borrowernumber = shift or return undef;
+    my $itemnumber     = shift or return undef;
+    my $branch         = shift;
+    my $datedue        = shift;
     my $lastreneweddate = shift || C4::Dates->new()->output('iso');
-    my $item   = GetItem($itemnumber) or return undef;
+    my $item = GetItem($itemnumber) or return undef;
     my $biblio = GetBiblioFromItemNumber($itemnumber) or return undef;
 
     my $dbh = C4::Context->dbh;
+
     # Find the issues record for this book
-    my $sth =
-      $dbh->prepare("SELECT * FROM issues
+    my $sth = $dbh->prepare(
+        "SELECT * FROM issues
                         WHERE borrowernumber=? 
                         AND itemnumber=?"
-      );
+    );
     $sth->execute( $borrowernumber, $itemnumber );
     my $issuedata = $sth->fetchrow_hashref;
     $sth->finish;
-    if($datedue && ! $datedue->output('iso')){
+    if ( $datedue && !$datedue->output('iso') ) {
         warn "Invalid date passed to AddRenewal.";
         return undef;
     }
+
     # If the due date wasn't specified, calculate it by adding the
     # book's loan length to today's date or the current due date
     # based on the value of the RenewalPeriodBase syspref.
     unless ($datedue) {
 
         my $borrower = C4::Members::GetMemberDetails( $borrowernumber, 0 ) or return undef;
-        my $itemtype = (C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'};
+        my $itemtype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'};
 
-        $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ?
-                                        C4::Dates->new($issuedata->{date_due}, 'iso') :
-                                        C4::Dates->new();
-        $datedue =  CalcDateDue($datedue,$itemtype,$issuedata->{'branchcode'},$borrower);
+        $datedue =
+          ( C4::Context->preference('RenewalPeriodBase') eq 'date_due' )
+          ? C4::Dates->new( $issuedata->{date_due}, 'iso' )
+          : C4::Dates->new();
+        $datedue = CalcDateDue( $datedue, $itemtype, $issuedata->{'branchcode'}, $borrower );
     }
 
     # Update the issues record to have the new due date, and a new count
     # of how many times it has been renewed.
     my $renews = $issuedata->{'renewals'} + 1;
-    $sth = $dbh->prepare("UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = ?
+    $sth = $dbh->prepare(
+        "UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = ?
                             WHERE borrowernumber=? 
                             AND itemnumber=?"
     );
@@ -2276,32 +2278,32 @@ sub AddRenewal {
 
     # Update the renewal count on the item, and tell zebra to reindex
     $renews = $biblio->{'renewals'} + 1;
-    ModItem({ renewals => $renews, onloan => $datedue->output('iso') }, $biblio->{'biblionumber'}, $itemnumber);
+    ModItem( { renewals => $renews, onloan => $datedue->output('iso') }, $biblio->{'biblionumber'}, $itemnumber );
 
     # Charge a new rental fee, if applicable?
     my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber );
     if ( $charge > 0 ) {
-        my $accountno = getnextacctno( $borrowernumber );
-        my $item = GetBiblioFromItemNumber($itemnumber);
+        my $accountno  = getnextacctno($borrowernumber);
+        my $item       = GetBiblioFromItemNumber($itemnumber);
         my $manager_id = 0;
-        $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; 
+        $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;
         $sth = $dbh->prepare(
-                "INSERT INTO accountlines
+            "INSERT INTO accountlines
                     (date, borrowernumber, accountno, amount, manager_id,
                     description,accounttype, amountoutstanding, itemnumber)
                     VALUES (now(),?,?,?,?,?,?,?,?)"
         );
-        $sth->execute( $borrowernumber, $accountno, $charge, $manager_id,
-            "Renewal of Rental Item $item->{'title'} $item->{'barcode'}",
-            'Rent', $charge, $itemnumber );
+        $sth->execute( $borrowernumber, $accountno, $charge, $manager_id, "Renewal of Rental Item $item->{'title'} $item->{'barcode'}", 'Rent', $charge, $itemnumber );
         $sth->finish;
     }
+
     # Log the renewal
-    UpdateStats( $branch, 'renew', $charge, '', $itemnumber, $item->{itype}, $borrowernumber);
-       return $datedue;
+    UpdateStats( $branch, 'renew', $charge, '', $itemnumber, $item->{itype}, $borrowernumber );
+    return $datedue;
 }
 
 sub GetRenewCount {
+
     # check renewal status
     my ( $bornum, $itemno ) = @_;
     my $dbh           = C4::Context->dbh;
@@ -2310,7 +2312,7 @@ sub GetRenewCount {
     my $renewsleft    = 0;
 
     my $borrower = C4::Members::GetMemberDetails($bornum);
-    my $item     = GetItem($itemno); 
+    my $item     = GetItem($itemno);
 
     # Look in the issues table for this item, lent to this borrower,
     # and not yet returned.
@@ -2325,14 +2327,15 @@ sub GetRenewCount {
     my $data = $sth->fetchrow_hashref;
     $renewcount = $data->{'renewals'} if $data->{'renewals'};
     $sth->finish;
+
     # $item and $borrower should be calculated
-    my $branchcode = _GetCircControlBranch($item, $borrower);
-    
-    my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branchcode);
-    
+    my $branchcode = _GetCircControlBranch( $item, $borrower );
+
+    my $issuingrule = GetIssuingRule( $borrower->{categorycode}, $item->{itype}, $branchcode );
+
     $renewsallowed = $issuingrule->{'renewalsallowed'};
     $renewsleft    = $renewsallowed - $renewcount;
-    if($renewsleft < 0){ $renewsleft = 0; }
+    if ( $renewsleft < 0 ) { $renewsleft = 0; }
     return ( $renewcount, $renewsallowed, $renewsleft );
 }
 
@@ -2364,9 +2367,10 @@ sub GetIssuingCharges {
     # Get the book's item type and rental charge (via its biblioitem).
     my $charge_query = 'SELECT itemtypes.itemtype,rentalcharge FROM items
         LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber';
-    $charge_query .= (C4::Context->preference('item-level_itypes'))
-        ? ' LEFT JOIN itemtypes ON items.itype = itemtypes.itemtype'
-        : ' LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype';
+    $charge_query .=
+      ( C4::Context->preference('item-level_itypes') )
+      ? ' LEFT JOIN itemtypes ON items.itype = itemtypes.itemtype'
+      : ' LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype';
 
     $charge_query .= ' WHERE items.itemnumber =?';
 
@@ -2375,7 +2379,7 @@ sub GetIssuingCharges {
     if ( my $item_data = $sth->fetchrow_hashref ) {
         $item_type = $item_data->{itemtype};
         $charge    = $item_data->{rentalcharge};
-        my $branch = C4::Branch::mybranch();
+        my $branch         = C4::Branch::mybranch();
         my $discount_query = q|SELECT rentaldiscount,
             issuingrules.itemtype, issuingrules.branchcode
             FROM borrowers
@@ -2385,51 +2389,58 @@ sub GetIssuingCharges {
             AND (issuingrules.branchcode = ? OR issuingrules.branchcode = '*')|;
         my $discount_sth = $dbh->prepare($discount_query);
         $discount_sth->execute( $borrowernumber, $item_type, $branch );
-        my $discount_rules = $discount_sth->fetchall_arrayref({});
-        if (@{$discount_rules}) {
+        my $discount_rules = $discount_sth->fetchall_arrayref( {} );
+
+        if ( @{$discount_rules} ) {
+
             # We may have multiple rules so get the most specific
-            my $discount = _get_discount_from_rule($discount_rules, $branch, $item_type);
+            my $discount = _get_discount_from_rule( $discount_rules, $branch, $item_type );
             $charge = ( $charge * ( 100 - $discount ) ) / 100;
         }
     }
 
-    $sth->finish; # we havent _explicitly_ fetched all rows
+    $sth->finish;    # we havent _explicitly_ fetched all rows
     return ( $charge, $item_type );
 }
 
 # Select most appropriate discount rule from those returned
 sub _get_discount_from_rule {
-    my ($rules_ref, $branch, $itemtype) = @_;
+    my ( $rules_ref, $branch, $itemtype ) = @_;
     my $discount;
 
-    if (@{$rules_ref} == 1) { # only 1 applicable rule use it
+    if ( @{$rules_ref} == 1 ) {    # only 1 applicable rule use it
         $discount = $rules_ref->[0]->{rentaldiscount};
-        return (defined $discount) ? $discount : 0;
+        return ( defined $discount ) ? $discount : 0;
     }
+
     # could have up to 4 does one match $branch and $itemtype
     my @d = grep { $_->{branchcode} eq $branch && $_->{itemtype} eq $itemtype } @{$rules_ref};
     if (@d) {
         $discount = $d[0]->{rentaldiscount};
-        return (defined $discount) ? $discount : 0;
+        return ( defined $discount ) ? $discount : 0;
     }
+
     # do we have item type + all branches
     @d = grep { $_->{branchcode} eq q{*} && $_->{itemtype} eq $itemtype } @{$rules_ref};
     if (@d) {
         $discount = $d[0]->{rentaldiscount};
-        return (defined $discount) ? $discount : 0;
+        return ( defined $discount ) ? $discount : 0;
     }
+
     # do we all item types + this branch
     @d = grep { $_->{branchcode} eq $branch && $_->{itemtype} eq q{*} } @{$rules_ref};
     if (@d) {
         $discount = $d[0]->{rentaldiscount};
-        return (defined $discount) ? $discount : 0;
+        return ( defined $discount ) ? $discount : 0;
     }
+
     # so all and all (surely we wont get here)
     @d = grep { $_->{branchcode} eq q{*} && $_->{itemtype} eq q{*} } @{$rules_ref};
     if (@d) {
         $discount = $d[0]->{rentaldiscount};
-        return (defined $discount) ? $discount : 0;
+        return ( defined $discount ) ? $discount : 0;
     }
+
     # none of the above
     return 0;
 }
@@ -2442,11 +2453,11 @@ sub _get_discount_from_rule {
 
 sub AddIssuingCharge {
     my ( $itemnumber, $borrowernumber, $charge ) = @_;
-    my $dbh = C4::Context->dbh;
-    my $nextaccntno = getnextacctno( $borrowernumber );
-    my $manager_id = 0;
+    my $dbh         = C4::Context->dbh;
+    my $nextaccntno = getnextacctno($borrowernumber);
+    my $manager_id  = 0;
     $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;
-    my $query ="
+    my $query = "
         INSERT INTO accountlines
             (borrowernumber, itemnumber, accountno,
             date, amount, description, accounttype,
@@ -2559,17 +2570,17 @@ sub AnonymiseIssueHistory {
 
     # The default of 0 does not work due to foreign key constraints
     # The anonymisation will fail quietly if AnonymousPatron is not a valid entry
-    my $anonymouspatron = (C4::Context->preference('AnonymousPatron')) ? C4::Context->preference('AnonymousPatron') : 0;
-    my @bind_params = ($anonymouspatron, $date);
-    if (defined $borrowernumber) {
-       $query .= " AND borrowernumber = ?";
-       push @bind_params, $borrowernumber;
+    my $anonymouspatron = ( C4::Context->preference('AnonymousPatron') ) ? C4::Context->preference('AnonymousPatron') : 0;
+    my @bind_params = ( $anonymouspatron, $date );
+    if ( defined $borrowernumber ) {
+        $query .= " AND borrowernumber = ?";
+        push @bind_params, $borrowernumber;
     } else {
-       $query .= " AND (SELECT privacy FROM borrowers WHERE borrowers.borrowernumber=old_issues.borrowernumber) <> 0";
+        $query .= " AND (SELECT privacy FROM borrowers WHERE borrowers.borrowernumber=old_issues.borrowernumber) <> 0";
     }
     my $sth = $dbh->prepare($query);
     $sth->execute(@bind_params);
-    my $rows_affected = $sth->rows;  ### doublecheck row count return function
+    my $rows_affected = $sth->rows;    ### doublecheck row count return function
     return $rows_affected;
 }
 
@@ -2612,30 +2623,34 @@ B<Example>:
 
 sub SendCirculationAlert {
     my ($opts) = @_;
-    my ($type, $item, $borrower, $branch) =
-        ($opts->{type}, $opts->{item}, $opts->{borrower}, $opts->{branch});
+    my ( $type, $item, $borrower, $branch ) = ( $opts->{type}, $opts->{item}, $opts->{borrower}, $opts->{branch} );
     my %message_name = (
         CHECKIN  => 'Item_Check_in',
         CHECKOUT => 'Item_Checkout',
     );
-    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences({
-        borrowernumber => $borrower->{borrowernumber},
-        message_name   => $message_name{$type},
-    });
-    my $letter = C4::Letters::getletter('circulation', $type);
-    C4::Letters::parseletter($letter, 'biblio',      $item->{biblionumber});
-    C4::Letters::parseletter($letter, 'biblioitems', $item->{biblionumber});
-    C4::Letters::parseletter($letter, 'borrowers',   $borrower->{borrowernumber});
-    C4::Letters::parseletter($letter, 'branches',    $branch);
+    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences(
+        {   borrowernumber => $borrower->{borrowernumber},
+            message_name   => $message_name{$type},
+        }
+    );
+    my $letter = C4::Letters::getletter( 'circulation', $type );
+    C4::Letters::parseletter( $letter, 'biblio',      $item->{biblionumber} );
+    C4::Letters::parseletter( $letter, 'biblioitems', $item->{biblionumber} );
+    C4::Letters::parseletter( $letter, 'borrowers',   $borrower->{borrowernumber} );
+    C4::Letters::parseletter( $letter, 'branches',    $branch );
     my @transports = @{ $borrower_preferences->{transports} };
+
     # warn "no transports" unless @transports;
     for (@transports) {
+
         # warn "transport: $_";
-        my $message = C4::Message->find_last_message($borrower, $type, $_);
-        if (!$message) {
+        my $message = C4::Message->find_last_message( $borrower, $type, $_ );
+        if ( !$message ) {
+
             #warn "create new message";
-            C4::Message->enqueue($letter, $borrower, $_);
+            C4::Message->enqueue( $letter, $borrower, $_ );
         } else {
+
             #warn "append to old message";
             $message->append($letter);
             $message->update;
@@ -2653,21 +2668,19 @@ This function validate the line of brachtransfer but with the wrong destination
 =cut
 
 sub updateWrongTransfer {
-       my ( $itemNumber,$waitingAtLibrary,$FromLibrary ) = @_;
-       my $dbh = C4::Context->dbh;     
-# first step validate the actual line of transfert .
-       my $sth =
-               $dbh->prepare(
-                       "update branchtransfers set datearrived = now(),tobranch=?,comments='wrongtransfer' where itemnumber= ? AND datearrived IS NULL"
-               );
-               $sth->execute($FromLibrary,$itemNumber);
-               $sth->finish;
-
-# second step create a new line of branchtransfer to the right location .
-       ModItemTransfer($itemNumber, $FromLibrary, $waitingAtLibrary);
-
-#third step changing holdingbranch of item
-       UpdateHoldingbranch($FromLibrary,$itemNumber);
+    my ( $itemNumber, $waitingAtLibrary, $FromLibrary ) = @_;
+    my $dbh = C4::Context->dbh;
+
+    # first step validate the actual line of transfert .
+    my $sth = $dbh->prepare( "update branchtransfers set datearrived = now(),tobranch=?,comments='wrongtransfer' where itemnumber= ? AND datearrived IS NULL" );
+    $sth->execute( $FromLibrary, $itemNumber );
+    $sth->finish;
+
+    # second step create a new line of branchtransfer to the right location .
+    ModItemTransfer( $itemNumber, $FromLibrary, $waitingAtLibrary );
+
+    #third step changing holdingbranch of item
+    UpdateHoldingbranch( $FromLibrary, $itemNumber );
 }
 
 =head2 UpdateHoldingbranch
@@ -2679,8 +2692,8 @@ Simple methode for updating hodlingbranch in items BDD line
 =cut
 
 sub UpdateHoldingbranch {
-       my ( $branch,$itemnumber ) = @_;
-    ModItem({ holdingbranch => $branch }, undef, $itemnumber);
+    my ( $branch, $itemnumber ) = @_;
+    ModItem( { holdingbranch => $branch }, undef, $itemnumber );
 }
 
 =head2 CalcDateDue
@@ -2696,50 +2709,56 @@ C<$borrower> = Borrower object
 
 =cut
 
-sub CalcDateDue { 
-       my ($startdate,$itemtype,$branch,$borrower) = @_;
-       my $datedue;
-        my $loanlength = GetLoanLength($borrower->{'categorycode'},$itemtype, $branch);
-
-       # if globalDueDate ON the datedue is set to that date
-       if ( C4::Context->preference('globalDueDate')
-             && ( C4::Context->preference('globalDueDate') =~ C4::Dates->regexp('syspref') ) ) {
-            $datedue = C4::Dates->new( C4::Context->preference('globalDueDate') );
-       } else {
-       # otherwise, calculate the datedue as normal
-               if(C4::Context->preference('useDaysMode') eq 'Days') {  # ignoring calendar
-                       my $timedue = time + ($loanlength) * 86400;
-               #FIXME - assumes now even though we take a startdate 
-                       my @datearr  = localtime($timedue);
-                       $datedue = C4::Dates->new( sprintf("%04d-%02d-%02d", 1900 + $datearr[5], $datearr[4] + 1, $datearr[3]), 'iso');
-               } else {
-                       my $calendar = C4::Calendar->new(  branchcode => $branch );
-                       $datedue = $calendar->addDate($startdate, $loanlength);
-               }
-       }
-
-       # if Hard Due Dates are used, retreive them and apply as necessary
-        my ($hardduedate, $hardduedatecompare) = GetHardDueDate($borrower->{'categorycode'},$itemtype, $branch);
-       if ( $hardduedate && $hardduedate->output('iso') && $hardduedate->output('iso') ne '0000-00-00') {
-            # if the calculated due date is after the 'before' Hard Due Date (ceiling), override
-            if ( $datedue->output( 'iso' ) gt $hardduedate->output( 'iso' ) && $hardduedatecompare == -1) {
-                $datedue = $hardduedate;
+sub CalcDateDue {
+    my ( $startdate, $itemtype, $branch, $borrower ) = @_;
+    my $datedue;
+    my $loanlength = GetLoanLength( $borrower->{'categorycode'}, $itemtype, $branch );
+
+    # if globalDueDate ON the datedue is set to that date
+    if ( C4::Context->preference('globalDueDate')
+        && ( C4::Context->preference('globalDueDate') =~ C4::Dates->regexp('syspref') ) ) {
+        $datedue = C4::Dates->new( C4::Context->preference('globalDueDate') );
+    } else {
+
+        # otherwise, calculate the datedue as normal
+        if ( C4::Context->preference('useDaysMode') eq 'Days' ) {    # ignoring calendar
+            my $timedue = time + ($loanlength) * 86400;
+
+            #FIXME - assumes now even though we take a startdate
+            my @datearr = localtime($timedue);
+            $datedue = C4::Dates->new( sprintf( "%04d-%02d-%02d", 1900 + $datearr[5], $datearr[4] + 1, $datearr[3] ), 'iso' );
+        } else {
+            my $calendar = C4::Calendar->new( branchcode => $branch );
+            $datedue = $calendar->addDate( $startdate, $loanlength );
+        }
+    }
+
+    # if Hard Due Dates are used, retreive them and apply as necessary
+    my ( $hardduedate, $hardduedatecompare ) = GetHardDueDate( $borrower->{'categorycode'}, $itemtype, $branch );
+    if ( $hardduedate && $hardduedate->output('iso') && $hardduedate->output('iso') ne '0000-00-00' ) {
+
+        # if the calculated due date is after the 'before' Hard Due Date (ceiling), override
+        if ( $datedue->output('iso') gt $hardduedate->output('iso') && $hardduedatecompare == -1 ) {
+            $datedue = $hardduedate;
+
             # if the calculated date is before the 'after' Hard Due Date (floor), override
-            } elsif ( $datedue->output( 'iso' ) lt $hardduedate->output( 'iso' ) && $hardduedatecompare == 1) {
-                $datedue = $hardduedate;               
+        } elsif ( $datedue->output('iso') lt $hardduedate->output('iso') && $hardduedatecompare == 1 ) {
+            $datedue = $hardduedate;
+
             # if the hard due date is set to 'exactly', overrride
-            } elsif ( $hardduedatecompare == 0) {
-                $datedue = $hardduedate;
-            }
-            # in all other cases, keep the date due as it is
-       }
+        } elsif ( $hardduedatecompare == 0 ) {
+            $datedue = $hardduedate;
+        }
 
-       # if ReturnBeforeExpiry ON the datedue can't be after borrower expirydate
-       if ( C4::Context->preference('ReturnBeforeExpiry') && $datedue->output('iso') gt $borrower->{dateexpiry} ) {
-           $datedue = C4::Dates->new( $borrower->{dateexpiry}, 'iso' );
-       }
+        # in all other cases, keep the date due as it is
+    }
 
-       return $datedue;
+    # if ReturnBeforeExpiry ON the datedue can't be after borrower expirydate
+    if ( C4::Context->preference('ReturnBeforeExpiry') && $datedue->output('iso') gt $borrower->{dateexpiry} ) {
+        $datedue = C4::Dates->new( $borrower->{dateexpiry}, 'iso' );
+    }
+
+    return $datedue;
 }
 
 =head2 CheckValidDatedue
@@ -2758,29 +2777,29 @@ C<$loanlength>  = loan length prior to adjustment
 =cut
 
 sub CheckValidDatedue {
-my ($date_due,$itemnumber,$branchcode)=@_;
-my @datedue=split('-',$date_due->output('iso'));
-my $years=$datedue[0];
-my $month=$datedue[1];
-my $day=$datedue[2];
-# die "Item# $itemnumber ($branchcode) due: " . ${date_due}->output() . "\n(Y,M,D) = ($years,$month,$day)":
-my $dow;
-for (my $i=0;$i<2;$i++){
-    $dow=Day_of_Week($years,$month,$day);
-    ($dow=0) if ($dow>6);
-    my $result=CheckRepeatableHolidays($itemnumber,$dow,$branchcode);
-    my $countspecial=CheckSpecialHolidays($years,$month,$day,$itemnumber,$branchcode);
-    my $countspecialrepeatable=CheckRepeatableSpecialHolidays($month,$day,$itemnumber,$branchcode);
-        if (($result ne '0') or ($countspecial ne '0') or ($countspecialrepeatable ne '0') ){
-        $i=0;
-        (($years,$month,$day) = Add_Delta_Days($years,$month,$day, 1))if ($i ne '1');
+    my ( $date_due, $itemnumber, $branchcode ) = @_;
+    my @datedue = split( '-', $date_due->output('iso') );
+    my $years   = $datedue[0];
+    my $month   = $datedue[1];
+    my $day     = $datedue[2];
+
+    # die "Item# $itemnumber ($branchcode) due: " . ${date_due}->output() . "\n(Y,M,D) = ($years,$month,$day)":
+    my $dow;
+    for ( my $i = 0 ; $i < 2 ; $i++ ) {
+        $dow = Day_of_Week( $years, $month, $day );
+        ( $dow = 0 ) if ( $dow > 6 );
+        my $result = CheckRepeatableHolidays( $itemnumber, $dow, $branchcode );
+        my $countspecial = CheckSpecialHolidays( $years, $month, $day, $itemnumber, $branchcode );
+        my $countspecialrepeatable = CheckRepeatableSpecialHolidays( $month, $day, $itemnumber, $branchcode );
+        if ( ( $result ne '0' ) or ( $countspecial ne '0' ) or ( $countspecialrepeatable ne '0' ) ) {
+            $i = 0;
+            ( ( $years, $month, $day ) = Add_Delta_Days( $years, $month, $day, 1 ) ) if ( $i ne '1' );
         }
     }
-    my $newdatedue=C4::Dates->new(sprintf("%04d-%02d-%02d",$years,$month,$day),'iso');
-return $newdatedue;
+    my $newdatedue = C4::Dates->new( sprintf( "%04d-%02d-%02d", $years, $month, $day ), 'iso' );
+    return $newdatedue;
 }
 
-
 =head2 CheckRepeatableHolidays
 
   $countrepeatable = CheckRepeatableHoliday($itemnumber,$week_day,$branchcode);
@@ -2793,21 +2812,20 @@ C<$branchcode>  = localisation of issue
 
 =cut
 
-sub CheckRepeatableHolidays{
-my($itemnumber,$week_day,$branchcode)=@_;
-my $dbh = C4::Context->dbh;
-my $query = qq|SELECT count(*)  
+sub CheckRepeatableHolidays {
+    my ( $itemnumber, $week_day, $branchcode ) = @_;
+    my $dbh   = C4::Context->dbh;
+    my $query = qq|SELECT count(*)  
        FROM repeatable_holidays 
        WHERE branchcode=?
        AND weekday=?|;
-my $sth = $dbh->prepare($query);
-$sth->execute($branchcode,$week_day);
-my $result=$sth->fetchrow;
-$sth->finish;
-return $result;
+    my $sth = $dbh->prepare($query);
+    $sth->execute( $branchcode, $week_day );
+    my $result = $sth->fetchrow;
+    $sth->finish;
+    return $result;
 }
 
-
 =head2 CheckSpecialHolidays
 
   $countspecial = CheckSpecialHolidays($years,$month,$day,$itemnumber,$branchcode);
@@ -2822,21 +2840,21 @@ C<$branchcode>  = localisation of issue
 
 =cut
 
-sub CheckSpecialHolidays{
-my ($years,$month,$day,$itemnumber,$branchcode) = @_;
-my $dbh = C4::Context->dbh;
-my $query=qq|SELECT count(*) 
+sub CheckSpecialHolidays {
+    my ( $years, $month, $day, $itemnumber, $branchcode ) = @_;
+    my $dbh   = C4::Context->dbh;
+    my $query = qq|SELECT count(*) 
             FROM `special_holidays`
             WHERE year=?
             AND month=?
             AND day=?
              AND branchcode=?
            |;
-my $sth = $dbh->prepare($query);
-$sth->execute($years,$month,$day,$branchcode);
-my $countspecial=$sth->fetchrow ;
-$sth->finish;
-return $countspecial;
+    my $sth = $dbh->prepare($query);
+    $sth->execute( $years, $month, $day, $branchcode );
+    my $countspecial = $sth->fetchrow;
+    $sth->finish;
+    return $countspecial;
 }
 
 =head2 CheckRepeatableSpecialHolidays
@@ -2852,36 +2870,34 @@ C<$branchcode>  = localisation of issue
 
 =cut
 
-sub CheckRepeatableSpecialHolidays{
-my ($month,$day,$itemnumber,$branchcode) = @_;
-my $dbh = C4::Context->dbh;
-my $query=qq|SELECT count(*) 
+sub CheckRepeatableSpecialHolidays {
+    my ( $month, $day, $itemnumber, $branchcode ) = @_;
+    my $dbh   = C4::Context->dbh;
+    my $query = qq|SELECT count(*) 
             FROM `repeatable_holidays`
             WHERE month=?
             AND day=?
              AND branchcode=?
            |;
-my $sth = $dbh->prepare($query);
-$sth->execute($month,$day,$branchcode);
-my $countspecial=$sth->fetchrow ;
-$sth->finish;
-return $countspecial;
+    my $sth = $dbh->prepare($query);
+    $sth->execute( $month, $day, $branchcode );
+    my $countspecial = $sth->fetchrow;
+    $sth->finish;
+    return $countspecial;
 }
 
-
-
-sub CheckValidBarcode{
-my ($barcode) = @_;
-my $dbh = C4::Context->dbh;
-my $query=qq|SELECT count(*) 
+sub CheckValidBarcode {
+    my ($barcode) = @_;
+    my $dbh       = C4::Context->dbh;
+    my $query     = qq|SELECT count(*) 
             FROM items 
              WHERE barcode=?
            |;
-my $sth = $dbh->prepare($query);
-$sth->execute($barcode);
-my $exist=$sth->fetchrow ;
-$sth->finish;
-return $exist;
+    my $sth = $dbh->prepare($query);
+    $sth->execute($barcode);
+    my $exist = $sth->fetchrow;
+    $sth->finish;
+    return $exist;
 }
 
 =head2 IsBranchTransferAllowed
@@ -2893,24 +2909,24 @@ Code is either an itemtype or collection doe depending on the pref BranchTransfe
 =cut
 
 sub IsBranchTransferAllowed {
-       my ( $toBranch, $fromBranch, $code ) = @_;
-
-       if ( $toBranch eq $fromBranch ) { return 1; } ## Short circuit for speed.
-        
-       my $limitType = C4::Context->preference("BranchTransferLimitsType");   
-       my $dbh = C4::Context->dbh;
-            
-       my $sth = $dbh->prepare("SELECT * FROM branch_transfer_limits WHERE toBranch = ? AND fromBranch = ? AND $limitType = ?");
-       $sth->execute( $toBranch, $fromBranch, $code );
-       my $limit = $sth->fetchrow_hashref();
-                        
-       ## If a row is found, then that combination is not allowed, if no matching row is found, then the combination *is allowed*
-       if ( $limit->{'limitId'} ) {
-               return 0;
-       } else {
-               return 1;
-       }
-}                                                        
+    my ( $toBranch, $fromBranch, $code ) = @_;
+
+    if ( $toBranch eq $fromBranch ) { return 1; }    ## Short circuit for speed.
+
+    my $limitType = C4::Context->preference("BranchTransferLimitsType");
+    my $dbh       = C4::Context->dbh;
+
+    my $sth = $dbh->prepare("SELECT * FROM branch_transfer_limits WHERE toBranch = ? AND fromBranch = ? AND $limitType = ?");
+    $sth->execute( $toBranch, $fromBranch, $code );
+    my $limit = $sth->fetchrow_hashref();
+
+    ## If a row is found, then that combination is not allowed, if no matching row is found, then the combination *is allowed*
+    if ( $limit->{'limitId'} ) {
+        return 0;
+    } else {
+        return 1;
+    }
+}
 
 =head2 CreateBranchTransferLimit
 
@@ -2921,14 +2937,14 @@ $code is either itemtype or collection code depending on what the pref BranchTra
 =cut
 
 sub CreateBranchTransferLimit {
-   my ( $toBranch, $fromBranch, $code ) = @_;
-
-   my $limitType = C4::Context->preference("BranchTransferLimitsType");
-   
-   my $dbh = C4::Context->dbh;
-   
-   my $sth = $dbh->prepare("INSERT INTO branch_transfer_limits ( $limitType, toBranch, fromBranch ) VALUES ( ?, ?, ? )");
-   $sth->execute( $code, $toBranch, $fromBranch );
+    my ( $toBranch, $fromBranch, $code ) = @_;
+
+    my $limitType = C4::Context->preference("BranchTransferLimitsType");
+
+    my $dbh = C4::Context->dbh;
+
+    my $sth = $dbh->prepare("INSERT INTO branch_transfer_limits ( $limitType, toBranch, fromBranch ) VALUES ( ?, ?, ? )");
+    $sth->execute( $code, $toBranch, $fromBranch );
 }
 
 =head2 DeleteBranchTransferLimits
@@ -2938,13 +2954,12 @@ sub CreateBranchTransferLimit {
 =cut
 
 sub DeleteBranchTransferLimits {
-   my $dbh = C4::Context->dbh;
-   my $sth = $dbh->prepare("TRUNCATE TABLE branch_transfer_limits");
-   $sth->execute();
+    my $dbh = C4::Context->dbh;
+    my $sth = $dbh->prepare("TRUNCATE TABLE branch_transfer_limits");
+    $sth->execute();
 }
 
-
-  1;
+1;
 
 __END__
 
index 520c116..0dcc555 100644 (file)
@@ -18,8 +18,8 @@ package C4::Circulation;
 # with Koha; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-
 use strict;
+
 #use warnings; FIXME - Bug 2505
 use C4::Context;
 use C4::Stats;
@@ -36,69 +36,69 @@ use C4::Dates qw(format_date);
 use C4::Message;
 use C4::Debug;
 use Date::Calc qw(
-  Today
-  Today_and_Now
-  Add_Delta_YM
-  Add_Delta_DHMS
-  Date_to_Days
-  Day_of_Week
-  Add_Delta_Days       
+    Today
+    Today_and_Now
+    Add_Delta_YM
+    Add_Delta_DHMS
+    Date_to_Days
+    Day_of_Week
+    Add_Delta_Days
 );
 use POSIX qw(strftime);
-use C4::Branch; # GetBranches
-use C4::Log; # logaction
+use C4::Branch;    # GetBranches
+use C4::Log;       # logaction
 
 use Data::Dumper;
 
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
-       require Exporter;
-       $VERSION = 3.02;        # for version checking
-       @ISA    = qw(Exporter);
-
-       # FIXME subs that should probably be elsewhere
-       push @EXPORT, qw(
-               &FixOverduesOnReturn
-               &barcodedecode
-       );
-
-       # subs to deal with issuing a book
-       push @EXPORT, qw(
-               &CanBookBeIssued
-               &CanBookBeRenewed
-               &AddIssue
-               &AddRenewal
-               &GetRenewCount
-               &GetItemIssue
-               &GetItemIssues
-               &GetBorrowerIssues
-               &GetIssuingCharges
-               &GetIssuingRule
+    require Exporter;
+    $VERSION = 3.02;           # for version checking
+    @ISA     = qw(Exporter);
+
+    # FIXME subs that should probably be elsewhere
+    push @EXPORT, qw(
+        &FixOverduesOnReturn
+        &barcodedecode
+    );
+
+    # subs to deal with issuing a book
+    push @EXPORT, qw(
+        &CanBookBeIssued
+        &CanBookBeRenewed
+        &AddIssue
+        &AddRenewal
+        &GetRenewCount
+        &GetItemIssue
+        &GetItemIssues
+        &GetBorrowerIssues
+        &GetIssuingCharges
+        &GetIssuingRule
         &GetBranchBorrowerCircRule
         &GetBranchItemRule
-               &GetBiblioIssues
-               &GetOpenIssue
-               &AnonymiseIssueHistory
-       );
-
-       # subs to deal with returns
-       push @EXPORT, qw(
-               &AddReturn
+        &GetBiblioIssues
+        &GetOpenIssue
+        &AnonymiseIssueHistory
+    );
+
+    # subs to deal with returns
+    push @EXPORT, qw(
+        &AddReturn
         &MarkIssueReturned
-       );
-
-       # subs to deal with transfers
-       push @EXPORT, qw(
-               &transferbook
-               &GetTransfers
-               &GetTransfersFromTo
-               &updateWrongTransfer
-               &DeleteTransfer
-                &IsBranchTransferAllowed
-                &CreateBranchTransferLimit
-                &DeleteBranchTransferLimits
-       );
+    );
+
+    # subs to deal with transfers
+    push @EXPORT, qw(
+        &transferbook
+        &GetTransfers
+        &GetTransfersFromTo
+        &updateWrongTransfer
+        &DeleteTransfer
+        &IsBranchTransferAllowed
+        &CreateBranchTransferLimit
+        &DeleteBranchTransferLimits
+    );
 }
 
 =head1 NAME
@@ -138,35 +138,42 @@ System Pref options.
 # FIXME -- these plugins should be moved out of Circulation.pm
 #
 sub barcodedecode {
-    my ($barcode, $filter) = @_;
+    my ( $barcode, $filter ) = @_;
     my $branch = C4::Branch::mybranch();
-    $filter = C4::Context->preference('itemBarcodeInputFilter') unless $filter;
-    $filter or return $barcode;     # ensure filter is defined, else return untouched barcode
-       if ($filter eq 'whitespace') {
-               $barcode =~ s/\s//g;
-       } elsif ($filter eq 'cuecat') {
-               chomp($barcode);
-           my @fields = split( /\./, $barcode );
-           my @results = map( decode($_), @fields[ 1 .. $#fields ] );
-           ($#results == 2) and return $results[2];
-       } elsif ($filter eq 'T-prefix') {
-               if ($barcode =~ /^[Tt](\d)/) {
-                       (defined($1) and $1 eq '0') and return $barcode;
-            $barcode = substr($barcode, 2) + 0;     # FIXME: probably should be substr($barcode, 1)
-               }
-        return sprintf("T%07d", $barcode);
-        # FIXME: $barcode could be "T1", causing warning: substr outside of string
-        # Why drop the nonzero digit after the T?
-        # Why pass non-digits (or empty string) to "T%07d"?
-       } elsif ($filter eq 'libsuite8') {
-               unless($barcode =~ m/^($branch)-/i){    #if barcode starts with branch code its in Koha style. Skip it.
-                       if($barcode =~ m/^(\d)/i){      #Some barcodes even start with 0's & numbers and are assumed to have b as the item type in the libsuite8 software
-                                $barcode =~ s/^[0]*(\d+)$/$branch-b-$1/i;
-                        }else{
-                               $barcode =~ s/^(\D+)[0]*(\d+)$/$branch-$1-$2/i;
-                       }
-               }
-       }
+    $filter = C4::Context->preference('itemBarcodeInputFilter')
+        unless $filter;
+    $filter
+        or return
+        $barcode;    # ensure filter is defined, else return untouched barcode
+    if ( $filter eq 'whitespace' ) {
+        $barcode =~ s/\s//g;
+    } elsif ( $filter eq 'cuecat' ) {
+        chomp($barcode);
+        my @fields = split( /\./, $barcode );
+        my @results = map( decode($_), @fields[ 1 .. $#fields ] );
+        ( $#results == 2 ) and return $results[2];
+    } elsif ( $filter eq 'T-prefix' ) {
+        if ( $barcode =~ /^[Tt](\d)/ ) {
+            ( defined($1) and $1 eq '0' ) and return $barcode;
+            $barcode = substr( $barcode, 2 )
+                + 0;    # FIXME: probably should be substr($barcode, 1)
+        }
+        return sprintf( "T%07d", $barcode );
+
+    # FIXME: $barcode could be "T1", causing warning: substr outside of string
+    # Why drop the nonzero digit after the T?
+    # Why pass non-digits (or empty string) to "T%07d"?
+    } elsif ( $filter eq 'libsuite8' ) {
+        unless ( $barcode =~ m/^($branch)-/i )
+        {    #if barcode starts with branch code its in Koha style. Skip it.
+            if ( $barcode =~ m/^(\d)/i )
+            { #Some barcodes even start with 0's & numbers and are assumed to have b as the item type in the libsuite8 software
+                $barcode =~ s/^[0]*(\d+)$/$branch-b-$1/i;
+            } else {
+                $barcode =~ s/^(\D+)[0]*(\d+)$/$branch-$1-$2/i;
+            }
+        }
+    }
     return $barcode;    # return barcode, modified or not
 }
 
@@ -185,11 +192,12 @@ or Javascript based decoding on the client side.
 sub decode {
     my ($encoded) = @_;
     my $seq =
-      'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-';
+        'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-';
     my @s = map { index( $seq, $_ ); } split( //, $encoded );
     my $l = ( $#s + 1 ) % 4;
     if ($l) {
         if ( $l == 1 ) {
+
             # warn "Error: Cuecat decode parsing failed!";
             return;
         }
@@ -200,9 +208,9 @@ sub decode {
     while ( $#s >= 0 ) {
         my $n = ( ( $s[0] << 6 | $s[1] ) << 6 | $s[2] ) << 6 | $s[3];
         $r .=
-            chr( ( $n >> 16 ) ^ 67 )
-         .chr( ( $n >> 8 & 255 ) ^ 67 )
-         .chr( ( $n & 255 ) ^ 67 );
+              chr( ( $n >> 16 ) ^ 67 )
+            . chr( ( $n >> 8 & 255 ) ^ 67 )
+            . chr( ( $n & 255 ) ^ 67 );
         @s = @s[ 4 .. $#s ];
     }
     $r = substr( $r, 0, length($r) - $l );
@@ -270,11 +278,11 @@ The item was eligible to be transferred. Barring problems communicating with the
 sub transferbook {
     my ( $tbr, $barcode, $ignoreRs ) = @_;
     my $messages;
-    my $dotransfer      = 1;
-    my $branches        = GetBranches();
-    my $itemnumber = GetItemnumberFromBarcode( $barcode );
+    my $dotransfer = 1;
+    my $branches   = GetBranches();
+    my $itemnumber = GetItemnumberFromBarcode($barcode);
     my $issue      = GetItemIssue($itemnumber);
-    my $biblio = GetBiblioFromItemNumber($itemnumber);
+    my $biblio     = GetBiblioFromItemNumber($itemnumber);
 
     # bad barcode..
     if ( not $itemnumber ) {
@@ -288,15 +296,28 @@ sub transferbook {
 
     # if using Branch Transfer Limits
     if ( C4::Context->preference("UseBranchTransferLimits") == 1 ) {
-        if ( C4::Context->preference("item-level_itypes") && C4::Context->preference("BranchTransferLimitsType") eq 'itemtype' ) {
-            if ( ! IsBranchTransferAllowed( $tbr, $fbr, $biblio->{'itype'} ) ) {
+        if (   C4::Context->preference("item-level_itypes")
+            && C4::Context->preference("BranchTransferLimitsType") eq
+            'itemtype' ) {
+            if ( !IsBranchTransferAllowed( $tbr, $fbr, $biblio->{'itype'} ) )
+            {
                 $messages->{'NotAllowed'} = $tbr . "::" . $biblio->{'itype'};
                 $dotransfer = 0;
             }
-        } elsif ( ! IsBranchTransferAllowed( $tbr, $fbr, $biblio->{ C4::Context->preference("BranchTransferLimitsType") } ) ) {
-            $messages->{'NotAllowed'} = $tbr . "::" . $biblio->{ C4::Context->preference("BranchTransferLimitsType") };
+        } elsif (
+            !IsBranchTransferAllowed(
+                $tbr,
+                $fbr,
+                $biblio->{ C4::Context->preference("BranchTransferLimitsType")
+                    }
+            )
+            ) {
+            $messages->{'NotAllowed'} =
+                $tbr . "::"
+                . $biblio->{ C4::Context->preference(
+                    "BranchTransferLimitsType") };
             $dotransfer = 0;
-       }
+        }
     }
 
     # if is permanent...
@@ -312,15 +333,14 @@ sub transferbook {
     }
 
     # check if it is still issued to someone, return it...
-    if ($issue->{borrowernumber}) {
+    if ( $issue->{borrowernumber} ) {
         AddReturn( $barcode, $fbr );
         $messages->{'WasReturned'} = $issue->{borrowernumber};
     }
 
     # find reserves.....
     # That'll save a database query.
-    my ( $resfound, $resrec ) =
-      CheckReserves( $itemnumber );
+    my ( $resfound, $resrec ) = CheckReserves($itemnumber);
     if ( $resfound and not $ignoreRs ) {
         $resrec->{'ResFound'} = $resfound;
 
@@ -336,49 +356,51 @@ sub transferbook {
         $messages->{'WasTransfered'} = 1;
 
     }
-    ModDateLastSeen( $itemnumber );
+    ModDateLastSeen($itemnumber);
     return ( $dotransfer, $messages, $biblio );
 }
 
-
 sub TooMany {
-    my $borrower        = shift;
+    my $borrower     = shift;
     my $biblionumber = shift;
-       my $item                = shift;
-    my $cat_borrower    = $borrower->{'categorycode'};
-    my $dbh             = C4::Context->dbh;
-       my $branch;
-       # Get which branchcode we need
-       $branch = _GetCircControlBranch($item,$borrower);
-       my $type = (C4::Context->preference('item-level_itypes')) 
-                       ? $item->{'itype'}         # item-level
-                       : $item->{'itemtype'};     # biblio-level
+    my $item         = shift;
+    my $cat_borrower = $borrower->{'categorycode'};
+    my $dbh          = C4::Context->dbh;
+    my $branch;
+
+    # Get which branchcode we need
+    $branch = _GetCircControlBranch( $item, $borrower );
+    my $type = ( C4::Context->preference('item-level_itypes') )
+        ? $item->{'itype'}        # item-level
+        : $item->{'itemtype'};    # biblio-level
+
     # given branch, patron category, and item type, determine
     # applicable issuing rule
-    my $issuing_rule = GetIssuingRule($cat_borrower, $type, $branch);
+    my $issuing_rule = GetIssuingRule( $cat_borrower, $type, $branch );
 
     # if a rule is found and has a loan limit set, count
     # how many loans the patron already has that meet that
     # rule
-    if (defined($issuing_rule) and defined($issuing_rule->{'maxissueqty'})) {
+    if (    defined($issuing_rule)
+        and defined( $issuing_rule->{'maxissueqty'} ) ) {
         my @bind_params;
         my $count_query = "SELECT COUNT(*) FROM issues
                            JOIN items USING (itemnumber) ";
 
         my $rule_itemtype = $issuing_rule->{itemtype};
-        if ($rule_itemtype eq "*") {
+        if ( $rule_itemtype eq "*" ) {
+
             # matching rule has the default item type, so count only
             # those existing loans that don't fall under a more
             # specific rule
-            if (C4::Context->preference('item-level_itypes')) {
+            if ( C4::Context->preference('item-level_itypes') ) {
                 $count_query .= " WHERE items.itype NOT IN (
                                     SELECT itemtype FROM issuingrules
                                     WHERE branchcode = ?
                                     AND   (categorycode = ? OR categorycode = ?)
                                     AND   itemtype <> '*'
                                   ) ";
-            } else { 
+            } else {
                 $count_query .= " JOIN  biblioitems USING (biblionumber) 
                                   WHERE biblioitems.itemtype NOT IN (
                                     SELECT itemtype FROM issuingrules
@@ -391,11 +413,12 @@ sub TooMany {
             push @bind_params, $issuing_rule->{categorycode};
             push @bind_params, $cat_borrower;
         } else {
+
             # rule has specific item type, so count loans of that
             # specific item type
-            if (C4::Context->preference('item-level_itypes')) {
+            if ( C4::Context->preference('item-level_itypes') ) {
                 $count_query .= " WHERE items.itype = ? ";
-            } else { 
+            } else {
                 $count_query .= " JOIN  biblioitems USING (biblionumber) 
                                   WHERE biblioitems.itemtype= ? ";
             }
@@ -405,11 +428,12 @@ sub TooMany {
         $count_query .= " AND borrowernumber = ? ";
         push @bind_params, $borrower->{'borrowernumber'};
         my $rule_branch = $issuing_rule->{branchcode};
-        if ($rule_branch ne "*") {
-            if (C4::Context->preference('CircControl') eq 'PickupLibrary') {
+        if ( $rule_branch ne "*" ) {
+            if ( C4::Context->preference('CircControl') eq 'PickupLibrary' ) {
                 $count_query .= " AND issues.branchcode = ? ";
                 push @bind_params, $branch;
-            } elsif (C4::Context->preference('CircControl') eq 'PatronLibrary') {
+            } elsif (
+                C4::Context->preference('CircControl') eq 'PatronLibrary' ) {
                 ; # if branch is the patron's home branch, then count all loans by patron
             } else {
                 $count_query .= " AND items.homebranch = ? ";
@@ -422,24 +446,26 @@ sub TooMany {
         my ($current_loan_count) = $count_sth->fetchrow_array;
 
         my $max_loans_allowed = $issuing_rule->{'maxissueqty'};
-        if ($current_loan_count >= $max_loans_allowed) {
-            return ($current_loan_count, $max_loans_allowed);
+        if ( $current_loan_count >= $max_loans_allowed ) {
+            return ( $current_loan_count, $max_loans_allowed );
         }
     }
 
     # Now count total loans against the limit for the branch
-    my $branch_borrower_circ_rule = GetBranchBorrowerCircRule($branch, $cat_borrower);
-    if (defined($branch_borrower_circ_rule->{maxissueqty})) {
-        my @bind_params = ();
+    my $branch_borrower_circ_rule =
+        GetBranchBorrowerCircRule( $branch, $cat_borrower );
+    if ( defined( $branch_borrower_circ_rule->{maxissueqty} ) ) {
+        my @bind_params        = ();
         my $branch_count_query = "SELECT COUNT(*) FROM issues 
                                   JOIN items USING (itemnumber)
                                   WHERE borrowernumber = ? ";
         push @bind_params, $borrower->{borrowernumber};
 
-        if (C4::Context->preference('CircControl') eq 'PickupLibrary') {
+        if ( C4::Context->preference('CircControl') eq 'PickupLibrary' ) {
             $branch_count_query .= " AND issues.branchcode = ? ";
             push @bind_params, $branch;
-        } elsif (C4::Context->preference('CircControl') eq 'PatronLibrary') {
+        } elsif ( C4::Context->preference('CircControl') eq 'PatronLibrary' )
+        {
             ; # if branch is the patron's home branch, then count all loans by patron
         } else {
             $branch_count_query .= " AND items.homebranch = ? ";
@@ -450,8 +476,8 @@ sub TooMany {
         my ($current_loan_count) = $branch_count_sth->fetchrow_array;
 
         my $max_loans_allowed = $branch_borrower_circ_rule->{maxissueqty};
-        if ($current_loan_count >= $max_loans_allowed) {
-            return ($current_loan_count, $max_loans_allowed);
+        if ( $current_loan_count >= $max_loans_allowed ) {
+            return ( $current_loan_count, $max_loans_allowed );
         }
     }
 
@@ -508,8 +534,8 @@ sub itemissues {
     my ( $bibitem, $biblio ) = @_;
     my $dbh = C4::Context->dbh;
     my $sth =
-      $dbh->prepare("Select * from items where items.biblioitemnumber = ?")
-      || die $dbh->errstr;
+        $dbh->prepare("Select * from items where items.biblioitemnumber = ?")
+        || die $dbh->errstr;
     my $i = 0;
     my @results;
 
@@ -536,12 +562,11 @@ sub itemissues {
             $data->{'date_due'} = $data2->{'date_due'};
             $data->{'card'}     = $data2->{'cardnumber'};
             $data->{'borrower'} = $data2->{'borrowernumber'};
-        }
-        else {
-            $data->{'date_due'} = ($data->{'wthdrawn'} eq '1') ? 'Cancelled' : 'Available';
+        } else {
+            $data->{'date_due'} =
+                ( $data->{'wthdrawn'} eq '1' ) ? 'Cancelled' : 'Available';
         }
 
-
         # Find the last 3 people who borrowed this item.
         $sth2 = $dbh->prepare(
             "SELECT * FROM old_issues
@@ -551,7 +576,7 @@ sub itemissues {
         );
 
         $sth2->execute( $data->{'itemnumber'} );
-        for ( my $i2 = 0 ; $i2 < 2 ; $i2++ )
+        for ( my $i2 = 0; $i2 < 2; $i2++ )
         {    # FIXME : error if there is less than 3 pple borrowing this item
             if ( my $data2 = $sth2->fetchrow_hashref ) {
                 $data->{"timestamp$i2"} = $data2->{'timestamp'};
@@ -663,35 +688,40 @@ if the borrower borrows to much things
 sub CanBookBeIssued {
     my ( $borrower, $barcode, $duedate, $inprocess ) = @_;
     my %needsconfirmation;    # filled with problems that needs confirmations
-    my %issuingimpossible;    # filled with problems that causes the issue to be IMPOSSIBLE
-    my $item = GetItem(GetItemnumberFromBarcode( $barcode ));
-    my $issue = GetItemIssue($item->{itemnumber});
-       my $biblioitem = GetBiblioItemData($item->{biblioitemnumber});
-       $item->{'itemtype'}=$item->{'itype'}; 
-    my $dbh             = C4::Context->dbh;
+    my %issuingimpossible
+        ;    # filled with problems that causes the issue to be IMPOSSIBLE
+    my $item       = GetItem( GetItemnumberFromBarcode($barcode) );
+    my $issue      = GetItemIssue( $item->{itemnumber} );
+    my $biblioitem = GetBiblioItemData( $item->{biblioitemnumber} );
+    $item->{'itemtype'} = $item->{'itype'};
+    my $dbh = C4::Context->dbh;
 
     # MANDATORY CHECKS - unless item exists, nothing else matters
     unless ( $item->{barcode} ) {
         $issuingimpossible{UNKNOWN_BARCODE} = 1;
     }
-       return ( \%issuingimpossible, \%needsconfirmation ) if %issuingimpossible;
+    return ( \%issuingimpossible, \%needsconfirmation ) if %issuingimpossible;
 
     #
     # DUE DATE is OK ? -- should already have checked.
     #
-    unless ( $duedate ) {
+    unless ($duedate) {
         my $issuedate = strftime( "%Y-%m-%d", localtime );
 
-        my $branch = _GetCircControlBranch($item,$borrower);
-        my $itype = ( C4::Context->preference('item-level_itypes') ) ? $item->{'itype'} : $biblioitem->{'itemtype'};
-        $duedate = CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $itype, $branch, $borrower );
+        my $branch = _GetCircControlBranch( $item, $borrower );
+        my $itype =
+            ( C4::Context->preference('item-level_itypes') )
+            ? $item->{'itype'}
+            : $biblioitem->{'itemtype'};
+        $duedate = CalcDateDue( C4::Dates->new( $issuedate, 'iso' ),
+            $itype, $branch, $borrower );
 
         # Offline circ calls AddIssue directly, doesn't run through here
         #  So issuingimpossible should be ok.
     }
     if ($duedate) {
         $needsconfirmation{INVALID_DATE} = $duedate->output('syspref')
-          unless $duedate->output('iso') ge C4::Dates->today('iso');
+            unless $duedate->output('iso') ge C4::Dates->today('iso');
     } else {
         $issuingimpossible{INVALID_DATE} = $duedate->output('syspref');
     }
@@ -699,11 +729,17 @@ sub CanBookBeIssued {
     #
     # BORROWER STATUS
     #
-    if ( $borrower->{'category_type'} eq 'X' && (  $item->{barcode}  )) { 
-       # stats only borrower -- add entry to statistics table, and return issuingimpossible{STATS} = 1  .
-        &UpdateStats(C4::Context->userenv->{'branch'},'localuse','','',$item->{'itemnumber'},$item->{'itemtype'},$borrower->{'borrowernumber'});
+    if ( $borrower->{'category_type'} eq 'X' && ( $item->{barcode} ) ) {
+
+# stats only borrower -- add entry to statistics table, and return issuingimpossible{STATS} = 1  .
+        &UpdateStats(
+            C4::Context->userenv->{'branch'}, 'localuse',
+            '',                               '',
+            $item->{'itemnumber'},            $item->{'itemtype'},
+            $borrower->{'borrowernumber'}
+        );
         ModDateLastSeen( $item->{'itemnumber'} );
-        return( { STATS => 1 }, {});
+        return ( { STATS => 1 }, {} );
     }
     if ( $borrower->{flags}->{GNA} ) {
         $issuingimpossible{GNA} = 1;
@@ -714,70 +750,83 @@ sub CanBookBeIssued {
     if ( $borrower->{flags}->{'DBARRED'} ) {
         $issuingimpossible{DEBARRED} = 1;
     }
-    if ( $borrower->{'dateexpiry'} eq '0000-00-00') {
+    if ( $borrower->{'dateexpiry'} eq '0000-00-00' ) {
         $issuingimpossible{EXPIRED} = 1;
     } else {
-        my @expirydate=  split /-/,$borrower->{'dateexpiry'};
-        if($expirydate[0]==0 || $expirydate[1]==0|| $expirydate[2]==0 ||
-            Date_to_Days(Today) > Date_to_Days( @expirydate )) {
-            $issuingimpossible{EXPIRED} = 1;                                   
+        my @expirydate = split /-/, $borrower->{'dateexpiry'};
+        if (   $expirydate[0] == 0
+            || $expirydate[1] == 0
+            || $expirydate[2] == 0
+            || Date_to_Days(Today) > Date_to_Days(@expirydate) ) {
+            $issuingimpossible{EXPIRED} = 1;
         }
     }
+
     #
     # BORROWER STATUS
     #
 
     # DEBTS
     my ($amount) =
-      C4::Members::GetMemberAccountRecords( $borrower->{'borrowernumber'}, '' && $duedate->output('iso') );
-    my $amountlimit = C4::Context->preference("noissuescharge");
+        C4::Members::GetMemberAccountRecords( $borrower->{'borrowernumber'},
+        '' && $duedate->output('iso') );
+    my $amountlimit       = C4::Context->preference("noissuescharge");
     my $allowfineoverride = C4::Context->preference("AllowFineOverride");
-    my $allfinesneedoverride = C4::Context->preference("AllFinesNeedOverride");
+    my $allfinesneedoverride =
+        C4::Context->preference("AllFinesNeedOverride");
     if ( C4::Context->preference("IssuingInProcess") ) {
-        if ( $amount > $amountlimit && !$inprocess && !$allowfineoverride) {
+        if ( $amount > $amountlimit && !$inprocess && !$allowfineoverride ) {
             $issuingimpossible{DEBT} = sprintf( "%.2f", $amount );
-        } elsif ( $amount > $amountlimit && !$inprocess && $allowfineoverride) {
+        } elsif ( $amount > $amountlimit
+            && !$inprocess
+            && $allowfineoverride ) {
             $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
-        } elsif ( $allfinesneedoverride && $amount > 0 && $amount <= $amountlimit && !$inprocess ) {
+        } elsif ( $allfinesneedoverride
+            && $amount > 0
+            && $amount <= $amountlimit
+            && !$inprocess ) {
             $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
         }
-    }
-    else {
+    } else {
         if ( $amount > $amountlimit && $allowfineoverride ) {
             $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
-        } elsif ( $amount > $amountlimit && !$allowfineoverride) {
+        } elsif ( $amount > $amountlimit && !$allowfineoverride ) {
             $issuingimpossible{DEBT} = sprintf( "%.2f", $amount );
         } elsif ( $amount > 0 && $allfinesneedoverride ) {
             $needsconfirmation{DEBT} = sprintf( "%.2f", $amount );
         }
     }
 
-    my ($blocktype, $count) = C4::Members::IsMemberBlocked($borrower->{'borrowernumber'});
-    if ($blocktype == -1) {
+    my ( $blocktype, $count ) =
+        C4::Members::IsMemberBlocked( $borrower->{'borrowernumber'} );
+    if ( $blocktype == -1 ) {
         ## patron has outstanding overdue loans
-           if ( C4::Context->preference("OverduesBlockCirc") eq 'block'){
-               $issuingimpossible{USERBLOCKEDOVERDUE} = $count;
-           }
-           elsif ( C4::Context->preference("OverduesBlockCirc") eq 'confirmation'){
-               $needsconfirmation{USERBLOCKEDOVERDUE} = $count;
-           }
-    } elsif($blocktype == 1) {
+        if ( C4::Context->preference("OverduesBlockCirc") eq 'block' ) {
+            $issuingimpossible{USERBLOCKEDOVERDUE} = $count;
+        } elsif (
+            C4::Context->preference("OverduesBlockCirc") eq 'confirmation' ) {
+            $needsconfirmation{USERBLOCKEDOVERDUE} = $count;
+        }
+    } elsif ( $blocktype == 1 ) {
+
         # patron has accrued fine days
         $issuingimpossible{USERBLOCKEDREMAINING} = $count;
     }
 
-#
+    #
     # JB34 CHECKS IF BORROWERS DONT HAVE ISSUE TOO MANY BOOKS
     #
-       my ($current_loan_count, $max_loans_allowed) = TooMany( $borrower, $item->{biblionumber}, $item );
-    # if TooMany max_loans_allowed returns 0 the user doesn't have permission to check out this book
-    if ($max_loans_allowed eq 0) {
+    my ( $current_loan_count, $max_loans_allowed ) =
+        TooMany( $borrower, $item->{biblionumber}, $item );
+
+# if TooMany max_loans_allowed returns 0 the user doesn't have permission to check out this book
+    if ( $max_loans_allowed eq 0 ) {
         $needsconfirmation{PATRON_CANT} = 1;
     } else {
-        if($max_loans_allowed){
-            $needsconfirmation{TOO_MANY} = 1;
+        if ($max_loans_allowed) {
+            $needsconfirmation{TOO_MANY}           = 1;
             $needsconfirmation{current_loan_count} = $current_loan_count;
-            $needsconfirmation{max_loans_allowed} = $max_loans_allowed;
+            $needsconfirmation{max_loans_allowed}  = $max_loans_allowed;
         }
     }
 
@@ -785,120 +834,128 @@ sub CanBookBeIssued {
     # ITEM CHECKING
     #
     if (   $item->{'notforloan'}
-        && $item->{'notforloan'} > 0 )
-    {
-        if(!C4::Context->preference("AllowNotForLoanOverride")){
+        && $item->{'notforloan'} > 0 ) {
+        if ( !C4::Context->preference("AllowNotForLoanOverride") ) {
             $issuingimpossible{NOT_FOR_LOAN} = 1;
-        }else{
+        } else {
             $needsconfirmation{NOT_FOR_LOAN_FORCING} = 1;
         }
-    }
-    elsif ( !$item->{'notforloan'} ){
+    } elsif ( !$item->{'notforloan'} ) {
+
         # we have to check itemtypes.notforloan also
-        if (C4::Context->preference('item-level_itypes')){
+        if ( C4::Context->preference('item-level_itypes') ) {
+
             # this should probably be a subroutine
-            my $sth = $dbh->prepare("SELECT notforloan FROM itemtypes WHERE itemtype = ?");
-            $sth->execute($item->{'itemtype'});
-            my $notforloan=$sth->fetchrow_hashref();
+            my $sth = $dbh->prepare(
+                "SELECT notforloan FROM itemtypes WHERE itemtype = ?");
+            $sth->execute( $item->{'itemtype'} );
+            my $notforloan = $sth->fetchrow_hashref();
             $sth->finish();
-            if ($notforloan->{'notforloan'}) {
-                if (!C4::Context->preference("AllowNotForLoanOverride")) {
+            if ( $notforloan->{'notforloan'} ) {
+                if ( !C4::Context->preference("AllowNotForLoanOverride") ) {
                     $issuingimpossible{NOT_FOR_LOAN} = 1;
                 } else {
                     $needsconfirmation{NOT_FOR_LOAN_FORCING} = 1;
                 }
             }
-        }
-        elsif ($biblioitem->{'notforloan'} == 1){
-            if (!C4::Context->preference("AllowNotForLoanOverride")) {
+        } elsif ( $biblioitem->{'notforloan'} == 1 ) {
+            if ( !C4::Context->preference("AllowNotForLoanOverride") ) {
                 $issuingimpossible{NOT_FOR_LOAN} = 1;
             } else {
                 $needsconfirmation{NOT_FOR_LOAN_FORCING} = 1;
             }
         }
     }
-    if ( $item->{'wthdrawn'} && $item->{'wthdrawn'} > 0 )
-    {
+    if ( $item->{'wthdrawn'} && $item->{'wthdrawn'} > 0 ) {
         $issuingimpossible{WTHDRAWN} = 1;
     }
     if (   $item->{'restricted'}
-        && $item->{'restricted'} == 1 )
-    {
+        && $item->{'restricted'} == 1 ) {
         $issuingimpossible{RESTRICTED} = 1;
     }
     if ( C4::Context->preference("IndependantBranches") ) {
         my $userenv = C4::Context->userenv;
         if ( ($userenv) && ( $userenv->{flags} % 2 != 1 ) ) {
             $issuingimpossible{ITEMNOTSAMEBRANCH} = 1
-              if ( $item->{C4::Context->preference("HomeOrHoldingBranch")} ne $userenv->{branch} );
-            $needsconfirmation{BORRNOTSAMEBRANCH} = GetBranchName( $borrower->{'branchcode'} )
-              if ( $borrower->{'branchcode'} ne $userenv->{branch} );
+                if (
+                $item->{ C4::Context->preference("HomeOrHoldingBranch") } ne
+                $userenv->{branch} );
+            $needsconfirmation{BORRNOTSAMEBRANCH} =
+                GetBranchName( $borrower->{'branchcode'} )
+                if ( $borrower->{'branchcode'} ne $userenv->{branch} );
         }
     }
 
     #
     # CHECK IF BOOK ALREADY ISSUED TO THIS BORROWER
     #
-    if ( $issue->{borrowernumber} && $issue->{borrowernumber} eq $borrower->{'borrowernumber'} )
-    {
+    if (   $issue->{borrowernumber}
+        && $issue->{borrowernumber} eq $borrower->{'borrowernumber'} ) {
 
         # Already issued to current borrower. Ask whether the loan should
         # be renewed.
-        my ($CanBookBeRenewed,$renewerror) = CanBookBeRenewed(
-            $borrower->{'borrowernumber'},
-            $item->{'itemnumber'}
-        );
+        my ( $CanBookBeRenewed, $renewerror ) =
+            CanBookBeRenewed( $borrower->{'borrowernumber'},
+            $item->{'itemnumber'} );
         if ( $CanBookBeRenewed == 0 ) {    # no more renewals allowed
             $issuingimpossible{NO_MORE_RENEWALS} = 1;
-        }
-        else {
+        } else {
             $needsconfirmation{RENEW_ISSUE} = 1;
         }
-    }
-    elsif ($issue->{borrowernumber}) {
+    } elsif ( $issue->{borrowernumber} ) {
 
         # issued to someone else
-        my $currborinfo =    C4::Members::GetMemberDetails( $issue->{borrowernumber} );
+        my $currborinfo =
+            C4::Members::GetMemberDetails( $issue->{borrowernumber} );
 
 #        warn "=>.$currborinfo->{'firstname'} $currborinfo->{'surname'} ($currborinfo->{'cardnumber'})";
         $needsconfirmation{ISSUED_TO_ANOTHER} = 1;
-        $needsconfirmation{issued_firstname} = $currborinfo->{'firstname'};
-        $needsconfirmation{issued_surname} = $currborinfo->{'surname'};
+        $needsconfirmation{issued_firstname}  = $currborinfo->{'firstname'};
+        $needsconfirmation{issued_surname}    = $currborinfo->{'surname'};
         $needsconfirmation{issued_cardnumber} = $currborinfo->{'cardnumber'};
-        $needsconfirmation{issued_borrowernumber} = $currborinfo->{'borrowernumber'};
+        $needsconfirmation{issued_borrowernumber} =
+            $currborinfo->{'borrowernumber'};
     }
 
     # See if the item is on reserve.
-    my ( $restype, $res ) = C4::Reserves::CheckReserves( $item->{'itemnumber'} );
+    my ( $restype, $res ) =
+        C4::Reserves::CheckReserves( $item->{'itemnumber'} );
     if ($restype) {
-               my $resbor = $res->{'borrowernumber'};
-               my ( $resborrower ) = C4::Members::GetMemberDetails( $resbor, 0 );
-               my $branches  = GetBranches();
-               my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'};
-        if ( $resbor ne $borrower->{'borrowernumber'} && $restype eq "Waiting" )
-        {
+        my $resbor = $res->{'borrowernumber'};
+        my ($resborrower) = C4::Members::GetMemberDetails( $resbor, 0 );
+        my $branches = GetBranches();
+        my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'};
+        if (   $resbor ne $borrower->{'borrowernumber'}
+            && $restype eq "Waiting" ) {
+
             # The item is on reserve and waiting, but has been
             # reserved by some other patron.
             $needsconfirmation{RESERVE_WAITING} = 1;
-            $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'};
-            $needsconfirmation{'ressurname'} = $resborrower->{'surname'};
-            $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'};
-            $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'};
+            $needsconfirmation{'resfirstname'}  = $resborrower->{'firstname'};
+            $needsconfirmation{'ressurname'}    = $resborrower->{'surname'};
+            $needsconfirmation{'rescardnumber'} =
+                $resborrower->{'cardnumber'};
+            $needsconfirmation{'resborrowernumber'} =
+                $resborrower->{'borrowernumber'};
             $needsconfirmation{'resbranchname'} = $branchname;
-            $needsconfirmation{'reswaitingdate'} = format_date($res->{'waitingdate'});
-        }
-        elsif ( $restype eq "Reserved" ) {
+            $needsconfirmation{'reswaitingdate'} =
+                format_date( $res->{'waitingdate'} );
+        } elsif ( $restype eq "Reserved" ) {
+
             # The item is on reserve for someone else.
-            $needsconfirmation{RESERVED} = 1;
+            $needsconfirmation{RESERVED}       = 1;
             $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'};
-            $needsconfirmation{'ressurname'} = $resborrower->{'surname'};
-            $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'};
-            $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'};
+            $needsconfirmation{'ressurname'}   = $resborrower->{'surname'};
+            $needsconfirmation{'rescardnumber'} =
+                $resborrower->{'cardnumber'};
+            $needsconfirmation{'resborrowernumber'} =
+                $resborrower->{'borrowernumber'};
             $needsconfirmation{'resbranchname'} = $branchname;
-            $needsconfirmation{'resreservedate'} = format_date($res->{'reservedate'});
+            $needsconfirmation{'resreservedate'} =
+                format_date( $res->{'reservedate'} );
         }
     }
-       return ( \%issuingimpossible, \%needsconfirmation );
+    return ( \%issuingimpossible, \%needsconfirmation );
 }
 
 =head2 AddIssue
@@ -940,173 +997,195 @@ AddIssue does the following things :
 =cut
 
 sub AddIssue {
-    my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode) = @_;
-    my $dbh = C4::Context->dbh;
-       my $barcodecheck=CheckValidBarcode($barcode);
+    my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode )
+        = @_;
+    my $dbh          = C4::Context->dbh;
+    my $barcodecheck = CheckValidBarcode($barcode);
+
     # $issuedate defaults to today.
-    if ( ! defined $issuedate ) {
+    if ( !defined $issuedate ) {
         $issuedate = strftime( "%Y-%m-%d", localtime );
-        # TODO: for hourly circ, this will need to be a C4::Dates object
-        # and all calls to AddIssue including issuedate will need to pass a Dates object.
-    }
-       if ($borrower and $barcode and $barcodecheck ne '0'){
-               # find which item we issue
-               my $item = GetItem('', $barcode) or return undef;       # if we don't get an Item, abort.
-               my $branch = _GetCircControlBranch($item,$borrower);
-               
-               # get actual issuing if there is one
-               my $actualissue = GetItemIssue( $item->{itemnumber});
-               
-               # get biblioinformation for this item
-               my $biblio = GetBiblioFromItemNumber($item->{itemnumber});
-               
-               #
-               # check if we just renew the issue.
-               #
-               if ($actualissue->{borrowernumber} eq $borrower->{'borrowernumber'}) {
-                       $datedue = AddRenewal(
-                               $borrower->{'borrowernumber'},
-                               $item->{'itemnumber'},
-                               $branch,
-                               $datedue,
-                $issuedate, # here interpreted as the renewal date
-                       );
-               }
-               else {
-        # it's NOT a renewal
-                       if ( $actualissue->{borrowernumber}) {
-                               # This book is currently on loan, but not to the person
-                               # who wants to borrow it now. mark it returned before issuing to the new borrower
-                               AddReturn(
-                                       $item->{'barcode'},
-                                       C4::Context->userenv->{'branch'}
-                               );
-                       }
-
-                       # See if the item is on reserve.
-                       my ( $restype, $res ) =
-                         C4::Reserves::CheckReserves( $item->{'itemnumber'} );
-                       if ($restype) {
-                               my $resbor = $res->{'borrowernumber'};
-                               if ( $resbor eq $borrower->{'borrowernumber'} ) {
-                                       # The item is reserved by the current patron
-                                       ModReserveFill($res);
-                               }
-                               elsif ( $restype eq "Waiting" ) {
-                                       # warn "Waiting";
-                                       # The item is on reserve and waiting, but has been
-                                       # reserved by some other patron.
-                               }
-                               elsif ( $restype eq "Reserved" ) {
-                                       # warn "Reserved";
-                                       # The item is reserved by someone else.
-                                       if ($cancelreserve) { # cancel reserves on this item
-                                               CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'});
-                                       }
-                               }
-                               if ($cancelreserve) {
-                                       CancelReserve($res->{'biblionumber'}, 0, $res->{'borrowernumber'});
-                               }
-                               else {
-                                       # set waiting reserve to first in reserve queue as book isn't waiting now
-                                       ModReserve(1,
-                                               $res->{'biblionumber'},
-                                               $res->{'borrowernumber'},
-                                               $res->{'branchcode'}
-                                       );
-                               }
-                       }
-
-                       # Starting process for transfer job (checking transfert and validate it if we have one)
-            my ($datesent) = GetTransfers($item->{'itemnumber'});
+
+# TODO: for hourly circ, this will need to be a C4::Dates object
+# and all calls to AddIssue including issuedate will need to pass a Dates object.
+    }
+    if ( $borrower and $barcode and $barcodecheck ne '0' ) {
+
+        # find which item we issue
+        my $item = GetItem( '', $barcode )
+            or return undef;    # if we don't get an Item, abort.
+        my $branch = _GetCircControlBranch( $item, $borrower );
+
+        # get actual issuing if there is one
+        my $actualissue = GetItemIssue( $item->{itemnumber} );
+
+        # get biblioinformation for this item
+        my $biblio = GetBiblioFromItemNumber( $item->{itemnumber} );
+
+        #
+        # check if we just renew the issue.
+        #
+        if ( $actualissue->{borrowernumber} eq $borrower->{'borrowernumber'} )
+        {
+            $datedue = AddRenewal(
+                $borrower->{'borrowernumber'},
+                $item->{'itemnumber'},
+                $branch,
+                $datedue,
+                $issuedate,    # here interpreted as the renewal date
+            );
+        } else {
+
+            # it's NOT a renewal
+            if ( $actualissue->{borrowernumber} ) {
+
+# This book is currently on loan, but not to the person
+# who wants to borrow it now. mark it returned before issuing to the new borrower
+                AddReturn( $item->{'barcode'},
+                    C4::Context->userenv->{'branch'} );
+            }
+
+            # See if the item is on reserve.
+            my ( $restype, $res ) =
+                C4::Reserves::CheckReserves( $item->{'itemnumber'} );
+            if ($restype) {
+                my $resbor = $res->{'borrowernumber'};
+                if ( $resbor eq $borrower->{'borrowernumber'} ) {
+
+                    # The item is reserved by the current patron
+                    ModReserveFill($res);
+                } elsif ( $restype eq "Waiting" ) {
+
+                    # warn "Waiting";
+                    # The item is on reserve and waiting, but has been
+                    # reserved by some other patron.
+                } elsif ( $restype eq "Reserved" ) {
+
+                    # warn "Reserved";
+                    # The item is reserved by someone else.
+                    if ($cancelreserve) {    # cancel reserves on this item
+                        CancelReserve( 0, $res->{'itemnumber'},
+                            $res->{'borrowernumber'} );
+                    }
+                }
+                if ($cancelreserve) {
+                    CancelReserve( $res->{'biblionumber'},
+                        0, $res->{'borrowernumber'} );
+                } else {
+
+     # set waiting reserve to first in reserve queue as book isn't waiting now
+                    ModReserve(
+                        1,
+                        $res->{'biblionumber'},
+                        $res->{'borrowernumber'},
+                        $res->{'branchcode'}
+                    );
+                }
+            }
+
+# Starting process for transfer job (checking transfert and validate it if we have one)
+            my ($datesent) = GetTransfers( $item->{'itemnumber'} );
             if ($datesent) {
-        #      updating line of branchtranfert to finish it, and changing the to branch value, implement a comment for visibility of this case (maybe for stats ....)
-                my $sth =
-                    $dbh->prepare(
+
+#      updating line of branchtranfert to finish it, and changing the to branch value, implement a comment for visibility of this case (maybe for stats ....)
+                my $sth = $dbh->prepare(
                     "UPDATE branchtransfers 
                         SET datearrived = now(),
                         tobranch = ?,
                         comments = 'Forced branchtransfer'
                     WHERE itemnumber= ? AND datearrived IS NULL"
-                    );
-                $sth->execute(C4::Context->userenv->{'branch'},$item->{'itemnumber'});
+                );
+                $sth->execute( C4::Context->userenv->{'branch'},
+                    $item->{'itemnumber'} );
             }
 
-        # Record in the database the fact that the book was issued.
-        my $sth =
-          $dbh->prepare(
+            # Record in the database the fact that the book was issued.
+            my $sth = $dbh->prepare(
                 "INSERT INTO issues 
                     (borrowernumber, itemnumber,issuedate, date_due, branchcode)
                 VALUES (?,?,?,?,?)"
-          );
-        unless ($datedue) {
-            my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'};
-            $datedue = CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $itype, $branch, $borrower );
+            );
+            unless ($datedue) {
+                my $itype =
+                    ( C4::Context->preference('item-level_itypes') )
+                    ? $biblio->{'itype'}
+                    : $biblio->{'itemtype'};
+                $datedue = CalcDateDue( C4::Dates->new( $issuedate, 'iso' ),
+                    $itype, $branch, $borrower );
 
-        }
-        $sth->execute(
-            $borrower->{'borrowernumber'},      # borrowernumber
-            $item->{'itemnumber'},              # itemnumber
-            $issuedate,                         # issuedate
-            $datedue->output('iso'),            # date_due
-            C4::Context->userenv->{'branch'}    # branchcode
-        );
-        $sth->finish;
-        if ( C4::Context->preference('ReturnToShelvingCart') ) { ## ReturnToShelvingCart is on, anything issued should be taken off the cart.
-          CartToShelf( $item->{'itemnumber'} );
-        }
-        $item->{'issues'}++;
-        ModItem({ issues           => $item->{'issues'},
-                  holdingbranch    => C4::Context->userenv->{'branch'},
-                  itemlost         => 0,
-                  datelastborrowed => C4::Dates->new()->output('iso'),
-                  onloan           => $datedue->output('iso'),
-                }, $item->{'biblionumber'}, $item->{'itemnumber'});
-        ModDateLastSeen( $item->{'itemnumber'} );
+            }
+            $sth->execute(
+                $borrower->{'borrowernumber'},      # borrowernumber
+                $item->{'itemnumber'},              # itemnumber
+                $issuedate,                         # issuedate
+                $datedue->output('iso'),            # date_due
+                C4::Context->userenv->{'branch'}    # branchcode
+            );
+            $sth->finish;
+            if ( C4::Context->preference('ReturnToShelvingCart') )
+            { ## ReturnToShelvingCart is on, anything issued should be taken off the cart.
+                CartToShelf( $item->{'itemnumber'} );
+            }
+            $item->{'issues'}++;
+            ModItem(
+                {   issues           => $item->{'issues'},
+                    holdingbranch    => C4::Context->userenv->{'branch'},
+                    itemlost         => 0,
+                    datelastborrowed => C4::Dates->new()->output('iso'),
+                    onloan           => $datedue->output('iso'),
+                },
+                $item->{'biblionumber'},
+                $item->{'itemnumber'}
+            );
+            ModDateLastSeen( $item->{'itemnumber'} );
+
+         # If it costs to borrow this book, charge it to the patron's account.
+            my ( $charge, $itemtype ) =
+                GetIssuingCharges( $item->{'itemnumber'},
+                $borrower->{'borrowernumber'} );
+            if ( $charge > 0 ) {
+                AddIssuingCharge( $item->{'itemnumber'},
+                    $borrower->{'borrowernumber'}, $charge );
+                $item->{'charge'} = $charge;
+            }
 
-        # If it costs to borrow this book, charge it to the patron's account.
-        my ( $charge, $itemtype ) = GetIssuingCharges(
-            $item->{'itemnumber'},
-            $borrower->{'borrowernumber'}
-        );
-        if ( $charge > 0 ) {
-            AddIssuingCharge(
+            # Record the fact that this book was issued.
+            &UpdateStats(
+                C4::Context->userenv->{'branch'},
+                'issue',
+                $charge,
+                ( $sipmode ? "SIP-$sipmode" : '' ),
                 $item->{'itemnumber'},
-                $borrower->{'borrowernumber'}, $charge
+                $item->{'itype'},
+                $borrower->{'borrowernumber'}
             );
-            $item->{'charge'} = $charge;
-        }
 
-        # Record the fact that this book was issued.
-        &UpdateStats(
-            C4::Context->userenv->{'branch'},
-            'issue', $charge,
-            ($sipmode ? "SIP-$sipmode" : ''), $item->{'itemnumber'},
-            $item->{'itype'}, $borrower->{'borrowernumber'}
-        );
-
-        # Send a checkout slip.
-        my $circulation_alert = 'C4::ItemCirculationAlertPreference';
-        my %conditions = (
-            branchcode   => $branch,
-            categorycode => $borrower->{categorycode},
-            item_type    => $item->{itype},
-            notification => 'CHECKOUT',
-        );
-        if ($circulation_alert->is_enabled_for(\%conditions)) {
-            SendCirculationAlert({
-                type     => 'CHECKOUT',
-                item     => $item,
-                borrower => $borrower,
-                branch   => $branch,
-            });
+            # Send a checkout slip.
+            my $circulation_alert = 'C4::ItemCirculationAlertPreference';
+            my %conditions        = (
+                branchcode   => $branch,
+                categorycode => $borrower->{categorycode},
+                item_type    => $item->{itype},
+                notification => 'CHECKOUT',
+            );
+            if ( $circulation_alert->is_enabled_for( \%conditions ) ) {
+                SendCirculationAlert(
+                    {   type     => 'CHECKOUT',
+                        item     => $item,
+                        borrower => $borrower,
+                        branch   => $branch,
+                    }
+                );
+            }
         }
-    }
 
-    logaction("CIRCULATION", "ISSUE", $borrower->{'borrowernumber'}, $biblio->{'biblionumber'})
-        if C4::Context->preference("IssueLog");
-  }
-  return ($datedue);   # not necessarily the same as when it came in!
+        logaction(
+            "CIRCULATION", "ISSUE",
+            $borrower->{'borrowernumber'},
+            $biblio->{'biblionumber'}
+        ) if C4::Context->preference("IssueLog");
+    }
+    return ($datedue);    # not necessarily the same as when it came in!
 }
 
 =head2 GetLoanLength
@@ -1120,58 +1199,57 @@ Get loan length for an itemtype, a borrower type and a branch
 sub GetLoanLength {
     my ( $borrowertype, $itemtype, $branchcode ) = @_;
     my $dbh = C4::Context->dbh;
-    my $sth =
-      $dbh->prepare(
-"select issuelength from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null"
-      );
+    my $sth = $dbh->prepare(
+        "select issuelength from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null"
+    );
+
 # warn "in get loan lenght $borrowertype $itemtype $branchcode ";
 # try to find issuelength & return the 1st available.
 # check with borrowertype, itemtype and branchcode, then without one of those parameters
     $sth->execute( $borrowertype, $itemtype, $branchcode );
     my $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
-      if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
+        if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
     $sth->execute( $borrowertype, "*", $branchcode );
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
-      if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
+        if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
     $sth->execute( "*", $itemtype, $branchcode );
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
-      if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
+        if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
     $sth->execute( "*", "*", $branchcode );
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
-      if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
+        if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
     $sth->execute( $borrowertype, $itemtype, "*" );
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
-      if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
+        if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
     $sth->execute( $borrowertype, "*", "*" );
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
-      if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
+        if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
     $sth->execute( "*", $itemtype, "*" );
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
-      if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
+        if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
     $sth->execute( "*", "*", "*" );
     $loanlength = $sth->fetchrow_hashref;
     return $loanlength->{issuelength}
-      if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
+        if defined($loanlength) && $loanlength->{issuelength} ne 'NULL';
 
     # if no rule is set => 21 days (hardcoded)
     return 21;
 }
 
-
 =head2 GetHardDueDate
 
   my ($hardduedate,$hardduedatecompare) = &GetHardDueDate($borrowertype,$itemtype,branchcode)
@@ -1183,52 +1261,59 @@ Get the Hard Due Date and it's comparison for an itemtype, a borrower type and a
 sub GetHardDueDate {
     my ( $borrowertype, $itemtype, $branchcode ) = @_;
     my $dbh = C4::Context->dbh;
-    my $sth =
-      $dbh->prepare(
-"select hardduedate, hardduedatecompare from issuingrules where categorycode=? and itemtype=? and branchcode=?"
-      );
+    my $sth = $dbh->prepare(
+        "select hardduedate, hardduedatecompare from issuingrules where categorycode=? and itemtype=? and branchcode=?"
+    );
     $sth->execute( $borrowertype, $itemtype, $branchcode );
     my $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
-      if defined($results) && $results->{hardduedate} ne 'NULL';
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ),
+        $results->{hardduedatecompare} )
+        if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( $borrowertype, "*", $branchcode );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
-      if defined($results) && $results->{hardduedate} ne 'NULL';
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ),
+        $results->{hardduedatecompare} )
+        if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( "*", $itemtype, $branchcode );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
-      if defined($results) && $results->{hardduedate} ne 'NULL';
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ),
+        $results->{hardduedatecompare} )
+        if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( "*", "*", $branchcode );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
-      if defined($results) && $results->{hardduedate} ne 'NULL';
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ),
+        $results->{hardduedatecompare} )
+        if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( $borrowertype, $itemtype, "*" );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
-      if defined($results) && $results->{hardduedate} ne 'NULL';
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ),
+        $results->{hardduedatecompare} )
+        if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( $borrowertype, "*", "*" );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
-      if defined($results) && $results->{hardduedate} ne 'NULL';
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ),
+        $results->{hardduedatecompare} )
+        if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( "*", $itemtype, "*" );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
-      if defined($results) && $results->{hardduedate} ne 'NULL';
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ),
+        $results->{hardduedatecompare} )
+        if defined($results) && $results->{hardduedate} ne 'NULL';
 
     $sth->execute( "*", "*", "*" );
     $results = $sth->fetchrow_hashref;
-    return (C4::Dates->new($results->{hardduedate}, 'iso'),$results->{hardduedatecompare})
-      if defined($results) && $results->{hardduedate} ne 'NULL';
+    return ( C4::Dates->new( $results->{hardduedate}, 'iso' ),
+        $results->{hardduedatecompare} )
+        if defined($results) && $results->{hardduedate} ne 'NULL';
 
     # if no rule is set => return undefined
-    return (undef, undef);
+    return ( undef, undef );
 }
 
 =head2 GetIssuingRule
@@ -1247,40 +1332,42 @@ Returns a hashref from the issuingrules table.
 sub GetIssuingRule {
     my ( $borrowertype, $itemtype, $branchcode ) = @_;
     my $dbh = C4::Context->dbh;
-    my $sth =  $dbh->prepare( "select * from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null"  );
+    my $sth = $dbh->prepare(
+        "select * from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null"
+    );
     my $irule;
 
-       $sth->execute( $borrowertype, $itemtype, $branchcode );
+    $sth->execute( $borrowertype, $itemtype, $branchcode );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     $sth->execute( $borrowertype, "*", $branchcode );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     $sth->execute( "*", $itemtype, $branchcode );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     $sth->execute( "*", "*", $branchcode );
     $irule = $sth->fetchrow_hashref;
-    return $irule if defined($irule) ;
+    return $irule if defined($irule);
 
     $sth->execute( $borrowertype, $itemtype, "*" );
     $irule = $sth->fetchrow_hashref;
-  &nbs