Bug 10612: (QA followup)
[koha.git] / tools / exceptionHolidays.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use CGI qw ( -utf8 );
7
8 use C4::Auth;
9 use C4::Output;
10 use DateTime;
11
12 use C4::Calendar;
13 use Koha::DateUtils;
14
15 my $input = new CGI;
16 my $dbh = C4::Context->dbh();
17
18 my $branchcode = $input->param('showBranchName');
19 my $weekday = $input->param('showWeekday');
20 my $day = $input->param('showDay');
21 my $month = $input->param('showMonth');
22 my $year = $input->param('showYear');
23 my $title = $input->param('showTitle');
24 my $description = $input->param('showDescription');
25 my $holidaytype = $input->param('showHolidayType');
26 my $datecancelrange_dt = eval { dt_from_string( $input->param('datecancelrange') ) };
27 my $calendardate = sprintf("%04d-%02d-%02d", $year, $month, $day);
28
29 my $calendar = C4::Calendar->new(branchcode => $branchcode);
30
31 $title || ($title = '');
32 if ($description) {
33     $description =~ s/\r/\\r/g;
34     $description =~ s/\n/\\n/g;
35 } else {
36     $description = '';
37 }   
38
39 # We make an array with holiday's days
40 my @holiday_list;
41 if ($datecancelrange_dt){
42             my $first_dt = DateTime->new(year => $year, month  => $month,  day => $day);
43
44             for (my $dt = $first_dt->clone();
45                 $dt <= $datecancelrange_dt;
46                 $dt->add(days => 1) )
47                 {
48                 push @holiday_list, $dt->clone();
49                 }
50 }
51 if ($input->param('showOperation') eq 'exception') {
52         $calendar->insert_exception_holiday(day => $day,
53                                                                                 month => $month,
54                                                                             year => $year,
55                                                                 title => $title,
56                                                                 description => $description);
57 } elsif ($input->param('showOperation') eq 'exceptionrange' ) {
58         if (@holiday_list){
59             foreach my $date (@holiday_list){
60                 $calendar->insert_exception_holiday(
61                     day         => $date->{local_c}->{day},
62                     month       => $date->{local_c}->{month},
63                     year       => $date->{local_c}->{year},
64                     title       => $title,
65                     description => $description
66                     );
67             }
68         }
69 } elsif ($input->param('showOperation') eq 'edit') {
70     if($holidaytype eq 'weekday') {
71       $calendar->ModWeekdayholiday(weekday => $weekday,
72                                    title => $title,
73                                    description => $description);
74     } elsif ($holidaytype eq 'daymonth') {
75       $calendar->ModDaymonthholiday(day => $day,
76                                     month => $month,
77                                     title => $title,
78                                     description => $description);
79     } elsif ($holidaytype eq 'ymd') {
80       $calendar->ModSingleholiday(day => $day,
81                                   month => $month,
82                                   year => $year,
83                                   title => $title,
84                                   description => $description);
85     } elsif ($holidaytype eq 'exception') {
86       $calendar->ModExceptionholiday(day => $day,
87                                   month => $month,
88                                   year => $year,
89                                   title => $title,
90                                   description => $description);
91     }
92 } elsif ($input->param('showOperation') eq 'delete') {
93         $calendar->delete_holiday(weekday => $weekday,
94                                   day => $day,
95                                   month => $month,
96                                               year => $year);
97 }elsif ($input->param('showOperation') eq 'deleterange') {
98     if (@holiday_list){
99         foreach my $date (@holiday_list){
100             $calendar->delete_holiday_range(weekday => $weekday,
101                                             day => $date->{local_c}->{day},
102                                             month => $date->{local_c}->{month},
103                                             year => $date->{local_c}->{year});
104             }
105     }
106 }elsif ($input->param('showOperation') eq 'deleterangerepeat') {
107     if (@holiday_list){
108         foreach my $date (@holiday_list){
109            $calendar->delete_holiday_range_repeatable(weekday => $weekday,
110                                          day => $date->{local_c}->{day},
111                                          month => $date->{local_c}->{month});
112         }
113     }
114 }elsif ($input->param('showOperation') eq 'deleterangerepeatexcept') {
115     if (@holiday_list){
116         foreach my $date (@holiday_list){
117            $calendar->delete_exception_holiday_range(weekday => $weekday,
118                                          day => $date->{local_c}->{day},
119                                          month => $date->{local_c}->{month},
120                                          year => $date->{local_c}->{year});
121         }
122     }
123 }
124 print $input->redirect("/cgi-bin/koha/tools/holidays.pl?branch=$branchcode&calendardate=$calendardate");