From f684ef6e45348e1dd1ab960882de1a5180fd74b5 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 30 Sep 2019 10:37:03 +0000 Subject: [PATCH] Bug 23695: Set holding branch to transferring branch when manually initiating a transfer To test: 1 - Go to Circulation->Transfer 2 - Note your signed in branch 3 - Find an item from your branch and create a transfer to branch B 4 - Confirm the item is marked as held at your current branch and is being transferred to B 5 - Find an item from a third branch, branch C 6 - Transfer that item to brnach B 7 - Confirm the item is held at your current branch and is being transferred to B 8 - prove -v t/db_dependent/Circulation.t 9 - prove -v t/db_dependent/Koha/Items.t 10 - prove -v t/db_dependent/RotatingCollections.t --- C4/Circulation.pm | 18 +++++++++++++----- C4/RotatingCollections.pm | 7 ++++++- circ/branchtransfers.pl | 7 ++++++- t/db_dependent/Circulation.t | 13 +++++++++---- t/db_dependent/Koha/Items.t | 6 +++++- 5 files changed, 39 insertions(+), 12 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 66993ea461..0887298091 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -252,12 +252,17 @@ sub decode { =head2 transferbook - ($dotransfer, $messages, $iteminformation) = &transferbook($newbranch, - $barcode, $ignore_reserves); + ($dotransfer, $messages, $iteminformation) = &transferbook({ + from_branch => $frombranch + to_branch => $tobranch, + barcode => $barcode, + ignore_reserves => $ignore_reserves + }); Transfers an item to a new branch. If the item is currently on loan, it is automatically returned before the actual transfer. -C<$newbranch> is the code for the branch to which the item should be transferred. +C<$fbr> is the code for the branch initiating the transfer. +C<$tbr> is the code for the branch to which the item should be transferred. C<$barcode> is the barcode of the item to be transferred. @@ -305,7 +310,11 @@ The item was eligible to be transferred. Barring problems communicating with the =cut sub transferbook { - my ( $tbr, $barcode, $ignoreRs ) = @_; + my $params = shift; + my $tbr = $params->{to_branch}; + my $fbr = $params->{from_branch}; + my $ignoreRs = $params->{ignore_reserves}; + my $barcode = $params->{barcode}; my $messages; my $dotransfer = 1; my $item = Koha::Items->find( { barcode => $barcode } ); @@ -320,7 +329,6 @@ sub transferbook { my $issue = GetOpenIssue($itemnumber); # get branches of book... my $hbr = $item->homebranch; - my $fbr = $item->holdingbranch; # if using Branch Transfer Limits if ( C4::Context->preference("UseBranchTransferLimits") == 1 ) { diff --git a/C4/RotatingCollections.pm b/C4/RotatingCollections.pm index 709eaf2164..8e6a560a7b 100644 --- a/C4/RotatingCollections.pm +++ b/C4/RotatingCollections.pm @@ -446,7 +446,12 @@ sub TransferCollection { while ( my $item = $sth->fetchrow_hashref ) { my ($status) = CheckReserves( $item->{itemnumber} ); my @transfers = C4::Circulation::GetTransfers( $item->{itemnumber} ); - C4::Circulation::transferbook( $colBranchcode, $item->{barcode}, my $ignore_reserves = 1 ) unless ( $status eq 'Waiting' || @transfers ); + C4::Circulation::transferbook({ + from_branch => $item->holdingbranch, + to_branch => $colBranchcode, + barcode => $item->{barcode}, + ignore_reserves => 1 + }) unless ( $status eq 'Waiting' || @transfers ); } return 1; diff --git a/circ/branchtransfers.pl b/circ/branchtransfers.pl index d5b8e9e726..700cf0c6d7 100755 --- a/circ/branchtransfers.pl +++ b/circ/branchtransfers.pl @@ -127,7 +127,12 @@ defined $barcode and $barcode =~ s/^\s*|\s*$//g; # FIXME: barcodeInputFilter if ($barcode) { ( $transferred, $messages ) = - transferbook( $tobranchcd, $barcode, $ignoreRs ); + transferbook({ + from_branch => C4::Context->userenv->{'branch'}, + to_branch => $tobranchcd, + barcode => $barcode, + ignore_reserves => $ignoreRs + }); my $item = Koha::Items->find({ barcode => $barcode }); $found = $messages->{'ResFound'}; if ($transferred) { diff --git a/t/db_dependent/Circulation.t b/t/db_dependent/Circulation.t index 4399abe75c..d16745782e 100755 --- a/t/db_dependent/Circulation.t +++ b/t/db_dependent/Circulation.t @@ -2702,7 +2702,7 @@ subtest 'Set waiting flag' => sub { }; subtest 'Cancel transfers on lost items' => sub { - plan tests => 5; + plan tests => 6; my $library_1 = $builder->build( { source => 'Branch' } ); my $patron_1 = $builder->build( { source => 'Borrower', value => { branchcode => $library_1->{branchcode}, categorycode => $patron_category->{categorycode} } } ); my $library_2 = $builder->build( { source => 'Branch' } ); @@ -2733,15 +2733,20 @@ subtest 'Cancel transfers on lost items' => sub { my $do_transfer = 1; my ( $res, $rr ) = AddReturn( $item->{barcode}, $library_1->{branchcode} ); ModReserveAffect( $item->{itemnumber}, undef, $do_transfer, $reserve_id ); - C4::Circulation::transferbook( $library_2->{branchcode}, $item->{barcode} ); + C4::Circulation::transferbook({ + from_branch => $library_1->{branchcode}, + to_branch => $library_2->{branchcode}, + barcode => $item->{barcode}, + }); my $hold = Koha::Holds->find( $reserve_id ); is( $hold->found, 'T', 'Hold is in transit' ); #Check transfer exists and the items holding branch is the transfer destination branch before marking it as lost my ($datesent,$frombranch,$tobranch) = GetTransfers($item->{itemnumber}); - is( $tobranch, $library_2->{branchcode}, 'The transfer record exists in the branchtransfers table'); + is( $frombranch, $library_1->{branchcode}, 'The transfer is generated from the correct library'); + is( $tobranch, $library_2->{branchcode}, 'The transfer is generated to the correct library'); my $itemcheck = Koha::Items->find($item->{itemnumber}); - is( $itemcheck->holdingbranch, $library_2->{branchcode}, 'Items holding branch is the transfers destination branch before it is marked as lost' ); + is( $itemcheck->holdingbranch, $library_1->{branchcode}, 'Items holding branch is the transfers origination branch before it is marked as lost' ); #Simulate item being marked as lost and confirm the transfer is deleted and the items holding branch is the transfers source branch ModItem( { itemlost => 1 }, $biblio->{biblionumber}, $item->{itemnumber} ); diff --git a/t/db_dependent/Koha/Items.t b/t/db_dependent/Koha/Items.t index 6c1bedc1f9..dbb9d2d9b9 100644 --- a/t/db_dependent/Koha/Items.t +++ b/t/db_dependent/Koha/Items.t @@ -73,7 +73,11 @@ subtest 'get_transfer' => sub { my $library_to = $builder->build( { source => 'Branch' } ); - C4::Circulation::transferbook( $library_to->{branchcode}, $new_item_1->barcode ); + C4::Circulation::transferbook({ + from_branch => $new_item_1->holdingbranch, + to_branch => $library_to->{branchcode}, + barcode => $new_item_1->barcode, + }); $transfer = $new_item_1->get_transfer(); is( ref($transfer), 'Koha::Item::Transfer', 'Koha::Item->get_transfer should return a Koha::Item::Transfers object' ); -- 2.11.0