X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FClientAPI%2FAgent.pm;h=baa05caaf7b77b016b94cf298d8cfeac425988a9;hb=dc83512c36dc6bea2585abada4f88d714c600e55;hp=e1624b9300bae113cb29c6b1cbb5a58ae05380af;hpb=9b05a3660eabd3215bdebf9429eb490b41570436;p=freeside.git diff --git a/FS/FS/ClientAPI/Agent.pm b/FS/FS/ClientAPI/Agent.pm index e1624b930..baa05caaf 100644 --- a/FS/FS/ClientAPI/Agent.pm +++ b/FS/FS/ClientAPI/Agent.pm @@ -10,6 +10,8 @@ use FS::Record qw(qsearchs); # qsearch dbdef dbh); use FS::ClientAPI_SessionCache; use FS::agent; use FS::cust_main::Search qw(smart_search); +use FS::svc_domain; +use FS::svc_acct; sub _cache { $cache ||= new FS::ClientAPI_SessionCache( { @@ -138,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 @@ -147,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;