[freeside-commits] branch master updated. d8036c151e9706250765dc52eddd1e587df8f710

Ivan ivan at 420.am
Sat Mar 26 22:45:44 PDT 2016


The branch, master has been updated
       via  d8036c151e9706250765dc52eddd1e587df8f710 (commit)
      from  59669128b6409e2556aa26d659c5cc22a1c7b945 (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 d8036c151e9706250765dc52eddd1e587df8f710
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Sat Mar 26 22:45:43 2016 -0700

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

diff --git a/FS/FS/Template_Mixin.pm b/FS/FS/Template_Mixin.pm
index 1f67792..f92a564 100644
--- a/FS/FS/Template_Mixin.pm
+++ b/FS/FS/Template_Mixin.pm
@@ -2351,6 +2351,100 @@ sub mimebuild_pdf {
   );
 }
 
+=item postal_mail_fsinc
+
+Sends this invoice to the Freeside Internet Services, Inc. print and mail
+service.
+
+=cut
+
+use CAM::PDF;
+use LWP::UserAgent;
+use HTTP::Request::Common qw( POST );
+use Cpanel::JSON::XS;
+use MIME::Base64;
+sub postal_mail_fsinc {
+  my ( $self, %opt ) = @_;
+
+  my $url = 'https://ws.freeside.biz/print';
+
+  my $cust_main = $self->cust_main;
+  my $agentnum = $cust_main->agentnum;
+  my $bill_location = $cust_main->bill_location;
+
+  die "Extra charges for international mailing; contact support\@freeside.biz to enable\n"
+    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\@freeside.biz\n";
+  }
+  $company_city =~ s/,$//;
+
+  my $file = $self->print_pdf(%opt);
+  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'             => encode_base64($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->invoice_attn
+                            || $cust_main->contact_firstlast,
+    'company'          => $cust_main->company,
+    '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. "\n"
+    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};
+
+  #TODO: store this so we can query for a status later
+  warn "Invoice printed, ID ". $content->{id}. "\n";
+
+  $content->{id};
+
+}
+
 =item _items_sections OPTIONS
 
 Generate section information for all items appearing on this invoice.
diff --git a/FS/FS/part_event/Action/cust_bill_fsinc_print.pm b/FS/FS/part_event/Action/cust_bill_fsinc_print.pm
index 02e1e5a..e1e25bf 100644
--- a/FS/FS/part_event/Action/cust_bill_fsinc_print.pm
+++ b/FS/FS/part_event/Action/cust_bill_fsinc_print.pm
@@ -2,11 +2,6 @@ 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 Cpanel::JSON::XS;
-use CAM::PDF;
-use FS::Conf;
 
 sub description { 'Send invoice to Freeside Inc. for printing and mailing'; }
 
@@ -29,75 +24,9 @@ sub do_action {
 
   $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->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};
+  my $letter_id = $cust_bill->postal_mail_fsinc;
 
+  #TODO: store this so we can query for a status later
 }
 
 1;

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

Summary of changes:
 FS/FS/Template_Mixin.pm                          |   94 ++++++++++++++++++++++
 FS/FS/part_event/Action/cust_bill_fsinc_print.pm |   75 +----------------
 2 files changed, 96 insertions(+), 73 deletions(-)




More information about the freeside-commits mailing list