X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcdr.pm;h=36721a81adf8fa426880f7cd8ef0371677bc9551;hb=5d5e7f7248d786938c08c867c9ad8f855f92c532;hp=b7d78766e316f077bb07c349dec79ab7c82b22f4;hpb=c48fdd594e7d7cfb7ac0401040f2f37401f39538;p=freeside.git diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index b7d78766e..36721a81a 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -541,6 +541,10 @@ my %export_names = ( 'name' => 'Default plus accountcode', 'invoice_header' => 'Date,Time,Account,Number,Destination,Duration,Price', }, + 'description_default' => { + 'name' => 'Default with description field as destination', + 'invoice_header' => 'Caller,Date,Time,Number,Destination,Duration,Price', + }, ); my %export_formats = (); @@ -552,17 +556,18 @@ sub export_formats { my $conf = new FS::Conf; my $date_format = $conf->config('date_format') || '%m/%d/%Y'; - # This is now smarter, and shows the call duration in the - # largest units that accurately reflect the granularity. + # call duration in the largest units that accurately reflect the granularity my $duration_sub = sub { my($cdr, %opt) = @_; my $sec = $opt{seconds} || $cdr->billsec; - if ( length($opt{granularity}) && + if ( defined $opt{granularity} && $opt{granularity} == 0 ) { #per call return '1 call'; } - elsif ( $opt{granularity} == 60 ) {#full minutes - return sprintf("%.0fm",$sec/60); + elsif ( defined $opt{granularity} && $opt{granularity} == 60 ) {#full minutes + my $min = int($sec/60); + $min++ if $sec%60; + return $min.'m'; } else { #anything else return sprintf("%dm %ds", $sec/60, $sec%60); @@ -615,7 +620,10 @@ sub export_formats { $duration_sub, #PRICE - sub { my($cdr, %opt) = @_; $opt{money_char}. $opt{charge}; }, + sub { my($cdr, %opt) = @_; + $opt{charge} = '0.00' unless defined $opt{charge}; + $opt{money_char}.$opt{charge}; + }, ], ); @@ -625,8 +633,13 @@ sub export_formats { 'accountcode', @{ $export_formats{'default'} }[2..5], ]; + my @default = @{ $export_formats{'default'} }; + $export_formats{'description_default'} = + [ 'src', @default[0..2], + sub { my($cdr, %opt) = @_; $cdr->description }, + @default[4,5] ]; - %export_formats + return %export_formats; } sub downstream_csv { @@ -650,6 +663,8 @@ sub downstream_csv { } @{ $formats{$format} }; + return @columns if defined $opt{'keeparray'}; + my $status = $csv->combine(@columns); die "FS::CDR: error combining ". $csv->error_input(). "into downstream CSV" unless $status; @@ -896,7 +911,7 @@ my %import_options = ( }, #drop the || 'csv' to allow auto xls for csv types? - 'format_types' => { map { $_ => ( lc($cdr_info{$_}->{'type'}) || 'csv' ); } + 'format_types' => { map { $_ => lc($cdr_info{$_}->{'type'} || 'csv'); } keys %cdr_info }, @@ -933,6 +948,14 @@ sub batch_import { my $iopt = _import_options; $opt->{$_} = $iopt->{$_} foreach keys %$iopt; + if ( defined $opt->{'cdrtypenum'} ) { + $opt->{'preinsert_callback'} = sub { + my($record,$param) = (shift,shift); + $record->cdrtypenum($opt->{'cdrtypenum'}); + ''; + }; + } + FS::Record::batch_import( $opt ); }