From: mark Date: Sat, 2 Oct 2010 00:32:21 +0000 (+0000) Subject: avoid sending duplicate notices from package search, RT#10103 X-Git-Tag: TORRUS_1_0_9~246 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=eb02bd7d44776cadc4c17f72df508afd223b142f avoid sending duplicate notices from package search, RT#10103 --- 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 '';