Lines 171-179
sub addHours {
Link Here
|
171 |
$self->is_holiday($base_date) ) { |
171 |
$self->is_holiday($base_date) ) { |
172 |
|
172 |
|
173 |
if ( $hours_duration->is_negative() ) { |
173 |
if ( $hours_duration->is_negative() ) { |
174 |
$base_date = $self->prev_open_day($base_date); |
174 |
$base_date = $self->prev_open_days($base_date, 1); |
175 |
} else { |
175 |
} else { |
176 |
$base_date = $self->next_open_day($base_date); |
176 |
$base_date = $self->next_open_days($base_date, 1); |
177 |
} |
177 |
} |
178 |
|
178 |
|
179 |
$base_date->set_hour($return_by_hour); |
179 |
$base_date->set_hour($return_by_hour); |
Lines 196-207
sub addDays {
Link Here
|
196 |
|
196 |
|
197 |
if ( $days_duration->is_negative() ) { |
197 |
if ( $days_duration->is_negative() ) { |
198 |
while ($days) { |
198 |
while ($days) { |
199 |
$base_date = $self->prev_open_day($base_date); |
199 |
$base_date = $self->prev_open_days($base_date, 1); |
200 |
--$days; |
200 |
--$days; |
201 |
} |
201 |
} |
202 |
} else { |
202 |
} else { |
203 |
while ($days) { |
203 |
while ($days) { |
204 |
$base_date = $self->next_open_day($base_date); |
204 |
$base_date = $self->next_open_days($base_date, 1); |
205 |
--$days; |
205 |
--$days; |
206 |
} |
206 |
} |
207 |
} |
207 |
} |
Lines 270-296
sub is_holiday {
Link Here
|
270 |
return 0; |
270 |
return 0; |
271 |
} |
271 |
} |
272 |
|
272 |
|
273 |
sub next_open_day { |
273 |
sub next_open_days { |
274 |
my ( $self, $dt ) = @_; |
274 |
my ( $self, $dt, $to_add ) = @_; |
275 |
my $base_date = $dt->clone(); |
275 |
my $base_date = $dt->clone(); |
276 |
|
276 |
|
277 |
$base_date->add(days => 1); |
277 |
$base_date->add(days => $to_add); |
278 |
|
278 |
|
279 |
while ($self->is_holiday($base_date)) { |
279 |
while ($self->is_holiday($base_date)) { |
280 |
$base_date->add(days => 1); |
280 |
$base_date->add(days => $to_add); |
281 |
} |
281 |
} |
282 |
|
282 |
|
283 |
return $base_date; |
283 |
return $base_date; |
284 |
} |
284 |
} |
285 |
|
285 |
|
286 |
sub prev_open_day { |
286 |
sub prev_open_days { |
287 |
my ( $self, $dt ) = @_; |
287 |
my ( $self, $dt, $to_sub ) = @_; |
288 |
my $base_date = $dt->clone(); |
288 |
my $base_date = $dt->clone(); |
289 |
|
289 |
|
290 |
$base_date->add(days => -1); |
290 |
# It feels logical to be passed a positive number, though we're |
|
|
291 |
# subtracting, so do the right thing |
292 |
$to_sub = $to_sub > 0 ? 0 - $to_sub : $to_sub; |
293 |
|
294 |
$base_date->add(days => $to_sub); |
291 |
|
295 |
|
292 |
while ($self->is_holiday($base_date)) { |
296 |
while ($self->is_holiday($base_date)) { |
293 |
$base_date->add(days => -1); |
297 |
$base_date->add(days => $to_sub); |
294 |
} |
298 |
} |
295 |
|
299 |
|
296 |
return $base_date; |
300 |
return $base_date; |
Lines 306-312
sub days_forward {
Link Here
|
306 |
my $base_dt = $start_dt->clone(); |
310 |
my $base_dt = $start_dt->clone(); |
307 |
|
311 |
|
308 |
while ($num_days--) { |
312 |
while ($num_days--) { |
309 |
$base_dt = $self->next_open_day($base_dt); |
313 |
$base_dt = $self->next_open_days($base_dt, 1); |
310 |
} |
314 |
} |
311 |
|
315 |
|
312 |
return $base_dt; |
316 |
return $base_dt; |
Lines 472-492
Passed two dates returns a DateTime::Duration object measuring the length betwee
Link Here
|
472 |
ignoring closed days. Always returns a positive number irrespective of the |
476 |
ignoring closed days. Always returns a positive number irrespective of the |
473 |
relative order of the parameters |
477 |
relative order of the parameters |
474 |
|
478 |
|
475 |
=head2 next_open_day |
479 |
=head2 next_open_days |
476 |
|
480 |
|
477 |
$datetime = $calendar->next_open_day($duedate_dt) |
481 |
$datetime = $calendar->next_open_days($duedate_dt, $to_add) |
478 |
|
482 |
|
479 |
Passed a Datetime returns another Datetime representing the next open day. It is |
483 |
Passed a Datetime and number of days, returns another Datetime representing |
480 |
intended for use to calculate the due date when useDaysMode syspref is set to either |
484 |
the next open day after adding the passed number of days. It is intended for |
481 |
'Datedue' or 'Calendar'. |
485 |
use to calculate the due date when useDaysMode syspref is set to either |
|
|
486 |
'Datedue', 'Calendar' or 'Dayweek'. |
482 |
|
487 |
|
483 |
=head2 prev_open_day |
488 |
=head2 prev_open_days |
484 |
|
489 |
|
485 |
$datetime = $calendar->prev_open_day($duedate_dt) |
490 |
$datetime = $calendar->prev_open_days($duedate_dt, $to_sub) |
486 |
|
491 |
|
487 |
Passed a Datetime returns another Datetime representing the previous open day. It is |
492 |
Passed a Datetime and a number of days, returns another Datetime |
488 |
intended for use to calculate the due date when useDaysMode syspref is set to either |
493 |
representing the previous open day after subtracting the number of passed |
489 |
'Datedue' or 'Calendar'. |
494 |
days. It is intended for use to calculate the due date when useDaysMode |
|
|
495 |
syspref is set to either 'Datedue', 'Calendar' or 'Dayweek'. |
490 |
|
496 |
|
491 |
=head2 set_daysmode |
497 |
=head2 set_daysmode |
492 |
|
498 |
|