X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fmisc%2Femail-customers.html;h=cf3ab1b48ad0b3ae37aa283c19d9653803ce24e9;hp=4520c75145b0a346196d7e5d13de2087f63f3518;hb=1fe87434632f2627de487ca2aed6cfadea2c6061;hpb=e803d5f00368e951f7a4b82d5d390b53c4a6c827 diff --git a/httemplate/misc/email-customers.html b/httemplate/misc/email-customers.html index 4520c7514..cf3ab1b48 100644 --- a/httemplate/misc/email-customers.html +++ b/httemplate/misc/email-customers.html @@ -180,11 +180,11 @@ Template: # Called for each checkbox # Return true to default as checked, false as unchecked my($cgi, $name) = @_; - $name eq 'message' + exists $dest_ischecked{$name}; }, &> -% if ($send_to_domain) { +% if ($send_to_domain && $cgi->param('custnum')) {
Email to voice
@@ -302,6 +302,8 @@ my $process_url = $opt{'process_url'} || 'process/email-customers.html'; my $title = $opt{'title'} || 'Send customer notices'; push( @no_search_fields, @{$opt{'no_search_fields'}} ) if $opt{'no_search_fields'}; +$m->comp('/elements/handle_uri_query'); + my $table = $cgi->param('table') or die "'table' required"; my $agent_virt_agentnum = $cgi->param('agent_virt_agentnum') || ''; @@ -324,6 +326,15 @@ else { @search{keys %search} = map { /\0/ ? [ split /\0/, $_ ] : $_ } values %search; } +# rebuild contacts hash +delete $search{contacts} + if exists $search{contacts} && ref $search{contacts}; +$search{'contacts'} = { + map { $_ => $search{$_}, } + grep { /^(contacts_*)/ && $search{$_} } + keys %search +}; + &{$opt{'post_search_hook'}}( 'conf' => $conf, 'search' => \%search, @@ -361,6 +372,15 @@ if ( !$cgi->param('preview') ) { $body ||= $content->body; } + my $sql_query = "FS::$table"->search(\%search); + my $count_query = delete($sql_query->{'count_query'}); + my $count_sth = dbh->prepare($count_query) + or die "Error preparing $count_query: ". dbh->errstr; + $count_sth->execute + or die "Error executing $count_query: ". $count_sth->errstr; + my $count_arrayref = $count_sth->fetchrow_arrayref; + $num_cust = $count_arrayref->[0]; + } else { my @checked_email_dest; @@ -466,7 +486,9 @@ if ( !$cgi->param('preview') ) { push @contact_classname, 'Message recipients'; } else { my $contact_class = FS::contact_class->by_key($1); - push @contact_classname, encode_entities($contact_class->classname); + push @contact_classname, encode_entities( + $contact_class ? $contact_class->classname : '(none)' + ); } } } @@ -482,22 +504,33 @@ if ( !$cgi->param('preview') ) { my @active_classes = qsearch(contact_class => {disabled => ''} ); +my %classnum_ischecked; +my %dest_ischecked; + $CGI::LIST_CONTEXT_WARN = 0; -my @classnums = grep{ /^\d+$/ } $cgi->param('classnums'); +if ( my @in_classnums = $cgi->param('classnums') ) { + # Set checked boxes from form input + for my $v (@in_classnums) { + + if ( $v =~ /^\d+$/ ) { + $classnum_ischecked{$v} = 1 + } elsif ( $v =~ /^(invoice|message)$/ ) { + $dest_ischecked{$v} = 1; + } -my %classnum_ischecked; -if (@classnums) { - # values passed to form - $classnum_ischecked{$_} = 1 for @classnums; + } } else { - # default values + # Checked boxes default values $classnum_ischecked{$_->classnum} = 1 for @active_classes; $classnum_ischecked{0} = 1; } +# At least one destination is required +$dest_ischecked{message} = 1 unless %dest_ischecked; + my @optin_checkboxes = ( - [ 'message' => { label => 'Message recipients' } ], - [ 'invoice' => { label => 'Invoice recipients' } ], + [ 'message' => { label => 'Message recipients', desc => 'send this notice to all message recipients for the '.$num_cust.' selected customers.' } ], + [ 'invoice' => { label => 'Invoice recipients', desc => 'send this notice to all invoice recipients for the '.$num_cust.' selected customers.' } ], ); my @classnum_checkboxes = ( [ '0' => { label => '(None)' }],