From d09096abaeca2e484839a4ba2cfcb31d603f23dc 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 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 Signed-off-by: Kyle M Hall --- C4/Circulation.pm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index efdf817364..cb2e45d951 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2267,6 +2267,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.20.1