1 package FS::part_export::rt_ticket;
3 use vars qw(@ISA %info);
6 use FS::Record qw(qsearch qsearchs);
10 @ISA = qw(FS::part_export);
14 my %template_select = (
20 option_values => sub {
21 %templates = (0 => '',
22 map { $_->msgnum, $_->msgname }
23 qsearch({ table => 'msg_template',
24 hashref => { disabled => '' },
25 order_by => 'ORDER BY msgnum ASC'
28 sort keys (%templates);
38 option_values => sub {
39 return (0) unless FS::Conf->new->config('ticket_system');
40 %queues = (0 => '', FS::TicketSystem->queues());
41 sort {$queues{$a} cmp $queues{$b}} keys %queues;
45 tie my %options, 'Tie::IxHash', (
50 <TR><TH></TH><TH>Queue</TH><TH>Template</TH></TR>
51 <TR><TD>New service</TD><TD>',
55 'insert_template' => {
63 <TR><TD>Delete</TD><TD>',
67 'delete_template' => {
75 <TR><TD>Modify</TD><TD>',
79 'replace_template' => {
87 <TR><TD>Suspend</TD><TD>',
91 'suspend_template' => {
97 'unsuspend_queue' => {
99 <TR><TD>Unsuspend</TD><TD>',
103 'unsuspend_template' => {
112 label => 'Requestor',
114 option_label => sub {
116 'Template From: address',
117 'Customer\'s invoice address',
121 option_values => sub { (0, 1) },
126 'svc' => [qw( svc_acct svc_broadband svc_phone svc_domain )],
128 'Create an RT ticket',
129 'options' => \%options,
133 Create a ticket in RT. The subject and body of the ticket
134 will be generated from a message template.'
138 my( $self, $action, $svc ) = (shift, shift, shift);
139 my $conf = new FS::Conf;
140 die "rt_ticket export - no ticket system configured"
141 unless $conf->config('ticket_system');
143 FS::TicketSystem->init();
145 my $msgnum = $self->option($action.'_template');
148 my $queue = $self->option($action.'_queue');
151 my $msg_template = FS::msg_template->by_key($msgnum);
152 return "Template $msgnum not found\n" if !$msg_template;
154 my $cust_pkg = $svc->cust_svc->cust_pkg;
155 my $cust_main = $svc->cust_svc->cust_pkg->cust_main if $cust_pkg;
156 my $custnum = $cust_main->custnum if $cust_main;
157 my $svcnum = $svc->svcnum if $action ne 'delete';
160 if ( $action eq 'replace' ) {
162 %msg = $msg_template->prepare(
163 'cust_main' => $cust_main,
164 'object' => [ $svc, $old ],
169 %msg = $msg_template->prepare(
170 'cust_main' => $cust_main,
174 my $requestor = $msg{'from'};
175 $requestor = [ $cust_main->invoicing_list_emailonly ]
176 if $cust_main and $self->option('requestor') == 1;
178 my $err_or_ticket = FS::TicketSystem->create_ticket(
179 '', #session should already exist
181 'subject' => $msg{'subject'},
182 'requestor' => $requestor,
183 'message' => $msg{'html_body'},
184 'mime_type' => 'text/html',
185 'custnum' => $custnum,
188 if( ref($err_or_ticket) ) {
192 return $err_or_ticket;
197 my($self, $svc) = (shift, shift);
198 $self->_export_ticket('insert', $svc);
201 sub _export_replace {
202 my($self, $new, $old) = (shift, shift, shift);
203 $self->_export_ticket('replace', $new, $old);
207 my($self, $svc) = (shift, shift);
208 $self->_export_ticket('delete', $svc);
211 sub _export_suspend {
212 my($self, $svc) = (shift, shift);
213 $self->_export_ticket('suspend', $svc);
216 sub _export_unsuspend {
217 my($self, $svc) = (shift, shift);
218 $self->_export_ticket('unsuspend', $svc);