back-office API apply_payments_and_credits
authorIvan Kohler <ivan@freeside.biz>
Sat, 2 Apr 2016 22:47:27 +0000 (15:47 -0700)
committerIvan Kohler <ivan@freeside.biz>
Sat, 2 Apr 2016 22:47:27 +0000 (15:47 -0700)
FS/FS/API.pm

index 1e960c8..c595dae 100644 (file)
@@ -42,7 +42,7 @@ in plaintext.
 Adds a new payment to a customers account. Takes a list of keys and values as
 paramters with the following keys:
 
-=over 5
+=over 4
 
 =item secret
 
@@ -90,9 +90,7 @@ Example:
 #enter cash payment
 sub insert_payment {
   my($class, %opt) = @_;
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
+  return _shared_secret_error() unless _check_shared_secret($opt{secret});
 
   #less "raw" than this?  we are the backoffice API, and aren't worried
   # about version migration ala cust_main/cust_location here
@@ -106,19 +104,12 @@ sub insert_payment {
 # pass the phone number ( from svc_phone ) 
 sub insert_payment_phonenum {
   my($class, %opt) = @_;
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
-
   $class->_by_phonenum('insert_payment', %opt);
-
 }
 
 sub _by_phonenum {
   my($class, $method, %opt) = @_;
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
+  return _shared_secret_error() unless _check_shared_secret($opt{secret});
 
   my $phonenum = delete $opt{'phonenum'};
 
@@ -131,7 +122,6 @@ sub _by_phonenum {
   $opt{'custnum'} = $cust_pkg->custnum;
 
   $class->$method(%opt);
-
 }
 
 =item insert_credit OPTION => VALUE, ...
@@ -182,11 +172,9 @@ Example:
 #Enter credit
 sub insert_credit {
   my($class, %opt) = @_;
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
+  return _shared_secret_error() unless _check_shared_secret($opt{secret});
 
-  $opt{'reasonnum'} ||= $conf->config('api_credit_reason');
+  $opt{'reasonnum'} ||= FS::Conf->new->config('api_credit_reason');
 
   #less "raw" than this?  we are the backoffice API, and aren't worried
   # about version migration ala cust_main/cust_location here
@@ -200,12 +188,38 @@ sub insert_credit {
 # pass the phone number ( from svc_phone ) 
 sub insert_credit_phonenum {
   my($class, %opt) = @_;
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
-
   $class->_by_phonenum('insert_credit', %opt);
+}
+
+=item apply_payments_and_credits
+
+Applies payments and credits for this customer.  Takes a list of keys and
+values as parameter with the following keys:
+
+=over 4
+
+=item secret
+
+API secret
+
+=item custnum
+
+Customer number
+
+=back
+
+=cut
+
+#apply payments and credits
+sub apply_payments_and_credits {
+  my($class, %opt) = @_;
+  return _shared_secret_error() unless _check_shared_secret($opt{secret});
 
+  my $cust_main = qsearchs('cust_main', { 'custnum' => $opt{custnum} })
+    or return { 'error' => 'Unknown custnum' };
+
+  my $error = $cust_main->apply_payments_and_credits( 'manual'=>1 );
+  return { 'error'  => $error, };
 }
 
 =item insert_refund OPTION => VALUE, ...
@@ -237,9 +251,7 @@ Example:
 #Enter cash refund.
 sub insert_refund {
   my($class, %opt) = @_;
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
+  return _shared_secret_error() unless _check_shared_secret($opt{secret});
 
   # when github pull request #24 is merged,
   #  will have to change over to default reasonnum like credit
@@ -258,12 +270,7 @@ sub insert_refund {
 # pass the phone number ( from svc_phone ) 
 sub insert_refund_phonenum {
   my($class, %opt) = @_;
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
-
   $class->_by_phonenum('insert_refund', %opt);
-
 }
 
 #---
@@ -416,18 +423,15 @@ Referring customer number
 
 sub new_customer {
   my( $class, %opt ) = @_;
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
+  return _shared_secret_error() unless _check_shared_secret($opt{secret});
 
   #default agentnum like signup_server-default_agentnum?
  
   #same for refnum like signup_server-default_refnum
 
   my $cust_main = new FS::cust_main ( {
-      'agentnum' => $agentnum,
       'refnum'   => $opt{refnum}
-                    || $conf->config('signup_server-default_refnum'),
+                    || FS::Conf->new->config('signup_server-default_refnum'),
       'payby'    => 'BILL',
       'tagnum'   => [ FS::part_tag->default_tags ],
 
@@ -591,13 +595,8 @@ Agent number
 =cut
 
 sub update_customer {
-
  my( $class, %opt ) = @_;
-
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
-
+  return _shared_secret_error() unless _check_shared_secret($opt{secret});
 
   my $custnum = $opt{'custnum'}
     or return { 'error' => "no customer record" };
@@ -681,9 +680,7 @@ use vars qw( @cust_main_editable_fields @location_editable_fields );
 
 sub customer_info {
   my( $class, %opt ) = @_;
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
+  return _shared_secret_error() unless _check_shared_secret($opt{secret});
 
   my $cust_main = qsearchs('cust_main', { 'custnum' => $opt{custnum} })
     or return { 'error' => 'Unknown custnum' };
@@ -734,9 +731,7 @@ and values as paramters with the following keys: custnum, secret
 
 sub location_info {
   my( $class, %opt ) = @_;
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
+  return _shared_secret_error() unless _check_shared_secret($opt{secret});
 
   my @cust_location = qsearch('cust_location', { 'custnum' => $opt{custnum} });
 
@@ -773,9 +768,7 @@ Customer number (required)
 
 sub bill_now {
   my( $class, %opt ) = @_;
-  my $conf = new FS::Conf;
-  return { 'error' => 'Incorrect shared secret' }
-    unless $opt{secret} eq $conf->config('api_shared_secret');
+  return _shared_secret_error() unless _check_shared_secret($opt{secret});
 
   my $cust_main = qsearchs('cust_main', { 'custnum' => $opt{custnum} })
     or return { 'error' => 'Unknown custnum' };
@@ -791,7 +784,19 @@ sub bill_now {
 }
 
 
-#Advertising sources?
+#next.. Advertising sources?
+
 
+##
+# helper subroutines
+##
+
+sub _check_shared_secret {
+  shift eq FS::Conf->new->config('api_shared_secret');
+}
+
+sub _shared_secret_error {
+  return { 'error' => 'Incorrect shared secret' };
+}
 
 1;