+=item search_sql HASHREF
+
+Class method which returns an SQL WHERE fragment to search for parameters
+specified in HASHREF. Valid parameters are
+
+=over 4
+
+=item agentnum
+
+=item beginning
+
+An epoch date setting a lower bound for _date values
+
+=item ending
+
+An epoch date setting a upper bound for _date values
+
+=item failed
+
+Limits the search to failed events if true
+
+=item payby
+
+Requires that the search be JOIN'd to part_bill_event # Bug?
+
+=item invnum
+
+=item currentuser
+
+Specifies the user for agent virtualization
+
+=back
+
+=cut
+
+sub search_sql {
+ my ($class, $params) = @_;
+ my @search = ();
+
+ push @search, "agentnum = ". $params->{agentnum} if $params->{agentnum};
+
+ push @search, "cust_bill_event._date >= ". $params->{beginning}
+ if $params->{beginning};
+ push @search, "cust_bill_event._date <= ". $params->{ending}
+ if $params->{ending};
+
+ push @search, "statustext != ''",
+ "statustext IS NOT NULL",
+ "statustext != 'N/A'"
+ if $params->{failed};
+
+ push @search, "part_bill_event.payby = '". $params->{payby}. "'"
+ if $params->{payby};
+
+ push @search, "cust_bill_event.invnum = '". $params->{invnum}. "'"
+ if $params->{invnum};
+
+ my $currentuser = $params->{currentuser} || $params->{CurrentUser};
+ if ($currentuser) {
+ my $access_user = qsearchs('access_user', { username => $currentuser });
+ if ($access_user) {
+ push @search, $access_user->agentnums_sql;
+ }else{
+ push @search, "1=0";
+ }
+ }else{
+ push @search, $FS::CurrentUser::CurrentUser->agentnums_sql;
+ }
+
+ join(' AND ', @search );
+
+}
+