default to a session cookie instead of setting an explicit timeout, weird timezone...
[freeside.git] / FS / FS / part_event / Action / rt_ticket.pm
1 package FS::part_event::Action::rt_ticket;
2
3 use strict;
4 use base qw( FS::part_event::Action );
5 use FS::Record qw( qsearchs );
6 use FS::msg_template;
7
8 sub description { 'Open an RT ticket for the customer' }
9
10 #need to be valid for msg_template substitution
11 sub eventtable_hashref {
12     { 'cust_main'      => 1,
13       'cust_bill'      => 1,
14       'cust_pkg'       => 1,
15       'cust_pay'       => 1,
16       'svc_acct'       => 1,
17     };
18 }
19
20 sub option_fields {
21   (
22     'msgnum'    => { 'label'    => 'Template',
23                      'type'     => 'select-table',
24                      'table'    => 'msg_template',
25                      'name_col' => 'msgname',
26                      'hashref'  => { disabled => '', msgclass => 'email' },
27                      'disable_empty' => 1,
28                    },
29     'queueid'   => { 'label' => 'Queue',
30                      'type'  => 'select-rt-queue',
31                    },
32     'requestor' => { 'label'   => 'Requestor',
33                      'type'    => 'select',
34                      'options' => [ 0, 1 ],
35                      'labels'  => {
36                        0 => 'Customer\'s invoice address',
37                        1 => 'Template From: address',
38                      },
39                    },
40
41   );
42 }
43
44 sub default_weight { 59; }
45
46 sub do_action {
47
48   my( $self, $object ) = @_;
49
50   my $cust_main = $self->cust_main($object)
51     or die "Could not load cust_main";
52
53   my $msgnum = $self->option('msgnum');
54   my $msg_template = qsearchs('msg_template', { 'msgnum' => $msgnum } )
55     or die "Template $msgnum not found";
56
57   my $queueid = $self->option('queueid')
58     or die "No queue specified";
59
60   # technically this only works if create_ticket is implemented,
61   # and it is only implemented in RT_Internal,
62   # but we can let create_ticket throw that error
63   my $conf = new FS::Conf;
64   die "rt_ticket event - no ticket system configured"
65     unless $conf->config('ticket_system');
66   
67   FS::TicketSystem->init();
68
69   my $cust_msg = $msg_template->prepare(
70     'cust_main' => $cust_main,
71     'object'    => $object,
72   );
73
74   my $subject = $cust_msg->entity->head->get('Subject');
75   chomp($subject);
76
77   my $requestor = $self->option('requestor')
78                 ? $msg_template->from_addr
79                 : [ $cust_main->invoicing_list_emailonly ];
80
81   my $svcnum = ref($object) eq 'FS::svc_acct'
82              ? $object->svcnum
83              : undef;
84
85   my $err_or_ticket = FS::TicketSystem->create_ticket(
86     '', #session should already exist
87     'queue'     => $queueid,
88     'subject'   => $subject,
89     'requestor' => $requestor,
90     'message'   => $cust_msg->preview,
91     'mime_type' => 'text/html',
92     'custnum'   => $cust_main->custnum,
93     'svcnum'    => $svcnum,
94   );
95   die $err_or_ticket unless ref($err_or_ticket);
96   return '';
97
98 }
99
100 1;