[Koha-patches] [PATCH 3/3] bug 4036, 4505: overdue and fine day block improvements

Galen Charlton gmcharlt at gmail.com
Sat May 1 18:48:49 CEST 2010


* Adopted wording suggested by Kyle Hall for the
  USERBLOCKEDREMAINING and USERBLOCKEDOVERDUE circulation blocks
* Updated IsMemberBlocked so that if a patron has accrued
  fine days, that will be tested for first before testing
  to see if the patron has current overdue items; this solves
  a problem introduced in the patch series for bug 4505 where
  accrued fine days would be ignored if (a) the patron has
  current overdue items but (b) the library has chosen to
  set the OverduesBlockCirc syspref to noblock.
* Now correctly assigns the USERBLOCKEDREMAINING and USERBLOCKEDOVERDUE
  blocks; prior to this patch, they had been swapped.

FIXME: IsMemberBlock ought to be split into two functions

Signed-off-by: Galen Charlton <gmcharlt at gmail.com>
---
 C4/Circulation.pm                                  |   22 ++++++------
 C4/Members.pm                                      |   34 +++++++++++---------
 .../prog/en/modules/circ/circulation.tmpl          |   12 +++++--
 3 files changed, 38 insertions(+), 30 deletions(-)

diff --git a/C4/Circulation.pm b/C4/Circulation.pm
index 833d44d..a052d13 100644
--- a/C4/Circulation.pm
+++ b/C4/Circulation.pm
@@ -732,17 +732,17 @@ sub CanBookBeIssued {
     }
 
     my ($blocktype, $count) = C4::Members::IsMemberBlocked($borrower->{'borrowernumber'});
-    if($blocktype == -1){
-        ## remaining overdue documentsi
-	if ( C4::Context->preference("OverduesBlockCirc") eq 'block'){
-	    $issuingimpossible{USERBLOCKEDREMAINING} = $count;
-	}
-	elsif ( C4::Context->preference("OverduesBlockCirc") eq 'confirmation'){
-	    $needsconfirmation{USERBLOCKEDREMAINING} = $count;
-	}
-    }elsif($blocktype == 1){
-        ## blocked because of overdue return
-        $issuingimpossible{USERBLOCKEDOVERDUE} = $count;
+    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) {
+        # patron has accrued fine days
+        $issuingimpossible{USERBLOCKEDREMAINING} = $count;
     }
 
 #
diff --git a/C4/Members.pm b/C4/Members.pm
index 19cc9fa..30e9f2d 100644
--- a/C4/Members.pm
+++ b/C4/Members.pm
@@ -589,12 +589,15 @@ that would block circulation privileges.
 
 C<$block_status> can have the following values:
 
--1 if the patron has overdue items, in which case C<$count> is the number of them
-
 1 if the patron has outstanding fine days, in which case C<$count> is the number of them
 
+-1 if the patron has overdue items, in which case C<$count> is the number of them
+
 0 if the patron has no overdue items or outstanding fine days, in which case C<$count> is 0
 
+Outstanding fine days are checked before current overdue items
+are.
+
 FIXME: this needs to be split into two functions; a potential block
 based on the number of current overdue items could be orthogonal
 to a block based on whether the patron has any fine days accrued.
@@ -604,25 +607,14 @@ to a block based on whether the patron has any fine days accrued.
 sub IsMemberBlocked {
     my $borrowernumber = shift;
     my $dbh            = C4::Context->dbh;
-    # if he have late issues
-    my $sth = $dbh->prepare(
-        "SELECT COUNT(*) as latedocs
-         FROM issues
-         WHERE borrowernumber = ?
-         AND date_due < curdate()"
-    );
-    $sth->execute($borrowernumber);
-    my $latedocs = $sth->fetchrow_hashref->{'latedocs'};
-
-    return (-1, $latedocs) if $latedocs > 0;
 
+    # does patron have current fine days?
 	my $strsth=qq{
             SELECT
             ADDDATE(returndate, finedays * DATEDIFF(returndate,date_due) ) AS blockingdate,
             DATEDIFF(ADDDATE(returndate, finedays * DATEDIFF(returndate,date_due)),NOW()) AS blockedcount
             FROM old_issues
 	};
-    # or if he must wait to loan
     if(C4::Context->preference("item-level_itypes")){
         $strsth.=
 		qq{ LEFT JOIN items ON (items.itemnumber=old_issues.itemnumber)
@@ -639,7 +631,7 @@ sub IsMemberBlocked {
             AND borrowernumber = ?
             ORDER BY blockingdate DESC, blockedcount DESC
             LIMIT 1};
-	$sth=$dbh->prepare($strsth);
+	my $sth=$dbh->prepare($strsth);
     $sth->execute($borrowernumber);
     my $row = $sth->fetchrow_hashref;
     my $blockeddate  = $row->{'blockeddate'};
@@ -647,6 +639,18 @@ sub IsMemberBlocked {
 
     return (1, $blockedcount) if $blockedcount > 0;
 
+    # if he have late issues
+    $sth = $dbh->prepare(
+        "SELECT COUNT(*) as latedocs
+         FROM issues
+         WHERE borrowernumber = ?
+         AND date_due < curdate()"
+    );
+    $sth->execute($borrowernumber);
+    my $latedocs = $sth->fetchrow_hashref->{'latedocs'};
+
+    return (-1, $latedocs) if $latedocs > 0;
+
     return (0, 0);
 }
 
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl
index a2b1d09..7515dee 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl
@@ -242,8 +242,8 @@ function refocus(calendar) {
 <!-- TMPL_IF NAME="NOT_FOR_LOAN_FORCING" -->
     <li>Item is normally not for loan.  Check out anyway?</li>
 <!-- /TMPL_IF -->
-<!-- TMPL_IF NAME="USERBLOCKEDREMAINING" -->
-    <li>This patron has overdue items.  Check out anyway?</li>
+<!-- TMPL_IF NAME="USERBLOCKEDOVERDUE" -->
+    <li>Patron has <!-- TMPL_VAR NAME="USERBLOCKEDOVERDUE" --> overdue item(s).  Check out anyway?</li>
 <!-- /TMPL_IF -->
 </ul>
 
@@ -340,9 +340,13 @@ function refocus(calendar) {
         <!-- TMPL_IF NAME="NOTSAMEBRANCH" -->
             <li>This item belongs to <!-- TMPL_VAR NAME="itemhomebranch" --> and cannot be issued from this location.</li>
         <!-- /TMPL_IF -->
+
+        <!-- TMPL_IF NAME="USERBLOCKEDREMAINING" -->
+            <li>Patron has had overdue items and is blocked for <!-- TMPL_VAR NAME="USERBLOCKEDREMAINING" --> day(s).</li>
+        <!-- /TMPL_IF -->
 	
-	    <!-- TMPL_IF NAME="USERBLOCKEDREMAINING" -->
-	    <li>Patron has overdue items</li>
+	    <!-- TMPL_IF NAME="USERBLOCKEDOVERDUE" -->
+            <li>Patron has <!-- TMPL_VAR NAME="USERBLOCKEDOVERDUE" --> overdue item(s).  Check out anyway?</li>
         <!-- /TMPL_IF -->
         </ul>
 
-- 
1.7.0




More information about the Koha-patches mailing list