use 5.010;
use DateTime;
+use DateTime::Set;
use C4::Context;
use Carp;
use Readonly;
my ( $self, $base_date, $add_duration, $unit ) = @_;
my $days_mode = C4::Context->preference('useDaysMode');
Readonly::Scalar my $return_by_hour => 10;
+ my $day_dur = DateTime::Duration->new( days => 1);
+ if ($add_duration->is_negative()) {
+ $day_dur->inverse();
+ }
if ( $days_mode eq 'Datedue' ) {
my $dt = $base_date + $add_duration;
while ( $self->is_holiday($dt) ) {
# TODOP if hours set to 10 am
- $dt->add( days => 1 );
+ $dt->add_duration( $day_dur );
if ( $unit eq 'hours' ) {
$dt->set_hour($return_by_hour); # Staffs specific
}
} elsif ( $days_mode eq 'Calendar' ) {
my $days = $add_duration->in_units('days');
while ($days) {
- $base_date->add( days => 1 );
+ $base_date->add_duration( $day_dur );
if ( $self->is_holiday($base_date) ) {
next;
} else {
if (@matches) {
return 1;
}
- $dt->truncate('days');
+ $dt->truncate(to => 'days');
my $day = $dt->day;
my $month = $dt->month;
for my $dm ( @{ $self->{day_month_closed_days} } ) {