X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fagent.pm;h=a9e41a666347ee6fce1d2b10c83e88ac7b56f669;hp=bcba602ccb98c65b831052def560b026053ce8a4;hb=4a881cc149f6892da35f85b767a1e806f237a05f;hpb=b59a412755582d30b4f7be2147b6ad32037e6f59 diff --git a/FS/FS/agent.pm b/FS/FS/agent.pm index bcba602cc..a9e41a666 100644 --- a/FS/FS/agent.pm +++ b/FS/FS/agent.pm @@ -2,7 +2,7 @@ package FS::agent; use strict; use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); +use FS::Record qw( dbh qsearch qsearchs ); use FS::cust_main; use FS::agent_type; @@ -125,6 +125,9 @@ sub check { $error = $self->ut_alphan('username'); return $error if $error; if ( length($self->username) ) { + my $conflict = qsearchs('agent', { 'username' => $self->username } ); + return 'duplicate agent username (with '. $conflict->agent. ')' + if $conflict && $conflict->agentnum != $self->agentnum; $error = $self->ut_text('password'); # ut_text... arbitrary choice } else { $self->_password(''); @@ -161,11 +164,107 @@ sub pkgpart_hashref { $self->agent_type->pkgpart_hashref; } -=back +=item num_prospect_cust_main + +Returns the number of prospects (customers with no packages ever ordered) for +this agent. + +=cut + +sub num_prospect_cust_main { + shift->num_sql(FS::cust_main->prospect_sql); +} + +sub num_sql { + my( $self, $sql ) = @_; + my $sth = dbh->prepare( + "SELECT COUNT(*) FROM cust_main WHERE agentnum = ? AND $sql" + ) or die dbh->errstr; + $sth->execute($self->agentnum) or die $sth->errstr; + $sth->fetchrow_arrayref->[0]; +} + +=item prospect_cust_main + +Returns the prospects (customers with no packages ever ordered) for this agent, +as cust_main objects. + +=cut + +sub prospect_cust_main { + shift->cust_main_sql(FS::cust_main->prospect_sql); +} + +sub cust_main_sql { + my( $self, $sql ) = @_; + qsearch( 'cust_main', + { 'agentnum' => $self->agentnum }, + '', + " AND $sql" + ); +} + +=item num_active_cust_main + +Returns the number of active customers for this agent. + +=cut + +sub num_active_cust_main { + shift->num_sql(FS::cust_main->active_sql); +} + +=item active_cust_main + +Returns the active customers for this agent, as cust_main objects. + +=cut -=head1 VERSION +sub active_cust_main { + shift->cust_main_sql(FS::cust_main->active_sql); +} + +=item num_susp_cust_main + +Returns the number of suspended customers for this agent. + +=cut + +sub num_susp_cust_main { + shift->num_sql(FS::cust_main->susp_sql); +} + +=item susp_cust_main + +Returns the suspended customers for this agent, as cust_main objects. + +=cut + +sub susp_cust_main { + shift->cust_main_sql(FS::cust_main->susp_sql); +} -$Id: agent.pm,v 1.5 2003-09-29 05:51:50 ivan Exp $ +=item num_cancel_cust_main + +Returns the number of cancelled customer for this agent. + +=cut + +sub num_cancel_cust_main { + shift->num_sql(FS::cust_main->cancel_sql); +} + +=item cancel_cust_main + +Returns the cancelled customers for this agent, as cust_main objects. + +=cut + +sub cancel_cust_main { + shift->cust_main_sql(FS::cust_main->cancel_sql); +} + +=back =head1 BUGS