use FS::cdr_type;
use FS::cdr_calltype;
use FS::cdr_carrier;
-use FS::cdr_upstream_rate;
@ISA = qw(FS::Record);
@EXPORT_OK = qw( _cdr_date_parser_maker _cdr_min_parser_maker );
if ( $conf->exists('cdr-charged_party-accountcode') && $self->accountcode ){
- $self->charged_party( $self->accountcode );
+ my $charged_party = $self->accountcode;
+ $charged_party =~ s/^0+//
+ if $conf->exists('cdr-charged_party-accountcode-trim_leading_0s');
+ $self->charged_party( $charged_party );
} else {
$cdr_calltype ? $cdr_calltype->calltypename : '';
}
-=item cdr_upstream_rate
-
-Returns the upstream rate mapping (see L<FS::cdr_upstream_rate>), or the empty
-string if no FS::cdr_upstream_rate object is associated with this CDR.
-
-=cut
-
-sub cdr_upstream_rate {
- my $self = shift;
- return '' unless $self->upstream_rateid;
- qsearchs('cdr_upstream_rate', { 'upstream_rateid' => $self->upstream_rateid })
- or '';
-}
-
-=item _convergent_format COLUMN [ COUNTRYCODE ]
-
-Returns the number in COLUMN formatted as follows:
-
-If the country code does not match COUNTRYCODE (default "61"), it is returned
-unchanged.
-
-If the country code does match COUNTRYCODE (default "61"), it is removed. In
-addiiton, "0" is prepended unless the number starts with 13, 18 or 19. (???)
-
-=cut
-
-sub _convergent_format {
- my( $self, $field ) = ( shift, shift );
- my $countrycode = scalar(@_) ? shift : '61'; #+61 = australia
- #my $number = $self->$field();
- my $number = $self->get($field);
- #if ( $number =~ s/^(\+|011)$countrycode// ) {
- if ( $number =~ s/^\+$countrycode// ) {
- $number = "0$number"
- unless $number =~ /^1[389]/; #???
- }
- $number;
-}
-
=item downstream_csv [ OPTION => VALUE, ... ]
=cut
my %export_names = (
- 'convergent' => {},
'simple' => {
'name' => 'Simple',
'invoice_header' => "Date,Time,Name,Destination,Duration,Price",
};
my %export_formats = (
- 'convergent' => [
- 'carriername', #CARRIER
- sub { shift->_convergent_format('src') }, #SERVICE_NUMBER
- sub { shift->_convergent_format('charged_party') }, #CHARGED_NUMBER
- sub { time2str('%Y-%m-%d', shift->calldate_unix ) }, #DATE
- sub { time2str('%T', shift->calldate_unix ) }, #TIME
- 'billsec', #'duration', #DURATION
- sub { shift->_convergent_format('dst') }, #NUMBER_DIALED
- '', #XXX add (from prefixes in most recent email) #FROM_DESC
- '', #XXX add (from prefixes in most recent email) #TO_DESC
- 'calltypename', #CLASS_CODE
- 'rated_price', #PRICE
- sub { shift->rated_price ? 'Y' : 'N' }, #RATED
- '', #OTHER_INFO
- ],
'simple' => [
sub { time2str('%D', shift->calldate_unix ) }, #DATE
sub { time2str('%r', shift->calldate_unix ) }, #TIME
sub downstream_csv {
my( $self, %opt ) = @_;
- my $format = $opt{'format'}; # 'convergent';
+ my $format = $opt{'format'};
return "Unknown format $format" unless exists $export_formats{$format};
#my $conf = new FS::Conf;
my %options = @_;
return '' unless length($date); #that's okay, it becomes NULL
+ return '' if $date eq 'NA'; #sansay
+
+ if ( $date =~ /^([a-z]{3})\s+([a-z]{3})\s+(\d{1,2})\s+(\d{1,2}):(\d{1,2}):(\d{1,2})\s+(\d{4})$/i && $7 > 1970 ) {
+ my $time = str2time($date);
+ return $time if $time > 100000; #just in case
+ }
my($year, $mon, $day, $hour, $min, $sec);
die "unparsable date: $date"; #maybe we shouldn't die...
}
- return '' if $year == 1900 && $mon == 1 && $day == 1
- && $hour == 0 && $min == 0 && $sec == 0;
+ return '' if ( $year == 1900 || $year == 1970 ) && $mon == 1 && $day == 1
+ && $hour == 0 && $min == 0 && $sec == 0;
if ($options{gmt}) {
timegm($sec, $min, $hour, $day, $mon-1, $year);