<%ARGS> $Date => undef @Tickets => () $slots => $default_slots $sday => undef $tod_row => undef $timestep => $default_timestep @username => () $LengthMin => $default_timestep % foreach my $username ( @username ) { % % my %schedule = UserDaySchedule( username => $username, % 'date' => $Date->strftime('%F'), % Tickets => \@Tickets, % ); % % my $bgcolor = '666666;border-color:#555555'; % my $content = ''; % my $onmouse = 0; % % #white out available times % foreach my $avail ( @{ $schedule{'avail'} } ) { % my( $start, $end ) = @$avail; % next if $start >= ($tod_row+$timestep) || $end <= $tod_row; % $bgcolor = 'FFFFFF'; % $onmouse = 1 % if $LengthMin <= $end - $tod_row #the slot is long enough % && ! grep { $_ > $tod_row && $LengthMin > $_ - $tod_row } % map $_->[0], values %{ $schedule{'scheduled'} }; % } % % #block out / show / color code existing appointments % foreach my $id ( keys %{ $schedule{'scheduled'} } ) { % % my( $starts, $due, $col, $t ) = @{ $schedule{'scheduled'}->{$id} }; % % next if $starts >= ($tod_row+$timestep) || $due < $tod_row; % % $bgcolor = $col; % $onmouse = 0; % % if ( $starts >= $tod_row ) { #first row % $content .= ($content?', ':''). $id; #XXX more % } % } " % if ( $onmouse ) { onmouseover="boxon(this);" onmouseout ="boxoff(this);" % } ><% $content %> % } <%ONCE> my $default_slots = RT->Config->Get('CalendarWeeklySlots') || 5; my $default_timestep = RT->Config->Get('CalendarWeeklySizeMin') || 30; #1/2h <%INIT> use RTx::Schedule qw( UserDaySchedule );