agent option to select RT queue
authorivan <ivan>
Sat, 15 Oct 2005 11:29:54 +0000 (11:29 +0000)
committerivan <ivan>
Sat, 15 Oct 2005 11:29:54 +0000 (11:29 +0000)
FS/FS/Conf.pm
FS/FS/Schema.pm
FS/FS/TicketSystem.pm
FS/FS/TicketSystem/RT_External.pm
FS/FS/TicketSystem/RT_Internal.pm
FS/FS/agent.pm
httemplate/browse/agent.cgi
httemplate/config/config-view.cgi
httemplate/config/config.cgi
httemplate/edit/agent.cgi

index 30aa1e7..5f2c3b3 100644 (file)
@@ -1472,8 +1472,16 @@ httemplate/docs/config.html
   {
     'key'         => 'ticket_system-default_queueid',
     'section'     => '',
-    'description' => 'Default queue number used when creating new customer tickets.',
-    'type'        => 'text',
+    'description' => 'Default queue used when creating new customer tickets.',
+    'type'        => 'select-sub',
+    'options_sub' => sub { eval "use FS::TicketSystem;";
+                           die $@ if $@;
+                           FS::TicketSystem->queues();
+                         },
+    'option_sub'  => sub { eval "use FS::TicketSystem;";
+                           die $@ if $@;
+                           FS::TicketSystem->queue(shift);
+                         },
   },
 
   {
index bffcafc..12a4fd5 100644 (file)
@@ -247,6 +247,7 @@ sub tables_hashref {
         'disabled',     'char', 'NULL', 1,
         'username', 'varchar',       'NULL',     $char_d,
         '_password','varchar',       'NULL',     $char_d,
+        'ticketing_queueid', 'int', 'NULL', '',
       ],
       'primary_key' => 'agentnum',
       'unique' => [],
index 9d961fc..a80a827 100644 (file)
@@ -5,10 +5,10 @@ use vars qw( $conf $system $AUTOLOAD );
 use FS::Conf;
 use FS::UID;
 
-install_callback FS::UID sub { 
+FS::UID->install_callback( sub { 
   $conf = new FS::Conf;
   $system = $conf->config('ticket_system');
-};
+} );
 
 sub AUTOLOAD {
   my $self = shift;
index 63eee86..e1aec58 100644 (file)
@@ -3,11 +3,13 @@ package FS::TicketSystem::RT_External;
 use strict;
 use vars qw( $conf $default_queueid
              $priority_field $priority_field_queue $field
-            $external_dbh $external_url );
+            $dbh $external_url );
 use URI::Escape;
-use FS::UID;
+use FS::UID qw(dbh);
+use FS::Record qw(qsearchs);
+use FS::cust_main;
 
-install_callback FS::UID sub { 
+FS::UID->install_callback( sub { 
   my $conf = new FS::Conf;
   $default_queueid = $conf->config('ticket_system-default_queueid');
   $priority_field =
@@ -24,20 +26,19 @@ install_callback FS::UID sub {
   }
 
   $external_url = '';
+  $dbh = dbh;
   if ($conf->config('ticket_system') eq 'RT_External') {
     my ($datasrc, $user, $pass) = $conf->config('ticket_system-rt_external_datasrc');
-    $external_dbh = DBI->connect($datasrc, $user, $pass, { 'ChopBlanks' => 1 })
+    $dbh = DBI->connect($datasrc, $user, $pass, { 'ChopBlanks' => 1 })
       or die "RT_External DBI->connect error: $DBI::errstr\n";
 
     $external_url = $conf->config('ticket_system-rt_external_url');
   }
 
-};
+} );
 
 sub num_customer_tickets {
-  my( $self, $custnum, $priority, $dbh ) = @_;
-
-  $dbh ||= $external_dbh;
+  my( $self, $custnum, $priority ) = @_;
 
   my( $from_sql, @param) = $self->_from_customer( $custnum, $priority );
 
@@ -50,11 +51,9 @@ sub num_customer_tickets {
 }
 
 sub customer_tickets {
-  my( $self, $custnum, $limit, $priority, $dbh ) = @_;
+  my( $self, $custnum, $limit, $priority ) = @_;
   $limit ||= 0;
 
-  $dbh ||= $external_dbh;
-
   my( $from_sql, @param) = $self->_from_customer( $custnum, $priority );
   my $sql = "select tickets.*, queues.name".
             ( length($priority) ? ", ticketcustomfieldvalues.content" : '' ).
@@ -131,12 +130,14 @@ sub _from_customer {
 
 }
 
-sub _href_customer_tickets {
+sub href_customer_tickets {
   my( $self, $custnum, $priority ) = @_;
 
+  my $href = $self->baseurl;
+
   #i snarfed this from an RT bookmarked search, it could be unescaped in the
   #source for readability and run through uri_escape
-  my $href 
+  $href .
     'Search/Results.html?Order=ASC&Query=%20MemberOf%20%3D%20%27freeside%3A%2F%2Ffreeside%2Fcust_main%2F'.
     $custnum.
     '%27%20%20AND%20%28%20Status%20%3D%20%27open%27%20%20OR%20Status%20%3D%20%27new%27%20%20OR%20Status%20%3D%20%27stalled%27%20%29%20'
@@ -178,35 +179,52 @@ sub _href_customer_tickets {
 
 }
 
-sub href_customer_tickets {
-  my $self = shift;
-  $self->baseurl. $self->_href_customer_tickets(@_);
-}
-
+sub href_new_ticket {
+  my( $self, $custnum_or_cust_main, $requestors ) = @_;
 
-sub _href_new_ticket {
-  my( $self, $custnum, $requestors ) = @_;
+  my( $custnum, $cust_main );
+  if ( ref($custnum_or_cust_main) ) {
+    $cust_main = $custnum_or_cust_main;
+    $custnum = $cust_main->custnum;
+  } else {
+    $custnum = $custnum_or_cust_main;
+    $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
+  }
+  my $queueid = $cust_main->agent->ticketing_queueid || $default_queueid;
 
+  $self->baseurl.
   'Ticket/Create.html?'.
-    "Queue=$default_queueid".
+    "Queue=$queueid".
     "&new-MemberOf=freeside://freeside/cust_main/$custnum".
     ( $requestors ? '&Requestors='. uri_escape($requestors) : '' )
     ;
 }
 
-sub href_new_ticket {
-  my $self = shift;
-  $self->baseurl. $self->_href_new_ticket(@_);
+sub href_ticket {
+  my($self, $ticketnum) = @_;
+  $self->baseurl. 'Ticket/Display.html?id='.$ticketnum;
 }
 
-sub _href_ticket {
-  my($self, $ticketnum) = @_;
-  'Ticket/Display.html?id='.$ticketnum;
+sub queues {
+  my($self) = @_;
+
+  my $sql = "select id, name from queues where disabled = 0";
+  my $sth = $dbh->prepare($sql) or die $dbh->errstr. " preparing $sql";
+  $sth->execute()               or die $sth->errstr. " executing $sql";
+
+  map { $_->[0] => $_->[1] } @{ $sth->fetchall_arrayref([]) };
+
 }
 
-sub href_ticket {
-  my $self = shift;
-  $self->baseurl. $self->_href_ticket(@_);
+sub queue {
+  my($self, $queueid) = @_;
+
+  my $sql = "select name from queues where id = ?";
+  my $sth = $dbh->prepare($sql) or die $dbh->errstr. " preparing $sql";
+  $sth->execute($queueid)       or die $sth->errstr. " executing $sql";
+
+  $sth->fetchrow_arrayref->[0];
+
 }
 
 sub baseurl {
index 6f28faf..8fce918 100644 (file)
@@ -16,16 +16,6 @@ sub sql_num_customer_tickets {
    )";
 }
 
-sub num_customer_tickets {
-  my( $self, $custnum, $priority ) = ( shift, shift, shift );
-  $self->SUPER::num_customer_tickets( $custnum, $priority, dbh );
-}
-
-sub customer_tickets {
-  my( $self, $custnum, $limit, $priority ) = ( shift, shift, shift, shift );
-  $self->SUPER::customer_tickets( $custnum, $limit, $priority, dbh );
-}
-
 sub baseurl {
   #my $self = shift;
   if ( $RT::URI::freeside::URL ) {
index 0a0e4f7..83f0ce5 100644 (file)
@@ -2,12 +2,13 @@ package FS::agent;
 
 use strict;
 use vars qw( @ISA );
+#use Crypt::YAPassGen;
 use FS::Record qw( dbh qsearch qsearchs );
 use FS::cust_main;
 use FS::cust_pkg;
 use FS::agent_type;
 use FS::reg_code;
-#use Crypt::YAPassGen;
+use FS::TicketSystem;
 
 @ISA = qw( FS::Record );
 
@@ -167,6 +168,18 @@ sub pkgpart_hashref {
   $self->agent_type->pkgpart_hashref;
 }
 
+=item ticketing_queue
+
+Returns the queue name corresponding with the id from the I<ticketing_queueid>
+field, or the empty string.
+
+=cut
+
+sub ticketing_queue {
+  my $self = shift;
+  FS::TicketSystem->queue($self->ticketing_queueid);
+};
+
 =item num_prospect_cust_main
 
 Returns the number of prospects (customers with no packages ever ordered) for
index e3c4022..05300d0 100755 (executable)
@@ -8,6 +8,8 @@
     %search = ( 'disabled' => '' );
   }
 
+  my $conf = new FS::Conf;
+
 %>
 <%= header('Agent Listing', menubar(
   'Main Menu'   => $p,
@@ -36,6 +38,9 @@ full offerings (via their type).<BR><BR>
   <TH>Reports</TH>
   <TH>Registration codes</TH>
   <TH>Prepaid cards</TH>
+  <% if ( $conf->config('ticket_system') ) { %>
+    <TH>Ticketing</TH>
+  <% } %>
   <TH><FONT SIZE=-1>Payment Gateway Overrides</FONT></TH>
   <TH><FONT SIZE=-1>Freq.</FONT></TH>
   <TH><FONT SIZE=-1>Prog.</FONT></TH>
@@ -175,6 +180,16 @@ foreach my $agent ( sort {
           <BR><A HREF="<%=$p%>edit/prepay_credit.cgi?agentnum=<%= $agent->agentnum %>">Generate cards</A>
         </TD>
 
+        <% if ( $conf->config('ticket_system') ) { %>
+
+          <TD>
+            <% if ( $agent->ticketing_queueid ) { %>
+              Queue: <%= $agent->ticketing_queueid %>: <%= $agent->ticketing_queue %><BR>
+            <% } %>
+          </TD>
+
+        <% } %>
+
         <TD>
           <TABLE CELLSPACING=0 CELLPADDING=0>
             <% foreach my $override (
index 9a00067..8011e76 100644 (file)
         <% foreach my $type ( ref($i->type) ? @{$i->type} : $i->type ) {
              my $n = 0; %>
           <% if ( $type eq '' ) { %>
-            <tr><td><font color="#ff0000">no type</font></td></tr>
+            <tr>
+              <td><font color="#ff0000">no type</font></td>
+            </tr>
           <% } elsif (   $type eq 'textarea'
                       || $type eq 'editlist'
                       || $type eq 'selectmultiple' ) { %>
-            <tr><td bgcolor="#ffffff">
+            <tr>
+              <td bgcolor="#ffffff">
 <pre>
 <%= encode_entities(join("\n", $conf->config($i->key) ) ) %>
 </pre>
-            </td></tr>
+              </td>
+            </tr>
           <% } elsif ( $type eq 'checkbox' ) { %>
-            <tr><td bgcolor="#<%= $conf->exists($i->key) ? '00ff00">YES' : 'ff0000">NO' %></td></tr>
+            <tr>
+              <td bgcolor="#<%= $conf->exists($i->key) ? '00ff00">YES' : 'ff0000">NO' %></td>
+            </tr>
           <% } elsif ( $type eq 'text' || $type eq 'select' )  { %>
-            <tr><td bgcolor="#ffffff"><%= $conf->exists($i->key) ? $conf->config($i->key) : '' %></td></tr>
+            <tr>
+              <td bgcolor="#ffffff">
+                <%= $conf->exists($i->key) ? $conf->config($i->key) : '' %>
+              </td></tr>
+          <% } elsif ( $type eq 'select-sub' ) { %>
+            <tr>
+              <td bgcolor="#ffffff">
+                <%= $conf->config($i->key) %>: 
+                <%= &{ $i->option_sub }( $conf->config($i->key) ) %>
+              </td>
+            </tr>
           <% } else { %>
             <tr><td>
               <font color="#ff0000">unknown type <%= $type %></font>
index 409869e..ff29d85 100644 (file)
@@ -73,6 +73,21 @@ function SafeOnsubmit() {
                 <option value=<%= $conf->config($i->key) %> SELECTED><%= $conf->config($i->key) %>
               <% } %>
             </select>
+          <% } elsif ( $type eq 'select-sub' ) { %>
+            <select name="<%= $i->key. $n %>">
+              <option value="">
+              <% my %options = &{$i->options_sub};
+                 my @options = sort { $a <=> $b } keys %options;
+                 my %saw;
+                 foreach my $value ( @options ) {
+                    local($^W)=0; next if $saw{$value}++;
+              %>
+                <option value="<%= $value %>"<%= $value eq $conf->config($i->key) ? ' SELECTED' : '' %>><%= $value %>: <%= $options{$value} %>
+              <% } %>
+              <% if ( $conf->exists($i->key) && $conf->config($i->key) && ! exists $options{$conf->config($i->key)} ) { %>
+                <option value=<%= $conf->config($i->key) %> SELECTED><%= $conf->config($i->key) %>: <%= &{ $i->option_sub }( $conf->config($i->key) ) %>
+              <% } %>
+            </select>
           <% } elsif ( $type eq 'editlist' )  { %>
             <script>
               function doremove<%= $i->key. $n %>() {
index 8a1cb2a..f8d0edc 100755 (executable)
@@ -1,4 +1,3 @@
-<!-- mason kludge -->
 <%
 
 my $agent;
@@ -16,6 +15,8 @@ if ( $cgi->param('error') ) {
 my $action = $agent->agentnum ? 'Edit' : 'Add';
 my $hashref = $agent->hashref;
 
+my $conf = new FS::Conf;
+
 %>
 
 <%= header("$action Agent", menubar(
@@ -32,45 +33,74 @@ my $hashref = $agent->hashref;
 Agent #<%= $hashref->{agentnum} ? $hashref->{agentnum} : "(NEW)" %>
 
 <%= &ntable("#cccccc", 2, '') %>
+
 <TR>
   <TH ALIGN="right">Agent</TH>
   <TD><INPUT TYPE="text" NAME="agent" SIZE=32 VALUE="<%= $hashref->{agent} %>"></TD>
 </TR>
-<TR>
-  <TH ALIGN="right">Agent type</TH>
-  <TD><SELECT NAME="typenum" SIZE=1>
-
-<% foreach my $agent_type (qsearch('agent_type',{})) { %>
-  <OPTION VALUE="<%= $agent_type->typenum %>"<%= ( $hashref->{typenum} && ( $hashref->{typenum} == $agent_type->typenum ) ) ? ' SELECTED' : '' %>>
-  <%= $agent_type->getfield('typenum') %>: <%= $agent_type->getfield('atype') %>
-<% } %>
 
-</SELECT></TD>
-</TR>
-<% if ( dbdef->table('agent')->column('disabled') ) { %>
+  <TR>
+    <TH ALIGN="right">Agent type</TH>
+    <TD><SELECT NAME="typenum" SIZE=1>
+  
+  <% foreach my $agent_type (qsearch('agent_type',{})) { %>
+    <OPTION VALUE="<%= $agent_type->typenum %>"<%= ( $hashref->{typenum} && ( $hashref->{typenum} == $agent_type->typenum ) ) ? ' SELECTED' : '' %>>
+    <%= $agent_type->getfield('typenum') %>: <%= $agent_type->getfield('atype') %>
+  <% } %>
+  
+  </SELECT></TD>
+  </TR>
+  
   <TR>
     <TD ALIGN="right">Disable</TD>
     <TD><INPUT TYPE="checkbox" NAME="disabled" VALUE="Y"<%= $hashref->{disabled} eq 'Y' ? ' CHECKED' : '' %>></TD>
   </TR>
-<% } %>
-<TR>
-  <TD ALIGN="right"><!--Frequency--></TD>
-  <TD><INPUT TYPE="hidden" NAME="freq" VALUE="<%= $hashref->{freq} %>"></TD>
-</TR>
-<TR>
-  <TD ALIGN="right"><!--Program--></TD>
-  <TD><INPUT TYPE="hidden" NAME="prog" VALUE="<%= $hashref->{prog} %>"></TD>
-</TR>
-<% if ( dbdef->table('agent')->column('username') ) { %>
+  
+  <TR>
+    <TD ALIGN="right"><!--Frequency--></TD>
+    <TD><INPUT TYPE="hidden" NAME="freq" VALUE="<%= $hashref->{freq} %>"></TD>
+  </TR>
+  
+  <TR>
+    <TD ALIGN="right"><!--Program--></TD>
+    <TD><INPUT TYPE="hidden" NAME="prog" VALUE="<%= $hashref->{prog} %>"></TD>
+  </TR>
+
+  <% if ( $conf->config('ticket_system') ) {
+    my $default_queueid = $conf->config('ticket_system-default_queueid');
+    my $default_queue = FS::TicketSystem->queue($default_queueid);
+    $default_queue = "(default) $default_queueid: $default_queue"
+      if $default_queueid;
+    my %queues = FS::TicketSystem->queues();
+    my @queueids = sort { $a <=> $b } keys %queues;
+  %>
+    <TR>
+      <TD ALIGN="right">Ticketing</TD>
+      <TD>
+        <SELECT NAME="ticketing_queueid">
+          <OPTION VALUE=""><%= $default_queue %>
+          <% foreach my $queueid ( @queueids ) { %>
+            <OPTION VALUE="<%= $queueid %>" <%= $agent->ticketing_queueid == $queueid ? ' SELECTED' : '' %>><%= $queueid %>: <%= $queues{$queueid} %>
+          <% } %>
+        </SELECT>
+      </TD>
+    </TR>
+  <% } %>
+  
   <TR>
     <TD ALIGN="right">Agent interface username</TD>
-    <TD><INPUT TYPE="text" NAME="username" VALUE="<%= $hashref->{username} %>"></TD>
+    <TD>
+      <INPUT TYPE="text" NAME="username" VALUE="<%= $hashref->{username} %>">
+    </TD>
   </TR>
+  
   <TR>
     <TD ALIGN="right">Agent interface password</TD>
-    <TD><INPUT TYPE="text" NAME="_password" VALUE="<%= $hashref->{_password} %>"></TD>
+    <TD>
+      <INPUT TYPE="text" NAME="_password" VALUE="<%= $hashref->{_password} %>">
+    </TD>
   </TR>
-<% } %>
+
 </TABLE>
 
 <BR><INPUT TYPE="submit" VALUE="<%= $hashref->{agentnum} ? "Apply changes" : "Add agent" %>">