},
{
+ 'key' => 'ticket_system-appointment-custom_field',
+ 'section' => 'ticketing',
+ 'description' => 'Custom field from the ticketing system to use as an appointment classification.',
+ 'type' => 'text',
+ },
+
+ {
'key' => 'ticket_system-escalation',
'section' => 'ticketing',
'description' => 'Enable priority escalation of tickets as part of daily batch processing.',
# create an RT::Tickets object for a specified custnum or svcnum
sub _tickets_search {
- my( $self, $type, $number, $limit, $priority, $status ) = @_;
+ my( $self, $type, $number, $limit, $priority, $status, $queueid ) = @_;
$type =~ /^Customer|Service$/ or die "invalid type: $type";
$number =~ /^\d+$/ or die "invalid custnum/svcnum: $number";
join(' OR ', map { "Status = '$_'" } @statuses).
' ) ';
+ $rtql .= " AND Queue = $queueid " if $queueid;
+
warn "$me _customer_tickets_search:\n$rtql\n" if $DEBUG;
$Tickets->FromSQL($rtql);
(@tickets);
}
+=item appointments [ STATUS ]
+
+Returns an array of hashes representing the customer's RT tickets which
+are appointments.
+
+=cut
+
+sub appointments {
+ my $self = shift;
+ my $status = ( @_ && $_[0] ) ? shift : '';
+
+ return () unless $conf->config('ticket_system');
+
+ my $queueid = $conf->config('ticket_system-appointment-queueid');
+
+ @{ FS::TicketSystem->customer_tickets( $self->custnum,
+ 99,
+ undef,
+ $status,
+ $queueid,
+ )
+ };
+}
+
# Return services representing svc_accts in customer support packages
sub support_services {
my $self = shift;
<THEAD>
<TR>
- <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Type') |h %></TH>
+% if ( $custom_field ) {
+ <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Type') |h %></TH>
+% }
<TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Date') |h %></TH>
<TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Status') |h %></TH>
<TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Owner') |h %></TH>
% if $starts > 86400;
<TR>
-
- <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
- <A HREF=<%$href%>><% 'custom field magic type' %></A>
- </TD>
+
+% if ( $custom_field ) {
+ <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
+ <A HREF=<%$href%>><% $ticket->{"CF.{$custom_field}"} |h %></A>
+ </TD>
+% }
<TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
<A HREF=<%$href%>><% $starts_pretty %></A>
#my $object = $opt{'object'};
#$object = $object->cust_svc if $object->isa('FS::svc_Common');
-my( @tickets ) = $object->tickets; #XXX but actually appointments... filter by presense of the necessary CF? RT::Appointment instead of RT::Ticket ?
+my @tickets = $object->appointments;
-my ($openlabel, $open_link, $res_link, $thing);
-$openlabel = join('/', FS::TicketSystem->statuses );
+my $custom_field = $conf->config('ticket_system-appointment-custom_field');
+
+# my ($openlabel, $open_link, $res_link, $thing);
+# $openlabel = join('/', FS::TicketSystem->statuses );
# not the nicest way to do this--FS::has_tickets_Common?
#if ( $object->isa('FS::cust_main') ) {
- $thing = 'customer';
- $open_link = FS::TicketSystem->href_customer_tickets($object->custnum);
-
- $res_link = FS::TicketSystem->href_customer_tickets(
- $object->custnum,
- { 'statuses' => [ 'resolved' ] }
- );
+# $thing = 'customer';
+# $open_link = FS::TicketSystem->href_customer_tickets($object->custnum);
+#
+# $res_link = FS::TicketSystem->href_customer_tickets(
+# $object->custnum,
+# { 'statuses' => [ 'resolved' ] }
+# );
#} elsif ( $object->isa('FS::cust_svc') ) {
#
# return '' unless $object->pkgnum;