[freeside-commits] branch FREESIDE_3_BRANCH updated. f9ea5ad4c0ab886ee546012e8a6adec5a3dbf763

Christopher Burger burgerc at freeside.biz
Fri Jun 22 12:08:33 PDT 2018


The branch, FREESIDE_3_BRANCH has been updated
       via  f9ea5ad4c0ab886ee546012e8a6adec5a3dbf763 (commit)
       via  3ffc2c0afc7d48282449be768bd2c36c2410e3c9 (commit)
       via  63681a4b7352cab8402cb732dc691d35c01d21e2 (commit)
       via  1050eff6d30a010c88bbd2e4aa28f1898b059ee3 (commit)
       via  c883d44a1e9a48505ba2427cf17d39595c38092c (commit)
      from  c2b9c73711f245627492595320e18d3d986d61a6 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit f9ea5ad4c0ab886ee546012e8a6adec5a3dbf763
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Fri Jun 22 14:55:34 2018 -0400

    RT# 73964 - V3 fixes for backport

diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm
index aa0395a4a..ccd1b84c9 100644
--- a/FS/FS/cust_main_Mixin.pm
+++ b/FS/FS/cust_main_Mixin.pm
@@ -487,7 +487,7 @@ sub email_search_result {
       if (!@classes) {
         @classes = ( 'invoice' );
       }
-      my @to = $cust_main->contact_list_email(@classes);
+      my @to = $to ? split(',', $to) : $cust_main->contact_list_email(@classes);
       next if !@to;
 
       %message = (
diff --git a/httemplate/misc/email-customers.html b/httemplate/misc/email-customers.html
index 1c756cdb9..1c22f8ffd 100644
--- a/httemplate/misc/email-customers.html
+++ b/httemplate/misc/email-customers.html
@@ -46,7 +46,6 @@ should be used to set msgnum or from/subject/html_body cgi params
 <INPUT TYPE="hidden" NAME="search" VALUE="<% encode_base64(nfreeze(\%search)) %>">
 <INPUT TYPE="hidden" NAME="popup" VALUE="<% $popup %>">
 <INPUT TYPE="hidden" NAME="url" VALUE="<% $url | h %>">
-<INPUT TYPE="hidden" NAME="emailtovoice_contact" VALUE="<% scalar($cgi->param('emailtovoice_contact')) |h %>">
 <INPUT TYPE="hidden" NAME="custnum" VALUE="<% scalar($cgi->param('custnum')) |h %>">
 
 % if ( $cgi->param('action') eq 'send' ) { 
@@ -72,6 +71,7 @@ should be used to set msgnum or from/subject/html_body cgi params
 
     <TABLE BGCOLOR="#cccccc" CELLSPACING=0>
     <INPUT TYPE="hidden" NAME="msgnum" VALUE="<% scalar($cgi->param('msgnum')) %>">
+    <INPUT TYPE="hidden" NAME="emailtovoice_contact" VALUE="<% scalar $cgi->param('emailtovoice_contact') |h %>">
 %   if ( $msg_template ) {
       <% include('/elements/tr-fixed.html',
                    'label'      => 'Template:',
@@ -172,7 +172,7 @@ Template:
    <div>
      <INPUT TYPE="checkbox" NAME="emailtovoice"  ID="emailtovoice" VALUE="ON" onclick="toggleDiv(this)">Email to voice
    </div>
-   <div id="emailtovoicediv" style="display:none";>
+   <div id="emailtovoicediv" style="display:none">
 
       <& /elements/select-cust_phone.html,
                'cust_num'     => $cgi->param('custnum'),
@@ -277,6 +277,7 @@ my $agent_virt_agentnum = $cgi->param('agent_virt_agentnum') || '';
 
 my $popup = $cgi->param('popup');
 my $url   = $cgi->param('url');
+if (!$url && $cgi->param('custnum')) { $url = $fsurl."view/cust_main.cgi?".$cgi->param('custnum'); }
 my $pdest = { 'message' => "Notice sent" };
 $pdest->{'url'} = $cgi->param('url') if $url;
 
@@ -347,24 +348,40 @@ if ( $cgi->param('action') eq 'preview' ) {
     my %message = $msg_template->prepare(%msgopts);
     ($from, $subject, $html_body) = @message{'from', 'subject', 'html_body'};
   }
+}
+
+if ($cgi->param('action')) {
 
   # contact_class_X params in preview
-  foreach my $param ( $cgi->param ) {
-    if ($cgi->param('emailtovoice_contact')) {
+  if ($cgi->param('emailtovoice_contact')) {
       $email_to = $cgi->param('emailtovoice_contact') . '@' . $send_to_domain;
       push @contact_classnum, 'emailtovoice';
       push @contact_classname, $email_to;
-    }
-    if ( $param =~ /^contact_class_(\w+)$/ ) {
-      push @contact_classnum, $1;
-      if ( $1 eq 'invoice' ) {
+  }
+  elsif ($cgi->param('to_contact_classnum')) {
+    foreach my $c (split(/,/, $cgi->param('to_contact_classnum'))) {
+      push @contact_classnum, $c;
+      if ( $c eq 'invoice' ) {
         push @contact_classname, 'Invoice recipients';
       } else {
-        my $contact_class = FS::contact_class->by_key($1);
+        my $contact_class = FS::contact_class->by_key($c);
         push @contact_classname, encode_entities($contact_class->classname);
       }
     }
   }
+  else {
+    foreach my $param ( $cgi->param ) {
+      if ( $param =~ /^contact_class_(\w+)$/ ) {
+        push @contact_classnum, $1;
+        if ( $1 eq 'invoice' ) {
+          push @contact_classname, 'Invoice recipients';
+        } else {
+          my $contact_class = FS::contact_class->by_key($1);
+          push @contact_classname, encode_entities($contact_class->classname);
+        }
+      }
+    }
+  }
 
 }
 

commit 3ffc2c0afc7d48282449be768bd2c36c2410e3c9
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Mon Sep 11 11:17:52 2017 -0400

    RT# 73964 - updated config description again to an even better description of the email-to-voice_domain configuration option

diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index c22dec026..d2351c005 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -1014,7 +1014,7 @@ my $validate_email = sub { $_[0] =~
   {
     'key'         => 'email-to-voice_domain',
     'section'     => 'email_to_voice_services',
-    'description' => 'The domain name used to send emails to a 3rd party email to voice service.  You will be able to select a phone number to append to this domain on the email customer page or when using the email to voice billing event action.',
+    'description' => 'The domain name that phone numbers will be attached to for sending email to voice emails via a 3rd party email to voice service.  You will get this domain from your email to voice service provider.  This is utilized on the email customer page or when using the email to voice billing event action.  There you will be able to select the phone number for the email to voice service.',
     'type'        => 'text',
     'per_agent'   => 1,
   },

commit 63681a4b7352cab8402cb732dc691d35c01d21e2
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Tue Aug 29 11:50:18 2017 -0400

    RT# 73964 - updated config description to better explain the email-to-voice_domain configuration option

diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 1e9a5f48d..c22dec026 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -1014,7 +1014,7 @@ my $validate_email = sub { $_[0] =~
   {
     'key'         => 'email-to-voice_domain',
     'section'     => 'email_to_voice_services',
-    'description' => 'The Domain to send email to voice to',
+    'description' => 'The domain name used to send emails to a 3rd party email to voice service.  You will be able to select a phone number to append to this domain on the email customer page or when using the email to voice billing event action.',
     'type'        => 'text',
     'per_agent'   => 1,
   },
diff --git a/FS/FS/part_event/Action/notice_to_emailtovoice.pm b/FS/FS/part_event/Action/notice_to_emailtovoice.pm
index a3a5e9824..3eaa73850 100644
--- a/FS/FS/part_event/Action/notice_to_emailtovoice.pm
+++ b/FS/FS/part_event/Action/notice_to_emailtovoice.pm
@@ -33,7 +33,7 @@ sub option_fields {
                                              'fax'     => 'Fax #',
                                              'daytime' => 'Day Time #',
                                            },
-                     'post_field_label' => "@", # . $to_domain ,
+                     'post_field_label' => ' <font color="red">Make sure you have setup your email-to-voice_domain config option in your Configuration settings.</font>',
                    },
 
     'msgnum'    => { 'label'    => 'Template',

commit 1050eff6d30a010c88bbd2e4aa28f1898b059ee3
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Tue Aug 22 10:36:04 2017 -0400

    RT# 73964 - Changed global config send-to-domain to email-to-voice_domain

diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 31a5ec89d..1e9a5f48d 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -1012,7 +1012,7 @@ my $validate_email = sub { $_[0] =~
   },
 
   {
-    'key'         => 'send-to-domain',
+    'key'         => 'email-to-voice_domain',
     'section'     => 'email_to_voice_services',
     'description' => 'The Domain to send email to voice to',
     'type'        => 'text',
diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm
index acce28c9c..aa0395a4a 100644
--- a/FS/FS/cust_main_Mixin.pm
+++ b/FS/FS/cust_main_Mixin.pm
@@ -406,7 +406,7 @@ sub email_search_result {
   my($class, $param) = @_;
 
   my $conf = FS::Conf->new;
-  my $send_to_domain = $conf->config('send-to-domain');
+  my $send_to_domain = $conf->config('email-to-voice_domain');
 
   my $msgnum = $param->{msgnum};
   my $from = delete $param->{from};
diff --git a/FS/FS/part_event/Action/notice_to_emailtovoice.pm b/FS/FS/part_event/Action/notice_to_emailtovoice.pm
index ae766e81b..a3a5e9824 100644
--- a/FS/FS/part_event/Action/notice_to_emailtovoice.pm
+++ b/FS/FS/part_event/Action/notice_to_emailtovoice.pm
@@ -23,7 +23,7 @@ sub eventtable_hashref {
 sub option_fields {
 
   #my $conf = new FS::Conf;
-  #my $to_domain = $conf->config('send-to-domain');
+  #my $to_domain = $conf->config('email-to-voice_domain');
 
 (
     'to_name'   => { 'label'            => 'Address To',
@@ -33,7 +33,7 @@ sub option_fields {
                                              'fax'     => 'Fax #',
                                              'daytime' => 'Day Time #',
                                            },
-                     'post_field_label' => "@" , #. $to_domain ,
+                     'post_field_label' => "@", # . $to_domain ,
                    },
 
     'msgnum'    => { 'label'    => 'Template',
@@ -53,7 +53,7 @@ sub do_action {
   my( $self, $object ) = @_;
 
   my $conf = new FS::Conf;
-  my $to_domain = $conf->config('send-to-domain')
+  my $to_domain = $conf->config('email-to-voice_domain')
     or die "Can't send notice with out send-to-domain, being set in global config \n";
 
   my $cust_main = $self->cust_main($object);
diff --git a/httemplate/misc/email-customers.html b/httemplate/misc/email-customers.html
index 6e37d74fc..1c756cdb9 100644
--- a/httemplate/misc/email-customers.html
+++ b/httemplate/misc/email-customers.html
@@ -263,7 +263,7 @@ die "access denied"
 my $conf = FS::Conf->new;
 my @no_search_fields = qw( action table from subject html_body text_body popup url );
 
-my $send_to_domain = $conf->config('send-to-domain');
+my $send_to_domain = $conf->config('email-to-voice_domain');
 
 my $form_action = $opt{'form_action'} || 'email-customers.html';
 my $process_url = $opt{'process_url'} || 'process/email-customers.html';

commit c883d44a1e9a48505ba2427cf17d39595c38092c
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Wed Aug 16 10:55:56 2017 -0400

    RT# 73964 - Added biling event action to send an email to phone nunber, and updated email a notice to customer to allow emailing to phone number for email_to_voice service.
    
    Conflicts:
            FS/FS/cust_main_Mixin.pm
            httemplate/config/config-view.cgi
            httemplate/misc/email-customers.html

diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index c21d69244..31a5ec89d 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -1012,6 +1012,14 @@ my $validate_email = sub { $_[0] =~
   },
 
   {
+    'key'         => 'send-to-domain',
+    'section'     => 'email_to_voice_services',
+    'description' => 'The Domain to send email to voice to',
+    'type'        => 'text',
+    'per_agent'   => 1,
+  },
+
+  {
     'key'         => 'next-bill-ignore-time',
     'section'     => 'billing',
     'description' => 'Ignore the time portion of next bill dates when billing, matching anything from 00:00:00 to 23:59:59 on the billing day.',
diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm
index 28d894b1b..acce28c9c 100644
--- a/FS/FS/cust_main_Mixin.pm
+++ b/FS/FS/cust_main_Mixin.pm
@@ -405,14 +405,21 @@ use Digest::SHA qw(sha1); # for duplicate checking
 sub email_search_result {
   my($class, $param) = @_;
 
+  my $conf = FS::Conf->new;
+  my $send_to_domain = $conf->config('send-to-domain');
+
   my $msgnum = $param->{msgnum};
   my $from = delete $param->{from};
   my $subject = delete $param->{subject};
   my $html_body = delete $param->{html_body};
   my $text_body = delete $param->{text_body};
   my $to_contact_classnum = delete $param->{to_contact_classnum};
+  my $emailtovoice_name = delete $param->{emailtovoice_contact};
+
   my $error = '';
 
+  my $to = $emailtovoice_name . '@' . $send_to_domain unless !$emailtovoice_name;
+
   my $job = delete $param->{'job'}
     or die "email_search_result must run from the job queue.\n";
   
@@ -458,12 +465,16 @@ sub email_search_result {
       next; # unlinked object; nothing else we can do
     }
 
+    my %to = {};
+    if ($to) { $to{'to'} = $to; }
+
     if ( $msg_template ) {
       # Now supports other context objects.
       %message = $msg_template->prepare(
         'cust_main' => $cust_main,
         'object'    => $obj,
         'to_contact_classnum' => $to_contact_classnum,
+        %to
       );
 
     } else {
@@ -490,7 +501,7 @@ sub email_search_result {
     } #if $msg_template
 
     # For non-cust_main searches, we avoid duplicates based on message
-    # body text.  
+    # body text.
     my $unique = $cust_main->custnum;
     $unique .= sha1($message{'text_body'}) if $class ne 'FS::cust_main';
     if( $sent_to{$unique} ) {
diff --git a/FS/FS/part_event/Action/notice_to_emailtovoice.pm b/FS/FS/part_event/Action/notice_to_emailtovoice.pm
new file mode 100644
index 000000000..ae766e81b
--- /dev/null
+++ b/FS/FS/part_event/Action/notice_to_emailtovoice.pm
@@ -0,0 +1,84 @@
+package FS::part_event::Action::notice_to_emailtovoice;
+
+use strict;
+use base qw( FS::part_event::Action );
+use FS::Record qw( qsearchs );
+use FS::msg_template;
+use FS::Conf;
+
+sub description { 'Email a email to voice notice'; }
+
+sub eventtable_hashref {
+    {
+      'cust_main'      => 1,
+      'cust_bill'      => 1,
+      'cust_pkg'       => 1,
+      'cust_pay'       => 1,
+      'cust_pay_batch' => 1,
+      'cust_statement' => 1,
+      'svc_acct'       => 1,
+    };
+}
+
+sub option_fields {
+
+  #my $conf = new FS::Conf;
+  #my $to_domain = $conf->config('send-to-domain');
+
+(
+    'to_name'   => { 'label'            => 'Address To',
+                     'type'             => 'select',
+                     'options'          => [ 'mobile', 'fax', 'daytime' ],
+                     'option_labels'    => { 'mobile'  => 'Mobile Phone #',
+                                             'fax'     => 'Fax #',
+                                             'daytime' => 'Day Time #',
+                                           },
+                     'post_field_label' => "@" , #. $to_domain ,
+                   },
+
+    'msgnum'    => { 'label'    => 'Template',
+                     'type'     => 'select-table',
+                     'table'    => 'msg_template',
+                     'name_col' => 'msgname',
+                     'hashref'  => { disabled => '' },
+                     'disable_empty' => 1,
+                },
+  );
+
+}
+
+sub default_weight { 56; } #?
+
+sub do_action {
+  my( $self, $object ) = @_;
+
+  my $conf = new FS::Conf;
+  my $to_domain = $conf->config('send-to-domain')
+    or die "Can't send notice with out send-to-domain, being set in global config \n";
+
+  my $cust_main = $self->cust_main($object);
+
+  my $msgnum = $self->option('msgnum');
+  my $name = $self->option('to_name');
+
+  my $msg_template = qsearchs('msg_template', { 'msgnum' => $msgnum } )
+      or die "Template $msgnum not found";
+
+  my $to_name = $cust_main->$name
+    or die "Can't send notice with out " . $cust_main->$name . " number set";
+
+  ## remove - from phone number
+  $to_name =~ s/-//g;
+
+  #my $to = $to_name . '@' . $self->option('to_domain');
+  my $to = $to_name . '@' . $to_domain;
+  
+  $msg_template->send(
+    'to'        => $to,
+    'cust_main' => $cust_main,
+    'object'    => $object,
+  );
+
+}
+
+1;
diff --git a/httemplate/config/config-view.cgi b/httemplate/config/config-view.cgi
index 7b2e55a55..7a6191171 100644
--- a/httemplate/config/config-view.cgi
+++ b/httemplate/config/config-view.cgi
@@ -420,8 +420,9 @@ my @deleteable = qw( invoice_latexreturnaddress invoice_htmlreturnaddress );
 my %deleteable = map { $_ => 1 } @deleteable;
 
 my @sections = (qw(
-    required billing invoicing notification UI API self-service ticketing
-    network_monitoring username password session shell BIND telephony
+    required billing invoicing notification email_to_voice_services UI 
+    API self-service ticketing network_monitoring username password 
+    session shell BIND telephony
   ), '', 'deprecated'
 );
 
diff --git a/httemplate/elements/select-cust_phone.html b/httemplate/elements/select-cust_phone.html
new file mode 100644
index 000000000..94cd41322
--- /dev/null
+++ b/httemplate/elements/select-cust_phone.html
@@ -0,0 +1,31 @@
+<SELECT NAME="<% $opt{'field_name'} %>" ID="<% $opt{'field_name'} %>">
+
+     <OPTION VALUE="" selected="selected">Select a phone number
+
+% foreach $p (@$phone_types) {
+	<OPTION VALUE="<% $phones_formatted{$p} %>"><% $p |h%> (<% $cust_phones->$p |h %>)		
+%}
+
+</SELECT>
+
+<%init>
+
+my %opt = @_;
+my $cust_num     = $opt{'cust_num'};
+my $phone_types  = $opt{'phone_types'};
+my $format 	  = $opt{'format'};
+
+my $cust_phones = qsearchs('cust_main', { 'custnum' => $cust_num })
+  or die 'unknown custnum' . $cust_num;
+
+my %phones_formatted = map {
+	$_ => format_phone_number($cust_phones->$_, $format)
+} @$phone_types;
+
+sub format_phone_number {
+	my ($n, $f) = @_;
+	if ($f eq 'xxxxxxxxxx') { $n =~ s/-//g; }	
+	return $n;
+}
+
+</%init>
\ No newline at end of file
diff --git a/httemplate/elements/select.html b/httemplate/elements/select.html
index 59010c140..9dd4aec2c 100644
--- a/httemplate/elements/select.html
+++ b/httemplate/elements/select.html
@@ -41,7 +41,7 @@
 %
 % }
 
-</SELECT>
+</SELECT> <% $opt{'post_field_label'} %>
 
 % }
 <%init>
diff --git a/httemplate/elements/tr-select-cust_phone.html b/httemplate/elements/tr-select-cust_phone.html
new file mode 100644
index 000000000..cf88392b0
--- /dev/null
+++ b/httemplate/elements/tr-select-cust_phone.html
@@ -0,0 +1,12 @@
+  <TR>
+    <TD ALIGN="right"><% $opt{'label'} || 'Customer Phones' %></TD>
+    <TD>
+      <% include( '/elements/select-cust_phone.html', %opt ) %>
+    </TD>
+  </TR>
+
+<%init>
+
+my %opt = @_;
+
+</%init>
diff --git a/httemplate/misc/email-customers.html b/httemplate/misc/email-customers.html
index b8ba99705..6e37d74fc 100644
--- a/httemplate/misc/email-customers.html
+++ b/httemplate/misc/email-customers.html
@@ -46,6 +46,8 @@ should be used to set msgnum or from/subject/html_body cgi params
 <INPUT TYPE="hidden" NAME="search" VALUE="<% encode_base64(nfreeze(\%search)) %>">
 <INPUT TYPE="hidden" NAME="popup" VALUE="<% $popup %>">
 <INPUT TYPE="hidden" NAME="url" VALUE="<% $url | h %>">
+<INPUT TYPE="hidden" NAME="emailtovoice_contact" VALUE="<% scalar($cgi->param('emailtovoice_contact')) |h %>">
+<INPUT TYPE="hidden" NAME="custnum" VALUE="<% scalar($cgi->param('custnum')) |h %>">
 
 % if ( $cgi->param('action') eq 'send' ) { 
 
@@ -55,13 +57,12 @@ should be used to set msgnum or from/subject/html_body cgi params
     <& /elements/progress-init.html,
                  'OneTrueForm',
                  [ qw( search table from subject html_body text_body
-                        msgnum to_contact_classnum ) ],
+                        msgnum to_contact_classnum emailtovoice_contact custnum ) ],
                  $process_url,
                  $pdest,
     &>
 
 % } elsif ( $cgi->param('action') eq 'preview' ) {
-
     <INPUT TYPE="hidden" NAME="to_contact_classnum" VALUE="<% join(',', @contact_classnum) %>">
     <FONT SIZE="+2">Preview notice</FONT>
 
@@ -151,7 +152,11 @@ Template:
     &>
     <BR>
 % # select destination contact classes
-Send to contacts:
+<TABLE CELLSPACING=0 id="send_to_contacts_table">
+<TR>
+ <TD>Send to contacts:</TD>
+ <TD>
+   <div id="contactclassesdiv">
   <& /elements/checkboxes.html,
     'style'               => 'display: inline; vertical-align: top',
     'disable_links'       => 1,
@@ -162,6 +167,24 @@ Send to contacts:
       $name eq 'invoice' #others default to unchecked
     },
   &>
+   </div>
+% if ($send_to_domain) {
+   <div>
+     <INPUT TYPE="checkbox" NAME="emailtovoice"  ID="emailtovoice" VALUE="ON" onclick="toggleDiv(this)">Email to voice
+   </div>
+   <div id="emailtovoicediv" style="display:none";>
+
+      <& /elements/select-cust_phone.html,
+               'cust_num'     => $cgi->param('custnum'),
+               'field_name'   => 'emailtovoice_contact',
+               'format'       => 'xxxxxxxxxx',
+               'phone_types'  => [ 'daytime', 'night', 'fax', 'mobile' ],
+      &>@<% $send_to_domain |h %>
+   </div>
+% }
+ </TD>
+</TR>
+</TABLE>
 <BR>
 % # if sending a one-off message, show a form to edit it
   <TABLE BGCOLOR="#cccccc" CELLSPACING=0 WIDTH="100%" id="table_no_template">
@@ -199,6 +222,7 @@ Send to contacts:
 %#Substitution vars:
 
     <INPUT TYPE="hidden" NAME="action" VALUE="preview">
+    <INPUT TYPE="hidden" NAME="custnum" VALUE="<% scalar($cgi->param('custnum')) |h %>">
     <INPUT TYPE="submit" VALUE="Preview notice">
 
 % } #end not action or alternate form
@@ -211,6 +235,18 @@ Send to contacts:
     </SCRIPT>
 % }
 
+<SCRIPT TYPE="text/javascript">
+function toggleDiv(obj) {
+  var box_contactclasses = document.getElementById('contactclassesdiv');
+  var box_emailtovoice = document.getElementById('emailtovoicediv');
+
+  box_emailtovoice.style.display = (box_emailtovoice.style.display == 'none') ? 'block' : 'none';
+  document.getElementById('emailtovoice_contact').options[0].selected=true;
+
+  box_contactclasses.style.display = (box_contactclasses.style.display == 'none') ? 'block' : 'none';
+}
+</SCRIPT>
+
 <& /elements/footer.html &>
 
 <%init>
@@ -219,12 +255,16 @@ my %opt = @_;
 
 $opt{'acl'} ||= 'Bulk send customer notices';
 
+my $email_to;
+
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right($opt{'acl'});
 
 my $conf = FS::Conf->new;
 my @no_search_fields = qw( action table from subject html_body text_body popup url );
 
+my $send_to_domain = $conf->config('send-to-domain');
+
 my $form_action = $opt{'form_action'} || 'email-customers.html';
 my $process_url = $opt{'process_url'} || 'process/email-customers.html';
 my $title = $opt{'title'} || 'Send customer notices';
@@ -310,6 +350,11 @@ if ( $cgi->param('action') eq 'preview' ) {
 
   # contact_class_X params in preview
   foreach my $param ( $cgi->param ) {
+    if ($cgi->param('emailtovoice_contact')) {
+      $email_to = $cgi->param('emailtovoice_contact') . '@' . $send_to_domain;
+      push @contact_classnum, 'emailtovoice';
+      push @contact_classname, $email_to;
+    }
     if ( $param =~ /^contact_class_(\w+)$/ ) {
       push @contact_classnum, $1;
       if ( $1 eq 'invoice' ) {
@@ -327,10 +372,12 @@ if ( $cgi->param('action') eq 'preview' ) {
 my @contact_checkboxes = (
   [ 'invoice' => { label => 'Invoice recipients' } ]
 );
+
 foreach my $class (qsearch('contact_class', { disabled => '' })) {
   push @contact_checkboxes, [
     $class->classnum,
     { label => $class->classname }
   ];
 }
+
 </%init>

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/Conf.pm                                     |  8 +++
 FS/FS/cust_main_Mixin.pm                          | 15 +++-
 FS/FS/part_event/Action/notice_to_emailtovoice.pm | 84 +++++++++++++++++++++++
 httemplate/config/config-view.cgi                 |  5 +-
 httemplate/elements/select-cust_phone.html        | 31 +++++++++
 httemplate/elements/select.html                   |  2 +-
 httemplate/elements/tr-select-cust_phone.html     | 12 ++++
 httemplate/misc/email-customers.html              | 80 ++++++++++++++++++---
 8 files changed, 224 insertions(+), 13 deletions(-)
 create mode 100644 FS/FS/part_event/Action/notice_to_emailtovoice.pm
 create mode 100644 httemplate/elements/select-cust_phone.html
 create mode 100644 httemplate/elements/tr-select-cust_phone.html




More information about the freeside-commits mailing list