From: Christopher Burger Date: Tue, 5 Feb 2019 17:09:46 +0000 (-0500) Subject: RT# 82094 - updated UI for bulk emailing from advanced customer reports X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=1fe87434632f2627de487ca2aed6cfadea2c6061;hp=9a74b15fe926c37f00added2d034d34bf6c95d7f RT# 82094 - updated UI for bulk emailing from advanced customer reports --- diff --git a/FS/FS/ConfDefaults.pm b/FS/FS/ConfDefaults.pm index 2c24b137b..bd5893439 100644 --- a/FS/FS/ConfDefaults.pm +++ b/FS/FS/ConfDefaults.pm @@ -56,6 +56,9 @@ sub cust_fields_avail { ( 'Cust# | Cust. Status | Name | Company' => 'custnum | Status | Last, First | Company', + 'Cust# | Cust. Status | Name | Company | Address 1 | Address 2 | City | State | Zip | Country | Day phone | Night phone | Mobile phone | Fax number | Contact email(s) | Invoices | Messages' => + 'custnum | Status | Last, First | Company | (address) | (all phones) | Contact email(s)', + 'Cust# | Cust. Status | Name | Company | Address 1 | Address 2 | City | State | Zip | Country | Day phone | Night phone | Mobile phone | Fax number | Invoicing email(s)' => 'custnum | Status | Last, First | Company | (address) | (all phones) | Invoicing email(s)', diff --git a/FS/FS/UI/Web.pm b/FS/FS/UI/Web.pm index 54128682e..8a1d50236 100644 --- a/FS/FS/UI/Web.pm +++ b/FS/FS/UI/Web.pm @@ -343,6 +343,9 @@ sub cust_header { '(service) Latitude' => 'ship_latitude', '(service) Longitude' => 'ship_longitude', 'Invoicing email(s)' => 'invoicing_list_emailonly_scalar', + 'Contact email(s)' => 'contact_list_emailonly', + 'Invoices' => 'contact_list_cust_invoice_only', + 'Messages' => 'contact_list_cust_message_only', # FS::Upgrade::upgrade_config removes this from existing cust-fields settings # 'Payment Type' => 'cust_payby', 'Current Balance' => 'current_balance', diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index 061fd69a3..8647c829a 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -3150,6 +3150,101 @@ sub contact_list_email { @emails; } +=item contact_list_email_destinations + +Returns a list of emails and whether they receive invoices or messages destinations. +{ emailaddress => 'email.com', invoice => 'Y', message => '', } + +=cut + +sub contact_list_email_destinations { + my $self = shift; + warn "$me contact_list_email_destinations" + if $DEBUG; + return () if !$self->custnum; # not yet inserted + return map { $_ } + qsearch({ + table => 'cust_contact', + select => 'emailaddress, cust_contact.invoice_dest as invoice, cust_contact.message_dest as message', + addl_from => ' JOIN contact USING (contactnum) '. + ' JOIN contact_email USING (contactnum)', + hashref => { 'custnum' => $self->custnum, }, + order_by => 'ORDER BY custcontactnum DESC', + extra_sql => '', + }); +} + +=item contact_list_emailonly + +Returns an array of hashes containing the emails. Used for displaying contact email field in advanced customer reports. +[ { data => 'email.com', }, ] + +=cut + +sub contact_list_emailonly { + my $self = shift; + warn "$me contact_list_emailonly called" + if $DEBUG; + my @emails; + foreach ($self->contact_list_email_destinations) { + my $data = [ + { + 'data' => $_->emailaddress, + }, + ]; + push @emails, $data; + } + return \@emails; +} + +=item contact_list_cust_invoice_only + +Returns an array of hashes containing cust_contact.invoice_dest. Does this email receive invoices. Used for displaying email Invoice field in advanced customer reports. +[ { data => 'Yes', }, ] + +=cut + +sub contact_list_cust_invoice_only { + my $self = shift; + warn "$me contact_list_cust_invoice_only called" + if $DEBUG; + my @emails; + foreach ($self->contact_list_email_destinations) { + my $invoice = $_->invoice ? 'Yes' : 'No'; + my $data = [ + { + 'data' => $invoice, + }, + ]; + push @emails, $data; + } + return \@emails; +} + +=item contact_list_cust_message_only + +Returns an array of hashes containing cust_contact.message_dest. Does this email receive message notifications. Used for displaying email Message field in advanced customer reports. +[ { data => 'Yes', }, ] + +=cut + +sub contact_list_cust_message_only { + my $self = shift; + warn "$me contact_list_cust_message_only called" + if $DEBUG; + my @emails; + foreach ($self->contact_list_email_destinations) { + my $message = $_->message ? 'Yes' : 'No'; + my $data = [ + { + 'data' => $message, + }, + ]; + push @emails, $data; + } + return \@emails; +} + =item referral_custnum_cust_main Returns the customer who referred this customer (or the empty string, if diff --git a/httemplate/misc/email-customers.html b/httemplate/misc/email-customers.html index b631165dc..cf3ab1b48 100644 --- a/httemplate/misc/email-customers.html +++ b/httemplate/misc/email-customers.html @@ -372,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; @@ -520,8 +529,8 @@ if ( my @in_classnums = $cgi->param('classnums') ) { $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)' }], diff --git a/httemplate/search/cust_main.html b/httemplate/search/cust_main.html index f6c6c62d8..4c7fa14aa 100755 --- a/httemplate/search/cust_main.html +++ b/httemplate/search/cust_main.html @@ -155,9 +155,10 @@ if ( $FS::CurrentUser::CurrentUser->access_right('Bulk send customer notices') ) $uri->query_form( \%query_hash ); my $query = $uri->query; - push @$menubar, emt('Email a notice to these customers') => - "${p}misc/email-customers.html?table=cust_main&$query", - + push @$menubar, emt('Email a notice to these customers message recipients') => + "${p}misc/email-customers.html?table=cust_main&classnums=message&$query"; + push @$menubar, emt('Email a notice to these customers invoice recipients') => + "${p}misc/email-customers.html?table=cust_main&classnums=invoice&$query"; }