X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_main_Mixin.pm;h=8c8553c091d7631e7bc39f5f6858e3265d073c0c;hp=b446d69651348ed0972525ddb1ab547a1e9cc6cf;hb=90393980e5f2859ee1e186fa461f48f5129e803e;hpb=6c9cd1c36adbb9fc950fcf0a0b269fa6f16838a1 diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm index b446d6965..8c8553c09 100644 --- a/FS/FS/cust_main_Mixin.pm +++ b/FS/FS/cust_main_Mixin.pm @@ -423,7 +423,9 @@ sub email_search_result { my( $num, $last, $min_sec ) = (0, time, 5); #progresbar foo my @retry_jobs = (); + my $dups = 0; my $success = 0; + my %sent_to = (); #eventually order+limit magic to reduce memory use? foreach my $obj ( qsearch($sql_query) ) { @@ -443,9 +445,21 @@ sub email_search_result { if ( !$cust_main ) { next; # unlinked object; nothing else we can do } + + if( $sent_to{$cust_main->custnum} ) { + # avoid duplicates + $dups++; + next; + } + + $sent_to{$cust_main->custnum} = 1; if ( $msg_template ) { # XXX add support for other context objects? + # If we do that, handling of "duplicates" will + # have to be smarter. Currently we limit to + # one message per custnum because they'd all + # be identical. @message = $msg_template->prepare( 'cust_main' => $cust_main ); } else { @@ -494,7 +508,7 @@ sub email_search_result { if(@retry_jobs) { # fail the job, but with a status message that makes it clear # something was sent. - return "Sent $success, failed ".scalar(@retry_jobs).". Failed attempts placed in job queue.\n"; + return "Sent $success, skipped $dups duplicate(s), failed ".scalar(@retry_jobs).". Failed attempts placed in job queue.\n"; } return '';