6 use FS::Record qw( dbh );
15 $FS::UID::AutoCommit = 0;
19 # import rate ("profiles")
22 my $file = shift or usage();
23 open my $in, '<', $file or die "$file: $!\n";
24 my $csv = Text::CSV->new({ binary => 1, auto_diag => 2 });
31 while (my $row = $csv->getline($in)) {
33 my $profilekey = $row->[1];
35 my $granularity = $row->[5];
36 my $currency = $row->[18];
37 my $rate = new FS::rate {
38 'ratename' => "$currency: $name",
39 'agent_rateid' => $profilekey,
41 my $error = $rate->insert;
44 $granularity{$rate->ratenum} = $granularity;
46 $rate{$profilekey} = $rate;
52 # import rate_region and rate_detail ("destination rates")
55 my $rfile = shift or usage();
56 open my $rin, '<', $rfile or die "$rfile: $!\n";
63 while( my $row = $csv->getline($rin) ) {
65 my( $profilekey, $currency, $destid, $profilerate, $destkey ) = @$row;
68 my $rate = $rate{$profilekey};
69 my $ratecurrency = (split(':', $rate->ratename) )[0];
70 die "currency mismatch" unless $currency eq $ratecurrency;
72 unless ( $rate_region{ $destkey } ) {
74 if ( $destid =~ /^(.*)\n\1$/ ) {
79 my $rate_region = new FS::rate_region {
80 'regionname' => $destid,
81 'agent_regionid' => $destkey,
83 my $error = $rate_region->insert;
85 warn "$destkey: $destid\n";
87 $rate_region{$destkey} = $rate_region;
91 my $rate_detail = new FS::rate_detail {
92 'ratenum' => $rate->ratenum,
93 'dest_regionnum' => $rate_region{$destkey}->regionnum,
94 'min_charge' => $profilerate,
95 'sec_granularity' => $granularity{ $rate->ratenum },
98 my $error = $rate_detail->insert;
106 # import rate_prefix ("country")
109 my $pfile = shift or usage();
110 open my $pin, '<', $pfile or die "$pfile: $!\n";
113 while( my $row = $csv->getline($pin) ) {
114 my $destkey = $row->[1];
115 my $prefix = $row->[4];
116 my $countrycode = $row->[20];
117 #my $npa = $row->[21];
118 #my $npa2 = $row->[22];
119 my $pattern = $row->[24];
121 #$npa = '' if $npa eq 'NULL';
122 #$npa2 = '' if $npa2 eq 'NULL';
124 die "destkey $destkey: $prefix ne $pattern\n"
125 if $prefix ne $pattern;
127 if ( $countrycode eq 'NULL' ) {
128 warn "destkey $destkey: countrycode is null for prefix $prefix; skipping\n";
132 my $rate_region = $rate_region{$destkey}
134 warn "destkey $destkey: not found for prefix $prefix; skipping\n";
138 $prefix =~ s/^\Q$countrycode\E//;
142 my $rate_prefix = new FS::rate_prefix {
143 'regionnum' => $rate_region->regionnum,
144 'countrycode' => $countrycode,
147 my $error = $rate_prefix->insert;
148 die "error inserting rate_prefix: $error for cc $countrycode prefix $prefix"
153 #print '.' if $rx % 1000 == 0;
159 print STDERR "(dry run) ";
164 print "Inserted $rd rates for $rr regions with $rx prefixes in $rp rate plans\n";
169 die "Usage: rate-ptelecom.import [ -d ] <user> profiledestinationrates.csv callratingprofiles.csv country.csv\n"