<&|/Widgets/TitleBox,
    title => loc("Calendar"),
    title_href => "Search/Calendar.html" &>

<table class="rtxcalendar">
<thead>
<tr>
% my $date = $begin->clone;
% while ( $date <= $end ) {
<th width="14%"><%$rtdate->GetWeekday($date->day_of_week % 7)%></th>
% $date = $set->next($date);
% }
</tr>
</thead>
<tbody>
<tr>
% $date = $begin->clone;
% while ($date <= $end) {
<td>
<p class="date"><%$date->day%></p>
% for my $t (@{ $Tickets{$date->strftime("%F")} }) {
<& /Elements/CalendarEvent, Object => $t, Date => $date &>
% }
</td>
% $date = $set->next($date);
% }
</tr>
</tbody>
</table>

 </&>

<%INIT>

use RTx::Calendar;

my $title = loc("Calendar");

my $rtdate = RT::Date->new($session{'CurrentUser'});

my $today = DateTime->today;
my $begin = DateTime->today->subtract( days => 3);
my $end   = DateTime->today->add( days => 3);

# use this to loop over days until $end
my $set = DateTime::Set->from_recurrence(
    next => sub { $_[0]->truncate( to => 'day' )->add( days => 1 ) }
);

my @Tickets;

my $Tickets = RT::Tickets->new($session{'CurrentUser'});
$Tickets->LimitStatus( VALUE => 'open' );
$Tickets->LimitStatus ( VALUE => 'new');
$Tickets->LimitStatus ( VALUE => 'stalled');

$Tickets->LimitOwner(VALUE => $session{'CurrentUser'}->Id);
$Tickets->LimitOwner(VALUE => 'Nobody');

$Tickets->LimitType(VALUE => 'reminder');
$Tickets->LimitType(VALUE => 'ticket');

$Tickets->LimitDue(OPERATOR => ">=", VALUE => $begin->strftime("%F") );
$Tickets->LimitDue(OPERATOR => "<=", VALUE => $end->strftime("%F") );

my %Tickets;

while ( my $Ticket = $Tickets->Next()) {
  # if reminder, check it's refering to a ticket
  push @{ $Tickets{ RTx::Calendar::LocalDate($Ticket->DueObj->Unix) } }, $Ticket
    unless $Ticket->Type eq 'reminder' and not $Ticket->RefersTo->First;
}

</%INIT>
