From: Ivan Kohler Date: Fri, 1 Feb 2013 10:51:54 +0000 (-0800) Subject: add advanced phone number search, RT#21054 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=eb26deab89a94f5ba7a2d21fa2a5a98cb7bb8885 add advanced phone number search, RT#21054 --- diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm index 0148462a6..c0bd8d163 100644 --- a/FS/FS/AccessRight.pm +++ b/FS/FS/AccessRight.pm @@ -294,6 +294,7 @@ tie my %rights, 'Tie::IxHash', 'Services: Hardware', 'Services: Hardware: Advanced search', 'Services: Phone numbers', + 'Services: Phone numbers: Advanced search', 'Services: PBXs', 'Services: Ports', 'Services: Mailing lists', diff --git a/FS/FS/access_right.pm b/FS/FS/access_right.pm index 126274a2a..3dd59b9da 100644 --- a/FS/FS/access_right.pm +++ b/FS/FS/access_right.pm @@ -219,6 +219,7 @@ sub _upgrade_data { # class method 'Services: Accounts' => 'Services: Accounts: Advanced search', 'Services: Wireless broadband services' => 'Services: Wireless broadband services: Advanced search', 'Services: Hardware' => 'Services: Hardware: Advanced search', + 'Services: Phone numbers' => 'Services: Phone numbers: Advanced search', 'List rating data' => [ 'Usage: RADIUS sessions', 'Usage: Call Detail Records (CDRs)', diff --git a/httemplate/elements/menu.html b/httemplate/elements/menu.html index 4e6109687..63ff5ceeb 100644 --- a/httemplate/elements/menu.html +++ b/httemplate/elements/menu.html @@ -194,7 +194,7 @@ foreach my $svcdb ( FS::part_svc->svc_tables() ) { } elsif ( $svcdb eq 'svc_phone' ) { $report_svc{"${name}' total usage by time period"} = - [ $fsurl. 'search/report_svc_phone.html', + [ $fsurl. 'search/report_svc_phone_usage.html', 'Total usage (minutes, and amount billed) for the specified time period, per phone number.', ]; @@ -209,7 +209,7 @@ foreach my $svcdb ( FS::part_svc->svc_tables() ) { $report_svc{"Advanced $lcsname reports"} = [ $fsurl."search/report_$svcdb.html", '' ] - if $svcdb =~ /^svc_(acct|broadband|hardware)$/ + if $svcdb =~ /^svc_(acct|broadband|hardware|phone)$/ && $curuser->access_right("Services: $name: Advanced search"); if ( $svcdb eq 'svc_phone' ) { @@ -649,7 +649,7 @@ $config_misc{'Advertising sources'} = [ $fsurl.'browse/part_referral.html', 'Whe || $curuser->access_right('Edit global advertising sources'); if ( $curuser->access_right('Configuration') ) { $config_misc{'Custom fields'} = [ $fsurl.'browse/part_virtual_field.html', 'Locally defined fields', ]; - $config_misc{'Message catalog'} = [ $fsurl.'browse/msgcat.html', 'Change error messages and other customizable labels for each locale' ]; + $config_misc{'Translation strings'} = [ $fsurl.'browse/msgcat.html', 'Translations and other customizable labels for each locale' ]; } $config_misc{'Inventory classes and inventory'} = [ $fsurl.'browse/inventory_class.html', 'Setup inventory classes and stock inventory' ] if $curuser->access_right('Edit inventory') diff --git a/httemplate/elements/select-part_svc.html b/httemplate/elements/select-part_svc.html index 72ab7f6b0..743b2852e 100644 --- a/httemplate/elements/select-part_svc.html +++ b/httemplate/elements/select-part_svc.html @@ -13,6 +13,9 @@ my( %opt ) = @_; $opt{'records'} = delete $opt{'part_svc'} if $opt{'part_svc'}; -$opt{'records'} ||= [ qsearch( 'part_svc', {} ) ]; # { disabled=>'' } ) +my %hash = (); +$hash{'svcdb'} = $opt{'svcdb'} if $opt{'svcdb'}; + +$opt{'records'} ||= [ qsearch( 'part_svc', \%hash ) ]; # { disabled=>'' } ) diff --git a/httemplate/elements/tr-select-part_svc.html b/httemplate/elements/tr-select-part_svc.html index af5148749..9d4508091 100644 --- a/httemplate/elements/tr-select-part_svc.html +++ b/httemplate/elements/tr-select-part_svc.html @@ -21,6 +21,9 @@ my( %opt ) = @_; -$opt{'part_svc'} ||= [ qsearch( 'part_svc', {} ) ]; # { disabled=>'' } ) +my %hash = (); +$hash{'svcdb'} = $opt{'svcdb'} if $opt{'svcdb'}; + +$opt{'part_svc'} ||= [ qsearch( 'part_svc', \%hash ) ]; # { disabled=>'' } ) diff --git a/httemplate/search/elements/report_svc_Common.html b/httemplate/search/elements/report_svc_Common.html new file mode 100644 index 000000000..04feb9e45 --- /dev/null +++ b/httemplate/search/elements/report_svc_Common.html @@ -0,0 +1,94 @@ +<%doc> + +Example: + + <& elements/report_svc_Common.html, + + #required + 'table' => 'svc_something', + 'title' => 'Page title', + + #optional + 'action' => 'svc_tablename.html', #defaults to svc_tablename.html + + &> + + +<& /elements/header.html, $title &> + +
+ + + + + + + + + +% unless ( $custnum ) { + <& /elements/tr-select-agent.html, + 'curr_value' => scalar( $cgi->param('agentnum') ), + 'disable_empty' => 0, + &> + +% # just this customer's domains? +%# <& /elements/tr-select-domain.html, +%# 'element_name' => 'domsvc', +%# 'curr_value' => scalar( $cgi->param('domsvc') ), +%# 'disable_empty' => 0, +%# &> +% } + + <& /elements/tr-selectmultiple-part_pkg.html &> + + <& /elements/tr-select-part_svc.html, 'svcdb'=>$svcdb &> + + + + + + + + + +% #"package fields" ala advanced svc_acct search? +% #move to /elements/tr-select-cust_pkg-fields and use it from there if so... + + <& /elements/tr-select-cust-fields.html &> + +
<% mt('Search options') |h %>
 
<% mt('Display options') |h %>
+ +
+ + +
+ +<& /elements/footer.html &> +<%init> + +my(%opt) = @_; + +my $svcdb = $opt{'table'}; + +my $name = "FS::$svcdb"->table_info->{'name_plural'} + || PL( "FS::$svcdb"->table_info->{'name'} ); + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right("Services: $name: Advanced search"); + +my $title = $opt{'title'}; + +#false laziness w/report_cust_pkg.html +my $custnum = ''; +if ( $cgi->param('custnum') =~ /^(\d+)$/ ) { + $custnum = $1; + my $cust_main = qsearchs({ + 'table' => 'cust_main', + 'hashref' => { 'custnum' => $custnum }, + 'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql, + }) or die "unknown custnum $custnum"; + $title = mt("$title: [_1]", $cust_main->name); +} + + diff --git a/httemplate/search/report_svc_phone.html b/httemplate/search/report_svc_phone.html index 9f1042608..63ca03e16 100644 --- a/httemplate/search/report_svc_phone.html +++ b/httemplate/search/report_svc_phone.html @@ -1,32 +1,6 @@ -<% include('/elements/header.html', 'Phone number total usage' ) %> +<& elements/report_svc_Common.html, + 'table' => 'svc_phone', + 'title' => 'Phone number report', -
- - - - - - -%# -%# -%# - - <% include ( '/elements/tr-input-beginning_ending.html', prefix=>'usage' ) %> - -
-%# Search options -%#
- -
- - -
- -<% include('/elements/footer.html') %> -<%init> - -#? 'List services' ? something new? -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('List rating data'); - - + 'action' => 'svc_phone.cgi', +&> diff --git a/httemplate/search/report_svc_phone_usage.html b/httemplate/search/report_svc_phone_usage.html new file mode 100644 index 000000000..9f1042608 --- /dev/null +++ b/httemplate/search/report_svc_phone_usage.html @@ -0,0 +1,32 @@ +<% include('/elements/header.html', 'Phone number total usage' ) %> + +
+ + + + + + +%# +%# +%# + + <% include ( '/elements/tr-input-beginning_ending.html', prefix=>'usage' ) %> + +
+%# Search options +%#
+ +
+ + +
+ +<% include('/elements/footer.html') %> +<%init> + +#? 'List services' ? something new? +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('List rating data'); + + diff --git a/httemplate/search/svc_phone.cgi b/httemplate/search/svc_phone.cgi index 29434083f..7fadbbbb7 100644 --- a/httemplate/search/svc_phone.cgi +++ b/httemplate/search/svc_phone.cgi @@ -9,7 +9,7 @@ 'Country code', 'Phone number', @header, - FS::UI::Web::cust_header(), + FS::UI::Web::cust_header($cgi->param('cust_fields')), ], 'fields' => [ 'svcnum', 'svc', @@ -24,7 +24,7 @@ $link, ( map '', @header ), ( map { $_ ne 'Cust. Status' ? $link_cust : '' } - FS::UI::Web::cust_header() + FS::UI::Web::cust_header($cgi->param('cust_fields')) ), ], 'align' => 'rlrr'. @@ -119,6 +119,24 @@ if ( $cgi->param('magic') =~ /^(all|unlinked)$/ ) { } +} elsif ( $cgi->param('magic') =~ /^advanced$/ ) { + + if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) { + push @extra_sql, "agentnum = $1"; + } + + my $pkgpart = [ grep /^(\d+)$/, $cgi->param('pkgpart') ]; + if ( @$pkgpart ) { + push @extra_sql, + 'cust_pkg.pkgpart IN ('. join(',', @$pkgpart ). ')'; + } + + my $svcpart = [ grep /^(\d+)$/, $cgi->param('svcpart') ]; + if ( @$svcpart ) { + push @extra_sql, + 'svcpart IN ('. join(',', @$svcpart ). ')'; + } + } elsif ( $cgi->param('svcpart') =~ /^(\d+)$/ ) { push @extra_sql, "svcpart = $1"; } else {