X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_svc.pm;h=e7afa77ead8b734f7800f04399bc1d3126b7d5b0;hb=c39fc534e347971479110595c6a4bb36b40e1198;hp=930e67375efa0d6d3cba15e178dd9f7c90d2b224;hpb=470a8626c0822e22a0b845b7c8ea1f09865db8a4;p=freeside.git diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm index 930e67375..e7afa77ea 100644 --- a/FS/FS/cust_svc.pm +++ b/FS/FS/cust_svc.pm @@ -16,6 +16,7 @@ use FS::svc_broadband; use FS::svc_external; use FS::domain_record; use FS::part_export; +use FS::cdr; @ISA = qw( FS::Record ); @@ -200,7 +201,7 @@ sub replace { =item check Checks all fields to make sure this is a valid service. If there is an error, -returns the error, otehrwise returns false. Called by the insert and +returns the error, otherwise returns false. Called by the insert and replace methods. =cut @@ -385,7 +386,8 @@ sub seconds_since_sqlradacct { my $svc_x = $self->svc_x; my @part_export = $self->part_svc->part_export_usage; - die "no usage-capable export configured for this service type" + die "no accounting-capable exports are enabled for ". $self->part_svc->svc. + " service definition" unless @part_export; #or return undef; @@ -493,7 +495,8 @@ sub attribute_since_sqlradacct { my $svc_x = $self->svc_x; my @part_export = $self->part_svc->part_export_usage; - die "no usage-capable export configured for this service type" + die "no accounting-capable exports are enabled for ". $self->part_svc->svc. + " service definition" unless @part_export; #or return undef; @@ -552,7 +555,8 @@ sub get_session_history { #$attrib ??? my @part_export = $self->part_svc->part_export_usage; - die "no accounting-capable exports are enabled for this service definition" + die "no accounting-capable exports are enabled for ". $self->part_svc->svc. + " service definition" unless @part_export; #or return undef; @@ -567,6 +571,50 @@ sub get_session_history { } +=item get_cdrs_for_update + +Returns (and SELECTs "FOR UPDATE") all unprocessed (freesidestatus NULL) CDR +objects (see L) associated with this service. + +Currently CDRs are associated with svc_acct services via a DID in the +username. This part is rather tenative and still subject to change... + +=cut + +sub get_cdrs_for_update { + my($self, %options) = @_; + + my $default_prefix = $options{'default_prefix'}; + + #Currently CDRs are associated with svc_acct services via a DID in the + #username. This part is rather tenative and still subject to change... + #return () unless $self->svc_x->isa('FS::svc_acct'); + return () unless $self->part_svc->svcdb eq 'svc_acct'; + my $number = $self->svc_x->username; + + my @cdrs = + qsearch( + 'table' => 'cdr', + 'hashref' => { 'freesidestatus' => '', + 'charged_party' => $number + }, + 'extra_sql' => 'FOR UPDATE', + ); + + if ( length($default_prefix) ) { + push @cdrs, + qsearch( + 'table' => 'cdr', + 'hashref' => { 'freesidestatus' => '', + 'charged_party' => "$default_prefix$number", + }, + 'extra_sql' => 'FOR UPDATE', + ); + } + + @cdrs; +} + =item pkg_svc Returns the pkg_svc record for for this service, if applicable.