From 286069596289dbd387339ba12015dc1f51d01f04 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Wed, 30 Nov 2016 19:33:44 +0000 Subject: [PATCH] Bug 14146: Add the ability to cumulate restriction periods Content-Type: text/plain; charset=utf-8 At the moment the default behaviour is not to cumulate the restriction periods but to apply the longest one. This patch set creates a new syspref CumulativeRestrictionPeriods. If on, the behaviour changes and the restriction periods are cumulated: the days of the second restriction are added to the actual restriction period. We could add a new circulation rule instead of a syspref, but I am not sure it's very useful to have such granularity for this behaviour (can be changed if needed). How it works: Let's take 2 items, A and B. A is returned with Na days late, and B Nb days late The grace period is Ng and there is 1 day of suspension charge per day of overdue The suspension period is until day D = Na - Ng + Nb - Ng I would have expected D = Na + Nb - Ng but it's how it worked before this patch. Test plan: Create several overdue for a given patron Do the checkins and confirm that the period are added if the pref is on. If the pref is off, you should not get any changes in the existing behaviour. Sponsored-by: Orex Digital Signed-off-by: Marcel de Rooy --- C4/Circulation.pm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index af5acce..1e31143 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2249,6 +2249,13 @@ sub _debar_user_on_return { if DateTime::Duration->compare( $max_sd, $suspension_days ) < 0; } + if ( C4::Context->preference('CumulativeRestrictionPeriods') and $borrower->{debarred} ) { + my $debarment = @{ GetDebarments( { borrowernumber => $borrower->{borrowernumber}, type => 'SUSPENSION' } ) }[0]; + if ( $debarment ) { + $return_date = dt_from_string( $debarment->{expiration}, 'sql' ); + } + } + my $new_debar_dt = $dt_today->clone()->add_duration( $suspension_days ); -- 2.1.4