[freeside-commits] branch master updated. 9faa6b1e007238ea1d953dfffa5c9089253b420c

Ivan ivan at 420.am
Sat Mar 26 12:51:53 PDT 2016


The branch, master has been updated
       via  9faa6b1e007238ea1d953dfffa5c9089253b420c (commit)
      from  fad183c519f7d8b7c905708efc984c571b2c2990 (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 9faa6b1e007238ea1d953dfffa5c9089253b420c
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Sat Mar 26 12:51:52 2016 -0700

    freeside inc. web services for address normalizaion and printing, RT#33849

diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 5efd780..c2b558d 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -4341,6 +4341,7 @@ and customer address. Include units.',
                        'usps'     => 'U.S. Postal Service',
                        'tomtom'   => 'TomTom',
                        'melissa'  => 'Melissa WebSmart',
+                       'freeside' => 'Freeside web service (support contract required)',
                      ],
   },
 
diff --git a/FS/FS/Misc/Geo.pm b/FS/FS/Misc/Geo.pm
index aa4e55e..73122fa 100644
--- a/FS/FS/Misc/Geo.pm
+++ b/FS/FS/Misc/Geo.pm
@@ -642,6 +642,42 @@ sub standardize_melissa {
   }
 }
 
+sub standardize_freeside {
+  my $class = shift;
+  my $location = shift;
+
+  my $url = 'https://ws.freeside.biz/normalize';
+
+  #free freeside.biz normalization only for US
+  if ( $location->{country} ne 'US' ) {
+    # soft failure
+    #why? something else could have cleaned it $location->{addr_clean} = '';
+    return $location;
+  }
+
+  my $ua = LWP::UserAgent->new( 'ssl_opts' => { 'verify_hostname'=>0 });
+  my $response = $ua->request( POST $url, [
+    'support-key' => scalar($conf->config('support-key')),
+    %$location,
+  ]);
+
+  die "Address normalization error: ". $response->message
+    unless $response->is_success;
+
+  local $@;
+  my $content = eval { decode_json($response->content) };
+  die "Address normalization JSON error : $@\n" if $@;
+
+  die $content->{error}."\n"
+    if $content->{error};
+
+  { 'addr_clean' => 'Y',
+    map { $_ => $content->{$_} }
+      qw( address1 address2 city state zip country )
+  };
+
+}
+
 =back
 
 =cut
diff --git a/FS/FS/part_event/Action/cust_bill_fsinc_print.pm b/FS/FS/part_event/Action/cust_bill_fsinc_print.pm
new file mode 100644
index 0000000..2ef564b
--- /dev/null
+++ b/FS/FS/part_event/Action/cust_bill_fsinc_print.pm
@@ -0,0 +1,106 @@
+package FS::part_event::Action::cust_bill_fsinc_print;
+
+use strict;
+use base qw( FS::part_event::Action );
+use LWP::UserAgent;
+use HTTP::Request::Common qw( POST );
+use JSON::XS; #use Cpanel::JSON::XS;
+use CAM::PDF;
+use FS::Conf;
+
+sub description { 'Send invoice to Freeside Inc. for printing and mailing'; }
+
+sub eventtable_hashref {
+  { 'cust_bill' => 1 };
+}
+
+sub option_fields {
+  (
+    'modenum'     => { label  => 'Invoice mode',
+                       type   => 'select-invoice_mode',
+                     },
+  );
+}
+
+sub default_weight { 52; }
+
+sub do_action {
+  my( $self, $cust_bill ) = @_;
+
+  $cust_bill->set('mode' => $self->option('modenum'));
+
+  my $url = 'https://ws.freeside.biz/print';
+
+  my $cust_main = $cust_bill->cust_main;
+  my $bill_location = $cust_main->bill_location;
+
+  die 'Extra charges for international mailing; contact support at freeside.biz to enable'
+    if $bill_location->country ne 'US';
+
+  my $conf = new FS::Conf;
+
+  my @company_address = $conf->config('company_address', $agentnum);
+  my ( $company_address1, $company_address2, $company_city, $company_state, $company_zip );
+  if ( $company_address[2] =~ /^\s*(\S.*\S)\s*[\s,](\w\w),?\s*(\d{5}(-\d{4})?)\s*$/ ) {
+    $company_address1 = $company_address[0];
+    $company_address2 = $company_address[1];
+    $company_city  = $1;
+    $company_state = $2;
+    $company_zip   = $3;
+  } elsif ( $company_address[1] =~ /^\s*(\S.*\S)\s*[\s,](\w\w),?\s*(\d{5}(-\d{4})?)\s*$/ ) {
+    $company_address1 = $company_address[0];
+    $company_address2 = '';
+    $company_city  = $1;
+    $company_state = $2;
+    $company_zip   = $3;
+  } else {
+    die 'Unparsable company_address; contact support at freeside.biz';
+  }
+
+  my $file = $cust_bill->print_pdf;
+  my $pages = CAM::PDF->new($file)->numPages;
+
+  my $ua = LWP::UserAgent->new( 'ssl_opts' => { 'verify_hostname'=>0 });
+  my $response = $ua->request( POST $url, [
+    'support-key'      => scalar($conf->config('support-key')),
+    'file'             => $file,
+    'pages'            => $pages,
+
+    #from:
+    'company_name'     => scalar( $conf->config('company_name', $agentnum) ),
+    'company_address1' => $company_address1,
+    'company_address2' => $company_address2,
+    'company_city'     => $company_city
+    'company_state'    => $company_state,
+    'company_zip'      => $company_zip,
+    'company_country'  => 'US',
+    'company_phonenum' => scalar($conf->config('company_phonenum', $agentnum)),
+    'company_email'    => scalar($conf->config('invoice_from', $agentnum)),
+
+    #to:
+    'name'             => ( $cust_main->payname
+                              && $cust_main->payby !~ /^(CARD|DCRD|CHEK|DCHK)$/
+                                ? $cust_main->payname
+                                : $cust_main->contact_firstlast
+                          )
+    #'name'             => $cust_main->invoice_attn || $cust_main->contact_firstlast,
+    'address1'         => $bill_location->address1,
+    'address2'         => $bill_location->address2,
+    'city'             => $bill_location->city,
+    'state'            => $bill_location->state,
+    'zip'              => $bill_location->zip,
+    'country'          => $bill_location->country,
+  ]);
+
+  die "Print connection error: ". $response->message
+    unless $response->is_success;
+
+  local $@;
+  my $content = eval { decode_json($response->content) };
+  die "Print JSON error : $@\n" if $@;
+
+  die $content->{error}."\n"
+    if $content->{error};
+}
+
+1;

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

Summary of changes:
 FS/FS/Conf.pm                                    |    1 +
 FS/FS/Misc/Geo.pm                                |   36 ++++++++
 FS/FS/part_event/Action/cust_bill_fsinc_print.pm |  106 ++++++++++++++++++++++
 3 files changed, 143 insertions(+)
 create mode 100644 FS/FS/part_event/Action/cust_bill_fsinc_print.pm




More information about the freeside-commits mailing list