RT# 81830 Critical log event for corrupted invoice data
[freeside.git] / bin / rate-us.import
1 #!/usr/bin/perl -w
2
3 use strict;
4 #use Spreadsheet::ParseExcel;
5 use DBI;
6 use FS::UID qw(adminsuidsetup);
7 use FS::rate_region;
8 use FS::rate_prefix;
9 use FS::rate_region;
10
11 my $ratenum = 1;
12
13 my $user = shift or usage();
14 adminsuidsetup $user;
15
16 sub usage {
17   #die "Usage:\n\n  rate.import user rates.xls worksheet_name";
18   die "Usage:\n\n  rate.import user";
19 }
20
21 my %rate_region;
22
23 foreach my $file ( 'areas and rates US.xls',
24                    'areas and rates US2.xls',
25                    'areas and rates US3.xls',
26                  )
27 {
28
29   my $dbh = DBI->connect("DBI:Excel:file=$file")
30     or die "can't connect: $DBI::errstr";
31   
32   #my $table = shift or usage();
33   my $table = 'Sheet1';
34   my $sth = $dbh->prepare("select * from $table")
35     or die "can't prepare: ". $dbh->errstr;
36   $sth->execute
37     or die "can't execute: ". $sth->errstr;
38   
39   while ( my $row = $sth->fetchrow_hashref ) {
40   
41     #print join(' - ', map $row->{$_}, qw( rate_center Code Area_Prefix Rate ) ). "\n";
42   
43     my $regionname = $row->{'rate_center'};
44     $regionname =~ s/\xA0//g;
45     #$regionname =~ s/\xE9/e/g; #e with accent aigu
46     $regionname =~ s/(^\s+|\s+$)//;
47     $regionname .= ', USA';
48   
49     my $prefix = $row->{'area_prefix'};
50     $prefix =~ s/\xA0//g;
51     $prefix =~ s/\s$//;
52     #my $prefixprefix = '';
53     #if ( $prefix =~ /^\s*(\d+)\s*\((.*)\)\s*$/ ) {
54     #  $prefixprefix = $1;
55     #  $prefix = $2;
56     #} elsif ( $prefix =~ /^\s*\((\d{3})\)\s*(.*)$/ ) {
57     #  $prefixprefix = $1;
58     #  $prefix = $2;
59     #}
60   
61     my @rate_prefix = map { 
62                             #warn $row->{'rate_center'}. ": $prefixprefix$_\n";
63                             new FS::rate_prefix {
64                               'countrycode' => '1', # $row->{'Country'}
65                               #'npa'         => $prefixprefix.$_,
66                               'npa'         => $_,
67                             };
68                           }
69                           split(/\s*[;,]\s*/, $prefix);
70   
71   
72     my $dest_detail = new FS::rate_detail {
73                                             'ratenum'         => $ratenum,
74                                             'min_included'    => 0,
75                                             'min_charge'      =>
76                                                 sprintf('%.2f', $row->{'rate'} ),
77                                             'sec_granularity' => 60,
78                                           };
79
80     unless ( exists $rate_region{$regionname} ) {
81
82       my $rate_region = new FS::rate_region {
83         'regionname' => $regionname,
84       };
85
86       my $error = $rate_region->insert( 'rate_prefix' => \@rate_prefix,
87                                         'dest_detail' => [ $dest_detail ],
88                                       );
89       die $error if $error;
90
91       $rate_region{$regionname} = $rate_region->regionnum;
92
93     } else {
94
95       foreach my $rate_prefix ( @rate_prefix ) {
96         $rate_prefix->regionnum($rate_region{$regionname});
97         my $error = $rate_prefix->insert;
98         die $error if $error;
99       }
100
101       #$rate_detail->dest_regionnum($rate_region{$regionname});
102       #$error = $rate_detail->insert;
103       #die $error if $error;
104
105     }
106   
107   }
108
109 }