diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 8215752345..36aff3e62f 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -3445,6 +3445,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 4605d961bf..079ad47233 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -402,3 +402,4 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES(' INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('RenewalSendNotice','0', NULL, '', 'YesNo'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('HTML5MediaEnabled','not','Show a tab with a HTML5 media player for files catalogued in field 856','not|opac|staff|both','Choice'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('HTML5MediaExtensions','webm|ogg|ogv|oga|vtt','Media file extensions','','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 15aee3293d..07fce82f83 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -6111,6 +6111,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 f32b5b1b04..af3f56522e 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 @@ -441,6 +441,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 0ad5d23e2d..05470ebbf3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -212,6 +212,9 @@ function checkMultiHold() { [% END %] [% 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 %] 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 e2065618e9..1c5205dfed 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt @@ -293,8 +293,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 fbc9dd7d27..4ff947881b 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 c34a614820..d8c99d718b 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, );