Bug 23103: Cannot checkin items lost by deleted patrons with fines attached

Test Plan:
1) Checkout an item to a patron
2) Ensure the item has a replacement cost (or itemtype has default)
3) Ensure patrons are charged when items lost
4) Mark the item lost
5) Confirm patron has a fine
6) Write off the fine
7) Delete the patron
8) Check in the item
9) Note the internal server error
10) Apply this patch
11) Repeat steps 1-8
12) Note there is no internal server error!
13) prove t/db_dependent/Circulation.t

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
Kyle Hall 2019-06-12 15:08:08 -04:00 committed by Martin Renvoize
parent 90d4e3a672
commit d2a2e4a8d5
Signed by: martin.renvoize
GPG key ID: 422B469130441A0F
2 changed files with 49 additions and 2 deletions

View file

@ -2418,7 +2418,12 @@ sub _FixAccountForLostAndReturned {
return unless $accountlines->count > 0; return unless $accountlines->count > 0;
my $accountline = $accountlines->next; my $accountline = $accountlines->next;
my $total_to_refund = 0; my $total_to_refund = 0;
my $account = Koha::Patrons->find( $accountline->borrowernumber )->account;
return unless $accountline->borrowernumber;
my $patron = Koha::Patrons->find( $accountline->borrowernumber );
return undef unless $patron; # Patron has been deleted, nobody to credit the return to
my $account = $patron->account;
# Use cases # Use cases
if ( $accountline->amount > $accountline->amountoutstanding ) { if ( $accountline->amount > $accountline->amountoutstanding ) {

View file

@ -18,7 +18,7 @@
use Modern::Perl; use Modern::Perl;
use utf8; use utf8;
use Test::More tests => 44; use Test::More tests => 45;
use Test::MockModule; use Test::MockModule;
use Data::Dumper; use Data::Dumper;
@ -2599,6 +2599,48 @@ subtest '_FixOverduesOnReturn' => sub {
is( $credit->amountoutstanding + 0, 0, "Credit amountoutstanding is correctly set to 0" ); is( $credit->amountoutstanding + 0, 0, "Credit amountoutstanding is correctly set to 0" );
}; };
subtest '_FixAccountForLostAndReturned returns undef if patron is deleted' => sub {
plan tests => 1;
my $manager = $builder->build_object({ class => "Koha::Patrons" });
t::lib::Mocks::mock_userenv({ patron => $manager, branchcode => $manager->branchcode });
my $biblio = $builder->build_sample_biblio({ author => 'Hall, Kylie' });
my $branchcode = $library2->{branchcode};
my $item = $builder->build_sample_item(
{
biblionumber => $biblio->biblionumber,
library => $branchcode,
replacementprice => 99.00,
itype => $itemtype,
}
);
my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
## Start with basic call, should just close out the open fine
my $accountline = Koha::Account::Line->new(
{
borrowernumber => $patron->id,
accounttype => 'L',
status => undef,
itemnumber => $item->itemnumber,
amount => 99.00,
amountoutstanding => 99.00,
interface => 'test',
}
)->store();
$patron->delete();
my $return_value = C4::Circulation::_FixAccountForLostAndReturned( $patron->id, $item->itemnumber );
is( $return_value, undef, "_FixAccountForLostAndReturned returns undef if patron is deleted" );
};
subtest 'Set waiting flag' => sub { subtest 'Set waiting flag' => sub {
plan tests => 4; plan tests => 4;