# ;
# return $error if $error;
- for my $f ( grep { $self->$_ =~ /[a-z ]/i } qw( startdate enddate ) ) {
+ for my $f ( grep { $self->$_ =~ /\D/ } qw(startdate answerdate enddate)){
$self->$f( str2time($self->$f) );
}
$export_names{$format}->{'invoice_header'};
}
+=item clear_status
+
+Clears cdr and any associated cdr_termination statuses - used for
+CDR reprocessing.
+
+=cut
+
+sub clear_status {
+ my $self = shift;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ $self->freesidestatus('');
+ my $error = $self->replace;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ my @cdr_termination = qsearch('cdr_termination',
+ { 'acctid' => $self->acctid } );
+ foreach my $cdr_termination ( @cdr_termination ) {
+ $cdr_termination->status('');
+ $error = $cdr_termination->replace;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
+ '';
+}
+
=item import_formats
Returns an ordered list of key value pairs containing import format names
} elsif ( $date =~ /^\s*(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/ ) {
# WIP: 20100329121420
($year, $mon, $day, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 );
+ } elsif ( $date =~ /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/) {
+ # Telos
+ ($year, $mon, $day, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 );
+ $options{gmt} = 1;
} else {
die "unparsable date: $date"; #maybe we shouldn't die...
}
keys %cdr_info
},
+ 'format_xml_formats' =>
+ { map { $_ => $cdr_info{$_}->{'xml_format'}; }
+ keys %cdr_info
+ },
+
'format_row_callbacks' => { map { $_ => $cdr_info{$_}->{'row_callback'}; }
keys %cdr_info
},