From 2a166eae9a011db9a7b609847da06d30139f042c 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 | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/misc/cronjobs/fines.pl b/misc/cronjobs/fines.pl index 89ad4a2d3c..d815709256 100755 --- a/misc/cronjobs/fines.pl +++ b/misc/cronjobs/fines.pl @@ -44,12 +44,14 @@ my $help; my $verbose; my $output_dir; my $log; +my $maxfinesdays; GetOptions( 'h|help' => \$help, 'v|verbose' => \$verbose, 'l|log' => \$log, - 'o|out:s' => \$output_dir, + 'o|out=s' => \$output_dir, + 'maxfinesdays=i' => \$maxfinesdays ); my $usage = << 'ENDUSAGE'; @@ -63,6 +65,7 @@ This script has the following parameters : -l --log: log the output to a file (optional if the -o parameter is given) -o --out: ouput directory for logs (defaults to env or /tmp if !exist) -v --verbose + --maxfinesdays: number of days after which normal fine amount should jump to maximal amount ENDUSAGE @@ -122,9 +125,16 @@ for my $overdue ( @{$overdues} ) { } ++$counted; - my ( $amount, $unitcounttotal, $unitcount ) = - CalcFine( $overdue, $borrower->{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.17.1