Hourly fine periods are not charging for the first period of
overdue-ness. If an item is due at 2:00pm and has a fine of
$.50 per hour, the first fine should be eligible for generation
at 2:01pm. As it stands, the first fine does not generate until
an entire fine period has elapsed, so in this case, 3:00pm.
The previous version of the code had a special case for day-
granular fine periods, so a majority of fines were not affected.
This commit expands the same idea (charging for the fine period
you are currently "in") to all fine periods.
Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
use DateTime;
use DateTime::Format::ISO8601;
use OpenILS::Utils::Penalty;
+use POSIX qw(ceil);
sub isTrue {
my $v = shift;
}
next if ($last_fine > $now);
- my $pending_fine_count = int( ($now - $last_fine) / $fine_interval );
-
- # Generate fines for the interval we are currently inside, when the fine interval is some multiple of 1d
- $pending_fine_count++ if ($fine_interval && ($fine_interval % 86400 == 0));
+ # Generate fines for each past interval, including the one we are inside
+ my $pending_fine_count = ceil( ($now - $last_fine) / $fine_interval );
if ( $last_fine == $due # we have no fines yet
&& $grace_period # and we have a grace period