add advanced phone number search, RT#21054
authorIvan Kohler <ivan@freeside.biz>
Fri, 1 Feb 2013 10:51:54 +0000 (02:51 -0800)
committerIvan Kohler <ivan@freeside.biz>
Fri, 1 Feb 2013 10:51:54 +0000 (02:51 -0800)
FS/FS/AccessRight.pm
FS/FS/access_right.pm
httemplate/elements/menu.html
httemplate/elements/select-part_svc.html
httemplate/elements/tr-select-part_svc.html
httemplate/search/elements/report_svc_Common.html [new file with mode: 0644]
httemplate/search/report_svc_phone.html
httemplate/search/report_svc_phone_usage.html [new file with mode: 0644]
httemplate/search/svc_phone.cgi

index 0148462..c0bd8d1 100644 (file)
@@ -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',
index 126274a..3dd59b9 100644 (file)
@@ -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)',
index 4e61096..63ff5ce 100644 (file)
@@ -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')
index 72ab7f6..743b285 100644 (file)
@@ -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=>'' } )
 
 </%init>
index af51487..9d45080 100644 (file)
@@ -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=>'' } )
 
 </%init>
diff --git a/httemplate/search/elements/report_svc_Common.html b/httemplate/search/elements/report_svc_Common.html
new file mode 100644 (file)
index 0000000..04feb9e
--- /dev/null
@@ -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
+
+  &>
+
+</%doc>
+<& /elements/header.html, $title &>
+
+<FORM ACTION="<% $opt{'action'} || $opt{'table'}. '.html' %>" METHOD="GET">
+<INPUT TYPE="hidden" NAME="magic" VALUE="advanced">
+<INPUT TYPE="hidden" NAME="custnum" VALUE="<% $custnum %>">
+
+  <TABLE BGCOLOR="#cccccc" CELLSPACING=0>
+
+    <TR>
+      <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Search options') |h %></FONT></TH>
+    </TR>
+
+% 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 &> 
+
+    <TR>
+      <TH CLASS="background" COLSPAN=2>&nbsp;</TH>
+    </TR>
+    <TR>
+      <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Display options') |h %></FONT></TH>
+    </TR>
+
+%   #"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 &>
+                       
+  </TABLE>
+
+<BR>
+<INPUT TYPE="submit" VALUE="<% mt('Get Report') |h %>">
+
+</FORM>
+
+<& /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);
+}
+
+</%init>
index 9f10426..63ca03e 100644 (file)
@@ -1,32 +1,6 @@
-<% include('/elements/header.html', 'Phone number total usage' ) %>
+<& elements/report_svc_Common.html,
+     'table'   => 'svc_phone',
+     'title'   => 'Phone number report',
 
-<FORM ACTION="svc_phone.cgi" METHOD="GET">
-
-<INPUT TYPE="hidden" NAME="magic"       VALUE="all">
-<INPUT TYPE="hidden" NAME="usage_total" VALUE="1">
-
-<TABLE BGCOLOR="#cccccc" CELLSPACING=0>
-
-%#  <TR>
-%#    <TH CLASS="background" COLSPAN=2 ALIGN="left">
-%#     <FONT SIZE="+1">Search options</FONT>
-%#    </TH>
-%#  </TR>
-
-  <% include ( '/elements/tr-input-beginning_ending.html', prefix=>'usage' ) %>
-
-</TABLE>
-
-<BR>
-<INPUT TYPE="submit" VALUE="Search phone numbers">
-
-</FORM>
-
-<% include('/elements/footer.html') %>
-<%init>
-
-#? 'List services' ?  something new?
-die "access denied"
-  unless $FS::CurrentUser::CurrentUser->access_right('List rating data');
-
-</%init>
+     '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 (file)
index 0000000..9f10426
--- /dev/null
@@ -0,0 +1,32 @@
+<% include('/elements/header.html', 'Phone number total usage' ) %>
+
+<FORM ACTION="svc_phone.cgi" METHOD="GET">
+
+<INPUT TYPE="hidden" NAME="magic"       VALUE="all">
+<INPUT TYPE="hidden" NAME="usage_total" VALUE="1">
+
+<TABLE BGCOLOR="#cccccc" CELLSPACING=0>
+
+%#  <TR>
+%#    <TH CLASS="background" COLSPAN=2 ALIGN="left">
+%#     <FONT SIZE="+1">Search options</FONT>
+%#    </TH>
+%#  </TR>
+
+  <% include ( '/elements/tr-input-beginning_ending.html', prefix=>'usage' ) %>
+
+</TABLE>
+
+<BR>
+<INPUT TYPE="submit" VALUE="Search phone numbers">
+
+</FORM>
+
+<% include('/elements/footer.html') %>
+<%init>
+
+#? 'List services' ?  something new?
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('List rating data');
+
+</%init>
index 2943408..7fadbbb 100644 (file)
@@ -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 {