X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcdr.pm;h=2406557348efbd36e5c87299b110d9d28d9a2985;hb=0a02d33bed6155752cf3f2886915bc6287d13636;hp=bd0ed57e90490095f00018acd2d14b203b91ca0a;hpb=a4dc6eea04eb566cfa21d424fe1bd62661134fdf;p=freeside.git diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index bd0ed57e9..240655734 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -548,14 +548,24 @@ 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. my $duration_sub = sub { my($cdr, %opt) = @_; - if ( $opt{minutes} ) { - $opt{minutes}. ( $opt{granularity} ? 'm' : ' call' ); - } else { - #config if anyone really wants decimal minutes back - #sprintf('%.2fm', $cdr->billsec / 60 ); - int($cdr->billsec / 60).'m '. ($cdr->billsec % 60).'s'; + my $sec = $opt{seconds} || $cdr->billsec; + if ( length($opt{granularity}) && + $opt{granularity} == 0 ) { #per call + return '1 call'; + } + elsif ( $opt{granularity} == 60 ) {#full minutes + return sprintf("%.0fm",$sec/60); + } + elsif ( $opt{granularity} == 6 || + $opt{granularity} == 30 ) {#tenths or halves + return sprintf("%.01fm",$sec/60); + } + else { #seconds, or unspecified + return sprintf("%dm %ds", $sec/60, $sec%60); } }; @@ -768,8 +778,11 @@ sub _cdr_date_parse { if ( $date =~ /^\s*(\d{4})\D(\d{1,2})\D(\d{1,2})\D+(\d{1,2})\D(\d{1,2})\D(\d{1,2})(\D|$)/ ) { ($year, $mon, $day, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 ); - } elsif ( $date =~ /^\s*(\d{1,2})\D(\d{1,2})\D(\d{4})\s+(\d{1,2})\D(\d{1,2})\D(\d{1,2})(\D|$)/ ) { + } elsif ( $date =~ /^\s*(\d{1,2})\D(\d{1,2})\D(\d{4})\s+(\d{1,2})\D(\d{1,2})(?:\D(\d{1,2}))?(\D|$)/ ) { + # 8/26/2010 12:20:01 + # optionally without seconds ($mon, $day, $year, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 ); + $sec = 0 if !defined($sec); } elsif ( $date =~ /^\s*(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d+\.\d+)(\D|$)/ ) { # broadsoft: 20081223201938.314 ($year, $mon, $day, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 ); @@ -899,9 +912,14 @@ sub _upgrade_data { my %cdrbatchnum = (); while (my $row = $sth->fetchrow_arrayref) { - my $cdr_batch = new FS::cdr_batch { 'cdrbatch' => $row->[0] }; - my $error = $cdr_batch->insert; - die $error if $error; + + my $cdr_batch = qsearchs( 'cdr_batch', { 'cdrbatch' => $row->[0] } ); + unless ( $cdr_batch ) { + $cdr_batch = new FS::cdr_batch { 'cdrbatch' => $row->[0] }; + my $error = $cdr_batch->insert; + die $error if $error; + } + $cdrbatchnum{$row->[0]} = $cdr_batch->cdrbatchnum; }