summaryrefslogtreecommitdiff
path: root/bin/rate-domestic-flat.import
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2016-06-14 11:30:58 -0700
committerMark Wells <mark@freeside.biz>2016-06-14 11:31:04 -0700
commit723174d9277754388b962b3acb17b5915c377911 (patch)
tree2adee64d1cf8e898c350b244968ee19872550ffd /bin/rate-domestic-flat.import
parent9cb3699fb3c02c0f74592c1a34960758a33aef26 (diff)
script to import domestic rate deck in simple format, #71232
Diffstat (limited to 'bin/rate-domestic-flat.import')
-rwxr-xr-xbin/rate-domestic-flat.import105
1 files changed, 105 insertions, 0 deletions
diff --git a/bin/rate-domestic-flat.import b/bin/rate-domestic-flat.import
new file mode 100755
index 0000000..f4a6c45
--- /dev/null
+++ b/bin/rate-domestic-flat.import
@@ -0,0 +1,105 @@
+#!/usr/bin/perl
+
+use strict;
+use Text::CSV;
+use FS::Misc::Getopt;
+use FS::Record qw(qsearchs qsearch dbh);
+use FS::rate;
+use FS::rate_region;
+use FS::rate_prefix;
+use FS::rate_detail;
+
+our %opt;
+getopts('r:g:'); # ratename, granularity
+
+$FS::UID::AutoCommit = 0;
+my $dbh = dbh;
+
+my $file = shift or usage();
+open my $in, '<', $file or die "$file: $!\n";
+my $csv = Text::CSV->new({ binary => 1, auto_diag => 2 });
+# set header row
+$csv->column_names($csv->getline($in));
+# Format:
+# Destination (regionname)
+# BilledPrefix (prefix)
+# RetailRate (per minute)
+
+my $error;
+
+my $granularity = $opt{g} || 1;
+
+usage() unless $opt{r};
+my $rate = qsearchs('rate', { 'ratename' => $opt{r} });
+if (!$rate) {
+ $rate = FS::rate->new({ 'ratename' => $opt{r} });
+ $error = $rate->insert;
+ die $error if $error;
+}
+
+while (my $row = $csv->getline_hr($in)) {
+ print $csv->string;
+
+ my $region = qsearchs('rate_region', {
+ 'regionname' => $row->{'Destination'}
+ });
+ if (!$region) {
+ $region = FS::rate_region->new({
+ 'regionname' => $row->{'Destination'}
+ });
+ $error = $region->insert;
+ die $error if $error;
+ }
+
+ my $prefix = $row->{'BilledPrefix'};
+ $prefix =~ s/^1//;
+
+ my %prefix = (
+ 'countrycode' => '1',
+ 'npa' => $prefix,
+ );
+ my $rate_prefix = qsearchs('rate_prefix', \%prefix);
+ if (!$rate_prefix) {
+ $rate_prefix = FS::rate_prefix->new(\%prefix);
+ $rate_prefix->set('regionnum', $region->regionnum);
+ $error = $rate_prefix->insert;
+ } else {
+ $rate_prefix->set('regionnum', $region->regionnum);
+ $error = $rate_prefix->replace;
+ }
+ die $error if $error;
+
+ # enough to identify the detail
+ my %detail = (
+ 'ratenum' => $rate->ratenum,
+ 'dest_regionnum' => $region->regionnum,
+ 'cdrtypenum' => '',
+ 'ratetimenum' => '',
+ );
+ my $dest_detail = qsearchs('rate_detail', \%detail);
+ # ProfileRate is 5 decimal places, same as rate_detail.min_charge
+ if (!$dest_detail) {
+ $dest_detail = FS::rate_detail->new({
+ %detail,
+ 'min_included' => 0,
+ 'min_charge' => $row->{RetailRate},
+ 'sec_granularity' => $granularity,
+ });
+ $error = $dest_detail->insert;
+ } else {
+ local $FS::Record::nowarn_identical = 1;
+ $dest_detail->set('min_charge' => $row->{RetailRate});
+ $error = $dest_detail->replace;
+ }
+ die $error if $error;
+}
+dbh->commit;
+print "Finished.\n";
+
+
+sub usage {
+ die "Usage: rate-intl.import -r ratename
+ [ -g granularity ]
+ <user> <file>.csv\n\n";
+}
+