From 3a69aad2c48ce5c6a260ad2385351a5b260bb365 Mon Sep 17 00:00:00 2001 From: Hayley Mapley Date: Wed, 27 Mar 2019 10:37:38 +1300 Subject: [PATCH] Bug 21159 - Implementing 2 sysprefs to enable blanking location This patch introduces two new system preferences: BlankingShelvingLocationOnIssue and BlankingShelvingLocationOnReturn. By default both are off. If BlankingShelvingLocationOnIssue is enabled then when an item is issued it's shelving location 952$c field will be set to '' in C4::Items->BlankShelvingLocation() If BlankingShelvingLocationOnReturn is enabled then when an item is returned it's shelving location field will be set to '' in C4::Items->BlankShelvingLocation(). t/db_dependent/Circulation/issue.t contains tests for BlankShelvingLocationOnIssue t/db_dependen/Circulation/Returns.t contains tests for BlankShelvingLocationOnReturn Test plan: 1. Create a new biblio and associated item and set the value of the shelving location for the item to 'CART' 2. Checkout the item to a user and notice that the status does not change 3. Apply patch, and run ./updatedatabase.pl inside the koha shell 4. Now return the checked out item (when you updated the database you added two new sysprefs: BlankShelvingLocationOnIssue and BlankShelvingLocationOnReturn both of which are off by default) 5. Notice the shelving location has not changed, showing with the BlankShelvingLocationOnReturn syspref not enabled the shelving location is not changed upon return 6. Check the item out again and notice the shelving location is not changed, showing that when the BlankShelvingLocationOnIssue is not enabled the shelving location is not changed upon issue. 7. Enable both aforementioned sysprefs in the Administration->Global system preferences->Circulation interface 8. Return the item and notice the Shelving location has changed from 'Cart' to no value, showing when the BlankShelvingLocationOnReturn syspref is enabled it blanks the shelving location value on the return of the item 9. Edit the item changing the shelving location back to 'Shelving Trolley'(CART) 10. Check out the item and notice the shelving location is changed to no value, showing when the BlankShelvingLocationOnIssue syspref is enabled it blanks the shelving location on the issue of an item. 11. Run t/db_dependent/Circulation/Returns.t 12. Run t/db_dependent/Circulation/issue.t Sponsored-By: Toi Ohomai Institute of Technology, New Zealand --- C4/Circulation.pm | 5 ++++ C4/Items.pm | 24 ++++++++++++++++++ .../en/modules/admin/preferences/circulation.pref | 6 +++++ t/db_dependent/Circulation/issue.t | 29 +++++++++++++++++++++- 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index da689c1f30..f2d25d782e 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1450,6 +1450,11 @@ sub AddIssue { } } + if (C4::Context->preference('UpdateItemLocationOnCheckout')) { + # UpdateItemLocationOnCheckout is on, set the value of the shelving location (items.location) to blank upon checkout + BlankShelvingLocation( $item_object->itemnumber ); + } + ModItem( { issues => $item_object->issues + 1, diff --git a/C4/Items.pm b/C4/Items.pm index a06fdfabde..60ef0d3c08 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -47,6 +47,7 @@ BEGIN { DelItemCheck MoveItemFromBiblio CartToShelf + BlankShelvingLocation GetAnalyticsCount SearchItemsByField SearchItems @@ -140,6 +141,29 @@ sub CartToShelf { } } +=head2 BlankShelvingLocation + + BlankShelvingLocation($itemnumber); + +Set the value of the shelving location to blank when an +item is issued or returned. + +This is called by +C4:Circulation->AddIssue if the BlankItemLocationOnCheckout +syspref is enabled + +=cut + +sub BlankShelvingLocation { + my ($itemnumber) = @_; + unless ($itemnumber) { + croak "Failed BlankShelvingLocation() - no itemnumber supplied"; + } + my $item = GetItem($itemnumber); + $item->location = ''; + ModItem($item, undef, $itemnumber); +} + =head2 AddItemFromMarc my ($biblionumber, $biblioitemnumber, $itemnumber) 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 e79ba532f1..e212ddad3c 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 @@ -533,6 +533,12 @@ Circulation: -
Use of an _ALL_ rule will override/ignore any other values. -
Each pair of values should be on a separate line. - + -pref: UpdateItemLocationOnCheckout + choices: + yes: Blank + no: "Don't Blank" + - Blank the 952$c (shelving location) field of the item when is is issued. + - - pref: UpdateNotForLoanStatusOnCheckin type: textarea class: code diff --git a/t/db_dependent/Circulation/issue.t b/t/db_dependent/Circulation/issue.t index e945876378..af9de03757 100644 --- a/t/db_dependent/Circulation/issue.t +++ b/t/db_dependent/Circulation/issue.t @@ -17,7 +17,7 @@ use Modern::Perl; -use Test::More tests => 45; +use Test::More tests => 47; use DateTime::Duration; use t::lib::Mocks; @@ -423,7 +423,34 @@ ok( $item2->location eq '' , q{UpdateItemLocationOnCheckin updates location valu ok( $item2->permanent_location eq '' , q{UpdateItemLocationOnCheckin does not update permanent_location from '' with setting "PROC: _PERM_" } ); +my $itemnumber3; +($biblionumber, $biblioitemnumber, $itemnumber3) = C4::Items::AddItem( + { + barcode => 'barcode_5', + itemcallnumber => 'callnumber5', + homebranch => $branchcode_1, + holdingbranch => $branchcode_1, + location => 'CART', + itype => $itemtype + }, + $biblionumber +); +#BlankItemLocationOnCheckout +t::lib::Mocks::mock_preference('UpdateItemLocationOnCheckout', 0); +AddIssue($borrower_1, 'barcode_5', $daysago10, 0, $today, 0); +my $item3 = GetItem($itemnumber3); +ok($item3->location eq 'CART'), +q{UpdateItemLocationOnCheckout does not update item shelving location value from 'CART' to '' when not enabled} ); + +t::lib::Mocks::mock_preference('UpdateItemLocationOnCheckout', 1); +if (C4::Context->preference('UpdateItemLocationOnCheckout') ) +{ + BlankShelvingLocation($itemnumber3); +} +$item3 = GetItem($itemnumber3); +ok($item3->location eq '', q{UpdateItemLocationOnCheckout updates item shelving location value from 'CART' + to '' when enabled} ); # Bug 14640 - Cancel the hold on checking out if asked my $reserve_id = AddReserve($branchcode_1, $borrower_id1, $biblionumber, -- 2.11.0