6 use FS::Record qw( dbh );
14 $FS::UID::AutoCommit = 0;
18 # import rate ("profiles")
21 my $file = shift or usage();
22 open my $in, '<', $file or die "$file: $!\n";
23 my $csv = Text::CSV->new({ binary => 1, auto_diag => 2 });
30 while (my $row = $csv->getline($in)) {
32 my $profilekey = $row->[1];
34 my $granularity = $row->[5];
35 my $currency = $row->[18];
36 my $rate = new FS::rate {
37 'ratename' => "$currency: $name",
38 'agent_rateid' => $profilekey,
40 my $error = $rate->insert;
43 $granularity{$rate->ratenum} = $granularity;
45 $rate{$profilekey} = $rate;
51 # import rate_region and rate_detail ("destination rates")
54 my $rfile = shift or usage();
55 open my $rin, '<', $rfile or die "$rfile: $!\n";
62 while( my $row = $csv->getline($rin) ) {
64 my( $profilekey, $currency, $destid, $profilerate, $destkey ) = @$row;
67 my $rate = $rate{$profilekey};
68 my $ratecurrency = (split(':', $rate->ratename) )[0];
69 die "currency mismatch" unless $currency eq $ratecurrency;
71 unless ( $rate_region{ $destkey } ) {
73 if ( $destid =~ /^(.*)\n\1$/ ) {
78 my $rate_region = new FS::rate_region {
79 'regionname' => "$destkey: $destid",
81 my $error = $rate_region->insert;
83 warn "$destkey: $destid\n";
85 $rate_region{$destkey} = $rate_region;
89 my $rate_detail = new FS::rate_detail {
90 'ratenum' => $rate->ratenum,
91 'dest_regionnum' => $rate_region{$destkey}->regionnum,
92 'min_charge' => $profilerate,
93 'sec_granularity' => $granularity{ $rate->ratenum },
96 my $error = $rate_detail->insert;
104 # ??? import rate_prefix ("destinations?")
111 print STDERR "(dry run) ";
116 print "Inserted $rd rates for $rr regions in $rp rate plans\n";
121 die "Usage: rate-ptelecom.import [ -d ] <user> profiles.csv rates.csv\n"