Bug 25690: Remove duplicated logic in SIP2 checkouts

Because AllowItemsOnHoldCheckoutSIP only affects the checkoutability
of non-attached, i.e. RESERVED holds in SIP2 we can therefore use the
common code from CanBookBeIssued and ignore only the RESERVED confirmation
message case in SIP2 checkout code.

This slightly changes the checkout error message given for "In
processing" holds that someone other than the holdee tries to
checkout. Otherwise there is no logic changes. The message that this
changes is "Item is on hold for another patron." vs. now "Item cannot
be issued: $confirmation". It is easier to create follow-up patch to
properly add INPROCESSING confirmation to CanBookBeIssued and then
show correct message based on the CanBookBeIssued return value.

To test:
 1) Apply all patches from bug 25690 to get latest Transaction.t version
 2) prove t/db_dependent/SIP/Transaction.t => passes

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Joonas Kylmälä 2021-02-17 14:17:36 +02:00 committed by Jonathan Druart
parent 9b5913d308
commit 338ba1d769

View file

@ -55,9 +55,7 @@ sub do_checkout {
my $overridden_duedate; # usually passed as undef to AddIssue
my $prevcheckout_block_checkout = $account->{prevcheckout_block_checkout};
$debug and warn "do_checkout borrower: . " . $patron->borrowernumber;
my ($issuingimpossible, $needsconfirmation) = _can_we_issue($patron, $barcode,
C4::Context->preference("AllowItemsOnHoldCheckoutSIP")
);
my ($issuingimpossible, $needsconfirmation) = _can_we_issue($patron, $barcode, 0);
my $noerror=1; # If set to zero we block the issue
if (keys %{$issuingimpossible}) {
@ -71,14 +69,15 @@ sub do_checkout {
foreach my $confirmation (keys %{$needsconfirmation}) {
if ($confirmation eq 'RENEW_ISSUE'){
$self->screen_msg("Item already checked out to you: renewing item.");
} elsif ($confirmation eq 'RESERVED' or $confirmation eq 'RESERVE_WAITING' or $confirmation eq 'TRANSFERRED') {
my $x = $self->{item}->available($patron->borrowernumber);
if ($x) {
$self->screen_msg("Item was reserved for you.");
} else {
$self->screen_msg("Item is reserved for another patron upon return.");
$noerror = 0;
}
} elsif ($confirmation eq 'RESERVED' and !C4::Context->preference("AllowItemsOnHoldCheckoutSIP")) {
$self->screen_msg("Item is reserved for another patron upon return.");
$noerror = 0;
} elsif ($confirmation eq 'RESERVED' and C4::Context->preference("AllowItemsOnHoldCheckoutSIP")) {
next;
} elsif ($confirmation eq 'RESERVE_WAITING' or $confirmation eq 'TRANSFERRED') {
$debug and warn "Item is on hold for another patron.";
$self->screen_msg("Item is on hold for another patron.");
$noerror = 0;
} elsif ($confirmation eq 'ISSUED_TO_ANOTHER') {
$self->screen_msg("Item already checked out to another patron. Please return item for check-in.");
$noerror = 0;
@ -113,15 +112,6 @@ sub do_checkout {
}
}
my $itemnumber = $self->{item}->{itemnumber};
foreach (@$shelf) {
$debug and warn sprintf( "shelf has (%s for %s). this is (%is, %s)", $_->{itemnumber}, $_->{borrowernumber}, $itemnumber, $patron->borrowernumber );
($_->{itemnumber} eq $itemnumber) or next; # skip it if not this item
($_->{borrowernumber} == $patron->borrowernumber) and last;
# if item was waiting for this patron, we're done. AddIssue takes care of the "W" hold.
$debug and warn "Item is on hold for another patron.";
$self->screen_msg("Item is on hold for another patron.");
$noerror = 0;
}
my ($fee, undef) = GetIssuingCharges($itemnumber, $patron->borrowernumber);
if ( $fee > 0 ) {
$self->{sip_fee_type} = '06';