diff options
author | ivan <ivan> | 2012-01-02 03:59:03 +0000 |
---|---|---|
committer | ivan <ivan> | 2012-01-02 03:59:03 +0000 |
commit | 721328592e2235848d2011ab74c754e27f908e87 (patch) | |
tree | 3409f2b356c6bb152dede7cfd46c580f4522a275 | |
parent | 08fe29390989d98c5247e86416a5a73a241f9522 (diff) |
reprocess a CDR listed in cdr-prerate-cdrtypenums will now place it back in "rated" state, RT#15839
-rw-r--r-- | FS/FS/cdr.pm | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index 0fc16587f..cb866ca58 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -1,7 +1,9 @@ package FS::cdr; use strict; -use vars qw( @ISA @EXPORT_OK $DEBUG $me ); +use vars qw( @ISA @EXPORT_OK $DEBUG $me + $conf $cdr_prerate %cdr_prerate_cdrtypenums + ); use Exporter; use Tie::IxHash; use Date::Parse; @@ -25,6 +27,17 @@ use FS::rate_detail; $DEBUG = 0; $me = '[FS::cdr]'; +#ask FS::UID to run this stuff for us later +FS::UID->install_callback( sub { + $conf = new FS::Conf; + + my @cdr_prerate_cdrtypenums; + $cdr_prerate = $conf->exists('cdr-prerate'); + @cdr_prerate_cdrtypenums = $conf->config('cdr-prerate-cdrtypenums') + if $cdr_prerate; + %cdr_prerate_cdrtypenums = map { $_=>1 } @cdr_prerate_cdrtypenums; +}); + =head1 NAME FS::cdr - Object methods for cdr records @@ -1240,7 +1253,15 @@ sub clear_status { local $FS::UID::AutoCommit = 0; my $dbh = dbh; - $self->freesidestatus(''); + if ( $cdr_prerate && $cdr_prerate_cdrtypenums{$self->cdrtypenum} + && $self->freesidestatus eq 'done' + ) + { #special case + $self->freesidestatus('rated'); + } else { + $self->freesidestatus(''); + } + my $error = $self->replace; if ( $error ) { $dbh->rollback if $oldAutoCommit; |