Koha/misc/cronjobs/reconcile_balances.pl
Aleisha Amohia f406aa2ae3
Bug 24266: (alternate patch) Only use defined borrowernumbers in reconcile_balances.pl cron
I believe the error is triggered when borrowernumbers are left empty in
the accountlines table. Not sure why this would happen, but it appears
to be what causes the problem.

Do not apply the first patch if testing this patch.

To test:
1) sudo koha-mysql INSTANCENAME
2) Create a test borrower, add any payment etc to create an accountline,
    then delete this borrower
3) ensure the AccountAutoReconcile syspref is disabled
4) Go to another borrower's accounting tab
5) Create a manual credit or debit. Confirm this shows in the 'Make a
payment' tab as an amount that COULD be applied, but isn't automatically
applied
6) in your terminal, run the reconcile_balances.pl script
7) Confirm the error does not show in the logs and the balance for
the borrower is correctly reconciled.

Sponsored-by: Horowhenua District Council
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>
2020-04-14 08:21:31 +01:00

123 lines
2.9 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright 2018 Theke Solutions
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
=head1 NAME
reconcile_balances.pl - cron script to reconcile patron's balances
=head1 SYNOPSIS
./reconcile_balances.pl
or, in crontab:
0 1 * * * reconcile_balances.pl
=head1 DESCRIPTION
This script loops through patrons with outstanding credits and proceeds
to reconcile their balances.
=head1 OPTIONS
=over 8
=item B<--help>
Prints a brief help message and exits.
=item B<--verbose>
Makes the process print information about the taken actions.
=back
=cut
use Modern::Perl;
use Getopt::Long;
use Pod::Usage;
use Try::Tiny;
BEGIN {
# find Koha's Perl modules
# test carefully before changing this
use FindBin;
eval { require "$FindBin::Bin/../kohalib.pl" };
}
use Koha::Script -cron;
use C4::Log;
use Koha::Account::Lines;
use Koha::Patrons;
my $help = 0;
my $verbose = 0;
GetOptions(
'help' => \$help,
'verbose' => \$verbose
) or pod2usage(2);
pod2usage(1) if $help;
cronlogaction();
my @patron_ids = map { $_->borrowernumber } Koha::Account::Lines->search(
{
amountoutstanding => { '<' => 0 },
borrowernumber => { '!=' => undef }
},
{
columns => [ qw/borrowernumber/ ],
distinct => 1,
}
);
my $patrons = Koha::Patrons->search({ borrowernumber => { -in => \@patron_ids } });
while (my $patron = $patrons->next) {
my $account = $patron->account;
my $total_outstanding_credit = $account->outstanding_credits->total_outstanding;
my $total_outstanding_debit = $account->outstanding_debits->total_outstanding;
if ( $total_outstanding_credit < 0
and $total_outstanding_debit > 0) {
try {
$account->reconcile_balance;
print $patron->id . ": credit: $total_outstanding_credit " .
"debit: $total_outstanding_debit " .
"=> outstanding " .
"credit: " . $account->outstanding_credits->total_outstanding .
" debit: " . $account->outstanding_debits->total_outstanding . "\n"
if $verbose;
}
catch {
print "Problem with patron " . $patron->borrowernumber . ": $_";
};
}
}
1;
__END__