From: Ivan Kohler Date: Tue, 8 Apr 2014 01:37:06 +0000 (-0700) Subject: weekly view for RTx::Calendar, RT#16594 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=9931b2eeff85811118d0b495dd4e460bc939b744 weekly view for RTx::Calendar, RT#16594 --- diff --git a/rt/share/html/NoAuth/css/calendar.css b/rt/share/html/NoAuth/css/calendar.css index cc1f2c4d7..826c83658 100644 --- a/rt/share/html/NoAuth/css/calendar.css +++ b/rt/share/html/NoAuth/css/calendar.css @@ -84,9 +84,19 @@ table.rtxcalendar td.controls { border-top: 1px solid #eeeeee; border-left: 1px solid #eeeeee; border-bottom: 1px solid #eeeeee; + border-right: 1px solid #eeeeee; + vertical-align: middle; } table.rtxcalendar td.controls:hover { background-color: #CFDEFF; } +table.rtxcalendar td.labels { + background: #eeeeee; + width: 1%; + border-top: 1px solid #eeeeee; + border-left: 1px solid #eeeeee; + border-bottom: 1px solid #eeeeee; +} + diff --git a/rt/share/html/Search/Calendar.html b/rt/share/html/Search/Calendar.html index f66f27d79..a693bd645 100644 --- a/rt/share/html/Search/Calendar.html +++ b/rt/share/html/Search/Calendar.html @@ -72,7 +72,7 @@ $OrigYear => undef - +> % for ( @{$week{$weekstart}} ) { <%$rtdate->GetWeekday($_)%> % } @@ -81,54 +81,136 @@ $OrigYear => undef + % if ( $WeekDay ) { - <& td_week_collapse, date=>$date, Month=>$OrigMonth, Year=>$OrigYear, QueryString=>$QueryString &> + valign="middle"> + <& week_collapse, date=>$date, Month=>$OrigMonth, Year=>$OrigYear, QueryString=>$QueryString &> + + % } else { <& td_week_expand, date=>$date, Month=>$Month, Year=>$Year, QueryString=>$QueryString &> % } -% while ($date <= $end) { + +% if ( $WeekDay ) { + + + +% $date = $start; +% while ($date <= $end) { % -% my $offmonth = !$WeekDay && $date->month != ($Month + 1); -% my $is_today = (DateTime->compare($today, $date) == 0); -% my $is_yesterday = (DateTime->compare($yesterday, $date) == 0); -% my $is_aweekago = (DateTime->compare($aweekago, $date) == 0); - - -
<% ( $WeekDay ? $rtdate->GetMonth($date->month-1). ' ' : '' ). - $date->day - %>
- -% my $sp = 3; -% for my $t ( @{ $Tickets{$date->strftime("%F")} } ) { -% $sp--; - <& /Elements/CalendarEvent, Object => $t, Date => $date, DateTypes => \%DateTypes &> +% my $is_today = (DateTime->compare($today, $date) == 0); +% my $is_yesterday = (DateTime->compare($yesterday, $date) == 0); +% my $is_aweekago = (DateTime->compare($aweekago, $date) == 0); + + +
<% $rtdate->GetMonth($date->month-1). ' '. $date->day %>
+ + + +% $date = $set->next($date); +% if ( $date->day_of_week == $startday_of_week ) { + +% if ( $date <= $end ) { #a second week? not going to work for week view yet + + valign="middle"> + <& week_collapse, date=>$date, Month=>$OrigMonth, Year=>$OrigYear, QueryString=>$QueryString &> + +% } % } - <% ($sp>0) ? '
'x$sp : '' |n %> - +% } #while ($date <= $end) -% $date = $set->next($date); -% if ( $date->day_of_week == $startday_of_week ) { - -% if ( $date <= $end ) { - -% if ( $WeekDay ) { - <& td_week_collapse, date=>$date, Month=>$OrigMonth, Year=>$OrigYear, QueryString=>$QueryString &> -% } else { - <& td_week_expand, date=>$date, Month=>$Month, Year=>$Year, QueryString=>$QueryString &> +% foreach my $row ( @week_rows ) { + + <& td_time, $row &> + +% $date = $start; +% while ($date <= $end) { +% +% my $is_today = (DateTime->compare($today, $date) == 0); +% my $is_yesterday = (DateTime->compare($yesterday, $date) == 0); +% my $is_aweekago = (DateTime->compare($aweekago, $date) == 0); + + + +% #XXX display these in a time aware fashion +%#% my $sp = 3; +%#% for my $t ( @{ $Tickets{$date->strftime("%F")} } ) { +%#% $sp--; +%# <& /Elements/CalendarEvent, Object => $t, Date => $date, DateTypes => \%DateTypes &> +%#% } +%# <% ($sp>0) ? '
'x$sp : '' |n %> + + + +% $date = $set->next($date); +% if ( $date->day_of_week == $startday_of_week ) { + +% if ( $date <= $end ) { #a second week? not going to work for week view yet + + valign="middle"> + <& week_collapse, date=>$date, Month=>$OrigMonth, Year=>$OrigYear, QueryString=>$QueryString &> + % } +% } + +% } #while ($date <= $end) +% } #foreach my $row ( @week_rows ) + +% } else { + +% while ($date <= $end) { +% +% my $offmonth = !$WeekDay && $date->month != ($Month + 1); +% my $is_today = (DateTime->compare($today, $date) == 0); +% my $is_yesterday = (DateTime->compare($yesterday, $date) == 0); +% my $is_aweekago = (DateTime->compare($aweekago, $date) == 0); + + +
<% $date->day %>
+ +% my $sp = 3; +% for my $t ( @{ $Tickets{$date->strftime("%F")} } ) { +% $sp--; + <& /Elements/CalendarEvent, Object => $t, Date => $date, DateTypes => \%DateTypes &> +% } + <% ($sp>0) ? '
'x$sp : '' |n %> + + + +% $date = $set->next($date); +% if ( $date->day_of_week == $startday_of_week ) { + +% if ( $date <= $end ) { + + <& td_week_expand, date=>$date, Month=>$Month, Year=>$Year, QueryString=>$QueryString &> +% } % } -% } + +% } #while ($date <= $end) % } @@ -214,6 +296,16 @@ my %legend = ( 'starts_due' => ['Starts','Due'], ); +my $stime = 480; #8am +my $etime = 1080; #6pm +my $timestep = 30; #1/2h +#my $timestep = 120; #2h +my $rowspan = ($etime-$stime) / $timestep; + +my $wt = $stime; +my @week_rows = (); +while ( $wt < $etime ) { push @week_rows, $wt; $wt+=$timestep } + <%INIT> use RTx::Calendar qw(FirstDay LastDay LastDayOfWeek); @@ -224,6 +316,9 @@ my @DateTypes = qw/Created Starts Started Due LastUpdated Resolved/; my $rtdate = RT::Date->new($session{'CurrentUser'}); +my $time_zone = $session{'CurrentUser'}->UserObj->Timezone + || RT->Config->Get('Timezone'); + my $weekstart = 'Sunday'; #RT::SiteConfig? user pref? my %week = ( 'Saturday' => [6,0..5], @@ -233,18 +328,23 @@ my %week = ( my $startday_of_week = ${$week{$weekstart}}[0] || 7; my $endday_of_week = ${$week{$weekstart}}[-1] || 7; -my $today = DateTime->today; +my $today = DateTime->today( time_zone=>$time_zone ); my $yesterday = $today->clone->subtract( days=>1 ); my $aweekago = $today->clone->subtract( days=>7 ); -my( $date, $end ); +my( $start, $end ); if ( $WeekDay ) { - $date = DateTime->new( year=>$WeekYear, month=>$WeekMonth+1, day=>$WeekDay ); + $start = DateTime->new( year => $WeekYear, + month => $WeekMonth+1, + day => $WeekDay, + time_zone => $time_zone, + ); $end = LastDayOfWeek( $WeekYear, $WeekMonth+1, $WeekDay, $endday_of_week ); } else { - $date = FirstDay($Year, $Month + 1, $startday_of_week ); - $end = LastDay ($Year, $Month + 1, $endday_of_week ); + $start = FirstDay($Year, $Month + 1, $startday_of_week ); + $end = LastDay ($Year, $Month + 1, $endday_of_week ); } +my $date = $start; # use this to loop over days until $end my $set = DateTime::Set->from_recurrence( @@ -304,14 +404,36 @@ my %Tickets = RTx::Calendar::FindTickets($session{'CurrentUser'}, $TempQuery, \@ -<%def td_week_collapse> +<%def week_collapse> <%args> $date => undef $Month => undef $Year => undef $QueryString => undef - - - + + + +<%def td_time> +% my( $min ) = shift; + <% pretty_time($min) |n %> +<%init> +sub pretty_time { + my $t = shift; + + return 'Midnight' if $t == 0 || $t == 1440; + return 'Noon' if $t == 720; + + my $h = int( $t / 60 ); + my $m = $t % 60; + + my $ap = 'AM'; + if ( $h == 0 || $h == 24 ) { $h = 12; } + elsif ( $h == 12 ) { $ap = 'PM'; } + elsif ( $h > 12 ) { $ap = 'PM'; $h -= 12; } + + sprintf('%02d:%02d '.$ap, $h, $m); + +} +