X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcdr.pm;h=5848f9bbe771c49a395e4304dffe7fe7c8851e51;hb=563c1cdfa7f072fad440f21720c898b5d93791fa;hp=3b5579ca31db536166bf2bf42e9ea1c73485aeda;hpb=8a8d007453fa916bcb62223a1da620728b8df269;p=freeside.git diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index 3b5579ca3..5848f9bbe 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -15,7 +15,7 @@ use FS::cdr_carrier; use FS::cdr_upstream_rate; @ISA = qw(FS::Record); -@EXPORT_OK = qw( _cdr_date_parser_maker ); +@EXPORT_OK = qw( _cdr_date_parser_maker _cdr_min_parser_maker ); $DEBUG = 0; @@ -129,6 +129,8 @@ following fields are currently supported: =item freesidestatus - NULL, done (or something) +=item cdrbatch + =back =head1 METHODS @@ -244,14 +246,16 @@ sub check { my $error = $self->ut_numbern('acctid') - #Usage = 1, S&E = 7, OC&C = 8 - || $self->ut_foreign_keyn('cdrtypenum', 'cdr_type', 'cdrtypenum' ) - - #the big list in appendix 2 - || $self->ut_foreign_keyn('calltypenum', 'cdr_calltype', 'calltypenum' ) - - # Telstra =1, Optus = 2, RSL COM = 3 - || $self->ut_foreign_keyn('carrierid', 'cdr_carrier', 'carrierid' ) + #add a config option to turn these back on if someone needs 'em + # + # #Usage = 1, S&E = 7, OC&C = 8 + # || $self->ut_foreign_keyn('cdrtypenum', 'cdr_type', 'cdrtypenum' ) + # + # #the big list in appendix 2 + # || $self->ut_foreign_keyn('calltypenum', 'cdr_calltype', 'calltypenum' ) + # + # # Telstra =1, Optus = 2, RSL COM = 3 + # || $self->ut_foreign_keyn('carrierid', 'cdr_carrier', 'carrierid' ) ; return $error if $error; @@ -547,6 +551,23 @@ sub import_formats { %import_formats; } +sub _cdr_min_parser_maker { + my $field = shift; + my @fields = ref($field) ? @$field : ($field); + @fields = qw( billsec duration ) unless scalar(@fields); + return sub { + my( $cdr, $min ) = @_; + my $sec = eval { _cdr_min_parse($min) }; + die "error parsing seconds for @fields from $min minutes: $@\n" if $@; + $cdr->$_($sec) foreach @fields; + }; +} + +sub _cdr_min_parse { + my $min = shift; + sprintf('%.0f', $min * 60 ); +} + sub _cdr_date_parser_maker { my $field = shift; return sub { @@ -600,6 +621,7 @@ sub batch_import { my $fh = $param->{filehandle}; my $format = $param->{format}; + my $cdrbatch = $param->{cdrbatch}; return "Unknown format $format" unless exists( $cdr_info{$format} ) @@ -613,11 +635,11 @@ sub batch_import { if ( $type eq 'csv' ) { eval "use Text::CSV_XS;"; die $@ if $@; - my $parser = new Text::CSV_XS; + $parser = new Text::CSV_XS; } elsif ( $type eq 'fixedlength' ) { eval "use Parse::FixedLength;"; die $@ if $@; - my $parser = new Parse::FixedLength $info->{'fixedlength_format'}; + $parser = new Parse::FixedLength $info->{'fixedlength_format'}; } else { die "Unknown CDR format type $type for format $format\n"; } @@ -682,6 +704,8 @@ sub batch_import { } @{ $info->{'import_fields'} } ; + + $cdr{cdrbatch} = $cdrbatch; my $cdr = new FS::cdr ( \%cdr ); @@ -715,7 +739,7 @@ sub batch_import { $dbh->commit or die $dbh->errstr if $oldAutoCommit; #might want to disable this if we skip records for any reason... - return "Empty file!" unless $imported; + return "Empty file!" unless $imported || $param->{empty_ok}; '';