X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_svc.pm;h=3ce13144c36df1bc5192f3d4f6dea1efd10c5d30;hp=c4a75f77a99c79ff226a7f0b218ddf5f7005cbbb;hb=20f38e4c256094bd938b732950e8f93319f851a5;hpb=9006e983ebf98b2000a812ab01f99dcb2335534c diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm index c4a75f77a..3ce13144c 100644 --- a/FS/FS/cust_svc.pm +++ b/FS/FS/cust_svc.pm @@ -251,6 +251,18 @@ sub replace { } } +# #trigger a re-export on pkgnum changes? +# # (of prepaid packages), for Expiration RADIUS attribute +# if ( $new->pkgnum != $old->pkgnum && $new->cust_pkg->part_pkg->is_prepaid ) { +# my $svc_x = $new->svc_x; +# local($FS::Record::nowarn_identical) = 1; +# my $error = $svc_x->export('replace'); +# if ( $error ) { +# $dbh->rollback if $oldAutoCommit; +# return $error if $error; +# } +# } + #my $error = $new->SUPER::replace($old, @_); my $error = $new->SUPER::replace($old); if ( $error ) { @@ -411,7 +423,7 @@ sub _svc_label { =item export_links -Returns a list of html elements associated with this services exports. +Returns a listref of html elements associated with this service's exports. =cut @@ -423,6 +435,21 @@ sub export_links { $svc_x->export_links; } +=item export_getsettings + +Returns two hashrefs of settings associated with this service's exports. + +=cut + +sub export_getsettings { + my $self = shift; + my $svc_x = $self->svc_x + or return "can't find ". $self->part_svc->svcdb. '.svcnum '. $self->svcnum; + + $svc_x->export_getsettings; +} + + =item svc_x Returns the FS::svc_XXX object for this service (i.e. an FS::svc_acct object or @@ -692,32 +719,57 @@ CDRs are associated with svc_phone services via svc_phone.phonenum =cut sub get_cdrs_for_update { + my $self = shift; + $self->get_cdrs( 'freesidestatus' => '', + 'for_update' => 1, + @_, + ); +} + +sub get_cdrs { my($self, %options) = @_; my @fields = ( 'charged_party' ); push @fields, 'src' unless $options{'disable_src'}; - #CDRs are now associated with svc_phone services via svc_phone.phonenum + my $for_update = $options{'for_update'} ? 'FOR UPDATE' : ''; + + my %hash = (); + $hash{'freesidestatus'} = $options{'freesidestatus'} + if exists($options{'freesidestatus'}); + + #CDRs are associated with svc_phone services via svc_phone.phonenum + #return () unless $self->svc_x->isa('FS::svc_phone'); return () unless $self->part_svc->svcdb eq 'svc_phone'; my $number = $self->svc_x->phonenum; my $prefix = $options{'default_prefix'}; - my @where = map " $_ = '$number' ", @fields; - push @where, map " $_ = '$prefix$number' ", @fields + my @orwhere = map " $_ = '$number' ", @fields; + push @orwhere, map " $_ = '$prefix$number' ", @fields if length($prefix); if ( $prefix =~ /^\+(\d+)$/ ) { - push @where, map " $_ = '$1$number' ", @fields + push @orwhere, map " $_ = '$1$number' ", @fields + } + + my @where = ( ' ( '. join(' OR ', @orwhere ). ' ) ' ); + + if ( $options{'begin'} ) { + push @where, 'startdate >= '. $options{'begin'}; + } + if ( $options{'end'} ) { + push @where, 'startdate < '. $options{'end'}; } - my $extra_sql = ' AND ( '. join(' OR ', @where ). ' ) '; + my $extra_sql = ( keys(%hash) ? ' AND ' : ' WHERE ' ). join(' AND ', @where ); my @cdrs = qsearch( { 'table' => 'cdr', - 'hashref' => { 'freesidestatus' => '', }, - 'extra_sql' => "$extra_sql FOR UPDATE", + 'hashref' => \%hash, + 'extra_sql' => $extra_sql, + 'order_by' => "ORDER BY startdate $for_update", } ); @cdrs;