1 package FS::part_export::rt_ticket;
3 use vars qw(@ISA %info);
6 use FS::Record qw(qsearch qsearchs);
9 use Data::Dumper 'Dumper';
11 @ISA = qw(FS::part_export);
15 my %template_select = (
20 option_values => sub {
21 %templates = (0 => '',
22 map { $_->msgnum, $_->msgname }
23 qsearch({ table => 'msg_template',
25 order_by => 'ORDER BY msgnum ASC'
28 sort keys (%templates);
32 tie my %options, 'Tie::IxHash', (
39 option_values => sub {
40 %queues = FS::TicketSystem->queues();
41 sort {$queues{$a} cmp $queues{$b}} keys %queues;
44 'insert_template' => {
48 'replace_template' => {
52 'delete_template' => {
56 'suspend_template' => {
60 'unsuspend_template' => {
69 'Template From: address',
70 'Customer\'s invoice address',
74 option_values => sub { (0, 1) },
79 'svc' => [qw( svc_acct )], #others?
81 'Create an RT ticket',
82 'options' => \%options,
85 Create a ticket in RT. The subject and body of the ticket
86 will be generated from a message template.
91 my( $self, $action, $svc ) = (shift, shift, shift);
92 my $msgnum = $self->option($action.'_template');
95 my $msg_template = FS::msg_template->by_key($msgnum);
96 return "Template $msgnum not found\n" if !$msg_template;
98 my $cust_pkg = $svc->cust_svc->cust_pkg;
99 my $cust_main = $svc->cust_svc->cust_pkg->cust_main if $cust_pkg;
100 my $custnum = $cust_main->custnum if $cust_main;
101 my $svcnum = $svc->svcnum if $action ne 'delete';
104 if ( $action eq 'replace' ) {
106 %msg = $msg_template->prepare(
107 'cust_main' => $cust_main,
108 'object' => [ $svc, $old ],
113 %msg = $msg_template->prepare(
114 'cust_main' => $cust_main,
118 my $requestor = $msg{'from'};
119 $requestor = [ $cust_main->invoicing_list_emailonly ]
120 if $cust_main and $self->option('requestor') == 1;
122 my $err_or_ticket = FS::TicketSystem->create_ticket(
123 '', #session should already exist
124 'queue' => $self->option('queue'),
125 'subject' => $msg{'subject'},
126 'requestor' => $requestor,
127 'message' => $msg{'html_body'},
128 'mime_type' => 'text/html',
129 'custnum' => $custnum,
132 if( ref($err_or_ticket) ) {
136 return $err_or_ticket;
141 my($self, $svc) = (shift, shift);
142 $self->_export_ticket('insert', $svc);
145 sub _export_replace {
146 my($self, $new, $old) = (shift, shift, shift);
147 $self->_export_ticket('replace', $new, $old);
151 my($self, $svc) = (shift, shift);
152 $self->_export_ticket('delete', $svc);
155 sub _export_suspend {
156 my($self, $svc) = (shift, shift);
157 $self->_export_ticket('suspend', $svc);
160 sub _export_unsuspend {
161 my($self, $svc) = (shift, shift);
162 $self->_export_ticket('unsuspend', $svc);