X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FClientAPI%2FAgent.pm;h=daede59a8faa6281fd20e18c711dc6ac36988926;hb=4e35589e637aa3a3615a780d4086085c5ecb1782;hp=212faaa6bb3fa6debd69beb532a9a00169ba9eac;hpb=3913f6d159b5b8110061690b7c97642c27abf7eb;p=freeside.git diff --git a/FS/FS/ClientAPI/Agent.pm b/FS/FS/ClientAPI/Agent.pm index 212faaa6b..daede59a8 100644 --- a/FS/FS/ClientAPI/Agent.pm +++ b/FS/FS/ClientAPI/Agent.pm @@ -4,22 +4,18 @@ package FS::ClientAPI::Agent; use strict; use vars qw($cache); +use subs qw(_cache); use Digest::MD5 qw(md5_hex); -use Cache::SharedMemoryCache; #store in db? -use FS::Record qw(qsearchs); # qsearch); +use FS::Record qw(qsearchs); # qsearch dbdef dbh); +use FS::ClientAPI_SessionCache; use FS::agent; +use FS::cust_main qw(smart_search); -use FS::ClientAPI; -FS::ClientAPI->register_handlers( - 'Agent/agent_login' => \&agent_login, - 'Agent/agent_info' => \&agent_info, - 'Agent/agent_list_customers' => \&agent_list_customers, -); - -#store in db? -my $cache = new Cache::SharedMemoryCache( { - 'namespace' => 'FS::ClientAPI::Agent', -} ); +sub _cache { + $cache ||= new FS::ClientAPI_SessionCache( { + 'namespace' => 'FS::ClientAPI::Agent', + } ); +} sub agent_login { my $p = shift; @@ -43,19 +39,29 @@ sub agent_login { my $session_id; do { $session_id = md5_hex(md5_hex(time(). {}. rand(). $$)) - } until ( ! defined $cache->get($session_id) ); #just in case + } until ( ! defined _cache->get($session_id) ); #just in case - $cache->set( $session_id, $session, '1 hour' ); + _cache->set( $session_id, $session, '1 hour' ); { 'error' => '', 'session_id' => $session_id, }; } +sub agent_logout { + my $p = shift; + if ( $p->{'session_id'} ) { + _cache->remove($p->{'session_id'}); + return { 'error' => '' }; + } else { + return { 'error' => "Can't resume session" }; #better error message + } +} + sub agent_info { my $p = shift; - my $session = $cache->get($p->{'session_id'}) + my $session = _cache->get($p->{'session_id'}) or return { 'error' => "Can't resume session" }; #better error message #my %return; @@ -80,7 +86,7 @@ sub agent_info { sub agent_list_customers { my $p = shift; - my $session = $cache->get($p->{'session_id'}) + my $session = _cache->get($p->{'session_id'}) or return { 'error' => "Can't resume session" }; #better error message #my %return; @@ -90,14 +96,19 @@ sub agent_list_customers { my $agent = qsearchs( 'agent', { 'agentnum' => $agentnum } ) or return { 'error' => "unknown agentnum $agentnum" }; - my @cust_main = (); - - warn $p->{'susp'}; + my @cust_main = smart_search( 'search' => $p->{'search'}, + 'agentnum' => $agentnum, + ); + #aggregate searches push @cust_main, map $agent->$_(), map $_.'_cust_main', grep $p->{$_}, qw( prospect active susp cancel ); + #eliminate dups? + my %saw = (); + @cust_main = grep { !$saw{$_->custnum}++ } @cust_main; + { customers => [ map { my $cust_main = $_; my $hashref = $cust_main->hashref; @@ -111,3 +122,4 @@ sub agent_list_customers { } +1;