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
104 $_->Id => [ $starts, $due, $col, $_ ];
107 LocalDate($_->StartsObj->Unix) eq $date
108 and $_->OwnerObj->Name eq $username
123 RTx::Schedule - Scheduling extension for Request Tracker
127 This RT extension adds scheduling functionality to Request Tracker.
131 CalendarWeeklyStartMin (default 480, 8am)
133 CalendarWeeklyEndMin (default 1080, 6pm)
135 CalendarWeeklySizeMin (default 30)
137 CalendarWeeklySlots (unused now?)
145 Copyright 2014 Freeside Internet Services, Inc.
147 This program is free software; you can redistribute it and/or
148 modify it under the same terms as Request Tracker itself.