From eb109a099c9db64697aa317c0c7a5d48196d9e17 Mon Sep 17 00:00:00 2001
From: Colin Campbell <colin.campbell@ptfs-europe.com>
Date: Mon, 20 Jun 2011 17:02:49 +0100
Subject: [PATCH] Bug 7751 : Make Reduce Duedate aware of New Date formats

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
---
 C4/Circulation.pm |   34 ++++++++++++++--------------------
 1 files changed, 14 insertions(+), 20 deletions(-)

diff --git a/C4/Circulation.pm b/C4/Circulation.pm
index b57455e..4cb72df 100644
--- a/C4/Circulation.pm
+++ b/C4/Circulation.pm
@@ -927,7 +927,7 @@ sub CanBookBeIssued {
             }
         }
     }
-    
+
     ## check for high holds decreasing loan period
     if (C4::Context->preference("decreaseLoanHighHolds") == 1)
     {
@@ -938,7 +938,7 @@ sub CanBookBeIssued {
             $needsconfirmation{HIGHHOLDS} = {
                 num_holds  => $num,
                 duration   => $duration,
-                returndate => format_date($returndate),
+                returndate => output_pref($returndate),
             };
         }
     }
@@ -959,38 +959,32 @@ sub checkHighHolds {
     my $biblio = GetBiblioFromItemNumber($item->{itemnumber});
     my $branch = _GetCircControlBranch($item,$borrower);
     my $dbh = C4::Context->dbh;
-    my $sth;
-    $sth = $dbh->prepare("select count(borrowernumber) as num_holds from reserves where biblionumber=?");
+    my $sth = $dbh->prepare('select count(borrowernumber) as num_holds from reserves where biblionumber=?');
     $sth->execute($item->{'biblionumber'});
-    my $holds = $sth->fetchrow_array;
-    if ($holds>0)
+    my ($holds) = $sth->fetchrow_array;
+    if ($holds)
     {
-        my $issuedate = strftime( "%Y-%m-%d", localtime );
-        my $startdate=C4::Dates->new( $issuedate, 'iso' );
-        my $calendar = C4::Calendar->new(  branchcode => $branch );
+        my $issuedate = DateTime->new( time_zone => C4::Context->tz());
+        #    my $startdate=C4::Dates->new( $issuedate, 'iso' );
+        my $calendar = Koha::Calendar->new(  branchcode => $branch );
 
         my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'};
-        my $due = C4::Circulation::CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $itype, $branch, $borrower );
-        my $normaldue = sprintf("%04d-%02d-%02d",($due->{'dmy_arrayref'}[5]+1900),($due->{'dmy_arrayref'}[4]+1),
-            $due->{'dmy_arrayref'}[3]);
+        my $orig_due = C4::Circulation::CalcDateDue( $issuedate, $itype, $branch, $borrower );
 
-        my $datedue = $calendar->addDate($startdate, C4::Context->preference("decreaseLoanHighHoldsDuration"));
-        my $returndate = sprintf("%04d-%02d-%02d",($datedue->{'dmy_arrayref'}[5]+1900),($datedue->{'dmy_arrayref'}[4]+1),
-            $datedue->{'dmy_arrayref'}[3]);
+        my $reduced_datedue = $calendar->addDate($issuedate, C4::Context->preference("decreaseLoanHighHoldsDuration"));
 
-        my $daysBetween = $calendar->daysBetween($datedue, $due);
-        if ($daysBetween>0)
+        if (DateTime->compare($reduced_datedue,$orig_due) == -1 )
         {
-            return (1,$holds,C4::Context->preference("decreaseLoanHighHoldsDuration"),$returndate);
+            return (1,$holds,C4::Context->preference("decreaseLoanHighHoldsDuration"),$reduced_datedue);
         }
         else
         {
-            return (0,0,0,0);
+            return (0,0,0,undef);
         }
     }
     else
     {
-        return (0,0,0,0);
+        return (0,0,0,undef);
     }
 }
 
-- 
1.7.2.5