Bug 29220: Minor fixes and improved code readability

The current handling of onsite checkouts with OnSiteCheckoutsForce
syspref enabled is confusing and hard to understand. It's also fragile
with a high risk future changes could result in subtle bugs.

Also fix an inconsistency in which errors (DEBT_GUARANTORS) are considered blocking for
forced onsite checkouts.

To test:
1) Enable OnSiteCheckouts, disable OnSiteCheckoutsForce
2) Edit a biblio item and for example set Not for loan to a value
restricting loans
3) Try to check out the item for some patron
4) A message that item is not for loan should be displayed
5) Select "On-site checkout" and try again
6) The same message should be displayed
7) Try to checkout with some invalid barcode
8) A message that barcode was not found should be displayed
9) Now enable OnSiteCheckoutsForce
10) Try to checkout the item for some patron
11) A message that item is not for loan should be displayed
12) Select "On-site checkout" and try again
13) Checkout should now succeed, no messages should be displayed
14) Try to checkout with some invalid barcode
15) A message that barcode was not found should be displayed
16) All of the above steps should produce the same result with and without this patch

Additional:
Before patch:
 a) Set  NoIssuesChargeGuarantorsWithGuarantees to 1
 b) add a guarantee with another guarantor
 c) charge a 1.01 fine to other guarantor
 d) checkout is blocked due to fines
Apply patch
 e) checkout is allowed when onsite checkouts forced

Sponsored-by: Gothenburg University Library
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
(cherry picked from commit ad5699ea1d)

Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
This commit is contained in:
David Gustafsson 2021-10-13 15:36:43 +02:00 committed by Andrew Fuerste-Henry
parent 14a77ce99d
commit 68f7dbe2fb
1 changed files with 9 additions and 9 deletions

View File

@ -376,21 +376,21 @@ if (@$barcodes) {
}
}
if ( $error->{DEBT_GUARANTORS} ) {
$template_params->{DEBT_GUARANTORS} = $error->{DEBT_GUARANTORS};
$template_params->{IMPOSSIBLE} = 1;
$blocker = 1;
}
# Only some errors will block when performing forced onsite checkout,
# for other cases all errors will block
my @blocking_error_codes = ($onsite_checkout and C4::Context->preference("OnSiteCheckoutsForce")) ?
qw( UNKNOWN_BARCODE ) : (keys %$error);
if ( $error->{UNKNOWN_BARCODE} or not $onsite_checkout or not C4::Context->preference("OnSiteCheckoutsForce") ) {
delete $question->{'DEBT'} if ($debt_confirmed);
foreach my $impossible ( keys %$error ) {
$template_params->{$impossible} = $$error{$impossible};
foreach my $code ( @blocking_error_codes ) {
if ($error->{$code}) {
$template_params->{$code} = $error->{$code};
$template_params->{IMPOSSIBLE} = 1;
$blocker = 1;
}
}
delete $question->{'DEBT'} if ($debt_confirmed);
if( $item and ( !$blocker or $force_allow_issue ) ){
my $confirm_required = 0;
unless($issueconfirmed){