X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=FS%2FFS%2Fsvc_phone.pm;h=097310b0b65bc7260ec8dfdad03f488f82a65973;hb=b475ac28dcf56af7cb85d6a8471b8b4baf6130cd;hp=bb5757332fbafe66e0f250a1de1cdd6dffc03dd2;hpb=fa270adc74187564109bcdac9cc5fc4acfb4bf47;p=freeside.git diff --git a/FS/FS/svc_phone.pm b/FS/FS/svc_phone.pm index bb5757332..097310b0b 100644 --- a/FS/FS/svc_phone.pm +++ b/FS/FS/svc_phone.pm @@ -22,11 +22,10 @@ $DEBUG = 0; @pw_set = ( 'a'..'k', 'm','n', 'p-z', 'A'..'N', 'P'..'Z' , '2'..'9' ); #ask FS::UID to run this stuff for us later -FS::UID->install_callback( sub { +$FS::UID::callback{'FS::svc_acct'} = sub { $conf = new FS::Conf; $phone_name_max = $conf->config('svc_phone-phone_name-max_length'); -} -); +}; =head1 NAME @@ -68,10 +67,6 @@ primary key =item phonenum -=item sim_imsi - -SIM IMSI (http://en.wikipedia.org/wiki/International_mobile_subscriber_identity) - =item sip_password =item pin @@ -151,7 +146,6 @@ sub table_info { disable_select => 1, }, 'phonenum' => 'Phone number', - 'sim_imsi' => 'IMSI', #http://en.wikipedia.org/wiki/International_mobile_subscriber_identity 'pin' => { label => 'Voicemail PIN', #'Personal Identification Number', type => 'text', disable_inventory => 1, @@ -470,7 +464,6 @@ sub check { $self->ut_numbern('svcnum') || $self->ut_numbern('countrycode') || $self->$phonenum_check_method('phonenum') - || $self->ut_numbern('sim_imsi') || $self->ut_anything('sip_password') || $self->ut_numbern('pin') || $self->ut_textn('phone_name') @@ -491,10 +484,6 @@ sub check { ; return $error if $error; - return 'Illegal IMSI (not 14-15 digits)' #shorter? - if length($self->sim_imsi) - && ( length($self->sim_imsi) < 14 || length($self->sim_imsi) > 15 ); - # LNP data validation return 'Cannot set LNP fields: no LNP in progress' if ( ($self->lnp_desired_due_date || $self->lnp_due_date @@ -684,13 +673,15 @@ with the chosen prefix. =item disable_src => 1: Only match on "charged_party", not "src". +=item nonzero: Only return CDRs where duration > 0. + =item by_svcnum: not supported for svc_phone =back =cut -sub get_cdrs { +sub _search_cdrs { # transitional; replaced with psearch_cdrs in 3.0 my($self, %options) = @_; my @fields; my %hash; @@ -746,19 +737,48 @@ sub get_cdrs { if ( $options{'end'} ) { push @where, 'startdate < '. $options{'end'}; } + if ( $options{'nonzero'} ) { + push @where, 'duration > 0'; + } my $extra_sql = ( keys(%hash) ? ' AND ' : ' WHERE ' ). join(' AND ', @where ); - my @cdrs = - qsearch( { + + return { 'table' => 'cdr', 'hashref' => \%hash, 'extra_sql' => $extra_sql, 'order_by' => $options{'billsec_sum'} ? '' : "ORDER BY startdate $for_update", 'select' => $options{'billsec_sum'} ? 'sum(billsec) as billsec_sum' : '*', - } ); + }; +} - @cdrs; +sub get_cdrs { + qsearch(_search_cdrs(@_)); +} + +=item sum_cdrs + +Takes the same options as psearch_cdrs, but returns a single row containing +"count" (the number of CDRs) and the sums of the following fields: duration, +billsec, rated_price, rated_seconds, rated_minutes. + +Note that if any calls are not rated, their rated_* fields will be null. +If you want to use those fields, pass the 'status' option to limit to +calls that have been rated. This is intentional; please don't "fix" it. + +=cut + +sub sum_cdrs { + my $self = shift; + my $search = $self->_search_cdrs(@_); + $search->{'select'} = join(',', + 'COUNT(*) AS count', + map { "SUM($_) AS $_" } + qw(duration billsec rated_price rated_seconds rated_minutes) + ); + $search->{'order_by'} = ''; + qsearchs ( $search ); } =back