From 2b5957372640bce1ad6145f8f56dc467323dddf5 Mon Sep 17 00:00:00 2001 From: David Bourgault Date: Mon, 18 Sep 2017 13:24:13 -0400 Subject: [PATCH] Bug 19336: Add --maxfinesday option to fines.pl This is a functionality we have for some of our clients we want to push to the community. Adds the --maxfinesday argument to fines.pl which creates or updates a fine with the maximum amount set in the circulation rules after the delay has passed. e.g.: ./fines.pl --maxfinesdays 30 All item over 30 days late will have the maximal fine applied. Here is a test plan I followed based on above. Test plan: 1. Create circulation rule with Overdue fines cap set 2. Set finesMode systempreference to 'Calculate and charge' 3. Check out an item with the due date set 30 days ago 4. In Koha shell run ./fines.pl --maxfinesdays 30 5. There should now be a new fine in the accountlines table of the amount set in overdue fines cap Followed test plan, patch worked as intended Signed-off-by: Alex Buckley --- misc/cronjobs/fines.pl | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/misc/cronjobs/fines.pl b/misc/cronjobs/fines.pl index 3edf6ed736..532c52433f 100755 --- a/misc/cronjobs/fines.pl +++ b/misc/cronjobs/fines.pl @@ -48,6 +48,7 @@ my $verbose; my $output_dir; my $log; my $maxdays; +my $maxfinesdays; GetOptions( 'h|help' => \$help, @@ -55,6 +56,7 @@ GetOptions( 'l|log' => \$log, 'o|out:s' => \$output_dir, 'm|maxdays:i' => \$maxdays, + 'maxfinesdays=i' => \$maxfinesdays ); my $usage = << 'ENDUSAGE'; @@ -69,6 +71,7 @@ This script has the following parameters : -o --out: ouput directory for logs (defaults to env or /tmp if !exist) -v --verbose -m --maxdays: how many days back of overdues to process + --maxfinesdays: number of days after which normal fine amount should jump to maximal amount ENDUSAGE @@ -144,9 +147,16 @@ for my $overdue ( @{$overdues} ) { } ++$counted; - my ( $amount, $unitcounttotal, $unitcount ) = - CalcFine( $overdue, $patron->categorycode, - $branchcode, $datedue, $today ); + my ( $amount, $unitcounttotal, $unitcount); + if ( defined($maxfinesdays) && $maxfinesdays <= $datedue->delta_days( $today )) { + my $itype = $overdue->{itemtype} || $overdue->{itype}; + my $data = C4::Circulation::GetIssuingRule( $borrower->{categorycode}, $itype, $branchcode ); + $amount = $data->{overduefinescap}; + } + if (!$amount) { + ( $amount, $unitcounttotal, $unitcount ) = CalcFine( $overdue, $borrower->{categorycode}, $branchcode, $datedue, $today ); + } + # Don't update the fine if today is a holiday. # This ensures that dropbox mode will remove the correct amount of fine. -- 2.25.1