From 08ec7d8879ce79dc98ffe13c6b94cf9a12751b99 Mon Sep 17 00:00:00 2001 From: Vitor FERNANDES Date: Tue, 4 Dec 2012 15:57:35 +0000 Subject: [PATCH] Bug 9206 - Only allow place holds in records that the patron don't have in his possession Added a system preference to turn on/off this feature. By default the system allow the patron to place holds even if it is in his possession. Script to place holds check if the system preference is off and if patron has at least one item to block holds. Messages to say that are already in patron possession added to templates. Method to check if patron has one issue from one record added to C4::Circulation Signed-off-by: Kyle M Hall --- C4/Circulation.pm | 21 ++++++++++++++++++++ installer/data/mysql/sysprefs.sql | 1 + installer/data/mysql/updatedatabase.pl | 8 +++++++ .../en/modules/admin/preferences/circulation.pref | 6 +++++ .../prog/en/modules/reserve/request.tt | 3 ++ .../opac-tmpl/prog/en/modules/opac-reserve.tt | 8 +++++- opac/opac-reserve.pl | 5 ++++ reserve/request.pl | 8 ++++++- 8 files changed, 57 insertions(+), 3 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index afe7a6a..dd99b91 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -3423,6 +3423,27 @@ sub TransferSlip { ); } +=head2 CheckIfIssuedToPatron + + CheckIfIssuedToPatron($borrowernumber, $biblionumber) + + Return 1 if any record item is issued to patron, otherwise return 0 + +=cut + +sub CheckIfIssuedToPatron { + my ($borrowernumber, $biblionumber) = @_; + my $isissued = 0; + + my $items = GetItemsByBiblioitemnumber($biblionumber); + + foreach my $item (@{$items}) { + $isissued = 1 if ($item->{borrowernumber} && $item->{borrowernumber} eq $borrowernumber); + } + + return $isissued; +} + 1; diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 2fb5bd4..cf4b3db 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -395,3 +395,4 @@ INSERT INTO systempreferences (`variable`, `value`, `options`, `explanation`, `t ('PatronSelfRegistrationExpireTemporaryAccountsDelay', '0', NULL, 'If PatronSelfRegistrationDefaultCategory is enabled, this system preference controls how long a patron can have a temporary status before the account is deleted automatically. It is an integer value representing a number of days to wait before deleting a temporary patron account. Setting it to 0 disables the deleting of temporary accounts.', 'Integer'), ('PatronSelfRegistrationBorrowerMandatoryField', 'surname|firstname', NULL , 'Choose the mandatory fields for a patron''s account, when registering via the OPAC.', 'free'), ('PatronSelfRegistrationBorrowerUnwantedField', '', NULL , 'Name the fields you don''t want to display when registering a new patron via the OPAC.', 'free'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowHoldsOnPatronsPossessions', '1', 'Allow holds on records that patron have items of it',NULL,'YesNo'); diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index cdc53cb..997b4b5 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -6112,6 +6112,14 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { print "Upgrade to $DBversion done (Bug 8782: Add field subscription.closed)\n"; SetVersion($DBversion); } +$DBversion = "XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowHoldsOnPatronsPossessions', '1', 'Allow holds on records that patron have items of it',NULL,'YesNo')" + print "Upgrade to $DBversion done (Bug 9206: Only allow place holds in records that the patron don't have in his possession)\n"; + SetVersion($DBversion); +} + + $DBversion = "3.11.00.005"; if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref index c188d80..6a8c2da 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref @@ -435,6 +435,12 @@ Circulation: - pref: decreaseLoanHighHoldsValue class: integer - holds. + - + - pref: AllowHoldsOnPatronsPossessions + choices: + yes: Allow + no: "Don't allow" + - patrons to place holds on records that he already have any item of it in his possession. Fines Policy: - - Calculate fines based on days overdue diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt index 0ad5d23..05470eb 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -213,6 +213,9 @@ function checkMultiHold() { [% IF ( none_available ) %]
  • No copies are available to be placed on hold
  • [% END %] + [% IF ( alreadypossession ) %] +
  • [% borrowerfirstname %] [% borrowersurname %] is already in possesion of one item
  • + [% END %] [% ELSE %]

    Cannot place hold on some items

    diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt index 8096baf..5449b37 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt @@ -292,8 +292,12 @@ [% UNLESS ( bibitemloo.bib_available ) %]
    No available items.
    [% ELSE %] -
    This title cannot be requested.
    - [% END %] + [% IF ( bibitemloo.already_patron_possession ) %] +
    This title cannot be requested because it's already in your possession.
    + [% ELSE %] +
    This title cannot be requested.
    + [% END %] + [% END %] [% END %] diff --git a/opac/opac-reserve.pl b/opac/opac-reserve.pl index fbc9dd7..4ff9478 100755 --- a/opac/opac-reserve.pl +++ b/opac/opac-reserve.pl @@ -537,6 +537,11 @@ foreach my $biblioNum (@biblionumbers) { $biblioLoopIter{holdable} = undef; $anyholdable = undef; } + if(not C4::Context->preference('AllowHoldsOnPatronsPossessions') and CheckIfIssuedToPatron($borrowernumber,$biblioNum)) { + $biblioLoopIter{holdable} = undef; + $biblioLoopIter{already_patron_possession} = 1; + $anyholdable = undef; + } push @$biblioLoop, \%biblioLoopIter; } diff --git a/reserve/request.pl b/reserve/request.pl index c34a614..d8c99d7 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -247,6 +247,11 @@ foreach my $biblionumber (@biblionumbers) { $warnings = 1; $maxreserves = 1; } + if (not C4::Context->preference('AllowHoldsOnPatronsPossessions') and CheckIfIssuedToPatron($borrowerinfo->{borrowernumber},$biblionumber)) { + $warnings = 1; + $alreadypossession = 1; + } + # get existing reserves ..... my ( $count, $reserves ) = GetReservesFromBiblionumber($biblionumber,1); my $totalcount = $count; @@ -268,7 +273,8 @@ foreach my $biblionumber (@biblionumbers) { $template->param( alreadyreserved => $alreadyreserved, messages => $messages, warnings => $warnings, - maxreserves=>$maxreserves + maxreserves=>$maxreserves, + alreadypossession => $alreadypossession, ); -- 1.7.2.5