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