Bug 7785: Remove unused function columns() which uses a MySQLism.
[koha_gimpoz] / C4 / Overdues.pm
index 70ed23e..23e75f5 100644 (file)
@@ -2,6 +2,7 @@ package C4::Overdues;
 
 
 # Copyright 2000-2002 Katipo Communications
 
 
 # Copyright 2000-2002 Katipo Communications
+# copyright 2010 BibLibre
 #
 # This file is part of Koha.
 #
 #
 # This file is part of Koha.
 #
@@ -14,11 +15,12 @@ package C4::Overdues;
 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 #
 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 use strict;
 
 use strict;
+#use warnings; FIXME - Bug 2505
 use Date::Calc qw/Today Date_to_Days/;
 use Date::Manip qw/UnixDate/;
 use C4::Circulation;
 use Date::Calc qw/Today Date_to_Days/;
 use Date::Manip qw/UnixDate/;
 use C4::Circulation;
@@ -77,7 +79,6 @@ BEGIN {
        # subs to move to Members.pm
        push @EXPORT, qw(
         &CheckBorrowerDebarred
        # subs to move to Members.pm
        push @EXPORT, qw(
         &CheckBorrowerDebarred
-        &UpdateBorrowerDebarred
        );
        # subs to move to Biblio.pm
        push @EXPORT, qw(
        );
        # subs to move to Biblio.pm
        push @EXPORT, qw(
@@ -123,7 +124,7 @@ sub Getoverdues {
    SELECT issues.*, items.itype as itemtype, items.homebranch, items.barcode
      FROM issues 
 LEFT JOIN items       USING (itemnumber)
    SELECT issues.*, items.itype as itemtype, items.homebranch, items.barcode
      FROM issues 
 LEFT JOIN items       USING (itemnumber)
-    WHERE date_due < now() 
+    WHERE date_due < NOW()
 ";
     } else {
         $statement = "
 ";
     } else {
         $statement = "
@@ -131,7 +132,7 @@ LEFT JOIN items       USING (itemnumber)
      FROM issues 
 LEFT JOIN items       USING (itemnumber)
 LEFT JOIN biblioitems USING (biblioitemnumber)
      FROM issues 
 LEFT JOIN items       USING (itemnumber)
 LEFT JOIN biblioitems USING (biblioitemnumber)
-    WHERE date_due < now() 
+    WHERE date_due < NOW()
 ";
     }
 
 ";
     }
 
@@ -155,43 +156,62 @@ LEFT JOIN biblioitems USING (biblioitemnumber)
 
 =head2 checkoverdues
 
 
 =head2 checkoverdues
 
-( $count, $overdueitems )=checkoverdues( $borrowernumber, $dbh );
+    ($count, $overdueitems) = checkoverdues($borrowernumber);
 
 
-Not exported
+Returns a count and a list of overdueitems for a given borrowernumber
 
 =cut
 
 sub checkoverdues {
 
 =cut
 
 sub checkoverdues {
-
-# From Main.pm, modified to return a list of overdueitems, in addition to a count
-#checks whether a borrower has overdue items
-    my ( $borrowernumber, $dbh ) = @_;
-    my @datearr = localtime;
-    my $today   =
-      ( $datearr[5] + 1900 ) . "-" . ( $datearr[4] + 1 ) . "-" . $datearr[3];
-    my @overdueitems;
-    my $count = 0;
-    my $sth   = $dbh->prepare(
-        "SELECT * FROM issues
-         LEFT JOIN items ON issues.itemnumber      = items.itemnumber
-         LEFT JOIN biblio ON items.biblionumber=biblio.biblionumber
+    my $borrowernumber = shift or return;
+    # don't select biblioitems.marc or biblioitems.marcxml... too slow on large systems
+    my $sth = C4::Context->dbh->prepare(
+        "SELECT biblio.*, items.*, issues.*,
+                biblioitems.volume,
+                biblioitems.number,
+                biblioitems.itemtype,
+                biblioitems.isbn,
+                biblioitems.issn,
+                biblioitems.publicationyear,
+                biblioitems.publishercode,
+                biblioitems.volumedate,
+                biblioitems.volumedesc,
+                biblioitems.collectiontitle,
+                biblioitems.collectionissn,
+                biblioitems.collectionvolume,
+                biblioitems.editionstatement,
+                biblioitems.editionresponsibility,
+                biblioitems.illus,
+                biblioitems.pages,
+                biblioitems.notes,
+                biblioitems.size,
+                biblioitems.place,
+                biblioitems.lccn,
+                biblioitems.url,
+                biblioitems.cn_source,
+                biblioitems.cn_class,
+                biblioitems.cn_item,
+                biblioitems.cn_suffix,
+                biblioitems.cn_sort,
+                biblioitems.totalissues
+         FROM issues
+         LEFT JOIN items       ON issues.itemnumber      = items.itemnumber
+         LEFT JOIN biblio      ON items.biblionumber     = biblio.biblionumber
          LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber
             WHERE issues.borrowernumber  = ?
          LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber
             WHERE issues.borrowernumber  = ?
-                AND issues.date_due < ?"
+            AND   issues.date_due < NOW()"
     );
     );
-    $sth->execute( $borrowernumber, $today );
-    while ( my $data = $sth->fetchrow_hashref ) {
-        push( @overdueitems, $data );
-        $count++;
-    }
-    $sth->finish;
-    return ( $count, \@overdueitems );
+    # FIXME: SELECT * across 4 tables?  do we really need the marc AND marcxml blobs??
+    $sth->execute($borrowernumber);
+    my $results = $sth->fetchall_arrayref({});
+    return ( scalar(@$results), $results);  # returning the count and the results is silly
 }
 
 =head2 CalcFine
 
 }
 
 =head2 CalcFine
 
-  ($amount, $chargename, $daycount, $daycounttotal) =
-    &CalcFine($item, $categorycode, $branch, $days_overdue, $description, $start_date, $end_date );
+    ($amount, $chargename,  $daycounttotal) = &CalcFine($item,
+                                  $categorycode, $branch,
+                                  $start_dt, $end_dt );
 
 Calculates the fine for a book.
 
 
 Calculates the fine for a book.
 
@@ -209,13 +229,8 @@ the book.
 
 C<$branchcode> is the library (string) whose issuingrules govern this transaction.
 
 
 C<$branchcode> is the library (string) whose issuingrules govern this transaction.
 
-C<$days_overdue> is the number of days elapsed since the book's due date.
-  NOTE: supplying days_overdue is deprecated.
-
-C<$start_date> & C<$end_date> are C4::Dates objects 
+C<$start_date> & C<$end_date> are DateTime objects
 defining the date range over which to determine the fine.
 defining the date range over which to determine the fine.
-Note that if these are defined, we ignore C<$difference> and C<$dues> , 
-but retain these for backwards-comptibility with extant fines scripts.
 
 Fines scripts should just supply the date range over which to calculate the fine.
 
 
 Fines scripts should just supply the date range over which to calculate the fine.
 
@@ -229,8 +244,6 @@ the categoryitem table, whatever that is.
 C<$daycount> is the number of days between start and end dates, Calendar adjusted (where needed), 
 minus any applicable grace period.
 
 C<$daycount> is the number of days between start and end dates, Calendar adjusted (where needed), 
 minus any applicable grace period.
 
-C<$daycounttotal> is C<$daycount> without consideration of grace period.
-
 FIXME - What is chargename supposed to be ?
 
 FIXME: previously attempted to return C<$message> as a text message, either "First Notice", "Second Notice",
 FIXME - What is chargename supposed to be ?
 
 FIXME: previously attempted to return C<$message> as a text message, either "First Notice", "Second Notice",
@@ -239,55 +252,71 @@ or "Final Notice".  But CalcFine never defined any value.
 =cut
 
 sub CalcFine {
 =cut
 
 sub CalcFine {
-    my ( $item, $bortype, $branchcode, $difference ,$dues , $start_date, $end_date  ) = @_;
-       $debug and warn sprintf("CalcFine(%s, %s, %s, %s, %s, %s, %s)",
-                       ($item ? '{item}' : 'UNDEF'), 
-                       ($bortype    || 'UNDEF'), 
-                       ($branchcode || 'UNDEF'), 
-                       ($difference || 'UNDEF'), 
-                       ($dues       || 'UNDEF'), 
-                       ($start_date ? ($start_date->output('iso') || 'Not a C4::Dates object') : 'UNDEF'), 
-                       (  $end_date ? (  $end_date->output('iso') || 'Not a C4::Dates object') : 'UNDEF')
-       );
-    my $dbh = C4::Context->dbh;
+    my ( $item, $bortype, $branchcode, $due_dt, $end_date  ) = @_;
+    my $start_date = $due_dt->clone();
+    # get issuingrules (fines part will be used)
+    my $data = C4::Circulation::GetIssuingRule($bortype, $item->{itemtype}, $branchcode);
+    my $fine_unit = $data->{lengthunit};
+    $fine_unit ||= 'days';
+
+    my $chargeable_units = _get_chargeable_units($fine_unit, $start_date, $end_date, $branchcode);
+    my $units_minus_grace = $chargeable_units - $data->{firstremind};
     my $amount = 0;
     my $amount = 0;
-       my $daystocharge;
-       # get issuingrules (fines part will be used)
-    $debug and warn sprintf("CalcFine calling GetIssuingRule(%s, %s, %s)", $bortype, $item->{'itemtype'}, $branchcode);
-    my $data = C4::Circulation::GetIssuingRule($bortype, $item->{'itemtype'}, $branchcode);
-       if($difference) {
-               # if $difference is supplied, the difference has already been calculated, but we still need to adjust for the calendar.
-       # use copy-pasted functions from calendar module.  (deprecated -- these functions will be removed from C4::Overdues ).
-           my $countspecialday    =    &GetSpecialHolidays($dues,$item->{itemnumber});
-           my $countrepeatableday = &GetRepeatableHolidays($dues,$item->{itemnumber},$difference);    
-           my $countalldayclosed  = $countspecialday + $countrepeatableday;
-           $daystocharge = $difference - $countalldayclosed;
-       } else {
-               # if $difference is not supplied, we have C4::Dates objects giving us the date range, and we use the calendar module.
-               if(C4::Context->preference('finesCalendar') eq 'noFinesWhenClosed') {
-                       my $calendar = C4::Calendar->new( branchcode => $branchcode );
-                       $daystocharge = $calendar->daysBetween( $start_date, $end_date );
-               } else {
-                       $daystocharge = Date_to_Days(split('-',$end_date->output('iso'))) - Date_to_Days(split('-',$start_date->output('iso')));
-               }
-       }
-       # correct for grace period.
-       my $days_minus_grace = $daystocharge - $data->{'firstremind'};
-    if ($data->{'chargeperiod'} > 0 && $days_minus_grace > 0 ) { 
-        $amount = int($days_minus_grace / $data->{'chargeperiod'}) * $data->{'fine'};
+    if ($data->{'chargeperiod'}  && $units_minus_grace  ) {
+        $amount = int($chargeable_units / $data->{'chargeperiod'}) * $data->{'fine'};# TODO fine calc should be in cents
     } else {
         # a zero (or null)  chargeperiod means no charge.
     }
     } else {
         # a zero (or null)  chargeperiod means no charge.
     }
-       $amount = C4::Context->preference('maxFine') if(C4::Context->preference('maxFine') && ( $amount > C4::Context->preference('maxFine')));
-       $debug and warn sprintf("CalcFine returning (%s, %s, %s, %s)", $amount, $data->{'chargename'}, $days_minus_grace, $daystocharge);
-    return ($amount, $data->{'chargename'}, $days_minus_grace, $daystocharge);
+    if(C4::Context->preference('maxFine') && ( $amount > C4::Context->preference('maxFine'))) {
+        $amount = C4::Context->preference('maxFine');
+    }
+    return ($amount, $data->{chargename}, $units_minus_grace);
     # FIXME: chargename is NEVER populated anywhere.
 }
 
 
     # FIXME: chargename is NEVER populated anywhere.
 }
 
 
+=head2 _get_chargeable_units
+
+    _get_chargeable_units($unit, $start_date_ $end_date, $branchcode);
+
+return integer value of units between C<$start_date> and C<$end_date>, factoring in holidays for C<$branchcode>.
+
+C<$unit> is 'days' or 'hours' (default is 'days').
+
+C<$start_date> and C<$end_date> are the two DateTimes to get the number of units between.
+
+C<$branchcode> is the branch whose calendar to use for finding holidays.
+
+=cut
+
+sub _get_chargeable_units {
+    my ($unit, $dt1, $dt2, $branchcode) = @_;
+    my $charge_units = 0;
+    my $charge_duration;
+    if ($unit eq 'hours') {
+        if(C4::Context->preference('finesCalendar') eq 'noFinesWhenClosed') {
+            my $calendar = Koha::Calendar->new( branchcode => $branchcode );
+            $charge_duration = $calendar->hours_between( $dt1, $dt2 );
+        } else {
+            $charge_duration = $dt2->delta_ms( $dt1 );
+        }
+        return $charge_duration->in_units('hours');
+    }
+    else { # days
+        if(C4::Context->preference('finesCalendar') eq 'noFinesWhenClosed') {
+            my $calendar = Koha::Calendar->new( branchcode => $branchcode );
+            $charge_duration = $calendar->days_between( $dt1, $dt2 );
+        } else {
+            $charge_duration = $dt2->delta_days( $dt1 );
+        }
+        return $charge_duration->in_units('days');
+    }
+}
+
+
 =head2 GetSpecialHolidays
 
 =head2 GetSpecialHolidays
 
-&GetSpecialHolidays($date_dues,$itemnumber);
+    &GetSpecialHolidays($date_dues,$itemnumber);
 
 return number of special days  between date of the day and date due
 
 
 return number of special days  between date of the day and date due
 
@@ -298,49 +327,54 @@ C<$itemnumber> is the book's item number.
 =cut
 
 sub GetSpecialHolidays {
 =cut
 
 sub GetSpecialHolidays {
-my ($date_dues,$itemnumber) = @_;
-# calcul the today date
-my $today = join "-", &Today();
-
-# return the holdingbranch
-my $iteminfo=GetIssuesIteminfo($itemnumber);
-# use sql request to find all date between date_due and today
-my $dbh = C4::Context->dbh;
-my $query=qq|SELECT DATE_FORMAT(concat(year,'-',month,'-',day),'%Y-%m-%d')as date 
+    my ( $date_dues, $itemnumber ) = @_;
+
+    # calcul the today date
+    my $today = join "-", &Today();
+
+    # return the holdingbranch
+    my $iteminfo = GetIssuesIteminfo($itemnumber);
+
+    # use sql request to find all date between date_due and today
+    my $dbh = C4::Context->dbh;
+    my $query =
+      qq|SELECT DATE_FORMAT(concat(year,'-',month,'-',day),'%Y-%m-%d') as date
 FROM `special_holidays`
 WHERE DATE_FORMAT(concat(year,'-',month,'-',day),'%Y-%m-%d') >= ?
 AND   DATE_FORMAT(concat(year,'-',month,'-',day),'%Y-%m-%d') <= ?
 AND branchcode=?
 |;
 FROM `special_holidays`
 WHERE DATE_FORMAT(concat(year,'-',month,'-',day),'%Y-%m-%d') >= ?
 AND   DATE_FORMAT(concat(year,'-',month,'-',day),'%Y-%m-%d') <= ?
 AND branchcode=?
 |;
-my @result=GetWdayFromItemnumber($itemnumber);
-my @result_date;
-my $wday;
-my $dateinsec;
-my $sth = $dbh->prepare($query);
-$sth->execute($date_dues,$today,$iteminfo->{'branchcode'});
-
-while ( my $special_date=$sth->fetchrow_hashref){
-    push (@result_date,$special_date);
-}
+    my @result = GetWdayFromItemnumber($itemnumber);
+    my @result_date;
+    my $wday;
+    my $dateinsec;
+    my $sth = $dbh->prepare($query);
+    $sth->execute( $date_dues, $today, $iteminfo->{'branchcode'} )
+      ;    # FIXME: just use NOW() in SQL instead of passing in $today
+
+    while ( my $special_date = $sth->fetchrow_hashref ) {
+        push( @result_date, $special_date );
+    }
 
 
-my $specialdaycount=scalar(@result_date);
+    my $specialdaycount = scalar(@result_date);
 
 
-    for (my $i=0;$i<scalar(@result_date);$i++){
-        $dateinsec=UnixDate($result_date[$i]->{'date'},"%o");
-        (undef,undef,undef,undef,undef,undef,$wday,undef,undef) =localtime($dateinsec);
-        for (my $j=0;$j<scalar(@result);$j++){
-            if ($wday == ($result[$j]->{'weekday'})){
-            $specialdaycount --;
+    for ( my $i = 0 ; $i < scalar(@result_date) ; $i++ ) {
+        $dateinsec = UnixDate( $result_date[$i]->{'date'}, "%o" );
+        ( undef, undef, undef, undef, undef, undef, $wday, undef, undef ) =
+          localtime($dateinsec);
+        for ( my $j = 0 ; $j < scalar(@result) ; $j++ ) {
+            if ( $wday == ( $result[$j]->{'weekday'} ) ) {
+                $specialdaycount--;
             }
         }
     }
 
             }
         }
     }
 
-return $specialdaycount;
+    return $specialdaycount;
 }
 
 =head2 GetRepeatableHolidays
 
 }
 
 =head2 GetRepeatableHolidays
 
-&GetRepeatableHolidays($date_dues, $itemnumber, $difference,);
+    &GetRepeatableHolidays($date_dues, $itemnumber, $difference,);
 
 return number of day closed between date of the day and date due
 
 
 return number of day closed between date of the day and date due
 
@@ -352,33 +386,33 @@ C<$difference> numbers of between day date of the day and date due
 
 =cut
 
 
 =cut
 
-sub GetRepeatableHolidays{
-my ($date_dues,$itemnumber,$difference) = @_;
-my $dateinsec=UnixDate($date_dues,"%o");
-my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime($dateinsec);
-my @result=GetWdayFromItemnumber($itemnumber);
-my @dayclosedcount;
-my $j;
-
-for (my $i=0;$i<scalar(@result);$i++){
-    my $k=$wday;
-
-        for ( $j=0;$j<$difference;$j++){
-            if ($result[$i]->{'weekday'} == $k)
-                    {
-                    push ( @dayclosedcount ,$k);
+sub GetRepeatableHolidays {
+    my ( $date_dues, $itemnumber, $difference ) = @_;
+    my $dateinsec = UnixDate( $date_dues, "%o" );
+    my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
+      localtime($dateinsec);
+    my @result = GetWdayFromItemnumber($itemnumber);
+    my @dayclosedcount;
+    my $j;
+
+    for ( my $i = 0 ; $i < scalar(@result) ; $i++ ) {
+        my $k = $wday;
+
+        for ( $j = 0 ; $j < $difference ; $j++ ) {
+            if ( $result[$i]->{'weekday'} == $k ) {
+                push( @dayclosedcount, $k );
             }
             }
-        $k++;
-        ($k=0) if($k eq 7);
+            $k++;
+            ( $k = 0 ) if ( $k eq 7 );
         }
     }
         }
     }
-return scalar(@dayclosedcount);
+    return scalar(@dayclosedcount);
 }
 
 
 =head2 GetWayFromItemnumber
 
 }
 
 
 =head2 GetWayFromItemnumber
 
-&Getwdayfromitemnumber($itemnumber);
+    &Getwdayfromitemnumber($itemnumber);
 
 return the different week day from repeatable_holidays table
 
 
 return the different week day from repeatable_holidays table
 
@@ -386,29 +420,27 @@ C<$itemnumber> is  item number.
 
 =cut
 
 
 =cut
 
-sub GetWdayFromItemnumber{
-my($itemnumber)=@_;
-my $iteminfo=GetIssuesIteminfo($itemnumber);
-my @result;
-my $dbh = C4::Context->dbh;
-my $query = qq|SELECT weekday  
+sub GetWdayFromItemnumber {
+    my ($itemnumber) = @_;
+    my $iteminfo = GetIssuesIteminfo($itemnumber);
+    my @result;
+    my $query = qq|SELECT weekday
     FROM repeatable_holidays
     WHERE branchcode=?
 |;
     FROM repeatable_holidays
     WHERE branchcode=?
 |;
-my $sth = $dbh->prepare($query);
-    #  print $query;
+    my $sth = C4::Context->dbh->prepare($query);
 
 
-$sth->execute($iteminfo->{'branchcode'});
-while ( my $weekday=$sth->fetchrow_hashref){
-    push (@result,$weekday);
+    $sth->execute( $iteminfo->{'branchcode'} );
+    while ( my $weekday = $sth->fetchrow_hashref ) {
+        push( @result, $weekday );
     }
     }
-return @result;
+    return @result;
 }
 
 
 =head2 GetIssuesIteminfo
 
 }
 
 
 =head2 GetIssuesIteminfo
 
-&GetIssuesIteminfo($itemnumber);
+    &GetIssuesIteminfo($itemnumber);
 
 return all data from issues about item
 
 
 return all data from issues about item
 
@@ -416,23 +448,23 @@ C<$itemnumber> is  item number.
 
 =cut
 
 
 =cut
 
-sub GetIssuesIteminfo{
-my($itemnumber)=@_;
-my $dbh = C4::Context->dbh;
-my $query = qq|SELECT *  
+sub GetIssuesIteminfo {
+    my ($itemnumber) = @_;
+    my $dbh          = C4::Context->dbh;
+    my $query        = qq|SELECT *
     FROM issues
     WHERE itemnumber=?
     FROM issues
     WHERE itemnumber=?
-|;
-my $sth = $dbh->prepare($query);
-$sth->execute($itemnumber);
-my ($issuesinfo)=$sth->fetchrow_hashref;
-return $issuesinfo;
+    |;
+    my $sth = $dbh->prepare($query);
+    $sth->execute($itemnumber);
+    my ($issuesinfo) = $sth->fetchrow_hashref;
+    return $issuesinfo;
 }
 
 
 =head2 UpdateFine
 
 }
 
 
 =head2 UpdateFine
 
-  &UpdateFine($itemnumber, $borrowernumber, $amount, $type, $description);
+    &UpdateFine($itemnumber, $borrowernumber, $amount, $type, $description);
 
 (Note: the following is mostly conjecture and guesswork.)
 
 
 (Note: the following is mostly conjecture and guesswork.)
 
@@ -484,7 +516,7 @@ sub UpdateFine {
        #       "Pay" is Payment
        #   "REF" is Cash Refund
     my $sth = $dbh->prepare(
        #       "Pay" is Payment
        #   "REF" is Cash Refund
     my $sth = $dbh->prepare(
-        "SELECT * FROM accountlines 
+        "SELECT * FROM accountlines
                WHERE itemnumber=?
                AND   borrowernumber=?
                AND   accounttype IN ('FU','O','F','M')
                WHERE itemnumber=?
                AND   borrowernumber=?
                AND   accounttype IN ('FU','O','F','M')
@@ -494,12 +526,12 @@ sub UpdateFine {
 
     if ( my $data = $sth->fetchrow_hashref ) {
 
 
     if ( my $data = $sth->fetchrow_hashref ) {
 
-               # we're updating an existing fine.  Only modify if we're adding to the charge.
+               # we're updating an existing fine.  Only modify if amount changed
         # Note that in the current implementation, you cannot pay against an accruing fine
         # (i.e. , of accounttype 'FU').  Doing so will break accrual.
        if ( $data->{'amount'} != $amount ) {
             my $diff = $amount - $data->{'amount'};
         # Note that in the current implementation, you cannot pay against an accruing fine
         # (i.e. , of accounttype 'FU').  Doing so will break accrual.
        if ( $data->{'amount'} != $amount ) {
             my $diff = $amount - $data->{'amount'};
-            $diff = 0 if ( $data->{amount} > $amount);
+           #3341: diff could be positive or negative!
             my $out  = $data->{'amountoutstanding'} + $diff;
             my $query = "
                 UPDATE accountlines
             my $out  = $data->{'amountoutstanding'} + $diff;
             my $query = "
                 UPDATE accountlines
@@ -559,7 +591,7 @@ sub UpdateFine {
 
 =head2 BorType
 
 
 =head2 BorType
 
-  $borrower = &BorType($borrowernumber);
+    $borrower = &BorType($borrowernumber);
 
 Looks up a patron by borrower number.
 
 
 Looks up a patron by borrower number.
 
@@ -575,19 +607,17 @@ sub BorType {
     my ($borrowernumber) = @_;
     my $dbh              = C4::Context->dbh;
     my $sth              = $dbh->prepare(
     my ($borrowernumber) = @_;
     my $dbh              = C4::Context->dbh;
     my $sth              = $dbh->prepare(
-        "SELECT * from borrowers 
+        "SELECT * from borrowers
       LEFT JOIN categories ON borrowers.categorycode=categories.categorycode 
       WHERE borrowernumber=?"
     );
     $sth->execute($borrowernumber);
       LEFT JOIN categories ON borrowers.categorycode=categories.categorycode 
       WHERE borrowernumber=?"
     );
     $sth->execute($borrowernumber);
-    my $data = $sth->fetchrow_hashref;
-    $sth->finish;
-    return ($data);
+    return $sth->fetchrow_hashref;
 }
 
 =head2 ReplacementCost
 
 }
 
 =head2 ReplacementCost
 
-  $cost = &ReplacementCost($itemnumber);
+    $cost = &ReplacementCost($itemnumber);
 
 Returns the replacement cost of the item with the given item number.
 
 
 Returns the replacement cost of the item with the given item number.
 
@@ -601,15 +631,14 @@ sub ReplacementCost {
       $dbh->prepare("Select replacementprice from items where itemnumber=?");
     $sth->execute($itemnum);
 
       $dbh->prepare("Select replacementprice from items where itemnumber=?");
     $sth->execute($itemnum);
 
-    # FIXME - Use fetchrow_array or something.
+    # FIXME - Use fetchrow_array or a slice.
     my $data = $sth->fetchrow_hashref;
     my $data = $sth->fetchrow_hashref;
-    $sth->finish;
     return ( $data->{'replacementprice'} );
 }
 
 =head2 GetFine
 
     return ( $data->{'replacementprice'} );
 }
 
 =head2 GetFine
 
-$data->{'sum(amountoutstanding)'} = &GetFine($itemnum,$borrowernumber);
+    $data->{'sum(amountoutstanding)'} = &GetFine($itemnum,$borrowernumber);
 
 return the total of fine
 
 
 return the total of fine
 
@@ -623,13 +652,16 @@ C<$borrowernumber> is the borrowernumber
 sub GetFine {
     my ( $itemnum, $borrowernumber ) = @_;
     my $dbh   = C4::Context->dbh();
 sub GetFine {
     my ( $itemnum, $borrowernumber ) = @_;
     my $dbh   = C4::Context->dbh();
-    my $query = "SELECT sum(amountoutstanding) FROM accountlines 
-    where accounttype like 'F%'  
-  AND amountoutstanding > 0 AND itemnumber = ? AND borrowernumber=?";
+    my $query = q|SELECT sum(amountoutstanding) as fineamount FROM accountlines
+    where accounttype like 'F%'
+  AND amountoutstanding > 0 AND itemnumber = ? AND borrowernumber=?|;
     my $sth = $dbh->prepare($query);
     $sth->execute( $itemnum, $borrowernumber );
     my $sth = $dbh->prepare($query);
     $sth->execute( $itemnum, $borrowernumber );
-    my $data = $sth->fetchrow_hashref();
-    return ( $data->{'sum(amountoutstanding)'} );
+    my $fine = $sth->fetchrow_hashref();
+    if ($fine->{fineamount}) {
+        return $fine->{fineamount};
+    }
+    return 0;
 }
 
 
 }
 
 
@@ -638,7 +670,7 @@ sub GetFine {
 FIXME - This sub should be deprecated and removed.
 It ignores branch and defaults.
 
 FIXME - This sub should be deprecated and removed.
 It ignores branch and defaults.
 
-$data = &GetIssuingRules($itemtype,$categorycode);
+    $data = &GetIssuingRules($itemtype,$categorycode);
 
 Looks up for all issuingrules an item info 
 
 
 Looks up for all issuingrules an item info 
 
@@ -655,7 +687,7 @@ sub GetIssuingRules {
        warn "GetIssuingRules is deprecated: use GetIssuingRule from C4::Circulation instead.";
    my ($itemtype,$categorycode)=@_;
    my $dbh   = C4::Context->dbh();    
        warn "GetIssuingRules is deprecated: use GetIssuingRule from C4::Circulation instead.";
    my ($itemtype,$categorycode)=@_;
    my $dbh   = C4::Context->dbh();    
-   my $query=qq|SELECT * 
+   my $query=qq|SELECT *
         FROM issuingrules
         WHERE issuingrules.itemtype=?
             AND issuingrules.categorycode=?
         FROM issuingrules
         WHERE issuingrules.itemtype=?
             AND issuingrules.categorycode=?
@@ -670,7 +702,7 @@ sub GetIssuingRules {
 sub ReplacementCost2 {
     my ( $itemnum, $borrowernumber ) = @_;
     my $dbh   = C4::Context->dbh();
 sub ReplacementCost2 {
     my ( $itemnum, $borrowernumber ) = @_;
     my $dbh   = C4::Context->dbh();
-    my $query = "SELECT amountoutstanding 
+    my $query = "SELECT amountoutstanding
          FROM accountlines
              WHERE accounttype like 'L'
          AND amountoutstanding > 0
          FROM accountlines
              WHERE accounttype like 'L'
          AND amountoutstanding > 0
@@ -685,7 +717,7 @@ sub ReplacementCost2 {
 
 =head2 GetNextIdNotify
 
 
 =head2 GetNextIdNotify
 
-($result) = &GetNextIdNotify($reference);
+    ($result) = &GetNextIdNotify($reference);
 
 Returns the new file number
 
 
 Returns the new file number
 
@@ -695,40 +727,36 @@ C<$reference> contains the beggining of file number
 
 =cut
 
 
 =cut
 
-
-
 sub GetNextIdNotify {
 sub GetNextIdNotify {
-my ($reference)=@_;
-my $query=qq|SELECT max(notify_id) 
+    my ($reference) = @_;
+    my $query = qq|SELECT max(notify_id)
          FROM accountlines
          WHERE notify_id  like \"$reference%\"
          |;
          FROM accountlines
          WHERE notify_id  like \"$reference%\"
          |;
-# AND borrowernumber=?|;   
-my $dbh = C4::Context->dbh;
-my $sth=$dbh->prepare($query);
-$sth->execute();
-my $result=$sth->fetchrow;
-$sth->finish;
-my $count;
-    if ($result eq '')
-    {
-    ($result=$reference."01")  ;
-    }else
-    {
-    $count=substr($result,6)+1;
-     
-    if($count<10){
-     ($count = "0".$count);
-     }
-     $result=$reference.$count;
-     }
-return $result;
-}
 
 
+    # AND borrowernumber=?|;
+    my $dbh = C4::Context->dbh;
+    my $sth = $dbh->prepare($query);
+    $sth->execute();
+    my $result = $sth->fetchrow;
+    my $count;
+    if ( $result eq '' ) {
+        ( $result = $reference . "01" );
+    }
+    else {
+        $count = substr( $result, 6 ) + 1;
+
+        if ( $count < 10 ) {
+            ( $count = "0" . $count );
+        }
+        $result = $reference . $count;
+    }
+    return $result;
+}
 
 =head2 NumberNotifyId
 
 
 =head2 NumberNotifyId
 
-(@notify) = &NumberNotifyId($borrowernumber);
+    (@notify) = &NumberNotifyId($borrowernumber);
 
 Returns amount for all file per borrowers
 C<@notify> array contains all file per borrowers
 
 Returns amount for all file per borrowers
 C<@notify> array contains all file per borrowers
@@ -744,20 +772,17 @@ sub NumberNotifyId{
             FROM accountlines
             WHERE borrowernumber=?|;
     my @notify;
             FROM accountlines
             WHERE borrowernumber=?|;
     my @notify;
-    my $sth=$dbh->prepare($query);
-        $sth->execute($borrowernumber);
-          while ( my ($numberofnotify)=$sth->fetchrow){
-    push (@notify,$numberofnotify);
+    my $sth = $dbh->prepare($query);
+    $sth->execute($borrowernumber);
+    while ( my ($numberofnotify) = $sth->fetchrow ) {
+        push( @notify, $numberofnotify );
     }
     }
-    $sth->finish;
-
     return (@notify);
     return (@notify);
-
 }
 
 =head2 AmountNotify
 
 }
 
 =head2 AmountNotify
 
-($totalnotify) = &AmountNotify($notifyid);
+    ($totalnotify) = &AmountNotify($notifyid);
 
 Returns amount for all file per borrowers
 C<$notifyid> is the file number
 
 Returns amount for all file per borrowers
 C<$notifyid> is the file number
@@ -784,7 +809,7 @@ sub AmountNotify{
 
 =head2 GetNotifyId
 
 
 =head2 GetNotifyId
 
-($notify_id) = &GetNotifyId($borrowernumber,$itemnumber);
+    ($notify_id) = &GetNotifyId($borrowernumber,$itemnumber);
 
 Returns the file number per borrower and itemnumber
 
 
 Returns the file number per borrower and itemnumber
 
@@ -797,25 +822,26 @@ C<$notify_id> contains the file number for the borrower number nad item number
 
 =cut
 
 
 =cut
 
- sub GetNotifyId {
my ($borrowernumber,$itemnumber)=@_;
- my $query=qq|SELECT notify_id 
+sub GetNotifyId {
   my ( $borrowernumber, $itemnumber ) = @_;
+    my $query = qq|SELECT notify_id
            FROM accountlines
            WHERE borrowernumber=?
           AND itemnumber=?
            AND (accounttype='FU' or accounttype='O')|;
            FROM accountlines
            WHERE borrowernumber=?
           AND itemnumber=?
            AND (accounttype='FU' or accounttype='O')|;
- my $dbh = C4::Context->dbh;
- my $sth=$dbh->prepare($query);
- $sth->execute($borrowernumber,$itemnumber);
- my ($notify_id)=$sth->fetchrow;
- $sth->finish;
- return ($notify_id);
-
- }
+    my $dbh = C4::Context->dbh;
+    my $sth = $dbh->prepare($query);
+    $sth->execute( $borrowernumber, $itemnumber );
+    my ($notify_id) = $sth->fetchrow;
+    $sth->finish;
+    return ($notify_id);
+}
 
 =head2 CreateItemAccountLine
 
 
 =head2 CreateItemAccountLine
 
-() = &CreateItemAccountLine($borrowernumber,$itemnumber,$date,$amount,$description,$accounttype,$amountoutstanding,$timestamp,$notify_id,$level);
+    () = &CreateItemAccountLine($borrowernumber, $itemnumber, $date, $amount,
+                               $description, $accounttype, $amountoutstanding, 
+                               $timestamp, $notify_id, $level);
 
 update the account lines with file number or with file level
 
 
 update the account lines with file number or with file level
 
@@ -842,27 +868,33 @@ C<$notify_id> contains the file number
 
 C<$level> contains the file level
 
 
 C<$level> contains the file level
 
-
 =cut
 
 =cut
 
- sub CreateItemAccountLine {
-  my ($borrowernumber,$itemnumber,$date,$amount,$description,$accounttype,$amountoutstanding,$timestamp,$notify_id,$level)=@_;
-  my $dbh = C4::Context->dbh;
-  my $nextaccntno = C4::Accounts::getnextacctno($borrowernumber);
-   my $query= "INSERT into accountlines  
+sub CreateItemAccountLine {
+    my (
+        $borrowernumber, $itemnumber,  $date,              $amount,
+        $description,    $accounttype, $amountoutstanding, $timestamp,
+        $notify_id,      $level
+    ) = @_;
+    my $dbh         = C4::Context->dbh;
+    my $nextaccntno = C4::Accounts::getnextacctno($borrowernumber);
+    my $query       = "INSERT into accountlines
          (borrowernumber,accountno,itemnumber,date,amount,description,accounttype,amountoutstanding,timestamp,notify_id,notify_level)
           VALUES
              (?,?,?,?,?,?,?,?,?,?,?)";
          (borrowernumber,accountno,itemnumber,date,amount,description,accounttype,amountoutstanding,timestamp,notify_id,notify_level)
           VALUES
              (?,?,?,?,?,?,?,?,?,?,?)";
-  
-  
-  my $sth=$dbh->prepare($query);
-  $sth->execute($borrowernumber,$nextaccntno,$itemnumber,$date,$amount,$description,$accounttype,$amountoutstanding,$timestamp,$notify_id,$level);
-  $sth->finish;
- }
+
+    my $sth = $dbh->prepare($query);
+    $sth->execute(
+        $borrowernumber, $nextaccntno,       $itemnumber,
+        $date,           $amount,            $description,
+        $accounttype,    $amountoutstanding, $timestamp,
+        $notify_id,      $level
+    );
+}
 
 =head2 UpdateAccountLines
 
 
 =head2 UpdateAccountLines
 
-() = &UpdateAccountLines($notify_id,$notify_level,$borrowernumber,$itemnumber);
+    () = &UpdateAccountLines($notify_id,$notify_level,$borrowernumber,$itemnumber);
 
 update the account lines with file number or with file level
 
 
 update the account lines with file number or with file level
 
@@ -880,41 +912,32 @@ C<$borrowernumber> contains the borrowernumber
 =cut
 
 sub UpdateAccountLines {
 =cut
 
 sub UpdateAccountLines {
-my ($notify_id,$notify_level,$borrowernumber,$itemnumber)=@_;
-my $query;
-if ($notify_id eq '')
-{
-
-    $query=qq|UPDATE accountlines
+    my ( $notify_id, $notify_level, $borrowernumber, $itemnumber ) = @_;
+    my $query;
+    if ( $notify_id eq '' ) {
+        $query = qq|UPDATE accountlines
     SET  notify_level=?
     WHERE borrowernumber=? AND itemnumber=?
     AND (accounttype='FU' or accounttype='O')|;
     SET  notify_level=?
     WHERE borrowernumber=? AND itemnumber=?
     AND (accounttype='FU' or accounttype='O')|;
-}else
-{
-    $query=qq|UPDATE accountlines
+    } else {
+        $query = qq|UPDATE accountlines
      SET notify_id=?, notify_level=?
      SET notify_id=?, notify_level=?
-           WHERE borrowernumber=?
+   WHERE borrowernumber=?
     AND itemnumber=?
     AND itemnumber=?
-        AND (accounttype='FU' or accounttype='O')|;
-}
- my $dbh = C4::Context->dbh;
- my $sth=$dbh->prepare($query);
-
-if ($notify_id eq '')
-{
-    $sth->execute($notify_level,$borrowernumber,$itemnumber);
-}else
-{
-    $sth->execute($notify_id,$notify_level,$borrowernumber,$itemnumber);
-}
- $sth->finish;
+    AND (accounttype='FU' or accounttype='O')|;
+    }
 
 
+    my $sth = C4::Context->dbh->prepare($query);
+    if ( $notify_id eq '' ) {
+        $sth->execute( $notify_level, $borrowernumber, $itemnumber );
+    } else {
+        $sth->execute( $notify_id, $notify_level, $borrowernumber, $itemnumber );
+    }
 }
 
 }
 
-
 =head2 GetItems
 
 =head2 GetItems
 
-($items) = &GetItems($itemnumber);
+    ($items) = &GetItems($itemnumber);
 
 Returns the list of all delays from overduerules.
 
 
 Returns the list of all delays from overduerules.
 
@@ -925,22 +948,25 @@ C<$itemnumber> contains the borrower categorycode
 
 =cut
 
 
 =cut
 
+# FIXME: This is a bad function to have here.
+# Shouldn't it be in C4::Items?
+# Shouldn't it be called GetItem since you only get 1 row?
+# Shouldn't it be called GetItem since you give it only 1 itemnumber?
+
 sub GetItems {
 sub GetItems {
-    my($itemnumber) = @_;
-    my $query=qq|SELECT *
+    my $itemnumber = shift or return;
+    my $query = qq|SELECT *
              FROM items
               WHERE itemnumber=?|;
              FROM items
               WHERE itemnumber=?|;
-        my $dbh = C4::Context->dbh;
-        my $sth=$dbh->prepare($query);
-        $sth->execute($itemnumber);
-        my ($items)=$sth->fetchrow_hashref;
-        $sth->finish;
-    return($items);
+    my $sth = C4::Context->dbh->prepare($query);
+    $sth->execute($itemnumber);
+    my ($items) = $sth->fetchrow_hashref;
+    return ($items);
 }
 
 =head2 GetOverdueDelays
 
 }
 
 =head2 GetOverdueDelays
 
-(@delays) = &GetOverdueDelays($categorycode);
+    (@delays) = &GetOverdueDelays($categorycode);
 
 Returns the list of all delays from overduerules.
 
 
 Returns the list of all delays from overduerules.
 
@@ -951,42 +977,39 @@ C<$categorycode> contains the borrower categorycode
 =cut
 
 sub GetOverdueDelays {
 =cut
 
 sub GetOverdueDelays {
-    my($category) = @_;
-    my $dbh = C4::Context->dbh;
-        my $query=qq|SELECT delay1,delay2,delay3
+    my ($category) = @_;
+    my $query      = qq|SELECT delay1,delay2,delay3
                 FROM overduerules
                 WHERE categorycode=?|;
                 FROM overduerules
                 WHERE categorycode=?|;
-    my $sth=$dbh->prepare($query);
-        $sth->execute($category);
-        my (@delays)=$sth->fetchrow_array;
-        $sth->finish;
-        return(@delays);
+    my $sth = C4::Context->dbh->prepare($query);
+    $sth->execute($category);
+    my (@delays) = $sth->fetchrow_array;
+    return (@delays);
 }
 
 =head2 GetBranchcodesWithOverdueRules
 
 }
 
 =head2 GetBranchcodesWithOverdueRules
 
-=over 4
-
-my @branchcodes = C4::Overdues::GetBranchcodesWithOverdueRules()
+    my @branchcodes = C4::Overdues::GetBranchcodesWithOverdueRules()
 
 returns a list of branch codes for branches with overdue rules defined.
 
 
 returns a list of branch codes for branches with overdue rules defined.
 
-=back
-
 =cut
 
 sub GetBranchcodesWithOverdueRules {
     my $dbh               = C4::Context->dbh;
 =cut
 
 sub GetBranchcodesWithOverdueRules {
     my $dbh               = C4::Context->dbh;
-    my $rqoverduebranches = $dbh->prepare("SELECT DISTINCT branchcode FROM overduerules WHERE delay1 IS NOT NULL AND branchcode <> ''");
+    my $rqoverduebranches = $dbh->prepare("SELECT DISTINCT branchcode FROM overduerules WHERE delay1 IS NOT NULL AND branchcode <> '' ORDER BY branchcode");
     $rqoverduebranches->execute;
     my @branches = map { shift @$_ } @{ $rqoverduebranches->fetchall_arrayref };
     $rqoverduebranches->execute;
     my @branches = map { shift @$_ } @{ $rqoverduebranches->fetchall_arrayref };
-    $rqoverduebranches->finish;
+    if (!$branches[0]) {
+       my $availbranches = C4::Branch::GetBranches();
+       @branches = keys %$availbranches;
+    }
     return @branches;
 }
 
 =head2 CheckAccountLineLevelInfo
 
     return @branches;
 }
 
 =head2 CheckAccountLineLevelInfo
 
-($exist) = &CheckAccountLineLevelInfo($borrowernumber,$itemnumber,$accounttype,notify_level);
+    ($exist) = &CheckAccountLineLevelInfo($borrowernumber,$itemnumber,$accounttype,notify_level);
 
 Check and Returns the list of all overdue books.
 
 
 Check and Returns the list of all overdue books.
 
@@ -1005,23 +1028,22 @@ C<$notify_level> contains the accountline level
 =cut
 
 sub CheckAccountLineLevelInfo {
 =cut
 
 sub CheckAccountLineLevelInfo {
-    my($borrowernumber,$itemnumber,$level) = @_;
-    my $dbh = C4::Context->dbh;
-        my $query=    qq|SELECT count(*)
+    my ( $borrowernumber, $itemnumber, $level ) = @_;
+    my $dbh   = C4::Context->dbh;
+    my $query = qq|SELECT count(*)
             FROM accountlines
             WHERE borrowernumber =?
             AND itemnumber = ?
             AND notify_level=?|;
             FROM accountlines
             WHERE borrowernumber =?
             AND itemnumber = ?
             AND notify_level=?|;
-    my $sth=$dbh->prepare($query);
-        $sth->execute($borrowernumber,$itemnumber,$level);
-        my ($exist)=$sth->fetchrow;
-        $sth->finish;
-        return($exist);
+    my $sth = $dbh->prepare($query);
+    $sth->execute( $borrowernumber, $itemnumber, $level );
+    my ($exist) = $sth->fetchrow;
+    return ($exist);
 }
 
 =head2 GetOverduerules
 
 }
 
 =head2 GetOverduerules
 
-($overduerules) = &GetOverduerules($categorycode);
+    ($overduerules) = &GetOverduerules($categorycode);
 
 Returns the value of borrowers (debarred or not) with notify level
 
 
 Returns the value of borrowers (debarred or not) with notify level
 
@@ -1033,23 +1055,22 @@ C<$notify_level> contains the notify level
 
 =cut
 
 
 =cut
 
-sub GetOverduerules{
-    my($category,$notify_level) = @_;
-    my $dbh = C4::Context->dbh;
-        my $query=qq|SELECT debarred$notify_level
-             FROM overduerules
-             WHERE categorycode=?|;
-    my $sth=$dbh->prepare($query);
-        $sth->execute($category);
-        my ($overduerules)=$sth->fetchrow;
-        $sth->finish;
-        return($overduerules);
+sub GetOverduerules {
+    my ( $category, $notify_level ) = @_;
+    my $dbh   = C4::Context->dbh;
+    my $query = qq|SELECT debarred$notify_level
+                     FROM overduerules
+                    WHERE categorycode=?|;
+    my $sth = $dbh->prepare($query);
+    $sth->execute($category);
+    my ($overduerules) = $sth->fetchrow;
+    return ($overduerules);
 }
 
 
 =head2 CheckBorrowerDebarred
 
 }
 
 
 =head2 CheckBorrowerDebarred
 
-($debarredstatus) = &CheckBorrowerDebarred($borrowernumber);
+    ($debarredstatus) = &CheckBorrowerDebarred($borrowernumber);
 
 Check if the borrowers is already debarred
 
 
 Check if the borrowers is already debarred
 
@@ -1059,51 +1080,26 @@ C<$borrowernumber> contains the borrower number
 
 =cut
 
 
 =cut
 
-
-sub CheckBorrowerDebarred{
-    my($borrowernumber) = @_;
-    my $dbh = C4::Context->dbh;
-        my $query=qq|SELECT debarred
-              FROM borrowers
-             WHERE borrowernumber=?
-            |;
-    my $sth=$dbh->prepare($query);
-        $sth->execute($borrowernumber);
-        my ($debarredstatus)=$sth->fetchrow;
-        $sth->finish;
-        if ($debarredstatus eq '1'){
-    return(1);}
-    else{
-    return(0);
-    }
+# FIXME: Shouldn't this be in C4::Members?
+sub CheckBorrowerDebarred {
+    my ($borrowernumber) = @_;
+    my $dbh   = C4::Context->dbh;
+    my $query = qq|
+        SELECT debarred
+        FROM borrowers
+        WHERE borrowernumber=?
+        AND debarred > NOW()
+    |;
+    my $sth = $dbh->prepare($query);
+    $sth->execute($borrowernumber);
+    my $debarredstatus = $sth->fetchrow;
+    return $debarredstatus;
 }
 
 }
 
-=head2 UpdateBorrowerDebarred
-
-($borrowerstatut) = &UpdateBorrowerDebarred($borrowernumber);
-
-update status of borrowers in borrowers table (field debarred)
-
-C<$borrowernumber> borrower number
-
-=cut
-
-sub UpdateBorrowerDebarred{
-    my($borrowernumber) = @_;
-    my $dbh = C4::Context->dbh;
-        my $query=qq|UPDATE borrowers
-             SET debarred='1'
-                     WHERE borrowernumber=?
-            |;
-    my $sth=$dbh->prepare($query);
-        $sth->execute($borrowernumber);
-        $sth->finish;
-        return 1;
-}
 
 =head2 CheckExistantNotifyid
 
 
 =head2 CheckExistantNotifyid
 
-  ($exist) = &CheckExistantNotifyid($borrowernumber,$itemnumber,$accounttype,$notify_id);
+    ($exist) = &CheckExistantNotifyid($borrowernumber,$itemnumber,$accounttype,$notify_id);
 
 Check and Returns the notify id if exist else return 0.
 
 
 Check and Returns the notify id if exist else return 0.
 
@@ -1117,28 +1113,20 @@ C<$date_due> contains the date of item return
 =cut
 
 sub CheckExistantNotifyid {
 =cut
 
 sub CheckExistantNotifyid {
-     my($borrowernumber,$date_due) = @_;
-     my $dbh = C4::Context->dbh;
-         my $query =  qq|SELECT notify_id FROM accountlines 
+    my ( $borrowernumber, $date_due ) = @_;
+    my $dbh   = C4::Context->dbh;
+    my $query = qq|SELECT notify_id FROM accountlines
              LEFT JOIN issues ON issues.itemnumber= accountlines.itemnumber
              WHERE accountlines.borrowernumber =?
               AND date_due = ?|;
              LEFT JOIN issues ON issues.itemnumber= accountlines.itemnumber
              WHERE accountlines.borrowernumber =?
               AND date_due = ?|;
-    my $sth=$dbh->prepare($query);
-         $sth->execute($borrowernumber,$date_due);
-         my ($exist)=$sth->fetchrow;
-         $sth->finish;
-         if ($exist eq '')
-    {
-    return(0);
-    }else
-        {
-    return($exist);
-    }
+    my $sth = $dbh->prepare($query);
+    $sth->execute( $borrowernumber, $date_due );
+    return $sth->fetchrow || 0;
 }
 
 =head2 CheckAccountLineItemInfo
 
 }
 
 =head2 CheckAccountLineItemInfo
 
-  ($exist) = &CheckAccountLineItemInfo($borrowernumber,$itemnumber,$accounttype,$notify_id);
+    ($exist) = &CheckAccountLineItemInfo($borrowernumber,$itemnumber,$accounttype,$notify_id);
 
 Check and Returns the list of all overdue items from the same file number(notify_id).
 
 
 Check and Returns the list of all overdue items from the same file number(notify_id).
 
@@ -1156,19 +1144,18 @@ C<$notify_id> contains the file number
 =cut
 
 sub CheckAccountLineItemInfo {
 =cut
 
 sub CheckAccountLineItemInfo {
-     my($borrowernumber,$itemnumber,$accounttype,$notify_id) = @_;
-     my $dbh = C4::Context->dbh;
-         my $query =  qq|SELECT count(*) FROM accountlines
+    my ( $borrowernumber, $itemnumber, $accounttype, $notify_id ) = @_;
+    my $dbh   = C4::Context->dbh;
+    my $query = qq|SELECT count(*) FROM accountlines
              WHERE borrowernumber =?
              AND itemnumber = ?
               AND accounttype= ?
             AND notify_id = ?|;
              WHERE borrowernumber =?
              AND itemnumber = ?
               AND accounttype= ?
             AND notify_id = ?|;
-    my $sth=$dbh->prepare($query);
-         $sth->execute($borrowernumber,$itemnumber,$accounttype,$notify_id);
-         my ($exist)=$sth->fetchrow;
-         $sth->finish;
-         return($exist);
- }
+    my $sth = $dbh->prepare($query);
+    $sth->execute( $borrowernumber, $itemnumber, $accounttype, $notify_id );
+    my ($exist) = $sth->fetchrow;
+    return ($exist);
+}
 
 =head2 CheckItemNotify
 
 
 =head2 CheckItemNotify
 
@@ -1206,19 +1193,21 @@ sub GetOverduesForBranch {
        my $itype_link =  (C4::Context->preference('item-level_itypes')) ?  " items.itype " :  " biblioitems.itemtype ";
     my $dbh = C4::Context->dbh;
     my $select = "
        my $itype_link =  (C4::Context->preference('item-level_itypes')) ?  " items.itype " :  " biblioitems.itemtype ";
     my $dbh = C4::Context->dbh;
     my $select = "
-    SELECT 
+    SELECT
             borrowers.borrowernumber,
             borrowers.surname,
             borrowers.firstname,
             borrowers.phone,
             borrowers.email,
                biblio.title,
             borrowers.borrowernumber,
             borrowers.surname,
             borrowers.firstname,
             borrowers.phone,
             borrowers.email,
                biblio.title,
+               biblio.author,
                biblio.biblionumber,
                issues.date_due,
                issues.returndate,
                issues.branchcode,
              branches.branchname,
                 items.barcode,
                biblio.biblionumber,
                issues.date_due,
                issues.returndate,
                issues.branchcode,
              branches.branchname,
                 items.barcode,
+                items.homebranch,
                 items.itemcallnumber,
                 items.location,
                 items.itemnumber,
                 items.itemcallnumber,
                 items.location,
                 items.itemnumber,
@@ -1238,7 +1227,7 @@ sub GetOverduesForBranch {
     WHERE (accountlines.amountoutstanding  != '0.000000')
       AND (accountlines.accounttype         = 'FU'      )
       AND (issues.branchcode =  ?   )
     WHERE (accountlines.amountoutstanding  != '0.000000')
       AND (accountlines.accounttype         = 'FU'      )
       AND (issues.branchcode =  ?   )
-      AND (issues.date_due  <= NOW())
+      AND (issues.date_due  < NOW())
     ";
     my @getoverdues;
     my $i = 0;
     ";
     my @getoverdues;
     my $i = 0;
@@ -1264,40 +1253,37 @@ sub GetOverduesForBranch {
 
 =head2 AddNotifyLine
 
 
 =head2 AddNotifyLine
 
-&AddNotifyLine($borrowernumber, $itemnumber, $overduelevel, $method, $notifyId)
+    &AddNotifyLine($borrowernumber, $itemnumber, $overduelevel, $method, $notifyId)
 
 
-Creat a line into notify, if the method is phone, the notification_send_date is implemented to
+Create a line into notify, if the method is phone, the notification_send_date is implemented to
 
 =cut
 
 sub AddNotifyLine {
     my ( $borrowernumber, $itemnumber, $overduelevel, $method, $notifyId ) = @_;
 
 =cut
 
 sub AddNotifyLine {
     my ( $borrowernumber, $itemnumber, $overduelevel, $method, $notifyId ) = @_;
+    my $dbh = C4::Context->dbh;
     if ( $method eq "phone" ) {
     if ( $method eq "phone" ) {
-        my $dbh = C4::Context->dbh;
         my $sth = $dbh->prepare(
             "INSERT INTO notifys (borrowernumber,itemnumber,notify_date,notify_send_date,notify_level,method,notify_id)
         VALUES (?,?,now(),now(),?,?,?)"
         );
         $sth->execute( $borrowernumber, $itemnumber, $overduelevel, $method,
             $notifyId );
         my $sth = $dbh->prepare(
             "INSERT INTO notifys (borrowernumber,itemnumber,notify_date,notify_send_date,notify_level,method,notify_id)
         VALUES (?,?,now(),now(),?,?,?)"
         );
         $sth->execute( $borrowernumber, $itemnumber, $overduelevel, $method,
             $notifyId );
-        $sth->finish;
     }
     else {
     }
     else {
-        my $dbh = C4::Context->dbh;
         my $sth = $dbh->prepare(
             "INSERT INTO notifys (borrowernumber,itemnumber,notify_date,notify_level,method,notify_id)
         VALUES (?,?,now(),?,?,?)"
         );
         $sth->execute( $borrowernumber, $itemnumber, $overduelevel, $method,
             $notifyId );
         my $sth = $dbh->prepare(
             "INSERT INTO notifys (borrowernumber,itemnumber,notify_date,notify_level,method,notify_id)
         VALUES (?,?,now(),?,?,?)"
         );
         $sth->execute( $borrowernumber, $itemnumber, $overduelevel, $method,
             $notifyId );
-        $sth->finish;
     }
     return 1;
 }
 
 =head2 RemoveNotifyLine
 
     }
     return 1;
 }
 
 =head2 RemoveNotifyLine
 
-&RemoveNotifyLine( $borrowernumber, $itemnumber, $notify_date );
+    &RemoveNotifyLine( $borrowernumber, $itemnumber, $notify_date );
 
 Cancel a notification
 
 
 Cancel a notification
 
@@ -1314,7 +1300,6 @@ sub RemoveNotifyLine {
             AND notify_date=?"
     );
     $sth->execute( $borrowernumber, $itemnumber, $notify_date );
             AND notify_date=?"
     );
     $sth->execute( $borrowernumber, $itemnumber, $notify_date );
-    $sth->finish;
     return 1;
 }
 
     return 1;
 }
 
@@ -1323,6 +1308,6 @@ __END__
 
 =head1 AUTHOR
 
 
 =head1 AUTHOR
 
-Koha Developement team <info@koha.org>
+Koha Development Team <http://koha-community.org/>
 
 =cut
 
 =cut