From: Ivan Kohler Date: Sun, 27 Mar 2016 05:45:43 +0000 (-0700) Subject: freeside inc. web services for address normalizaion and printing, RT#33849 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=d8036c151e9706250765dc52eddd1e587df8f710 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 1f67792df..f92a5646c 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 02e1e5a40..e1e25bf26 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@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@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;