selfservice priority sort order, #14029
[freeside.git] / httemplate / view / cust_main / tickets.html
index b5d581d..adfaead 100644 (file)
@@ -1,23 +1,56 @@
-<A NAME="tickets"><FONT SIZE="+2">Tickets</FONT></A>
+<FORM METHOD="GET" NAME="CreateTicketForm" STYLE="display:inline">
+<SCRIPT TYPE="text/javascript">
+function updateTicketLink() {
+  var link = document.getElementById('CreateTicketLink');
+  var selector = document.getElementById('Queue')
+  link.href = "<% $new_base.'?'.
+    join(';', map(
+      { ($_ eq 'Queue') ? () : "$_=$new_param{$_}"} 
+    keys %new_param),'Queue=') %>" + selector.options[selector.selectedIndex].value;
+}
+</SCRIPT>
+<A id="CreateTicketLink" HREF="<% $new_link %>"><% mt('Create new ticket') |h %></A>
+ <% mt('in queue') |h %> 
+%# fetch list of queues in which the user can create tickets
+% my %queues = FS::TicketSystem->queues('', 'CreateTicket');
+% if( $conf->exists('ticket_system-force_default_queueid') ) {
+<B><% $queues{$new_param{'Queue'}} %></B>
+<INPUT TYPE="hidden" NAME="Queue" VALUE="<% $new_param{'Queue'} %>">
+% }
+% else {
+<SELECT NAME="Queue" id="Queue" onchange="updateTicketLink()">
+% foreach my $queueid ( sort { $queues{$a} cmp $queues{$b} } keys %queues ) {
+    <OPTION VALUE="<% $queueid %>"
+            <% $queueid == $new_param{'Queue'} ? 'SELECTED' : '' %>
+    ><% $queues{$queueid} |h %>
+% }
+</SELECT>
+<SCRIPT DEFER TYPE="text/javascript">updateTicketLink();</SCRIPT>
+% }
+</FORM>
 <BR>
 
-(<A HREF="<% $open_link %>">View <% $openlabel %> tickets for this customer</A>)
-(<A HREF="<% $res_link  %>">View resolved tickets for this customer</A>)
-<BR>
-(<A HREF="<% $new_link  %>">Create new ticket for this customer</A>)
+(<A HREF="<% $open_link %>"><% mt("View $openlabel tickets for this customer") |h %></A>)
+(<A HREF="<% $res_link  %>"><% mt('View resolved tickets for this customer') |h %></A>)
+<BR><BR>
 
-<% include("/elements/table-grid.html") %>
+<& /elements/table-grid.html &>
 % my $bgcolor1 = '#eeeeee';
 %   my $bgcolor2 = '#ffffff';
 %   my $bgcolor = '';
 
 <TR>
-  <TH CLASS="grid" BGCOLOR="#cccccc">#</TH>
-  <TH CLASS="grid" BGCOLOR="#cccccc">Subject</TH>
-  <TH CLASS="grid" BGCOLOR="#cccccc">Status</TH>
-  <TH CLASS="grid" BGCOLOR="#cccccc">Queue</TH>
-  <TH CLASS="grid" BGCOLOR="#cccccc">Owner</TH>
-  <TH CLASS="grid" BGCOLOR="#cccccc">Priority</TH>
+  <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('#') |h %></TH>
+  <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Subject') |h %></TH>
+  <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Status') |h %></TH>
+  <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Queue') |h %></TH>
+  <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Owner') |h %></TH>
+  <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Due') |h %></TH>
+  <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Estimated Time') |h %></TH>
+  <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Priority') |h %></TH>
+% if ( $ss_priority ) {
+  <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Customer Priority') |h %></TH>
+% }
 </TR>
 
 % foreach my $ticket ( @tickets ) {
     <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
       <% $ticket->{owner} %>
     </TD>
+
+    <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
+      <% $date_formatter->($ticket->{due}) %>
+    </TD>
+
+    <TD ALIGN="right" CLASS="grid" BGCOLOR="<% $bgcolor %>">
+      <% $ticket->{timeestimated} %>
+    </TD>
   
     <TD ALIGN="right" CLASS="grid" BGCOLOR="<% $bgcolor %>">
       <% $ticket->{content}
            : $ticket->{priority}
       %>
     </TD>
-  
+
+%   if ( $ss_priority ) {
+    <TD ALIGN="right" CLASS="grid" BGCOLOR="<% $bgcolor %>">
+      <% $ticket->{"CF.{$ss_priority}"} %>
+    </TD>
+%   }
+
   </TR>
 
 % } 
 </TABLE>
 
 <%init>
+use Date::Format 'time2str';
+use Date::Parse 'str2time';
 
+my( $conf ) = new FS::Conf;
 my( $cust_main ) = @_;
 my( @tickets )  = $cust_main->tickets;
 
@@ -76,9 +126,38 @@ my $res_link  = FS::TicketSystem->href_customer_tickets(
                   { 'statuses' => [ 'resolved' ] }
                 );
 
-my $new_link = FS::TicketSystem->href_new_ticket(
-                 $cust_main,
-                 join(', ', $cust_main->invoicing_list_emailonly )
-               );
+my( $new_base, %new_param ) = 
+  FS::TicketSystem->href_params_new_ticket( $cust_main );
+
+my $new_link = FS::TicketSystem->href_new_ticket( $cust_main );
+
+my $ss_priority = FS::TicketSystem->selfservice_priority;
+if ( $ss_priority ) {
+  my $dir = $conf->exists('ticket_system-priority_reverse') ? -1 : 1;
+  use sort 'stable';
+  # sort in the following way:
+  @tickets = sort { 
+    # within a severity level...
+    ( $a->{'content'} eq $b->{'content'} ) ? (
+      # no-priority tickets sort last
+      (
+        ($a->{'_selfservice_priority'} eq '') <=> 
+        ($b->{'_selfservice_priority'} eq '')
+      ) ||
+      # otherwise obey ticket_system-priority_reverse
+      ( $dir * 
+        ($b->{'_selfservice_priority'} <=> $a->{'_selfservice_priority'})
+      )
+    ) : 0; # but don't rearrange between severity levels
+  } @tickets;
+}
+
+my $format = $conf->config('date_format') || '%Y-%m-%d';
+
+my $date_formatter = sub {
+  my $time = str2time($_[0], 'GMT');
+  # exclude times within 24 hours of zero
+  ($time > 86400) ? time2str($format, $time) : '';
+};
 
 </%init>