Ticket #39615 Fix versions for upgrades
[freeside.git] / bin / rate.import
1 #!/usr/bin/perl
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 #my $file = shift or usage();
17 my $file = 'areas and rates.xls';
18 my $dbh = DBI->connect("DBI:Excel:file=$file")
19   or die "can't connect: $DBI::errstr";
20
21 #my $table = shift or usage();
22 my $table = 'areas_and_rates';
23 my $sth = $dbh->prepare("select * from $table")
24   or die "can't prepare: ". $dbh->errstr;
25 $sth->execute
26   or die "can't execute: ". $sth->errstr;
27
28 sub usage {
29   #die "Usage:\n\n  rate.import user rates.xls worksheet_name";
30   die "Usage:\n\n  rate.import user";
31 }
32
33 ##
34
35 while ( my $row = $sth->fetchrow_hashref ) {
36
37   #print join(' - ', map $row->{$_}, qw( Country Code Area_Prefix Rate ) ). "\n";
38
39   my $regionname = $row->{'Country'};
40   $regionname =~ s/\xA0//g;
41   $regionname =~ s/\xE9/e/g; #e with accent aigu
42   $regionname =~ s/(^\s+|\s+$)//;
43
44   #next if $regionname =~ /Sweden Telia Mobile/;
45
46   my $rate_region = new FS::rate_region {
47     'regionname' => $regionname,
48   };
49
50   my $prefix = $row->{'Area_Prefix'};
51   $prefix =~ s/\xA0//g;
52   $prefix =~ s/\s$//;
53   my $prefixprefix = '';
54   if ( $prefix =~ /^\s*(\d+)\s*\((.*)\)\s*$/ ) {
55     $prefixprefix = $1;
56     $prefix = $2;
57   } elsif ( $prefix =~ /^\s*\((\d{3})\)\s*(.*)$/ ) {
58     $prefixprefix = $1;
59     $prefix = $2;
60   }
61
62   my @rate_prefix = ();
63   if ( $prefix =~ /\d/ ) {
64
65     @rate_prefix = map { 
66                          #warn $row->{'Country'}. ": $prefixprefix$_\n";
67                          new FS::rate_prefix {
68                            'countrycode' => $row->{'Code'},
69                            'npa'         => $prefixprefix.$_,
70                          };
71                        }
72                        split(/\s*[;,]\s*/, $prefix);
73
74   } else {
75     @rate_prefix = ( new FS::rate_prefix {
76                        'countycode' => $row->{'Code'},
77                        'npa'        => '',
78                      };
79                    );
80   }
81
82   my $dest_detail = new FS::rate_detail {
83                                           'ratenum'         => $ratenum,
84                                           'min_included'    => 0,
85                                           'min_charge'      =>
86                                               sprintf('%.2f', $row->{'Rate'} ),
87                                           'sec_granularity' => 60,
88                                         };
89   
90   my $error = $rate_region->insert( 'rate_prefix' => \@rate_prefix,
91                                     'dest_detail' => [ $dest_detail ],
92                                   );
93   die $error if $error;
94
95 }