package FS::cust_main_Mixin;
use strict;
-use vars qw( $DEBUG );
+use vars qw( $DEBUG $me );
+use Carp qw( confess );
use FS::UID qw(dbh);
use FS::cust_main;
$DEBUG = 0;
+$me = '[FS::cust_main_Mixin]';
=head1 NAME
=item cancelled_sql
-Given an object that contains fields from cust_main (say, from a JOINed
-search; see httemplate/search/ for examples), returns the equivalent of the
-corresponding FS::cust_main method, or "0" if this object is not linked to
-a customer.
+Class methods that return SQL framents, equivalent to the corresponding
+FS::cust_main method.
=cut
+# my \$self = shift;
+# \$self->cust_linked
+# ? FS::cust_main::${sub}_sql(\$self)
+# : '0';
+
foreach my $sub (qw( prospect active inactive suspended cancelled )) {
eval "
sub ${sub}_sql {
- my \$self = shift;
- \$self->cust_linked
- ? FS::cust_main::${sub}_sql(\$self)
- : '0';
- }
+ confess 'cust_main_Mixin ${sub}_sql called with object' if ref(\$_[0]);
+ 'cust_main.custnum IS NOT NULL AND '. FS::cust_main->${sub}_sql();
+ }
";
die $@ if $@;
}
+=item cust_search_sql
+
+Returns a list of SQL WHERE fragments to search for parameters specified
+in HASHREF. Valid parameters are:
+
+=over 4
+
+=item agentnum
+
+=item status
+
+=item payby
+
+=back
+
+=cut
+
+sub cust_search_sql {
+ my($class, $param) = @_;
+
+ if ( $DEBUG ) {
+ warn "$me cust_search_sql called with params: \n".
+ join("\n", map { " $_: ". $param->{$_} } keys %$param ). "\n";
+ }
+
+ my @search = ();
+
+ if ( $param->{'agentnum'} && $param->{'agentnum'} =~ /^(\d+)$/ ) {
+ push @search, "cust_main.agentnum = $1";
+ }
+
+ #status (prospect active inactive suspended cancelled)
+ if ( grep { $param->{'status'} eq $_ } FS::cust_main->statuses() ) {
+ my $method = $param->{'status'}. '_sql';
+ push @search, $class->$method();
+ }
+
+ #payby
+ my @payby = ref($param->{'payby'})
+ ? @{ $param->{'payby'} }
+ : split(',', $param->{'payby'});
+ @payby = grep /^([A-Z]{4})$/, @payby;
+ if ( @payby ) {
+ push @search, 'cust_main.payby IN ('. join(',', map "'$_'", @payby). ')';
+ }
+
+ #here is the agent virtualization
+ push @search,
+ $FS::CurrentUser::CurrentUser->agentnums_sql( 'table' => 'cust_main' );
+
+ return @search;
+
+}
+
=back
=head1 BUGS