address standardization part one, finally checked in from here
[freeside.git] / httemplate / misc / xmlhttp-cust_main-address_standardize.html
1 <% to_json($return) %>
2 <%init>
3
4 my $DEBUG = 1;
5
6 my $conf = new FS::Conf;
7
8 my $sub = $cgi->param('sub');
9
10 my $return = {};
11
12 if ( $sub eq 'address_standardize' ) {
13
14   my %arg = $cgi->param('arg');
15   $return = \%arg;
16   warn join('', map "$_: $arg{$_}\n", keys %arg )
17     if $DEBUG;
18
19   my $userid   = $conf->config('usps_webtools-userid');
20   my $password = $conf->config('usps_webtools-password');
21
22   if ( length($userid) && length($password) ) {
23
24     my $verifier = Business::US::USPS::WebTools::AddressStandardization->new( {
25       UserID   => $userid,   #$ENV{USPS_WEBTOOLS_USERID},
26       Password => $password, #$ENV{USPS_WEBTOOLS_PASSWORD},
27       #Testing  => 1,
28     } );
29
30     foreach my $pre ( '', 'ship_' ) {
31
32       my($zip5, $zip4) = split('-',$arg{$pre.'zip'});
33
34       my %usps_args = (
35         FirmName => $arg{$pre.'company'},
36         Address2 => $arg{$pre.'address1'},
37         Address1 => $arg{$pre.'address2'},
38         City     => $arg{$pre.'city'},  
39         State    => $arg{$pre.'state'},
40         Zip5     => $zip5,
41         Zip4     => $zip4,
42       );
43       warn join('', map "$_: $usps_args{$_}\n", keys %usps_args )
44         if $DEBUG;
45
46       my $hash = $verifier->verify_address( %usps_args );
47
48       warn $verifier->response
49         if $DEBUG;
50
51       unless ( $verifier->is_error ) {
52
53         $return = {
54           %$return,
55           "new_$pre".'company'  => $hash->{FirmName},
56           "new_$pre".'address1' => $hash->{Address2},
57           "new_$pre".'address2' => $hash->{Address1},
58           "new_$pre".'city'     => $hash->{City},
59           "new_$pre".'state'    => $hash->{State},
60           "new_$pre".'zip'      => $hash->{Zip5}. '-'. $hash->{Zip4},
61         };
62
63         my @fields = (qw( company address1 address2 city state zip )); #hmm
64
65         my $changed =
66           scalar( grep { $return->{$pre.$_} ne $return->{"new_$pre$_"} }
67                        @fields
68                 )
69             ? 1 : 0;
70
71         $return->{$pre.'address_standardized'} = $changed;
72
73       } else {
74
75         warn "USPS WebTools error: ". $verifier->response. "\n";
76
77       }
78
79     }
80
81   }
82
83   $return;
84
85 }
86
87 </%init>