X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcdr.pm;h=421fd2bb8e5cd95f5312d4cfaef0f657782b96ae;hb=deba223d89f516851d24d535d785cc2b39b7784c;hp=35bb71cf6d93072ded9149a12c39d905b40af5a7;hpb=9483773ebd5056d28ca55fa0895492dd255c2542;p=freeside.git diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index 35bb71cf6..421fd2bb8 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -269,6 +269,17 @@ sub check { $self->SUPER::check; } +=item is_tollfree + + Returns true when the cdr represents a toll free number and false otherwise. + +=cut + +sub is_tollfree { + my $self = shift; + ( $self->dst =~ /^(\+?1)?8(8|([02-7])\3)/ ) ? 1 : 0; +} + =item set_charged_party If the charged_party field is already set, does nothing. Otherwise: @@ -284,9 +295,9 @@ or to the dst field if it is a toll free number. sub set_charged_party { my $self = shift; - unless ( $self->charged_party ) { + my $conf = new FS::Conf; - my $conf = new FS::Conf; + unless ( $self->charged_party ) { if ( $conf->exists('cdr-charged_party-accountcode') && $self->accountcode ){ @@ -294,7 +305,7 @@ sub set_charged_party { } else { - if ( $self->dst =~ /^(\+?1)?8[02-8]{2}/ ) { + if ( $self->is_tollfree ) { $self->charged_party($self->dst); } else { $self->charged_party($self->src); @@ -304,6 +315,14 @@ sub set_charged_party { } +# my $prefix = $conf->config('cdr-charged_party-truncate_prefix'); +# my $prefix_len = length($prefix); +# my $trunc_len = $conf->config('cdr-charged_party-truncate_length'); +# +# $self->charged_party( substr($self->charged_party, 0, $trunc_len) ) +# if $prefix_len && $trunc_len +# && substr($self->charged_party, 0, $prefix_len) eq $prefix; + } =item set_status_and_rated_price STATUS [ RATED_PRICE ] @@ -670,10 +689,11 @@ sub _cdr_min_parse { sub _cdr_date_parser_maker { my $field = shift; + my %options = @_; my @fields = ref($field) ? @$field : ($field); return sub { my( $cdr, $datestring ) = @_; - my $unixdate = eval { _cdr_date_parse($datestring) }; + my $unixdate = eval { _cdr_date_parse($datestring, %options) }; die "error parsing date for @fields from $datestring: $@\n" if $@; $cdr->$_($unixdate) foreach @fields; }; @@ -681,6 +701,7 @@ sub _cdr_date_parser_maker { sub _cdr_date_parse { my $date = shift; + my %options = @_; return '' unless length($date); #that's okay, it becomes NULL @@ -700,7 +721,11 @@ sub _cdr_date_parse { return '' if $year == 1900 && $mon == 1 && $day == 1 && $hour == 0 && $min == 0 && $sec == 0; - timelocal($sec, $min, $hour, $day, $mon-1, $year); + if ($options{gmt}) { + timegm($sec, $min, $hour, $day, $mon-1, $year); + } else { + timelocal($sec, $min, $hour, $day, $mon-1, $year); + } } =item batch_import HASHREF