Bug 8735 - Expire holds waiting only on days the library is open
authorKyle M Hall <kyle@bywatersolutions.com>
Thu, 6 Sep 2012 15:15:21 +0000 (11:15 -0400)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Fri, 5 Sep 2014 14:50:58 +0000 (11:50 -0300)
Signed-off-by: Leila <koha.aixmarseille@gmail.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
C4/Reserves.pm
installer/data/mysql/sysprefs.sql
installer/data/mysql/updatedatabase.pl
koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref

index a98eed4..5a3675b 100644 (file)
@@ -36,6 +36,7 @@ use C4::Members qw();
 use C4::Letters;
 use C4::Branch qw( GetBranchDetail );
 use C4::Dates qw( format_date_in_iso );
+use C4::Calendar;
 
 use Koha::DateUtils;
 
@@ -979,17 +980,32 @@ sub CancelExpiredReserves {
     if ( C4::Context->preference("ExpireReservesMaxPickUpDelay") ) {
         my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
         my $charge = C4::Context->preference("ExpireReservesMaxPickUpDelayCharge");
+        my $cancel_on_holidays = C4::Context->preference('ExpireReservesOnHolidays');
+
+        my $today = C4::Dates->new();
 
         my $query = "SELECT * FROM reserves WHERE TO_DAYS( NOW() ) - TO_DAYS( waitingdate ) > ? AND found = 'W' AND priority = 0";
         $sth = $dbh->prepare( $query );
         $sth->execute( $max_pickup_delay );
 
-        while (my $res = $sth->fetchrow_hashref ) {
-            if ( $charge ) {
-                manualinvoice($res->{'borrowernumber'}, $res->{'itemnumber'}, 'Hold waiting too long', 'F', $charge);
+        while ( my $res = $sth->fetchrow_hashref ) {
+            my $do_cancel = 1;
+            unless ( $cancel_on_holidays ) {
+                my $calendar = C4::Calendar->new( branchcode => $res->{'branchcode'} );
+                my $is_holiday = $calendar->isHoliday( split( '/', $today->output('metric') ) );
+
+                if ( $is_holiday ) {
+                    $do_cancel = 0;
+                }
             }
 
-            CancelReserve({ reserve_id => $res->{'reserve_id'} });
+            if ( $do_cancel ) {
+                if ( $charge ) {
+                    manualinvoice($res->{'borrowernumber'}, $res->{'itemnumber'}, 'Hold waiting too long', 'F', $charge);
+                }
+
+                CancelReserve({ reserve_id => $res->{'reserve_id'} });
+            }
         }
     }
 
index 0661fc4..164ee1d 100644 (file)
@@ -115,6 +115,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
 ('expandedSearchOption','0',NULL,'If ON, set advanced search to be expanded by default','YesNo'),
 ('ExpireReservesMaxPickUpDelay','0','','Enabling this allows holds to expire automatically if they have not been picked by within the time period specified in ReservesMaxPickUpDelay','YesNo'),
 ('ExpireReservesMaxPickUpDelayCharge','0',NULL,'If ExpireReservesMaxPickUpDelay is enabled, and this field has a non-zero value, than a borrower whose waiting hold has expired will be charged this amount.','free'),
+('ExpireReservesOnHolidays', '1', NULL, 'If false, reserves at a library will not be canceled on days the library is not open.', 'YesNo'),
 ('ExtendedPatronAttributes','0',NULL,'Use extended patron IDs and attributes','YesNo'),
 ('FacetLabelTruncationLength','20',NULL,'Specify the facet max length in OPAC','Integer'),
 ('FilterBeforeOverdueReport','0','','Do not run overdue report until filter selected','YesNo'),
index d5c517e..d4bf35d 100755 (executable)
@@ -8712,6 +8712,13 @@ if ( CheckVersion($DBversion) ) {
     SetVersion($DBversion);
 }
 
+$DBversion = "3.17.00.XXX";
+if(C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('ExpireReservesOnHolidays', '1', NULL, 'If false, reserves at a library will not be canceled on days the library is not open.', 'YesNo')");
+    print "Upgrade to $DBversion done (Add syspref ExpireReservesOnHolidays\n";
+    SetVersion ($DBversion);
+}
+
 =head1 FUNCTIONS
 
 =head2 TableExists($table)
index e52ad7a..6ce264f 100644 (file)
@@ -504,6 +504,12 @@ Circulation:
                   no: "Don't allow"
             - holds to be suspended from the OPAC.
         -
+            - pref: ExpireReservesOnHolidays
+              choices:
+                  yes: Allow
+                  no: "Don't allow"
+            - expired holds to be canceled on days the library is closed..
+        -
             - pref: decreaseLoanHighHolds
               choices:
                   yes: Enable