@@ -, +, @@ location --- 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(-) --- a/C4/Circulation.pm +++ a/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, --- a/C4/Items.pm +++ a/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) --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref +++ a/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 --- a/t/db_dependent/Circulation/issue.t +++ a/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, --