#!/usr/bin/perl use Modern::Perl; use CGI qw ( -utf8 ); use C4::Auth qw( checkauth ); use C4::Output; use DateTime; use C4::Calendar; use Koha::DateUtils qw( dt_from_string ); my $input = CGI->new; my $op = $input->param('op') // q{}; my $dbh = C4::Context->dbh(); checkauth($input, 0, {tools=> 'edit_calendar'}, 'intranet'); our $branchcode = $input->param('showBranchName'); my $originalbranchcode = $branchcode; our $weekday = $input->param('showWeekday'); our $day = $input->param('showDay'); our $month = $input->param('showMonth'); our $year = $input->param('showYear'); our $title = $input->param('showTitle'); our $description = $input->param('showDescription'); our $holidaytype = $input->param('showHolidayType'); my $datecancelrange_dt = eval { dt_from_string( scalar $input->param('datecancelrange') ) }; my $calendardate = sprintf("%04d-%02d-%02d", $year, $month, $day); our $showoperation = $input->param('showOperation'); my $allbranches = $input->param('allBranches'); $title || ($title = ''); if ($description) { $description =~ s/\r/\\r/g; $description =~ s/\n/\\n/g; } else { $description = ''; } # We make an array with holiday's days our @holiday_list; if ($datecancelrange_dt){ my $first_dt = DateTime->new(year => $year, month => $month, day => $day); for (my $dt = $first_dt->clone(); $dt <= $datecancelrange_dt; $dt->add(days => 1) ) { push @holiday_list, $dt->clone(); } } if ( $op eq 'cud-edit' && $allbranches ) { my $libraries = Koha::Libraries->search; while ( my $library = $libraries->next ) { edit_holiday($showoperation, $library->branchcode, $weekday, $day, $month, $year, $title, $description, $holidaytype, @holiday_list); } } elsif( $op eq 'cud-edit' ) { edit_holiday($showoperation, $branchcode, $weekday, $day, $month, $year, $title, $description, $holidaytype, @holiday_list); } print $input->redirect("/cgi-bin/koha/tools/holidays.pl?branch=$originalbranchcode&calendardate=$calendardate"); sub edit_holiday { ($showoperation, $branchcode, $weekday, $day, $month, $year, $title, $description, $holidaytype, @holiday_list) = @_; my $calendar = C4::Calendar->new(branchcode => $branchcode); if ($showoperation eq 'exception') { $calendar->insert_exception_holiday(day => $day, month => $month, year => $year, title => $title, description => $description); } elsif ($showoperation eq 'exceptionrange' ) { if (@holiday_list){ foreach my $date (@holiday_list){ $calendar->insert_exception_holiday( day => $date->{local_c}->{day}, month => $date->{local_c}->{month}, year => $date->{local_c}->{year}, title => $title, description => $description ); } } } elsif ($showoperation eq 'cud-edit') { if ( $holidaytype eq 'weekday' ) { my $isHoliday = $calendar->isHoliday( $day, $month, $year ); if ($isHoliday) { $calendar->ModWeekdayholiday( weekday => $weekday, title => $title, description => $description ); } else { $calendar->insert_week_day_holiday( weekday => $weekday, title => $title, description => $description ); } } elsif ( $holidaytype eq 'daymonth' ) { my $isHoliday = $calendar->isHoliday( $day, $month, $year ); if ($isHoliday) { $calendar->ModDaymonthholiday( day => $day, month => $month, title => $title, description => $description ); } else { $calendar->insert_day_month_holiday( day => $day, month => $month, title => $title, description => $description ); } } elsif ( $holidaytype eq 'ymd' ) { my $isHoliday = $calendar->isHoliday( $day, $month, $year ); if ($isHoliday) { $calendar->ModSingleholiday( day => $day, month => $month, year => $year, title => $title, description => $description ); } else { $calendar->insert_single_holiday( day => $day, month => $month, year => $year, title => $title, description => $description ); } } elsif ( $holidaytype eq 'exception' ) { my $isHoliday = $calendar->isHoliday( $day, $month, $year ); if ($isHoliday) { $calendar->ModExceptionholiday( day => $day, month => $month, year => $year, title => $title, description => $description ); } else { $calendar->insert_exception_holiday( day => $day, month => $month, year => $year, title => $title, description => $description ); } } } elsif ($showoperation eq 'cud-delete') { $calendar->delete_holiday(weekday => $weekday, day => $day, month => $month, year => $year); }elsif ($showoperation eq 'deleterange') { if (@holiday_list){ foreach my $date (@holiday_list){ $calendar->delete_holiday_range(weekday => $weekday, day => $date->{local_c}->{day}, month => $date->{local_c}->{month}, year => $date->{local_c}->{year}); } } }elsif ($showoperation eq 'deleterangerepeat') { if (@holiday_list){ foreach my $date (@holiday_list){ $calendar->delete_holiday_range_repeatable(weekday => $weekday, day => $date->{local_c}->{day}, month => $date->{local_c}->{month}); } } }elsif ($showoperation eq 'deleterangerepeatexcept') { if (@holiday_list){ foreach my $date (@holiday_list){ $calendar->delete_exception_holiday_range(weekday => $weekday, day => $date->{local_c}->{day}, month => $date->{local_c}->{month}, year => $date->{local_c}->{year}); } } } }