From: ivan Date: Mon, 2 Jan 2012 03:59:03 +0000 (+0000) Subject: reprocess a CDR listed in cdr-prerate-cdrtypenums will now place it back in "rated... X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=721328592e2235848d2011ab74c754e27f908e87 reprocess a CDR listed in cdr-prerate-cdrtypenums will now place it back in "rated" state, RT#15839 --- 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;