X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FClientAPI%2FFreeside.pm;h=42b9c42eb4dd98266f8a4d69dcfa6d971986a11d;hb=f4daf7e8c831fe126dc3fd1d6d0db5ee3b46d602;hp=dcd3ed6e9a7143f3a0fa6f34131e14dfa7a885c7;hpb=db27e4da24fa49d91215bd8ef7a05895fa58c0f6;p=freeside.git diff --git a/FS/FS/ClientAPI/Freeside.pm b/FS/FS/ClientAPI/Freeside.pm index dcd3ed6e9..42b9c42eb 100644 --- a/FS/FS/ClientAPI/Freeside.pm +++ b/FS/FS/ClientAPI/Freeside.pm @@ -4,7 +4,7 @@ use strict; #use vars qw($DEBUG $me); use FS::Record qw(qsearchs); use FS::Conf; -use FS::svc_external; +use FS::svc_acct; use FS::webservice_log; #$DEBUG = 0; @@ -30,7 +30,7 @@ sub freesideinc_service { or return { 'error' => 'bad support-key' }; my($username, $_password) = ($1,$2); - my $svc_external = qsearchs({ + my $svc_acct = qsearchs({ 'table' => 'svc_acct', 'addl_from' => 'LEFT JOIN cust_svc USING ( svcnum )', 'hashref' => { 'username' => $username, @@ -38,22 +38,40 @@ sub freesideinc_service { }, 'extra_sql' => "AND svcpart = $svcpart", }); - unless ( $svc_external ) { + unless ( $svc_acct ) { warn "bad support-key for $username from $ENV{REMOTE_IP}\n"; sleep 5; #ideally also rate-limit and eventually ban their IP return { 'error' => 'bad support-key' }; } + my $cust_pkg = $svc_acct->cust_svc->cust_pkg; + my $custnum = $cust_pkg->custnum; + + my $quantity = $packet->{'quantity'} || 1; + + #false laziness w/webservice_log.pm + my $color = 1.10; + my $page = 0.10; + #XXX check if some customers can use some API calls, rate-limiting, etc. # but for now, everybody can use everything + if ( $packet->{method} eq 'print' ) { + my $avail_credit = $cust_pkg->cust_main->credit_limit + - $color - $quantity * $page + - FS::webservice_log->price_print( + 'custnum' => $custnum, + ); + + return { 'error' => 'Over credit limit' } + if $avail_credit <= 0; + } #record it happened - my $custnum = $svc_external->cust_svc->cust_pkg->custnum; my $webservice_log = new FS::webservice_log { 'custnum' => $custnum, - 'svcnum' => $svc_external->svcnum, + 'svcnum' => $svc_acct->svcnum, 'method' => $packet->{'method'}, - 'quantity' => $packet->{'quantity'} || 1, + 'quantity' => $quantity, }; my $error = $webservice_log->insert; return { 'error' => $error } if $error;