[freeside-commits] branch FREESIDE_4_BRANCH updated. 2df25d1d8a79a775f715f36c8ded11665a944a25

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


The branch, FREESIDE_4_BRANCH has been updated
       via  2df25d1d8a79a775f715f36c8ded11665a944a25 (commit)
      from  8bf7866ff8b83f34a5e3b328ba233c2a0dbe6967 (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 2df25d1d8a79a775f715f36c8ded11665a944a25
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Sat Mar 26 12:51:54 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 7aa81e5..f7f0a8f 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