Update release notes for 22.11.17 release
[koha.git] / tools / exceptionHolidays.pl
1 #!/usr/bin/perl
2
3 use Modern::Perl;
4
5 use CGI qw ( -utf8 );
6
7 use C4::Auth qw( checkauth );
8 use C4::Output;
9 use DateTime;
10
11 use C4::Calendar;
12 use Koha::DateUtils qw( dt_from_string );
13
14 my $input = CGI->new;
15 my $dbh = C4::Context->dbh();
16
17 checkauth($input, 0, {tools=> 'edit_calendar'}, 'intranet');
18
19
20 our $branchcode = $input->param('showBranchName');
21 my $originalbranchcode  = $branchcode;
22 our $weekday = $input->param('showWeekday');
23 our $day = $input->param('showDay');
24 our $month = $input->param('showMonth');
25 our $year = $input->param('showYear');
26 our $title = $input->param('showTitle');
27 our $description = $input->param('showDescription');
28 our $holidaytype = $input->param('showHolidayType');
29 my $datecancelrange_dt = eval { dt_from_string( scalar $input->param('datecancelrange') ) };
30 my $calendardate = sprintf("%04d-%02d-%02d", $year, $month, $day);
31 our $showoperation = $input->param('showOperation');
32 my $allbranches = $input->param('allBranches');
33
34 $title || ($title = '');
35 if ($description) {
36     $description =~ s/\r/\\r/g;
37     $description =~ s/\n/\\n/g;
38 } else {
39     $description = '';
40 }   
41
42 # We make an array with holiday's days
43 our @holiday_list;
44 if ($datecancelrange_dt){
45             my $first_dt = DateTime->new(year => $year, month  => $month,  day => $day);
46
47             for (my $dt = $first_dt->clone();
48                 $dt <= $datecancelrange_dt;
49                 $dt->add(days => 1) )
50                 {
51                 push @holiday_list, $dt->clone();
52                 }
53 }
54
55 if($allbranches) {
56     my $libraries = Koha::Libraries->search;
57     while ( my $library = $libraries->next ) {
58         edit_holiday($showoperation, $library->branchcode, $weekday, $day, $month, $year, $title, $description, $holidaytype, @holiday_list);
59     }
60 } else {
61     edit_holiday($showoperation, $branchcode, $weekday, $day, $month, $year, $title, $description, $holidaytype, @holiday_list);
62 }
63
64 print $input->redirect("/cgi-bin/koha/tools/holidays.pl?branch=$originalbranchcode&calendardate=$calendardate");
65
66 sub edit_holiday {
67     ($showoperation, $branchcode, $weekday, $day, $month, $year, $title, $description, $holidaytype, @holiday_list) = @_;
68     my $calendar = C4::Calendar->new(branchcode => $branchcode);
69
70     if ($showoperation eq 'exception') {
71         $calendar->insert_exception_holiday(day => $day,
72                                             month => $month,
73                                             year => $year,
74                                             title => $title,
75                                             description => $description);
76     } elsif ($showoperation eq 'exceptionrange' ) {
77             if (@holiday_list){
78                 foreach my $date (@holiday_list){
79                     $calendar->insert_exception_holiday(
80                         day         => $date->{local_c}->{day},
81                         month       => $date->{local_c}->{month},
82                         year       => $date->{local_c}->{year},
83                         title       => $title,
84                         description => $description
85                         );
86                 }
87             }
88     } elsif ($showoperation eq 'edit') {
89         if ( $holidaytype eq 'weekday' ) {
90             my $isHoliday = $calendar->isHoliday( $day, $month, $year );
91             if ($isHoliday) {
92                 $calendar->ModWeekdayholiday(
93                     weekday     => $weekday,
94                     title       => $title,
95                     description => $description
96                 );
97             }
98             else {
99                 $calendar->insert_week_day_holiday(
100                     weekday     => $weekday,
101                     title       => $title,
102                     description => $description
103                 );
104             }
105         }
106         elsif ( $holidaytype eq 'daymonth' ) {
107             my $isHoliday = $calendar->isHoliday( $day, $month, $year );
108             if ($isHoliday) {
109                 $calendar->ModDaymonthholiday(
110                     day         => $day,
111                     month       => $month,
112                     title       => $title,
113                     description => $description
114                 );
115             }
116             else {
117                 $calendar->insert_day_month_holiday(
118                     day         => $day,
119                     month       => $month,
120                     title       => $title,
121                     description => $description
122                 );
123             }
124         }
125         elsif ( $holidaytype eq 'ymd' ) {
126             my $isHoliday = $calendar->isHoliday( $day, $month, $year );
127             if ($isHoliday) {
128                 $calendar->ModSingleholiday(
129                     day         => $day,
130                     month       => $month,
131                     year        => $year,
132                     title       => $title,
133                     description => $description
134                 );
135             }
136             else {
137                 $calendar->insert_single_holiday(
138                     day         => $day,
139                     month       => $month,
140                     year        => $year,
141                     title       => $title,
142                     description => $description
143                 );
144             }
145         }
146         elsif ( $holidaytype eq 'exception' ) {
147             my $isHoliday = $calendar->isHoliday( $day, $month, $year );
148             if ($isHoliday) {
149                 $calendar->ModExceptionholiday(
150                     day         => $day,
151                     month       => $month,
152                     year        => $year,
153                     title       => $title,
154                     description => $description
155                 );
156             }
157             else {
158                 $calendar->insert_exception_holiday(
159                     day         => $day,
160                     month       => $month,
161                     year        => $year,
162                     title       => $title,
163                     description => $description
164                 );
165             }
166         }
167     } elsif ($showoperation eq 'delete') {
168         $calendar->delete_holiday(weekday => $weekday,
169                                 day => $day,
170                                 month => $month,
171                                 year => $year);
172     }elsif ($showoperation eq 'deleterange') {
173         if (@holiday_list){
174             foreach my $date (@holiday_list){
175                 $calendar->delete_holiday_range(weekday => $weekday,
176                                                 day => $date->{local_c}->{day},
177                                                 month => $date->{local_c}->{month},
178                                                 year => $date->{local_c}->{year});
179                 }
180         }
181     }elsif ($showoperation eq 'deleterangerepeat') {
182         if (@holiday_list){
183             foreach my $date (@holiday_list){
184             $calendar->delete_holiday_range_repeatable(weekday => $weekday,
185                                             day => $date->{local_c}->{day},
186                                             month => $date->{local_c}->{month});
187             }
188         }
189     }elsif ($showoperation eq 'deleterangerepeatexcept') {
190         if (@holiday_list){
191             foreach my $date (@holiday_list){
192             $calendar->delete_exception_holiday_range(weekday => $weekday,
193                                             day => $date->{local_c}->{day},
194                                             month => $date->{local_c}->{month},
195                                             year => $date->{local_c}->{year});
196             }
197         }
198     }
199 }