Bug 37650

Summary: Checkin does not create transfers for future holds
Product: Koha Reporter: Marcel de Rooy <m.de.rooy>
Component: Hold requestsAssignee: Marcel de Rooy <m.de.rooy>
Status: Patch doesn't apply --- QA Contact: Testopia <testopia>
Severity: major    
Priority: P5 - low CC: emily.lamancusa, gmcharlt, lisette, victor
Version: Main   
Hardware: All   
OS: All   
See Also: https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=34972
https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=36762
https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=37651
Change sponsored?: --- Patch complexity: Trivial patch
Documentation contact: Documentation submission:
Text to go in the release notes:
Version(s) released in:
Circulation function:
Attachments: Bug 37650: [22.11] Add lookahead in calling GetOtherReserves in returns.pl
Bug 37650: Add lookahead days in CheckReserves call in returns.pl

Description Marcel de Rooy 2024-08-15 12:38:41 UTC
Found on 22.11
The code in returns.pl contains a call to GetOtherReserves but does not pass lookahead days.
Causing CheckReserves to find no reserves, skipping creation of a new transfer.

Easy fix forthcoming

Note that it took me hours to find this bug. I love returns.pl, its template and the associated modules ;)

PS Bug 34972 is a game changer here on master.
Comment 1 Marcel de Rooy 2024-08-15 12:44:11 UTC
FOR MASTER:
my ( undef, $nextreservinfo, undef ) = CheckReserves($item);

@Emily: Inrelation to bug 34972, we should pass lookahead_days here as well. Or default in the sub to the pref ConfirmFutureHolds?
Comment 2 Marcel de Rooy 2024-08-15 13:14:08 UTC
A related problem in transferstoreceive btw:

# we check if we have a reserv for this transfer
            my $holds = $item->current_holds;

This wont find a future hold (e.g. for tomorrow) either.
Comment 3 Marcel de Rooy 2024-08-15 13:50:54 UTC
(In reply to Marcel de Rooy from comment #2)
> A related problem in transferstoreceive btw:
> 
> # we check if we have a reserv for this transfer
>             my $holds = $item->current_holds;
> 
> This wont find a future hold (e.g. for tomorrow) either.

Moving this to a new report. The whole idea behind current_holds is a bit rigorous.. Most calls might need some adjustment?

Bug 37651
Comment 4 Emily Lamancusa (emlam) 2024-08-15 14:25:24 UTC
(In reply to Marcel de Rooy from comment #1)
> FOR MASTER:
> my ( undef, $nextreservinfo, undef ) = CheckReserves($item);
> 
> @Emily: Inrelation to bug 34972, we should pass lookahead_days here as well.
> Or default in the sub to the pref ConfirmFutureHolds?

Ooh, good catch. I think we need to pass it. C4::Circulation::transferbook calls CheckReserves with no lookahead on purpose, so we need to preserve the behavior for that case.
Comment 5 Marcel de Rooy 2024-08-15 14:25:52 UTC
Created attachment 170384 [details] [review]
Bug 37650: [22.11] Add lookahead in calling GetOtherReserves in returns.pl

Test plan:
Add a future hold for an item on another branch.
Check that item in at the home branch.
Without this patch, you can confirm the hold but a transfer will
not be made. With this patch, the transfer should be created.
Comment 6 Marcel de Rooy 2024-08-19 12:28:37 UTC
Testing on master shows that the bug does not occur anymore after bug 34972. The call to CheckReserves seems to be wrong but this part of code does not seem to make any difference:

    if ( $userenv_branch ne $nextreservinfo->{'branchcode'} ) {
        my $patron = Koha::Patrons->find( $nextreservinfo->{'borrowernumber'} );
        $template->param(
            itemtitle      => $biblio->title,
            itembiblionumber => $biblio->biblionumber,
            iteminfo       => $biblio->author,
            patron         => $patron,
            diffbranch     => 1,
        );
    }

If you confirmed a future hold, returns moves the hold to transit and creates a transfer now. The following call to CheckReserves will not find this hold, normally nothing. So $nextreserveinfo is expected to be undef.
There is no additional display after the modal is gone. Just a checkin box.

Warnings in the log confirm the uninitialized value:
[2024/08/19 12:02:34] [WARN] Use of uninitialized value in string ne at /usr/share/koha/circ/returns.pl line 182.
The master patch should resolve that warning now. And remove an additional one too on L253:
[2024/08/19 12:04:01] [WARN] Use of uninitialized value $op in string eq at /usr/share/koha/circ/returns.pl line 253.
Comment 7 Marcel de Rooy 2024-08-19 12:29:21 UTC
The 22.11 bug is ONLY necessary in case 34972 is not backported !
Comment 8 Marcel de Rooy 2024-08-19 12:30:38 UTC
Created attachment 170466 [details] [review]
Bug 37650: Add lookahead days in CheckReserves call in returns.pl

Test plan:
Enable future holds. Put a positive value in ConfirmFutureHolds.
Add a hold for tomorrow and pickup at B. Check item in at A.
Confirm hold.

Without this patch you should see a warn on L182 and L253.
With this patch, they should be gone.

NOTE: Before bug 34972 no transfer was created for future holds.
See also the 22.11 patch on Bugzilla.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Comment 9 Marcel de Rooy 2024-08-19 12:31:19 UTC
(In reply to Marcel de Rooy from comment #2)
> A related problem in transferstoreceive btw:
> 
> # we check if we have a reserv for this transfer
>             my $holds = $item->current_holds;
> 
> This wont find a future hold (e.g. for tomorrow) either.

See bug 37651
Comment 10 Victor Grousset/tuxayo 2024-10-07 19:20:14 UTC
I don't get a warn at L253, on L182, yes.

Hold starts on date: tomorrow
ConfirmFutureHolds: 3
record level hold
I'm checking it in another library than the pick up one.

Anything I could be missing? I didn't know about the feature and struggled to find  AllowHoldDateInFuture so I'm likely missing something obvious.
Comment 11 Marcel de Rooy 2024-10-08 11:40:03 UTC
(In reply to Victor Grousset/tuxayo from comment #10)
> I don't get a warn at L253, on L182, yes.

The line numbers may not be exact anymore. They were on uninitialized $op iirc, so not that important. L253 includes an $op. 182 does not now?

> Hold starts on date: tomorrow
> ConfirmFutureHolds: 3
> record level hold
> I'm checking it in another library than the pick up one.
> 
> Anything I could be missing? I didn't know about the feature and struggled
> to find  AllowHoldDateInFuture so I'm likely missing something obvious.

First thing coming up, is test with an item level hold.
Comment 12 Victor Grousset/tuxayo 2024-10-09 23:17:55 UTC
(In reply to Marcel de Rooy from comment #11)
> The line numbers may not be exact anymore. They were on uninitialized $op
> iirc, so not that important. L253 includes an $op. 182 does not now?

L253 for me would be
if ( $op eq 'cud-dotransfer'){
which is likely the same for you.

182 that I get is
    if ( $userenv_branch ne $nextreservinfo->{'branchcode'} ) {
And it's relevant with the changes line 180 from the patch.



> First thing coming up, is test with an item level hold.

Right, I though of it last time an forgot. But same result here :(
Only war at line 182.




I held 39999000012118 to patron with borrowernumber=5, pickup liberty.
I'm in centerville and check in and confirmed the hold & transfer.
Comment 13 Lisette Scheer 2024-10-25 20:02:16 UTC
This needs to be rebased. 
Applying: Bug 37650: Add lookahead in calling GetOtherReserves in returns.pl
Using index info to reconstruct a base tree...
M	C4/Reserves.pm
M	circ/returns.pl
Falling back to patching base and 3-way merge...
Auto-merging circ/returns.pl
CONFLICT (content): Merge conflict in circ/returns.pl
Auto-merging C4/Reserves.pm
CONFLICT (content): Merge conflict in C4/Reserves.pm
error: Failed to merge in the changes.
Patch failed at 0001 Bug 37650: Add lookahead in calling GetOtherReserves in returns.pl