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