From 38afab3ba4d0c74aa27739f50e1f86e20e635b58 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 10 Nov 2010 00:58:26 +0000 Subject: [PATCH] add check_username, suspend_username and unsuspend_username calls, RT#9608 --- FS/FS/ClientAPI/Agent.pm | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/FS/FS/ClientAPI/Agent.pm b/FS/FS/ClientAPI/Agent.pm index e1624b930..3f95947e7 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( { @@ -147,4 +149,66 @@ sub agent_list_customers { } +sub check_username { + my $p = shift; + my($session, $agentnum, $svc_acct) = _session_agentnum_svc_acct_check($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; -- 2.11.0