* 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 <gmcha...@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 _______________________________________________ Koha-patches mailing list Koha-patches@lists.koha.org http://lists.koha.org/mailman/listinfo/koha-patches