X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FClientAPI%2FAgent.pm;h=baa05caaf7b77b016b94cf298d8cfeac425988a9;hb=6419542b10f8ebb0dada9dcb1a48cf78151ca82a;hp=daede59a8faa6281fd20e18c711dc6ac36988926;hpb=fc9e97f6cab72de473288470c0681534caf25ea5;p=freeside.git diff --git a/FS/FS/ClientAPI/Agent.pm b/FS/FS/ClientAPI/Agent.pm index daede59a8..baa05caaf 100644 --- a/FS/FS/ClientAPI/Agent.pm +++ b/FS/FS/ClientAPI/Agent.pm @@ -9,7 +9,9 @@ use Digest::MD5 qw(md5_hex); use FS::Record qw(qsearchs); # qsearch dbdef dbh); use FS::ClientAPI_SessionCache; use FS::agent; -use FS::cust_main qw(smart_search); +use FS::cust_main::Search qw(smart_search); +use FS::svc_domain; +use FS::svc_acct; sub _cache { $cache ||= new FS::ClientAPI_SessionCache( { @@ -17,6 +19,31 @@ sub _cache { } ); } +sub new_agent { + my $p = shift; + + my $conf = new FS::Conf; + return { error=>'Disabled' } unless $conf->exists('selfservice-agent_signup'); + + #add a customer record and set agent_custnum? + + my $agent = new FS::agent { + 'typenum' => $conf->config('selfservice-agent_signup-agent_type'), + 'agent' => $p->{'agent'}, + 'username' => $p->{'username'}, + '_password' => $p->{'password'}, + # + }; + + my $error = $agent->insert; + + return { 'error' => $error } if $error; + + agent_login({ 'username' => $p->{'username'}, + 'password' => $p->{'password'}, + }); +} + sub agent_login { my $p = shift; @@ -113,7 +140,7 @@ sub agent_list_customers { my $cust_main = $_; my $hashref = $cust_main->hashref; $hashref->{$_} = $cust_main->$_() - foreach qw(name status statuscolor); + foreach qw(name status statuscolor status_label); delete $hashref->{$_} foreach qw( payinfo paycvv ); $hashref; } @cust_main @@ -122,4 +149,66 @@ sub agent_list_customers { } +sub check_username { + my $p = shift; + my($session, $agentnum, $svc_acct) = _session_agentnum_svc_acct($p); + return { 'error' => $session } unless ref($session); + + { 'error' => '', + #'username' => $username, + #'domain' => $domain, + 'available' => $svc_acct ? 0 : 1, + }; + +} + +sub _session_agentnum_svc_acct { + my $p = shift; + + my $session = _cache->get($p->{'session_id'}) + or return "Can't resume session"; #better error message + + my $username = $p->{'username'}; + + #XXX some way to default this per agent (by default product's service def?) + my $domain = $p->{'domain'}; + + my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) + or return { 'error' => 'Unknown domain' }; + + my $svc_acct = qsearchs('svc_acct', { 'username' => $username, + 'domsvc' => $svc_domain->svcnum, } ); + + ( $session, $session->{'agentnum'}, $svc_acct ); + +} + +sub _session_agentnum_cust_pkg { + my $p = shift; + my($session, $agentnum, $svc_acct) = _session_agentnum_svc_acct($p); + return $session unless ref($session); + return 'Account not found' unless $svc_acct; + my $cust_svc = $svc_acct->cust_svc; + return 'Unlinked account' unless $cust_svc->pkgnum; + my $cust_pkg = $cust_svc->cust_pkg; + return 'Not your account' unless $cust_pkg->cust_main->agentnum == $agentnum; + ($session, $agentnum, $cust_pkg); +} + +sub suspend_username { + my $p = shift; + my($session, $agentnum, $cust_pkg) = _session_agentnum_cust_pkg($p); + return { 'error' => $session } unless ref($session); + + return { 'error' => $cust_pkg->suspend }; +} + +sub unsuspend_username { + my $p = shift; + my($session, $agentnum, $cust_pkg) = _session_agentnum_cust_pkg($p); + return { 'error' => $session } unless ref($session); + + return { 'error' => $cust_pkg->unsuspend }; +} + 1;