credit limit for printing
authorIvan Kohler <ivan@freeside.biz>
Tue, 27 Dec 2016 20:26:41 +0000 (12:26 -0800)
committerIvan Kohler <ivan@freeside.biz>
Tue, 27 Dec 2016 20:26:41 +0000 (12:26 -0800)
FS/FS/ClientAPI/Freeside.pm
FS/FS/webservice_log.pm

index 8aa61e6..42b9c42 100644 (file)
@@ -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;
index 7e320c2..1dfabe6 100644 (file)
@@ -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