customer view UI
[freeside.git] / httemplate / elements / table-tickets.html
1 <& /elements/form-create_ticket.html, object => $object &>
2  |
3 View
4 <A HREF="<% $open_link %>"><% mt($openlabel) |h %></A> |
5 <A HREF="<% $res_link  %>"><% mt('resolved') |h %></A>
6  <BR>
7
8 % if ( @tickets ) {
9
10 <& /elements/table-grid.html &>
11 % my $bgcolor1 = '#eeeeee';
12 %   my $bgcolor2 = '#ffffff';
13 %   my $bgcolor = '';
14
15 <THEAD>
16 <TR>
17   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('#') |h %></TH>
18   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Subject') |h %></TH>
19   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Status') |h %></TH>
20   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Queue') |h %></TH>
21   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Owner') |h %></TH>
22   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Due') |h %></TH>
23   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Estimated Time') |h %></TH>
24   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Priority') |h %></TH>
25 % if ( $ss_priority ) {
26   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Customer Priority') |h %></TH>
27 % }
28 % if ( $object->isa('FS::cust_main') ) {
29   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Service') |h %></TH>
30 % }
31 </TR>
32 </THEAD>
33
34 % foreach my $ticket ( @tickets ) {
35 %     my $href = FS::TicketSystem->href_ticket($ticket->{id});
36 %     if ( $bgcolor eq $bgcolor1 ) {
37 %       $bgcolor = $bgcolor2;
38 %     } else {
39 %       $bgcolor = $bgcolor1;
40 %     }
41
42   <TR>
43   
44     <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
45       <A HREF=<%$href%>><% $ticket->{id} %></A>
46     </TD>
47   
48     <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
49       <A HREF=<%$href%>><% $ticket->{subject} %></A>
50     </TD>
51   
52     <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
53       <% $ticket->{status} %>
54     </TD>
55   
56     <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
57       <% $ticket->{queue} %>
58     </TD>
59   
60     <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
61       <% $ticket->{owner} %>
62     </TD>
63
64     <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
65       <% $date_formatter->($ticket->{due}) %>
66     </TD>
67
68     <TD ALIGN="right" CLASS="grid" BGCOLOR="<% $bgcolor %>">
69       <% $ticket->{timeestimated} %>
70     </TD>
71   
72     <TD ALIGN="right" CLASS="grid" BGCOLOR="<% $bgcolor %>">
73       <% $ticket->{content}
74            ? $ticket->{content}.' ('.$ticket->{priority}.')'
75            : $ticket->{priority}
76       %>
77     </TD>
78
79 %   if ( $ss_priority ) {
80     <TD ALIGN="right" CLASS="grid" BGCOLOR="<% $bgcolor %>">
81       <% $ticket->{"CF.{$ss_priority}"} %>
82     </TD>
83 %   }
84 %   if ( $object->isa('FS::cust_main') ) {
85     <TD CLASS="grid" BGCOLOR="<% $bgcolor %>"><FONT SIZE=-1><B>
86 %     foreach (@{ $ticket->{svcnums} }) {
87 %       my $cust_svc = FS::cust_svc->by_key($_) or next;
88         <% FS::UI::Web::svc_label_link($m, $cust_svc->part_svc, $cust_svc) %>
89         <BR>
90 %     }
91     </B></FONT></TD>
92 %   }
93
94   </TR>
95
96 % } 
97
98 %}
99
100 </TABLE>
101
102 <%init>
103
104 my %opt = @_;
105 my $conf = new FS::Conf;
106
107 return '' unless $conf->config('ticket_system');
108
109 my $object = $opt{'object'};
110 $object = $object->cust_svc if $object->isa('FS::svc_Common');
111 my( @tickets )  = $object->tickets;
112
113 my ($openlabel, $open_link, $res_link, $thing);
114 $openlabel = join('/', FS::TicketSystem->statuses );
115
116 # not the nicest way to do this--FS::has_tickets_Common?
117 if ( $object->isa('FS::cust_main') ) {
118   $thing  = 'customer';
119   $open_link = FS::TicketSystem->href_customer_tickets($object->custnum);
120
121   $res_link  = FS::TicketSystem->href_customer_tickets(
122                     $object->custnum,
123                     { 'statuses' => [ 'resolved' ] }
124                   );
125 } elsif ( $object->isa('FS::cust_svc') ) {
126
127   return '' unless $object->pkgnum;
128
129   $thing = 'service';
130   $open_link = FS::TicketSystem->href_service_tickets($object->svcnum);
131
132   $res_link  = FS::TicketSystem->href_service_tickets(
133                     $object->svcnum,
134                     { 'statuses' => [ 'resolved' ] }
135                   );
136 }
137
138 my $ss_priority = FS::TicketSystem->selfservice_priority;
139 if ( $ss_priority ) {
140   my $dir = $conf->exists('ticket_system-priority_reverse') ? -1 : 1;
141   use sort 'stable';
142   # sort in the following way:
143   @tickets = sort { 
144     # within a severity level...
145     ( $a->{'content'} eq $b->{'content'} ) ? (
146       # no-priority tickets sort last
147       (
148         ($a->{'_selfservice_priority'} eq '') <=> 
149         ($b->{'_selfservice_priority'} eq '')
150       ) ||
151       # otherwise obey ticket_system-priority_reverse
152       ( $dir * 
153         ($b->{'_selfservice_priority'} <=> $a->{'_selfservice_priority'})
154       )
155     ) : 0; # but don't rearrange between severity levels
156   } @tickets;
157 }
158
159 my $format = $conf->config('date_format') || '%Y-%m-%d';
160
161 my $date_formatter = sub {
162   my $time = parse_datetime($_[0], 'GMT');
163   # exclude times within 24 hours of zero
164   ($time > 86400) ? time2str($format, $time) : '';
165 };
166
167 </%init>