689407445947b743e3f52a6cf9aaeaab2f06a787
[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;
8 use C4::Output;
9 use DateTime;
10
11 use C4::Calendar;
12 use Koha::DateUtils;
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         $calendar->ModWeekdayholiday(weekday => $weekday,
91                                     title => $title,
92                                     description => $description);
93         } elsif ($holidaytype eq 'daymonth') {
94         $calendar->ModDaymonthholiday(day => $day,
95                                         month => $month,
96                                         title => $title,
97                                         description => $description);
98         } elsif ($holidaytype eq 'ymd') {
99         $calendar->ModSingleholiday(day => $day,
100                                     month => $month,
101                                     year => $year,
102                                     title => $title,
103                                     description => $description);
104         } elsif ($holidaytype eq 'exception') {
105         $calendar->ModExceptionholiday(day => $day,
106                                     month => $month,
107                                     year => $year,
108                                     title => $title,
109                                     description => $description);
110         }
111     } elsif ($showoperation eq 'delete') {
112         $calendar->delete_holiday(weekday => $weekday,
113                                 day => $day,
114                                 month => $month,
115                                 year => $year);
116     }elsif ($showoperation eq 'deleterange') {
117         if (@holiday_list){
118             foreach my $date (@holiday_list){
119                 $calendar->delete_holiday_range(weekday => $weekday,
120                                                 day => $date->{local_c}->{day},
121                                                 month => $date->{local_c}->{month},
122                                                 year => $date->{local_c}->{year});
123                 }
124         }
125     }elsif ($showoperation eq 'deleterangerepeat') {
126         if (@holiday_list){
127             foreach my $date (@holiday_list){
128             $calendar->delete_holiday_range_repeatable(weekday => $weekday,
129                                             day => $date->{local_c}->{day},
130                                             month => $date->{local_c}->{month});
131             }
132         }
133     }elsif ($showoperation eq 'deleterangerepeatexcept') {
134         if (@holiday_list){
135             foreach my $date (@holiday_list){
136             $calendar->delete_exception_holiday_range(weekday => $weekday,
137                                             day => $date->{local_c}->{day},
138                                             month => $date->{local_c}->{month},
139                                             year => $date->{local_c}->{year});
140             }
141         }
142     }
143 }