2 use base qw( Exporter );
5 use RTx::Calendar qw( FindTickets LocalDate );
6 use FS::Record qw( qsearch qsearchs );
10 our $VERSION = '0.01';
12 our @EXPORT_OK = qw( UserDaySchedule );
15 # Default Query and Format
16 our $DefaultFormat = "__Starts__ __Due__";
17 our $DefaultQuery = "( Status = 'new' OR Status = 'open' OR Status = 'stalled')
18 AND ( Type = 'reminder' OR 'Type' = 'ticket' )";
22 my $username = $arg{username};
23 my $date = $arg{date};
26 if ( $arg{Tickets} ) {
27 $Tickets = $arg{Tickets};
30 my $Query = $DefaultQuery;
32 # # we overide them if needed
33 # $TempQuery = $Query if $Query;
34 # $TempFormat = $Format if $Format;
36 # # we search all date types in Format string
37 # my @Dates = grep { $TempFormat =~ m/__${_}(Relative)?__/ } @DateTypes;
39 my @Dates = qw( Starts Due );
41 # # used to display or not a date in Element/CalendarEvent
42 # my %DateTypes = map { $_ => 1 } @Dates;
44 # $TempQuery .= DatesClauses(\@Dates, $start->strftime("%F"), $end->strftime("%F"));
46 my %t = FindTickets( $arg{CurrentUser}, $Query, \@Dates, $date x2 );
48 $Tickets = $t{ $date };
51 #block out unavailable times
52 #alas. abstractions break, freeside-specific stuff to get availability
53 # move availability to RT side? make it all callback/pluggable?
55 use Date::Parse qw( str2time );
56 #my $wday = (localtime(str2time($date)))[6];
58 my $access_user = qsearchs('access_user', { 'username'=>$username })#disabled?
59 or die "unknown user $username";
61 my @sched_item = $access_user->sched_item #disabled?
62 or die "$username not an installer";
63 my $sched_item = $sched_item[0];
65 my @sched_avail = qsearch('sched_avail', {
66 itemnum => $sched_item->itemnum,
67 override_date => 99, #XXX override date via $date
69 @sched_avail = qsearch('sched_avail', {
70 itemnum => $sched_item->itemnum,
71 wday => (localtime(str2time($date)))[6],
78 #avail/unavailable times
80 map [ $_->stime, $_->etime ],
84 #block out / show / color code existing appointments
87 #$_->Id => [ $_->StartsObj, $t->DueObj ];
89 my($sm, $sh) = ($_->StartsObj->Localtime('user'))[1,2];
90 my $starts = $sh*60 + $sm;
93 if ( LocalDate($_->DueObj->Unix) eq $date ) { #same day, use it
94 my($dm, $dh) = ($_->DueObj->Localtime('user'))[1,2];
97 $due = 1439;#not today, we don't handle multi-day appointments, so
101 #XXX color code existing appointments by... city? proximity? etc.
102 #my $col = '99ff99'; #green for now
103 my $col = 'a097ed'; #any of green/red/yellow-like would be confusing as a placeholder color, so.. blue-ish/purple
105 $_->Id => [ $starts, $due, $col, $_ ];
108 LocalDate($_->StartsObj->Unix) eq $date
109 and $_->OwnerObj->Name eq $username
124 RTx::Schedule - Scheduling extension for Request Tracker
128 This RT extension adds scheduling functionality to Request Tracker.
132 CalendarWeeklyStartMin (default 480, 8am)
134 CalendarWeeklyEndMin (default 1080, 6pm)
136 CalendarWeeklySizeMin (default 30)
138 CalendarWeeklySlots (unused now?)
146 Copyright 2014 Freeside Internet Services, Inc.
148 This program is free software; you can redistribute it and/or
149 modify it under the same terms as Request Tracker itself.