|
Lines 29-34
use C4::Output;
Link Here
|
| 29 |
use Koha::Database; |
29 |
use Koha::Database; |
| 30 |
use Koha::DateUtils; |
30 |
use Koha::DateUtils; |
| 31 |
|
31 |
|
|
|
32 |
=head1 NAME |
| 33 |
|
| 34 |
Koha::DiscreteCalendar - Object containing a branches calendar, working with the SQL database |
| 35 |
|
| 36 |
=head1 SYNOPSIS |
| 37 |
|
| 38 |
use Koha::DiscreteCalendar |
| 39 |
|
| 40 |
my $c = Koha::DiscreteCalendar->new( branchcode => 'MAIN' ); |
| 41 |
my $dt = DateTime->now(); |
| 42 |
|
| 43 |
# are we open |
| 44 |
$open = $c->is_holiday($dt); |
| 45 |
# when will item be due if loan period = $dur (a DateTime::Duration object) |
| 46 |
$duedate = $c->addDate($dt,$dur,'days'); |
| 47 |
|
| 48 |
|
| 49 |
=head1 DESCRIPTION |
| 50 |
|
| 51 |
Implements a new Calendar object, but uses the SQL database to keep track of days and holidays. |
| 52 |
This results in a performance gain since the optimization is done by the MySQL database/team. |
| 53 |
|
| 54 |
=head1 METHODS |
| 55 |
|
| 56 |
=head2 new : Create a (discrete) calendar object |
| 57 |
|
| 58 |
my $calendar = Koha::DiscreteCalendar->new( branchcode => 'MAIN' ); |
| 59 |
|
| 60 |
The option branchcode is required |
| 61 |
|
| 62 |
=cut |
| 63 |
|
| 32 |
sub new { |
64 |
sub new { |
| 33 |
my ( $classname, %options ) = @_; |
65 |
my ( $classname, %options ) = @_; |
| 34 |
my $self = {}; |
66 |
my $self = {}; |
|
Lines 67-73
sub _init {
Link Here
|
| 67 |
|
99 |
|
| 68 |
} |
100 |
} |
| 69 |
|
101 |
|
| 70 |
# Returns an array of all the date objects of current branch. |
102 |
=head2 getDatesInfo |
|
|
103 |
|
| 104 |
my @dates = $calendar->getDatesInfo(); |
| 105 |
|
| 106 |
Returns an array of hashes representing the dates in this calendar. The hash |
| 107 |
contains the fields C<$date>, C<$outputdate>, C<$holidaytype>, C<$openhour>, |
| 108 |
C<$closehour> and C<$note>. |
| 109 |
|
| 110 |
=cut |
| 111 |
|
| 71 |
sub getDatesInfo { |
112 |
sub getDatesInfo { |
| 72 |
my $self = shift; |
113 |
my $self = shift; |
| 73 |
my $branchcode = $self->{branchcode}; |
114 |
my $branchcode = $self->{branchcode}; |
|
Lines 101-109
sub getDatesInfo {
Link Here
|
| 101 |
return @datesInfos; |
142 |
return @datesInfos; |
| 102 |
} |
143 |
} |
| 103 |
|
144 |
|
| 104 |
# This methode will copy everything from a given branch to a new branch |
145 |
=head2 add_new_branch |
|
|
146 |
|
| 147 |
Koha::DiscreteCalendar->add_new_branch($copyBranch, $newBranch) |
| 148 |
|
| 149 |
This methode will copy everything from a given branch to a new branch |
| 150 |
C<$copyBranch> is the branch to copy from |
| 151 |
C<$newBranch> is the branch to be created, and copy into |
| 152 |
|
| 153 |
=cut |
| 154 |
|
| 105 |
sub add_new_branch { |
155 |
sub add_new_branch { |
| 106 |
my ($self, $copyBranch, $newBranch) = @_; |
156 |
my ( $classname, $copyBranch, $newBranch) = @_; |
|
|
157 |
|
| 107 |
$copyBranch = 'DFLT' unless $copyBranch; |
158 |
$copyBranch = 'DFLT' unless $copyBranch; |
| 108 |
my $schema = Koha::Database->new->schema; |
159 |
my $schema = Koha::Database->new->schema; |
| 109 |
|
160 |
|
|
Lines 124-130
sub add_new_branch {
Link Here
|
| 124 |
|
175 |
|
| 125 |
} |
176 |
} |
| 126 |
|
177 |
|
| 127 |
# DiscreteCalendar data transfer object (DTO) |
178 |
=head2 get_date_info |
|
|
179 |
|
| 180 |
my $date = $calendar->get_date_info; |
| 181 |
|
| 182 |
Returns a reference-to-hash representing a DiscreteCalendar date data object. |
| 183 |
The hash contains the fields C<$date>, C<$outputdate>, C<$holidaytype>, |
| 184 |
C<$openhour>, C<$closehour> and C<$note>. |
| 185 |
|
| 186 |
=cut |
| 187 |
|
| 128 |
sub get_date_info { |
188 |
sub get_date_info { |
| 129 |
my ($self, $date) = @_; |
189 |
my ($self, $date) = @_; |
| 130 |
my $branchcode = $self->{branchcode}; |
190 |
my $branchcode = $self->{branchcode}; |
|
Lines 159-165
sub get_date_info {
Link Here
|
| 159 |
return $dateDTO; |
219 |
return $dateDTO; |
| 160 |
} |
220 |
} |
| 161 |
|
221 |
|
| 162 |
# Returns the furthest date available in the databse of current branch. |
222 |
=head2 getMaxDate |
|
|
223 |
|
| 224 |
my $maxDate = $calendar->getMaxDate(); |
| 225 |
|
| 226 |
Returns the furthest date available in the databse of current branch. |
| 227 |
|
| 228 |
=cut |
| 229 |
|
| 163 |
sub getMaxDate { |
230 |
sub getMaxDate { |
| 164 |
my $self = shift; |
231 |
my $self = shift; |
| 165 |
my $branchcode = $self->{branchcode}; |
232 |
my $branchcode = $self->{branchcode}; |
|
Lines 178-184
sub getMaxDate {
Link Here
|
| 178 |
return $rs->next()->get_column('max'); |
245 |
return $rs->next()->get_column('max'); |
| 179 |
} |
246 |
} |
| 180 |
|
247 |
|
| 181 |
# Returns the onldest date available in the databse of current branch. |
248 |
=head2 getMinDate |
|
|
249 |
|
| 250 |
my $minDate = $calendar->getMinDate(); |
| 251 |
|
| 252 |
Returns the oldest date available in the databse of current branch. |
| 253 |
|
| 254 |
=cut |
| 255 |
|
| 182 |
sub getMinDate { |
256 |
sub getMinDate { |
| 183 |
my $self = shift; |
257 |
my $self = shift; |
| 184 |
my $branchcode = $self->{branchcode}; |
258 |
my $branchcode = $self->{branchcode}; |
|
Lines 197-203
sub getMinDate {
Link Here
|
| 197 |
return $rs->next()->get_column('min'); |
271 |
return $rs->next()->get_column('min'); |
| 198 |
} |
272 |
} |
| 199 |
|
273 |
|
| 200 |
# Returns an array of all the date objects that are unique holidays. |
274 |
=head2 get_unique_holidays |
|
|
275 |
|
| 276 |
my @unique_holidays = $calendar->get_unique_holidays(); |
| 277 |
|
| 278 |
Returns an array of all the date objects that are unique holidays. |
| 279 |
|
| 280 |
=cut |
| 281 |
|
| 201 |
sub get_unique_holidays { |
282 |
sub get_unique_holidays { |
| 202 |
my $self = shift; |
283 |
my $self = shift; |
| 203 |
my $branchcode = $self->{branchcode}; |
284 |
my $branchcode = $self->{branchcode}; |
|
Lines 227-233
sub get_unique_holidays {
Link Here
|
| 227 |
return @unique_holidays; |
308 |
return @unique_holidays; |
| 228 |
} |
309 |
} |
| 229 |
|
310 |
|
| 230 |
# Returns an array of all the date objects that are float holidays. |
311 |
=head2 get_float_holidays |
|
|
312 |
|
| 313 |
my @float_holidays = $calendar->get_float_holidays(); |
| 314 |
|
| 315 |
Returns an array of all the date objects that are float holidays. |
| 316 |
|
| 317 |
=cut |
| 318 |
|
| 231 |
sub get_float_holidays { |
319 |
sub get_float_holidays { |
| 232 |
my $self = shift; |
320 |
my $self = shift; |
| 233 |
my $branchcode = $self->{branchcode}; |
321 |
my $branchcode = $self->{branchcode}; |
|
Lines 257-264
sub get_float_holidays {
Link Here
|
| 257 |
return @float_holidays; |
345 |
return @float_holidays; |
| 258 |
} |
346 |
} |
| 259 |
|
347 |
|
| 260 |
# Returns an array of all the date objects that are need validation holidays. |
348 |
=head2 get_need_validation_holidays |
| 261 |
sub get_need_valdation_holidays { |
349 |
|
|
|
350 |
my @need_validation_holidays = $calendar->get_need_validation_holidays(); |
| 351 |
|
| 352 |
Returns an array of all the date objects that are float holidays in need of validation. |
| 353 |
|
| 354 |
=cut |
| 355 |
|
| 356 |
sub get_need_validation_holidays { |
| 262 |
my $self = shift; |
357 |
my $self = shift; |
| 263 |
my $branchcode = $self->{branchcode}; |
358 |
my $branchcode = $self->{branchcode}; |
| 264 |
my @need_validation_holidays; |
359 |
my @need_validation_holidays; |
|
Lines 287-293
sub get_need_valdation_holidays {
Link Here
|
| 287 |
return @need_validation_holidays; |
382 |
return @need_validation_holidays; |
| 288 |
} |
383 |
} |
| 289 |
|
384 |
|
| 290 |
# Returns an array of all the date objects that are repeatable holidays. |
385 |
=head2 get_repeatable_holidays |
|
|
386 |
|
| 387 |
my @repeatable_holidays = $calendar->get_repeatable_holidays(); |
| 388 |
|
| 389 |
Returns an array of all the date objects that are repeatable holidays. |
| 390 |
|
| 391 |
=cut |
| 392 |
|
| 291 |
sub get_repeatable_holidays { |
393 |
sub get_repeatable_holidays { |
| 292 |
my $self = shift; |
394 |
my $self = shift; |
| 293 |
my $branchcode = $self->{branchcode}; |
395 |
my $branchcode = $self->{branchcode}; |
|
Lines 317-323
sub get_repeatable_holidays {
Link Here
|
| 317 |
return @repeatable_holidays; |
419 |
return @repeatable_holidays; |
| 318 |
} |
420 |
} |
| 319 |
|
421 |
|
| 320 |
# Returns an array of all the date objects that are weekly holidays. |
422 |
=head2 get_week_days_holidays |
|
|
423 |
|
| 424 |
my @week_days_holidays = $calendar->get_week_days_holidays; |
| 425 |
|
| 426 |
Returns an array of all the date objects that are weekly holidays. |
| 427 |
|
| 428 |
=cut |
| 429 |
|
| 321 |
sub get_week_days_holidays { |
430 |
sub get_week_days_holidays { |
| 322 |
my $self = shift; |
431 |
my $self = shift; |
| 323 |
my $branchcode = $self->{branchcode}; |
432 |
my $branchcode = $self->{branchcode}; |
|
Lines 346-352
sub get_week_days_holidays {
Link Here
|
| 346 |
return @week_days; |
455 |
return @week_days; |
| 347 |
} |
456 |
} |
| 348 |
|
457 |
|
| 349 |
=head1 edit_holiday |
458 |
=head2 edit_holiday |
| 350 |
|
459 |
|
| 351 |
Modifies a date or a range of dates |
460 |
Modifies a date or a range of dates |
| 352 |
|
461 |
|
|
Lines 484-489
sub edit_holiday {
Link Here
|
| 484 |
$schema->storage->txn_commit; |
593 |
$schema->storage->txn_commit; |
| 485 |
} |
594 |
} |
| 486 |
|
595 |
|
|
|
596 |
=head2 remove_weekly_holidays |
| 597 |
|
| 598 |
$calendar->remove_weekly_holidays($weekday, $updateValues, $today); |
| 599 |
|
| 600 |
Removes a weekly holiday and updates the days' parameters |
| 601 |
C<$weekday> is the weekday to un-holiday |
| 602 |
C<$updatevalues> is hashref containing the new parameters |
| 603 |
C<$today> is today's date |
| 604 |
|
| 605 |
=cut |
| 606 |
|
| 487 |
sub remove_weekly_holidays { |
607 |
sub remove_weekly_holidays { |
| 488 |
my ($self, $weekday, $updateValues, $today) = @_; |
608 |
my ($self, $weekday, $updateValues, $today) = @_; |
| 489 |
my $branchcode = $self->{branchcode}; |
609 |
my $branchcode = $self->{branchcode}; |
|
Lines 505-510
sub remove_weekly_holidays {
Link Here
|
| 505 |
} |
625 |
} |
| 506 |
} |
626 |
} |
| 507 |
|
627 |
|
|
|
628 |
=head2 remove_repeatable_holidays |
| 629 |
|
| 630 |
$calendar->remove_repeatable_holidays($startDate, $endDate, $today); |
| 631 |
|
| 632 |
Removes a repeatable holiday and updates the days' parameters |
| 633 |
C<$startDatey> is the start date of the repeatable holiday |
| 634 |
C<$endDate> is the end date of the repeatble holiday |
| 635 |
C<$updatevalues> is hashref containing the new parameters |
| 636 |
C<$today> is today's date |
| 637 |
|
| 638 |
=cut |
| 639 |
|
| 508 |
sub remove_repeatable_holidays { |
640 |
sub remove_repeatable_holidays { |
| 509 |
my ($self, $startDate, $endDate, $updateValues, $today) = @_; |
641 |
my ($self, $startDate, $endDate, $updateValues, $today) = @_; |
| 510 |
my $branchcode = $self->{branchcode}; |
642 |
my $branchcode = $self->{branchcode}; |
|
Lines 533-538
sub remove_repeatable_holidays {
Link Here
|
| 533 |
} |
665 |
} |
| 534 |
} |
666 |
} |
| 535 |
|
667 |
|
|
|
668 |
=head2 copyToBranch |
| 669 |
|
| 670 |
$calendar->copyToBranch($branch2); |
| 671 |
|
| 672 |
Copies the days and holidays from this branch to $branch2, ignoring dates in C<$self> |
| 673 |
but not in C<$branch2> |
| 674 |
|
| 675 |
C<$branch2> the branch to copy into |
| 676 |
|
| 677 |
=cut |
| 678 |
|
| 536 |
sub copyToBranch { |
679 |
sub copyToBranch { |
| 537 |
my ($self,$newBranch) =@_; |
680 |
my ($self,$newBranch) =@_; |
| 538 |
my $branchcode = $self->{branchcode}; |
681 |
my $branchcode = $self->{branchcode}; |
|
Lines 570-575
sub copyToBranch {
Link Here
|
| 570 |
} |
713 |
} |
| 571 |
} |
714 |
} |
| 572 |
|
715 |
|
|
|
716 |
=head2 isOpened |
| 717 |
|
| 718 |
$calendar->isOpened($date) |
| 719 |
|
| 720 |
Returns whether the library is open on C<$date> |
| 721 |
|
| 722 |
=cut |
| 723 |
|
| 573 |
sub isOpened { |
724 |
sub isOpened { |
| 574 |
my($self, $date) = @_; |
725 |
my($self, $date) = @_; |
| 575 |
my $branchcode = $self->{branchcode}; |
726 |
my $branchcode = $self->{branchcode}; |
|
Lines 591-596
sub isOpened {
Link Here
|
| 591 |
return $isOpened; |
742 |
return $isOpened; |
| 592 |
} |
743 |
} |
| 593 |
|
744 |
|
|
|
745 |
=head2 is_holiday |
| 746 |
|
| 747 |
$calendar->is_holiday($date) |
| 748 |
|
| 749 |
Returns whether C<$date> is a holiday or not |
| 750 |
|
| 751 |
=cut |
| 752 |
|
| 594 |
sub is_holiday { |
753 |
sub is_holiday { |
| 595 |
my($self, $date) = @_; |
754 |
my($self, $date) = @_; |
| 596 |
my $branchcode = $self->{branchcode}; |
755 |
my $branchcode = $self->{branchcode}; |
|
Lines 616-621
sub is_holiday {
Link Here
|
| 616 |
return $isHoliday; |
775 |
return $isHoliday; |
| 617 |
} |
776 |
} |
| 618 |
|
777 |
|
|
|
778 |
=head2 copyHoliday |
| 779 |
|
| 780 |
$calendar->copyHoliday($from_startDate, $from_endDate, $to_startDate, $to_endDate, $daysnumber); |
| 781 |
|
| 782 |
Copies a holiday's parameters from a range to a new range |
| 783 |
C<$from_startDate> the source holiday's start date |
| 784 |
C<$from_endDate> the source holiday's end date |
| 785 |
C<$to_startDate> the destination holiday's start date |
| 786 |
C<$to_endDate> the destination holiday's end date |
| 787 |
C<$daysnumber> the number of days in the range. |
| 788 |
|
| 789 |
Both ranges should have the same number of days in them. |
| 790 |
|
| 791 |
=cut |
| 792 |
|
| 619 |
sub copyHoliday { |
793 |
sub copyHoliday { |
| 620 |
my ($self, $from_startDate, $from_endDate, $to_startDate, $to_endDate, $daysnumber) = @_; |
794 |
my ($self, $from_startDate, $from_endDate, $to_startDate, $to_endDate, $daysnumber) = @_; |
| 621 |
my $branchcode = $self->{branchcode}; |
795 |
my $branchcode = $self->{branchcode}; |
|
Lines 664-670
sub copyHoliday {
Link Here
|
| 664 |
my $endDate = dt_from_string($from_endDate); |
838 |
my $endDate = dt_from_string($from_endDate); |
| 665 |
$to_startDate = $dtf->format_datetime($to_startDate); |
839 |
$to_startDate = $dtf->format_datetime($to_startDate); |
| 666 |
$to_endDate = $dtf->format_datetime($to_endDate); |
840 |
$to_endDate = $dtf->format_datetime($to_endDate); |
| 667 |
if($daysnumber ==7){ |
841 |
if($daysnumber == 7){ |
| 668 |
for (my $tempDate = $from_startDate->clone(); $tempDate <= $endDate;$tempDate->add(days => 1)){ |
842 |
for (my $tempDate = $from_startDate->clone(); $tempDate <= $endDate;$tempDate->add(days => 1)){ |
| 669 |
my $formatedDate = $dtf->format_datetime($tempDate); |
843 |
my $formatedDate = $dtf->format_datetime($tempDate); |
| 670 |
my $fromDate = $schema->resultset('DiscreteCalendar')->search( |
844 |
my $fromDate = $schema->resultset('DiscreteCalendar')->search( |
|
Lines 740-745
sub copyHoliday {
Link Here
|
| 740 |
} |
914 |
} |
| 741 |
} |
915 |
} |
| 742 |
|
916 |
|
|
|
917 |
=head2 days_between |
| 918 |
|
| 919 |
$cal->days_between( $start_date, $end_date ) |
| 920 |
|
| 921 |
Calculates the number of days the library is opened between C<$start_date> and C<$end_date> |
| 922 |
|
| 923 |
=cut |
| 924 |
|
| 743 |
sub days_between { |
925 |
sub days_between { |
| 744 |
my ($self, $start_date, $end_date, ) = @_; |
926 |
my ($self, $start_date, $end_date, ) = @_; |
| 745 |
my $branchcode = $self->{branchcode}; |
927 |
my $branchcode = $self->{branchcode}; |
|
Lines 769-774
sub days_between {
Link Here
|
| 769 |
return DateTime::Duration->new( days => $days_between->count()); |
951 |
return DateTime::Duration->new( days => $days_between->count()); |
| 770 |
} |
952 |
} |
| 771 |
|
953 |
|
|
|
954 |
=head2 next_open_day |
| 955 |
|
| 956 |
$open_date = $self->next_open_day($base_date); |
| 957 |
|
| 958 |
Returns a string representing the next day the library is open, starting from C<$base_date> |
| 959 |
|
| 960 |
=cut |
| 961 |
|
| 772 |
sub next_open_day { |
962 |
sub next_open_day { |
| 773 |
my ( $self, $date ) = @_; |
963 |
my ( $self, $date ) = @_; |
| 774 |
my $branchcode = $self->{branchcode}; |
964 |
my $branchcode = $self->{branchcode}; |
|
Lines 790-795
sub next_open_day {
Link Here
|
| 790 |
return dt_from_string( $rs->next()->date(), 'iso'); |
980 |
return dt_from_string( $rs->next()->date(), 'iso'); |
| 791 |
} |
981 |
} |
| 792 |
|
982 |
|
|
|
983 |
=head2 prev_open_day |
| 984 |
|
| 985 |
$open_date = $self->prev_open_day($base_date); |
| 986 |
|
| 987 |
Returns a string representing the closest previous day the library was open, starting from C<$base_date> |
| 988 |
|
| 989 |
=cut |
| 990 |
|
| 793 |
sub prev_open_day { |
991 |
sub prev_open_day { |
| 794 |
my ( $self, $date ) = @_; |
992 |
my ( $self, $date ) = @_; |
| 795 |
my $branchcode = $self->{branchcode}; |
993 |
my $branchcode = $self->{branchcode}; |
|
Lines 811-816
sub prev_open_day {
Link Here
|
| 811 |
return dt_from_string( $rs->next()->date(), 'iso'); |
1009 |
return dt_from_string( $rs->next()->date(), 'iso'); |
| 812 |
} |
1010 |
} |
| 813 |
|
1011 |
|
|
|
1012 |
=head2 days_forward |
| 1013 |
|
| 1014 |
$fwrd_date = $calendar->days_forward($start, $count) |
| 1015 |
|
| 1016 |
Returns the date C<$count> days in the future from C<$start>, ignoring days where the library is closed. |
| 1017 |
|
| 1018 |
=cut |
| 1019 |
|
| 814 |
sub days_forward { |
1020 |
sub days_forward { |
| 815 |
my $self = shift; |
1021 |
my $self = shift; |
| 816 |
my $start_dt = shift; |
1022 |
my $start_dt = shift; |
|
Lines 827-832
sub days_forward {
Link Here
|
| 827 |
return $base_dt; |
1033 |
return $base_dt; |
| 828 |
} |
1034 |
} |
| 829 |
|
1035 |
|
|
|
1036 |
=head2 hours_between |
| 1037 |
|
| 1038 |
$hours = $calendar->hours_between($start_dt, $end_dt) |
| 1039 |
|
| 1040 |
Returns the number of hours between C<$start_dt> and C<$end_dt>. This is the imprecise |
| 1041 |
version, which simply calculates the number of day times 24. To take opening hours into account |
| 1042 |
see C<open_hours_between>/ |
| 1043 |
|
| 1044 |
=cut |
| 1045 |
|
| 830 |
sub hours_between { |
1046 |
sub hours_between { |
| 831 |
my ($self, $start_dt, $end_dt) = @_; |
1047 |
my ($self, $start_dt, $end_dt) = @_; |
| 832 |
my $branchcode = $self->{branchcode}; |
1048 |
my $branchcode = $self->{branchcode}; |
|
Lines 862-867
sub hours_between {
Link Here
|
| 862 |
return $duration; |
1078 |
return $duration; |
| 863 |
} |
1079 |
} |
| 864 |
|
1080 |
|
|
|
1081 |
=head2 open_hours_between |
| 1082 |
|
| 1083 |
$hours = $calendar->open_hours_between($start_date, $end_date) |
| 1084 |
|
| 1085 |
Returns the number of hours between C<$start_date> and C<$end_date>, taking into |
| 1086 |
account the opening hours of the library. |
| 1087 |
|
| 1088 |
=cut |
| 1089 |
|
| 865 |
sub open_hours_between { |
1090 |
sub open_hours_between { |
| 866 |
my ($self, $start_date, $end_date) = @_; |
1091 |
my ($self, $start_date, $end_date) = @_; |
| 867 |
my $branchcode = $self->{branchcode}; |
1092 |
my $branchcode = $self->{branchcode}; |
|
Lines 919-924
sub open_hours_between {
Link Here
|
| 919 |
|
1144 |
|
| 920 |
return ($working_hours_between->next()->get_column('hours_between') - $not_used_hours->next()->get_column('not_used_hours')); |
1145 |
return ($working_hours_between->next()->get_column('hours_between') - $not_used_hours->next()->get_column('not_used_hours')); |
| 921 |
} |
1146 |
} |
|
|
1147 |
|
| 1148 |
=head2 addDate |
| 1149 |
|
| 1150 |
my $dt = $calendar->addDate($date, $dur, $unit) |
| 1151 |
|
| 1152 |
C<$date> is a DateTime object representing the starting date of the interval. |
| 1153 |
C<$offset> is a duration to add to it (DateTime::Duration objects are supported as legacy) |
| 1154 |
C<$unit> is a string value 'days' or 'hours' toflag granularity of duration |
| 1155 |
|
| 1156 |
=cut |
| 1157 |
|
| 922 |
sub addDate { |
1158 |
sub addDate { |
| 923 |
my ( $self, $startdate, $add_duration, $unit ) = @_; |
1159 |
my ( $self, $startdate, $add_duration, $unit ) = @_; |
| 924 |
|
1160 |
|
|
Lines 943-948
sub addDate {
Link Here
|
| 943 |
return $dt; |
1179 |
return $dt; |
| 944 |
} |
1180 |
} |
| 945 |
|
1181 |
|
|
|
1182 |
=head2 addHours |
| 1183 |
|
| 1184 |
$end = $calendar->addHours($start, $hours_duration, $return_by_hour) |
| 1185 |
|
| 1186 |
Add C<$hours_duration> to C<$start> date. |
| 1187 |
C<$return_by_hour> is an integer value representing the opening hour for the branch |
| 1188 |
|
| 1189 |
=cut |
| 1190 |
|
| 946 |
sub addHours { |
1191 |
sub addHours { |
| 947 |
my ( $self, $startdate, $hours_duration, $return_by_hour ) = @_; |
1192 |
my ( $self, $startdate, $hours_duration, $return_by_hour ) = @_; |
| 948 |
my $base_date = $startdate->clone(); |
1193 |
my $base_date = $startdate->clone(); |
|
Lines 968-973
sub addHours {
Link Here
|
| 968 |
return $base_date; |
1213 |
return $base_date; |
| 969 |
} |
1214 |
} |
| 970 |
|
1215 |
|
|
|
1216 |
=head2 addDays |
| 1217 |
|
| 1218 |
$date = $calendar->addDays($start, $duration) |
| 1219 |
|
| 1220 |
Add C<$days_duration> to C<$start> date. If the calendar's days_mode is set |
| 1221 |
to 'Calendar', it ignores closed days. Else if the calendar is set to 'Datedue' |
| 1222 |
it calculates the date normally, and then pushes to result to the next open day. |
| 1223 |
|
| 1224 |
=cut |
| 1225 |
|
| 971 |
sub addDays { |
1226 |
sub addDays { |
| 972 |
my ( $self, $startdate, $days_duration ) = @_; |
1227 |
my ( $self, $startdate, $days_duration ) = @_; |
| 973 |
my $base_date = $startdate->clone(); |
1228 |
my $base_date = $startdate->clone(); |
|
Lines 1013-1016
sub addDays {
Link Here
|
| 1013 |
return $base_date; |
1268 |
return $base_date; |
| 1014 |
} |
1269 |
} |
| 1015 |
|
1270 |
|
| 1016 |
1; |
1271 |
1; |