X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_main_Mixin.pm;h=3dde95f2eb672c899e76118787d132bf4b41f621;hb=37591b61f8ad6fc5c5acb2fd8f520d2dbe4f1539;hp=86751b1cbc9c7bc0b7c9f5049cb43774fdae8b75;hpb=b6f55ef84f3d57448ec7aa7556457c03b9226c27;p=freeside.git diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm index 86751b1cb..3dde95f2e 100644 --- a/FS/FS/cust_main_Mixin.pm +++ b/FS/FS/cust_main_Mixin.pm @@ -1,11 +1,13 @@ 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 @@ -254,25 +256,80 @@ sub cust_statuscolor { =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