From: Ivan Kohler Date: Tue, 27 Dec 2016 20:26:41 +0000 (-0800) Subject: credit limit for printing X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=9437bfc0dfccd408aa30e0c259031167a1991016 credit limit for printing --- diff --git a/FS/FS/ClientAPI/Freeside.pm b/FS/FS/ClientAPI/Freeside.pm index 8aa61e632..42b9c42eb 100644 --- a/FS/FS/ClientAPI/Freeside.pm +++ b/FS/FS/ClientAPI/Freeside.pm @@ -44,16 +44,34 @@ sub freesideinc_service { 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_acct->cust_svc->cust_pkg->custnum; my $webservice_log = new FS::webservice_log { 'custnum' => $custnum, 'svcnum' => $svc_acct->svcnum, 'method' => $packet->{'method'}, - 'quantity' => $packet->{'quantity'} || 1, + 'quantity' => $quantity, }; my $error = $webservice_log->insert; return { 'error' => $error } if $error; diff --git a/FS/FS/webservice_log.pm b/FS/FS/webservice_log.pm index 7e320c23e..1dfabe672 100644 --- a/FS/FS/webservice_log.pm +++ b/FS/FS/webservice_log.pm @@ -125,6 +125,40 @@ sub check { =back +=head1 CLASS METHODS + +=over 4 + +=item price_print + +Calculates cost of printing unbilled print jobs for this customer. + +=cut + +sub price_print { + my( $class, %opt ) = @_; + +# $opt{'beginning'} ||= 0; +# $opt{'ending'} ||= 4294967295; + + #false laziness w/ClientAPI/Freeside.pm + my $color = 1.10; + my $page = 0.10; + + $class->scalar_sql(" + SELECT SUM( $color + quantity * $page ) + FROM webservice_log + WHERE custnum = $opt{custnum} + AND method = 'print' + AND status IS NULL + "); +# AND _date >= $opt{beginning} +# AND _date < $opt{ending} + +} + +=back + =head1 BUGS =head1 SEE ALSO