Bug 33220: Fix recalls to pull to not show in transit or allocated items

This patch fixes the Recalls to pull circulation report so that it does
not show items that are already allocated to another recall.

This requires the UseRecalls system preference to be enabled and recalls
circulation and fines rules to be configured.

To test:
1. Cancel any recalls on Item A/Biblio A.
2. Check out Item A to Patron A. Item A should be the only item on Biblio A (pick a record with only one item, or create a record with one item).
2. Log into the OPAC as Patron B.
3. Place a recall on Item A for Patron B. Change the pickup library so
it isn't your default library.
4. Log into the OPAC as Patron C.
5. Place a recall on Item A for Patron C. Item A should now be checked out to Patron A, with two recalls on it for Patrons B and C.
6. Log back into the staff interface.
7. Check in Item A. Confirm the recall and transfer for Patron B.
8. Go to Circulation -> Recalls to pull. Notice the recall for Patron C shows here, even though the one item that could fill this recall has already been allocated to Patron B and is in transit
9. Apply the patch and restart services
10. Refresh the Recalls to pull page
11. Confirm the recall no longer shows on the Recalls to pull page -->
SUCCESS
12. Go to Biblio A and add a second item - Item B
13. Go back to Recalls to pull and refresh the page
14. Confirm the recall for Patron C now shows and can be filled by Item
B

Sponsored-by: Auckland University of Technology
Signed-off-by: Andrew Auld <andrew.auld@ptfs-europe.com>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Aleisha Amohia 2023-03-14 04:19:31 +00:00 committed by Tomas Cohen Arazi
parent 4e7dfa2fba
commit b439354026
Signed by: tomascohen
GPG key ID: 0A272EA1B2F3C15F

View file

@ -50,7 +50,7 @@ if ( $op eq 'cancel' ) {
} }
if ( $op eq 'list' ) { if ( $op eq 'list' ) {
my @recalls = Koha::Recalls->search({ status => [ 'requested','overdue','in_transit' ] })->as_list; my @recalls = Koha::Recalls->search({ status => [ 'requested','overdue' ] })->as_list;
my @pull_list; my @pull_list;
my %seen_bib; my %seen_bib;
foreach my $recall ( @recalls ) { foreach my $recall ( @recalls ) {
@ -64,7 +64,7 @@ if ( $op eq 'list' ) {
# get recall data about this biblio # get recall data about this biblio
my $biblio = $recall->biblio; my $biblio = $recall->biblio;
my @this_bib_recalls = $biblio->recalls->search( my @this_bib_recalls = $biblio->recalls->search(
{ status => [ 'requested', 'overdue', 'in_transit' ] }, { status => [ 'requested','overdue' ] },
{ order_by => { -asc => 'created_date' } } { order_by => { -asc => 'created_date' } }
)->as_list; )->as_list;
my $recalls_count = scalar @this_bib_recalls; my $recalls_count = scalar @this_bib_recalls;
@ -82,7 +82,7 @@ if ( $op eq 'list' ) {
my @items = $biblio->items->as_list; my @items = $biblio->items->as_list;
foreach my $item ( @items ) { foreach my $item ( @items ) {
if ( $item->can_be_waiting_recall and !$item->checkout ) { if ( $item->can_be_waiting_recall and !$item->checkout and Koha::Recalls->search({ item_id => $item->id, status => [ 'waiting','in_transit' ], completed => 0 })->count == 0 ) {
# if item can be pulled to fulfill recall, collect item data # if item can be pulled to fulfill recall, collect item data
$items_count++; $items_count++;
push( @callnumbers, $item->itemcallnumber ) if ( $item->itemcallnumber ); push( @callnumbers, $item->itemcallnumber ) if ( $item->itemcallnumber );