[freeside-commits] branch master updated. 723174d9277754388b962b3acb17b5915c377911

Mark Wells mark at 420.am
Tue Jun 14 11:31:19 PDT 2016


The branch, master has been updated
       via  723174d9277754388b962b3acb17b5915c377911 (commit)
      from  9cb3699fb3c02c0f74592c1a34960758a33aef26 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 723174d9277754388b962b3acb17b5915c377911
Author: Mark Wells <mark at freeside.biz>
Date:   Tue Jun 14 11:30:58 2016 -0700

    script to import domestic rate deck in simple format, #71232

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";
+}
+

-----------------------------------------------------------------------

Summary of changes:
 ...{rate-intl.import => rate-domestic-flat.import} |   68 +++++++++-----------
 1 file changed, 30 insertions(+), 38 deletions(-)
 copy bin/{rate-intl.import => rate-domestic-flat.import} (50%)




More information about the freeside-commits mailing list