Bugzilla – Attachment 121176 Details for
Bug 20985
CanBookBeReserved and CanItemBeReserved should check 'On shelf holds allowed' policy
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 20985: Add OnShelfHoldsAllowed checks to CanItemBeReserved
Bug-20985-Add-OnShelfHoldsAllowed-checks-to-CanIte.patch (text/plain), 7.53 KB, created by
Arthur Suzuki
on 2021-05-19 13:32:09 UTC
(
hide
)
Description:
Bug 20985: Add OnShelfHoldsAllowed checks to CanItemBeReserved
Filename:
MIME Type:
Creator:
Arthur Suzuki
Created:
2021-05-19 13:32:09 UTC
Size:
7.53 KB
patch
obsolete
>From 16a68745470000b5848e30d1a94c67160b55843c Mon Sep 17 00:00:00 2001 >From: Arthur Suzuki <arthur.suzuki@biblibre.com> >Date: Tue, 17 Nov 2020 14:24:36 +0100 >Subject: [PATCH] Bug 20985: Add OnShelfHoldsAllowed checks to > CanItemBeReserved > >The expected behaviour for "On shelf holds allowed" setting for the circulation rules (Koha administration > Patrons and circulation > Circulation and fines rules): >- Allow holds only on items that are currently checked out or otherwise unavailable. >- If set to "Yes", patrons can place holds on items currently checked in. >- If set to "If any unavailable", patrons can only place holds on items that are not unavailable. >- If set to "If all unavailable", patrons can only place holds on items where *all* items on the record are unavailable. >(Adapted from https://bywatersolutions.com/education/preparing-for-library-closures) > >These rules should also work when using ILS-DI, but currently they don't. This bug makes sure that the "On shelf holds allowed" rules work correctly when using ILS-DI to place holds. > >Test plan: > >1. Enable ILS-DI (set the ILS-DI system preference to Enable). >2. Go to Koha administration > Patrons and circulation > Circulation and fines rules. >3. Work through steps 4-5 for each of the settings for "On shelf holds allowed" for all libraries/patron categories/item types: > . "Yes", "If any unavailable", and "If all unavailable" >4. Staff interface - place a hold on a record with items available for loan, the rules should work as expected before and after the patch is applied: > . "Yes" > ==> information column in the item table displays "Not on hold", the hold is placed, cancel the hold > . "If any unavailable" and "If all unavailable" > ==> the hold is not placed, message is "Cannot place hold. No items are available to be placed on hold.", red "X" in the hold column and the information column displays "Not on hold". >5. ILS-DI - place a hold on a record with items available for loan (note: without the patch, holds can be placed): > . Query to place a hold using ILS-DI on a title that have all its items available, > example query: http://127.0.0.1:8080/cgi-bin/koha/ilsdi.pl?service=HoldTitle&patron_id=1&bib_id=1&request_location=127.0.0.1 > ==> Without the patch the hold is placed but it shouldn't be allowed, cancel the hold > . Query to place a hold using ILS-DI on an available item, > example query: http://127.0.0.1:8080/cgi-bin/koha/ilsdi.pl?service=HoldItem&patron_id=1&bib_id=1&item_id=1) > ==> Without the patch the hold is placed but it shouldn't be allowed, cancel the hold >6. Run the tests prove t/db_dependent/Reserves.t - these should pass. >7. Apply the patch (and flush_memcached and restart_all if using koha-testing-docker). >8. Run through steps 3-6 again, and note the changes when "If any unavailable" and "If all unavailable" options are used: > . For the staff interface: there should be no change in behavour and should work as expected, for the red "X" in the items table additional text is added "onShelfHoldsNotAllowed". > . For ILS-DI: these should now work as expected, with holds not placed, and this message in the results returned <code>onShelfHoldsNotAllowed</code> (check to confirm no holds place for either the patron or the item) > . Tests: should still pass. >9. Sign off. > >Signed-off-by: David Nind <david@davidnind.com> >--- > C4/Reserves.pm | 16 +++++++++++++--- > .../prog/en/modules/reserve/request.tt | 1 + > t/db_dependent/Reserves.t | 16 ++++++++-------- > 3 files changed, 22 insertions(+), 11 deletions(-) > >diff --git a/C4/Reserves.pm b/C4/Reserves.pm >index 8941d4f72c..8d5ab77510 100644 >--- a/C4/Reserves.pm >+++ b/C4/Reserves.pm >@@ -355,6 +355,7 @@ sub CanBookBeReserved{ > should not check if there are too many holds as we only csre about reservability > > @RETURNS { status => OK }, if the Item can be reserved. >+ { status => onShelfHoldsNotAllowed }, if onShelfHoldsAllowed parameter and item availability combination doesn't allow holds. > { status => ageRestricted }, if the Item is age restricted for this borrower. > { status => damaged }, if the Item is damaged. > { status => cannotReserveFromOtherBranches }, if syspref 'canreservefromotherbranches' is OK. >@@ -374,6 +375,10 @@ sub CanItemBeReserved { > my $dbh = C4::Context->dbh; > my $ruleitemtype; # itemtype of the matching issuing rule > my $allowedreserves = 0; # Total number of holds allowed across all records, default to none >+ my $holds_per_record = 1; # Total number of holds allowed for this one given record >+ my $holds_per_day; # Default to unlimited >+ my $on_shelf_holds = 0; # Default to "if any unavailable" >+ my $context = $params->{context} // ''; > > # we retrieve borrowers and items informations # > # item->{itype} will come for biblioitems if necessery >@@ -445,10 +450,11 @@ sub CanItemBeReserved { > categorycode => $borrower->{'categorycode'}, > itemtype => $item->effective_itemtype, > branchcode => $branchcode, >- rules => ['holds_per_record','holds_per_day'] >+ rules => ['holds_per_record','holds_per_day','onshelfholds'] > }); >- my $holds_per_record = $rights->{holds_per_record} // 1; >- my $holds_per_day = $rights->{holds_per_day}; >+ $holds_per_record = $rights->{holds_per_record} // 1; >+ $holds_per_day = $rights->{holds_per_day}; >+ $on_shelf_holds = $rights->{onshelfholds}; > > my $search_params = { > borrowernumber => $borrowernumber, >@@ -456,6 +462,10 @@ sub CanItemBeReserved { > }; > $search_params->{found} = undef if $params->{ignore_found_holds}; > >+ # Check for item on shelves and OnShelfHoldsAllowed >+ return { status => 'onShelfHoldsNotAllowed' } >+ unless IsAvailableForItemLevelRequest($item, $patron, $pickup_branchcode,1); >+ > my $holds = Koha::Holds->search($search_params); > if ( defined $holds_per_record && $holds_per_record ne '' ){ > if ( $holds_per_record == 0 ) { >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 27218671ff..2b3b16d6ec 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt >@@ -1051,6 +1051,7 @@ > tooManyReserves: _("Too many holds"), > notReservable: _("Not holdable"), > noReservesAllowed: _("No reserves allowed"), >+ onShelfHoldsNotAllowed: _("Not holdable"), > cannotReserveFromOtherBranches: _("Patron is from different library"), > itemAlreadyOnHold: _("Patron already has hold for this item"), > cannotBeTransferred: _("Cannot be transferred to pickup library"), >diff --git a/t/db_dependent/Reserves.t b/t/db_dependent/Reserves.t >index ddc4a2e9bf..20734e0f6f 100755 >--- a/t/db_dependent/Reserves.t >+++ b/t/db_dependent/Reserves.t >@@ -1236,14 +1236,14 @@ subtest 'AllowHoldOnPatronPossession test' => sub { > value => { branchcode => $item->homebranch }}); > > Koha::CirculationRules->set_rules( >- { >- branchcode => undef, >- categorycode => undef, >- itemtype => undef, >- rules => { >- onshelfholds => 1, >- } >- } >+ { >+ branchcode => undef, >+ categorycode => undef, >+ itemtype => undef, >+ rules => { >+ onshelfholds => 1, >+ } >+ } > ); > > C4::Circulation::AddIssue($patron->unblessed, >-- >2.31.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 20985
:
86874
|
89723
|
105991
|
110095
|
111954
|
112688
|
113730
|
113731
|
114801
|
114802
|
114804
|
114805
|
115732
|
115733
|
121100
|
121101
|
121102
|
121139
|
121176
|
121185
|
121186
|
121485
|
121486
|
154711