MT#16777 Fix up/downloading CSV

Use proper fh to write and close
Also insert trailing rows not multiples of chunk size
Also download/upload routing number

Change-Id: I2654c880f89ccc58de1ff1eae320746ee3792788
changes/10/5410/4
Andreas Granig 10 years ago
parent 672f97e6eb
commit 82a58bde80

@ -5,6 +5,18 @@ use warnings;
use Text::CSV_XS;
use NGCP::Panel::Utils::MySQL;
sub _insert_batch {
my ($c, $schema, $numbers, $chunk_size) = @_;
NGCP::Panel::Utils::MySQL::bulk_insert(
c => $c,
schema => $schema,
do_transaction => 0,
query => "INSERT INTO billing.lnp_numbers(lnp_provider_id, number, routing_number, start, end)",
data => $numbers,
chunk_size => $chunk_size
);
}
sub upload_csv {
my(%params) = @_;
my ($c,$data,$schema) = @params{qw/c data schema/};
@ -13,7 +25,7 @@ sub upload_csv {
# csv bulk upload
my $csv = Text::CSV_XS->new({ allow_whitespace => 1, binary => 1, keep_meta_info => 1 });
#my @cols = @{ $c->config->{lnp_csv}->{element_order} };
my @cols = qw/carrier_name carrier_prefix number start end/;
my @cols = qw/carrier_name carrier_prefix number routing_number start end/;
my @fields ;
my @fails = ();
@ -42,25 +54,20 @@ sub upload_csv {
}
$row->{start} ||= undef;
$row->{end} ||= undef;
push @numbers, [$carriers{$k}, $row->{number}, $row->{start}, $row->{end}];
push @numbers, [$carriers{$k}, $row->{number}, $row->{routing_number}, $row->{start}, $row->{end}];
if($linenum % $chunk_size == 0) {
NGCP::Panel::Utils::MySQL::bulk_insert(
c => $c,
schema => $schema,
do_transaction => 0,
query => "INSERT INTO billing.lnp_numbers(lnp_provider_id, number, start, end)",
data => \@numbers,
chunk_size => $chunk_size
);
_insert_batch($c, $schema, \@numbers, $chunk_size);
@numbers = ();
}
}
if(@numbers) {
_insert_batch($c, $schema, \@numbers, $chunk_size);
}
$end = time;
close $fh;
$c->log->debug("Parsing and uploading LNP CSV took " . ($end - $start) . "s");
my $text = $c->loc('LNP numbers successfully uploaded');
if(@fails) {
$text .= $c->loc(", but skipped the following line numbers: ") . (join ", ", @fails);
@ -74,7 +81,7 @@ sub create_csv {
my($c) = @params{qw/c/};
#my @cols = @{ $c->config->{lnp_csv}->{element_order} };
my @cols = qw/carrier_name carrier_prefix number start end/;
my @cols = qw/carrier_name carrier_prefix number routing_number start end/;
my $lnp_rs = $c->stash->{number_rs}->search_rs(
undef,
@ -92,10 +99,10 @@ sub create_csv {
delete $lnp{id};
$lnp{start} =~ s/T\d{2}:\d{2}:\d{2}//;
$lnp{end} =~ s/T\d{2}:\d{2}:\d{2}//;
$c->res->write(join (",", @lnp{@cols}) );
$c->res->write("\n");
$c->res->write_fh->write(join (",", @lnp{@cols}) );
$c->res->write_fh->write("\n");
}
$c->res->close;
$c->res->write_fh->close;
$end = time;
$c->log->debug("Creating LNP CSV for download took " . ($end - $start) . "s");
return 1;

Loading…
Cancel
Save