send_email export, RT#10884
[freeside.git] / FS / FS / part_export / send_email.pm
diff --git a/FS/FS/part_export/send_email.pm b/FS/FS/part_export/send_email.pm
new file mode 100644 (file)
index 0000000..05f6236
--- /dev/null
@@ -0,0 +1,160 @@
+package FS::part_export::send_email;
+
+use vars qw(@ISA %info);
+use Tie::IxHash;
+use FS::part_export;
+use FS::Record qw(qsearch qsearchs);
+use FS::Conf;
+use FS::msg_template;
+use FS::Misc qw(send_email);
+
+@ISA = qw(FS::part_export);
+
+my %templates;
+my %template_select = (
+  type          => 'select',
+  freeform      => 1,
+  option_label  => sub {
+    $templates{$_[0]};
+  },
+  option_values => sub {
+    %templates = (0 => '',
+      map { $_->msgnum, $_->msgname } 
+      qsearch({ table => 'msg_template',
+                hashref => {},
+                order_by => 'ORDER BY msgnum ASC'
+              })
+    );
+    sort keys (%templates);
+  },
+);
+
+tie my %options, 'Tie::IxHash', (
+  'insert_template' => {
+    before  => '
+<TR><TD COLSPAN=2>
+<TABLE>
+  <TR><TH></TH><TH>Template</TH></TR>
+  <TR><TD>New service</TD><TD>',
+    %template_select,
+    after   => '</TD></TR>
+',
+  },
+  'delete_template' => {
+    before  => '
+  <TR><TD>Delete</TD><TD>',
+    %template_select,
+    after   => '</TD></TR>
+',
+  },
+  'replace_template' => {
+    before => '
+  <TR><TD>Modify</TD><TD>',
+    %template_select,
+    after   => '</TD></TR>
+',
+  },
+  'suspend_template' => {
+    before  => '
+  <TR><TD>Suspend</TD><TD>',
+    %template_select,
+    after   => '</TD></TR>
+',
+  },
+  'unsuspend_template' => {
+    before  => '
+  <TR><TD>Unsuspend</TD><TD>',
+    %template_select,
+    after   => '</TD></TR>
+  </TABLE>
+</TD></TR>',
+  },
+  'to_customer' => {
+    label   => 'Send to customer',
+    type    => 'checkbox',
+  },
+  'to_address' => {
+    label => 'Send to other address: ',
+    type      => 'text',
+  },
+);
+
+%info = (
+  'svc'      => [qw( svc_acct svc_broadband svc_phone svc_domain )],
+  'desc'     =>
+  'Send an email message',
+  'options'  => \%options,
+  'nodomain' => '',
+  'notes'    => ' 
+  Send an email message.  The subject and body of the message
+  will be generated from a message template.'
+);
+
+sub _export {
+  my( $self, $action, $svc ) = (shift, shift, shift);
+  my $conf = new FS::Conf;
+
+  my $msgnum = $self->option($action.'_template');
+  return if !$msgnum;
+
+  my $msg_template = FS::msg_template->by_key($msgnum);
+  return "Template $msgnum not found\n" if !$msg_template;
+
+  my $cust_pkg = $svc->cust_svc->cust_pkg;
+  my $cust_main = $svc->cust_svc->cust_pkg->cust_main if $cust_pkg;
+  my $custnum = $cust_main->custnum if $cust_main;
+  my $svcnum = $svc->svcnum if $action ne 'delete';
+
+  my @to = split(',', $self->option('to_address') || '');
+  push @to, $cust_main->invoicing_list_emailonly 
+    if $self->option('to_customer') and $cust_main;
+  if ( !@to ) {
+    warn 'No destination address for send_email export: custnum '.$cust_main->custnum;
+    # warn, don't die, but also avoid sending the template with _no_ 'to'=> 
+    # param, which would send to the customer by default.
+    return;
+  }
+
+  if ( $action eq 'replace' ) {
+    my $old = shift;
+    return $msg_template->send(
+      'cust_main' => $cust_main,
+      'object'    => [ $svc, $old ],
+      'to'        => join(',', @to),
+    );
+  }
+  else {
+    return $msg_template->send(
+      'cust_main' => $cust_main,
+      'object'    => $svc,
+      'to'        => join(',', @to),
+    );
+  }
+}
+
+sub _export_insert {
+  my($self, $svc) = (shift, shift);
+  $self->_export('insert', $svc);
+}
+
+sub _export_replace {
+  my($self, $new, $old) = (shift, shift, shift);
+  $self->_export('replace', $new, $old);
+}
+
+sub _export_delete {
+  my($self, $svc) = (shift, shift);
+  $self->_export('delete', $svc);
+}
+
+sub _export_suspend {
+  my($self, $svc) = (shift, shift);
+  $self->_export('suspend', $svc);
+}
+
+sub _export_unsuspend {
+  my($self, $svc) = (shift, shift);
+  $self->_export('unsuspend', $svc);
+}
+
+1;