bc02c7c4b136f5d77987a34b611bcccf0a9b2f65
[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} %></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} %>
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       %>
84     </TD>
85
86 %   if ( $ss_priority ) {
87     <TD ALIGN="right" CLASS="grid" BGCOLOR="<% $bgcolor %>">
88       <% $ticket->{"CF.{$ss_priority}"} %>
89     </TD>
90 %   }
91 %   if ( $object->isa('FS::cust_main') ) {
92     <TD CLASS="grid" BGCOLOR="<% $bgcolor %>"><FONT SIZE=-1><B>
93 %     foreach (@{ $ticket->{svcnums} }) {
94 %       my $cust_svc = FS::cust_svc->by_key($_) or next;
95         <% FS::UI::Web::svc_label_link($m, $cust_svc->part_svc, $cust_svc) %>
96         <BR>
97 %     }
98     </B></FONT></TD>
99 %   }
100
101   </TR>
102
103 % } 
104
105 </TABLE>
106
107 <%init>
108
109 my %opt = @_;
110 my $conf = new FS::Conf;
111
112 return '' unless $conf->config('ticket_system');
113
114 my $object = $opt{'object'};
115 $object = $object->cust_svc if $object->isa('FS::svc_Common');
116 my( @tickets )  = $object->tickets;
117
118 my ($openlabel, $open_link, $res_link, $thing);
119 $openlabel = join('/', FS::TicketSystem->statuses );
120
121 # not the nicest way to do this--FS::has_tickets_Common?
122 if ( $object->isa('FS::cust_main') ) {
123   $thing  = 'customer';
124   $open_link = FS::TicketSystem->href_customer_tickets($object->custnum);
125
126   $res_link  = FS::TicketSystem->href_customer_tickets(
127                     $object->custnum,
128                     { 'statuses' => [ 'resolved' ] }
129                   );
130 } elsif ( $object->isa('FS::cust_svc') ) {
131
132   return '' unless $object->pkgnum;
133
134   $thing = 'service';
135   $open_link = FS::TicketSystem->href_service_tickets($object->svcnum);
136
137   $res_link  = FS::TicketSystem->href_service_tickets(
138                     $object->svcnum,
139                     { 'statuses' => [ 'resolved' ] }
140                   );
141 }
142
143 my $ss_priority = FS::TicketSystem->selfservice_priority;
144 if ( $ss_priority ) {
145   my $dir = $conf->exists('ticket_system-priority_reverse') ? -1 : 1;
146   use sort 'stable';
147   # sort in the following way:
148   @tickets = sort { 
149     # within a severity level...
150     ( $a->{'content'} eq $b->{'content'} ) ? (
151       # no-priority tickets sort last
152       (
153         ($a->{'_selfservice_priority'} eq '') <=> 
154         ($b->{'_selfservice_priority'} eq '')
155       ) ||
156       # otherwise obey ticket_system-priority_reverse
157       ( $dir * 
158         ($b->{'_selfservice_priority'} <=> $a->{'_selfservice_priority'})
159       )
160     ) : 0; # but don't rearrange between severity levels
161   } @tickets;
162 }
163
164 my $format = $conf->config('date_format') || '%Y-%m-%d';
165
166 my $date_formatter = sub {
167   my $time = parse_datetime($_[0], 'GMT');
168   # exclude times within 24 hours of zero
169   ($time > 86400) ? time2str($format, $time) : '';
170 };
171
172 </%init>