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