4c6e1f918dfe8980a1754e6c13b58ee5ed458b48
[freeside.git] / rt / lib / RTx / Schedule.pm
1 package RTx::Schedule;
2 use base qw( Exporter );
3
4 use strict;
5 use RTx::Calendar qw( FindTickets LocalDate );
6
7 our $VERSION = '0.01';
8
9 our @EXPORT_OK = qw( UserDaySchedule );
10
11 #ala Calendar.html
12 # Default Query and Format
13 our $DefaultFormat = "__Starts__ __Due__";
14 our $DefaultQuery = "( Status = 'new' OR Status = 'open' OR Status = 'stalled')
15  AND ( Type = 'reminder' OR 'Type' = 'ticket' )";
16
17 sub UserDaySchedule {
18   my %arg = @_;
19   my $username = $arg{username};
20   my $date = $arg{date};
21
22   my $Tickets;
23   if ( $arg{Tickets} ) {
24     $Tickets = $arg{Tickets};
25   } else {
26
27      my $Query = $DefaultQuery;
28
29 #    # we overide them if needed
30 #    $TempQuery  = $Query  if $Query;
31 #    $TempFormat = $Format if $Format;
32
33 #    # we search all date types in Format string
34 #    my @Dates = grep { $TempFormat =~ m/__${_}(Relative)?__/ } @DateTypes;
35
36      my @Dates = qw( Starts Due );
37
38 #    # used to display or not a date in Element/CalendarEvent
39 #    my %DateTypes = map { $_ => 1 } @Dates;
40 #
41 #    $TempQuery .= DatesClauses(\@Dates, $start->strftime("%F"), $end->strftime("%F"));
42
43     my %t = FindTickets( $arg{CurrentUser}, $Query, \@Dates, $date x2 );
44
45     $Tickets = $t{ $date };
46   }
47
48   #XXX block out unavailable times
49   #alas.  abstractions break, freeside-specific stuff to get availability
50   # move availability to RT side?  make it all callback/pluggable?
51
52   return (
53
54     #avail/unavailable times
55     'avail'     => {
56     },
57
58     #block out / show / color code existing appointments
59     'scheduled' => {
60       map {
61             #$_->Id => [ $_->StartsObj, $t->DueObj ];
62
63             my($sm, $sh) = ($_->StartsObj->Localtime('user'))[1,2];
64             my $starts = $sh*60 + $sm;
65
66             my($dm, $dh) = ($_->DueObj->Localtime('user'))[1,2];
67             my $due = $dh*60 + $dm;
68
69             #XXX color code existing appointments by... city?  proximity?  etc.
70             my $col = '99ff99'; #green
71
72             $_->Id => [ $starts, $due, $col, $_ ];
73           }
74         grep {
75                    LocalDate($_->StartsObj->Unix) eq $date
76                and $_->OwnerObj->Name eq $username
77              }
78           @$Tickets
79     },
80
81   );
82
83 }
84
85 1;
86
87 __END__
88
89 =head1 NAME
90
91 RTx::Schedule - Scheduling extension for Request Tracker
92
93 =head1 DESCRIPTION
94
95 This RT extension adds scheduling functionality to Request Tracker.
96
97 =head1 CONFIGURATION
98
99 CalendarWeeklyStartMin (default 480, 8am)
100
101 CalendarWeeklyEndMin (default 1080, 6pm)
102
103 CalendarWeeklySizeMin (default 30)
104
105 CalendarWeeklySlots (unused now?)
106
107 =head1 AUTHOR
108
109 Ivan Kohler
110
111 =head1 COPYRIGHT
112
113 Copyright 2014 Freeside Internet Services, Inc.
114
115 This program is free software; you can redistribute it and/or
116 modify it under the same terms as Request Tracker itself.
117