[freeside-commits] branch master updated. 16542dcb6b35c8cf7f436f87adb2cfdb0e32f4fc

Jeremy Davis jeremyd at 420.am
Mon Feb 9 08:57:03 PST 2015


The branch, master has been updated
       via  16542dcb6b35c8cf7f436f87adb2cfdb0e32f4fc (commit)
      from  bb3b0a3d1854fdf8e6de9038cea3f73ac4f9d817 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 16542dcb6b35c8cf7f436f87adb2cfdb0e32f4fc
Author: Jeremy Davis <jeremyd at freeside.biz>
Date:   Mon Feb 9 10:56:43 2015 -0600

    Ticket #33252 API update

diff --git a/FS/FS/API.pm b/FS/FS/API.pm
index 30efa9c..5b56539 100644
--- a/FS/FS/API.pm
+++ b/FS/FS/API.pm
@@ -430,32 +430,36 @@ sub new_customer {
 }
 
 =item update_customer
-
-Updates an existing customer. Takes a hash reference as parameter with the foll$
+Updates an existing customer. Passing an empty value clears that field, while NOT passing that key/value at all leaves it alone.
+Takes a hash reference as parameter with the following keys:
 
 =over 4
 
 =item secret
 
-API Secret
+API Secret (required)
+
+=item custnum
+
+Customer number (required)
 
 =item first
 
-first name (required)
+first name 
 
 =item last
 
-last name (required)
+last name 
 
 =item company
 
 Company name
 
-=item address1 (required)
+=item address1 
 
 Address line one
 
-=item city (required)
+=item city 
 
 City
 
@@ -463,11 +467,11 @@ City
 
 County
 
-=item state (required)
+=item state 
 
 State
 
-=item zip (required)
+=item zip 
 
 Zip or postal code
 
diff --git a/FS/FS/cust_main/API.pm b/FS/FS/cust_main/API.pm
index 4a09b93..cfdc222 100644
--- a/FS/FS/cust_main/API.pm
+++ b/FS/FS/cust_main/API.pm
@@ -159,7 +159,7 @@ sub API_insert {
 
 sub API_update {
 
-  my( $class, %opt ) = @_;
+ my( $class, %opt ) = @_;
 
   my $conf = new FS::Conf;
 
@@ -180,43 +180,47 @@ sub API_update {
         payby payinfo paydate paycvv payname
       ),
 
-  
   my @invoicing_list = $opt{'invoicing_list'}
                          ? split( /\s*\,\s*/, $opt{'invoicing_list'} )
-                         : ();
+                         : $cust_main->invoicing_list;
   push @invoicing_list, 'POST' if $opt{'postal_invoicing'};
-
-  my ($bill_hash, $ship_hash);
-  foreach my $f (FS::cust_main->location_fields) {
-    # avoid having to change this in front-end code
-    $bill_hash->{$f} = $opt{"bill_$f"} || $opt{$f};
-    $ship_hash->{$f} = $opt{"ship_$f"};
+ 
+  if ( exists( $opt{'address1'} ) ) {
+    my $bill_location = FS::cust_location->new({
+        map { $_ => $opt{$_} } @location_editable_fields
+    });
+    $bill_location->set('custnum' => $custnum);
+    my $error = $bill_location->find_or_insert;
+    die $error if $error;
+
+    # if this is unchanged from before, cust_main::replace will ignore it
+    $new->set('bill_location' => $bill_location);
   }
 
-  my $bill_location = FS::cust_location->new($bill_hash);
-  my $ship_location;
-  # we don't have an equivalent of the "same" checkbox in selfservice^Wthis API
-  # so is there a ship address, and if so, is it different from the billing 
-  # address?
-  if ( length($ship_hash->{address1}) > 0 and
-          grep { $bill_hash->{$_} ne $ship_hash->{$_} } keys(%$ship_hash)
-         ) {
+  if ( exists($opt{'ship_address1'}) ) {
+    my $ship_location = FS::cust_location->new({
+        map { $_ => $opt{"ship_$_"} } @location_editable_fields
+    });
 
-    $ship_location = FS::cust_location->new( $ship_hash );
-  
-  } else {
-    $ship_location = $bill_location;
-  }
+    $ship_location->set('custnum' => $custnum);
+    my $error = $ship_location->find_or_insert;
+    die $error if $error;
+
+   }
 
-  $new->set('bill_location' => $bill_location);
-  $new->set('ship_location' => $ship_location);
+   if ( !grep { length($opt{"ship_$_"}) } @location_editable_fields ) {
+      # Selfservice unfortunately tries to indicate "same as billing
+      # address" by sending all fields empty.  Did this ever work?
 
+      my $ship_location = $cust_main->bill_location;
+      $new->set('ship_location' => $ship_location);
+
+   }
   my $error = $new->replace( $cust_main, \@invoicing_list );
   return { 'error'   => $error } if $error;
-  
+
   return { 'error'   => '',
-         };
-  
+         };  
 }
 
 1;

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/API.pm           |   22 ++++++++++--------
 FS/FS/cust_main/API.pm |   58 ++++++++++++++++++++++++++----------------------
 2 files changed, 44 insertions(+), 36 deletions(-)




More information about the freeside-commits mailing list