From: Mark Wells Date: Fri, 18 Oct 2013 02:27:10 +0000 (-0700) Subject: advanced package report: search by properties of the location object, #23582 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=c99a171b22bf8776a4ba449aed55e20904c881fa advanced package report: search by properties of the location object, #23582 --- diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index be5ec6a95..009c81e06 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -4283,6 +4283,24 @@ boolean; if true, returns only packages with more than 0 FCC phone lines. Limit to packages with a service location in the specified state and country. For FCC 477 reporting, mostly. +=item location_cust + +Limit to packages whose service location is the same as the customer's +default service location. + +=item location_nocust + +Limit to packages whose service location is not the customer's default +service location. + +=item location_census + +Limit to packages whose service location has a census tract. + +=item location_nocensus + +Limit to packages whose service location doesn't have a census tract. + =back =cut @@ -4515,6 +4533,18 @@ sub search { } ### + # location_* flags + ### + if ( $params->{location_cust} xor $params->{location_nocust} ) { + my $op = $params->{location_cust} ? '=' : '!='; + push @where, "cust_location.locationnum $op cust_main.ship_locationnum"; + } + if ( $params->{location_census} xor $params->{location_nocensus} ) { + my $op = $params->{location_census} ? "IS NOT NULL" : "IS NULL"; + push @where, "cust_location.censustract $op"; + } + + ### # parse part_pkg ### diff --git a/httemplate/search/cust_pkg.cgi b/httemplate/search/cust_pkg.cgi index 995779a46..54bfa00bf 100755 --- a/httemplate/search/cust_pkg.cgi +++ b/httemplate/search/cust_pkg.cgi @@ -175,6 +175,10 @@ for my $param (qw( censustract censustract2 )) { if grep { $_ eq $param } $cgi->param; } +#location flags (checkboxes) +my @loc = grep /^\w+$/, $cgi->param('loc'); +$search_hash{"location_$_"} = 1 foreach @loc; + my $report_option = $cgi->param('report_option'); $search_hash{report_option} = $report_option if $report_option; diff --git a/httemplate/search/report_cust_pkg.html b/httemplate/search/report_cust_pkg.html index f9aabfc7a..b3f2004b8 100755 --- a/httemplate/search/report_cust_pkg.html +++ b/httemplate/search/report_cust_pkg.html @@ -8,11 +8,7 @@ - - - + <& /elements/tr-title.html, value => mt('Customer search options') &> <& /elements/tr-select-agent.html, 'curr_value' => scalar( $cgi->param('agentnum') ), @@ -56,11 +52,7 @@
- Customer search options -
- - - + <& /elements/tr-title.html, value => mt('Package search options') &> <& /elements/tr-select-sales.html, 'label' => 'Package sales person', @@ -70,11 +62,10 @@ 'disable_empty' => 1, &> - <% include( '/elements/tr-select-cust_pkg-status.html', + <& /elements/tr-select-cust_pkg-status.html, 'label' => 'Package status', 'onchange' => 'status_changed(this);', - ) - %> + &> - <% include( '/elements/tr-select-pkg_class.html', + <& /elements/tr-select-pkg_class.html, 'pre_options' => [ '0' => 'all' ], 'empty_label' => '(empty class)', - ) - %> + &> % if ( scalar( qsearch( 'part_pkg_report_option', { 'disabled' => '' } ) ) ) { - <% include( '/elements/tr-select-table.html', + <& /elements/tr-select-table.html, 'label' => 'Report classes', 'table' => 'part_pkg_report_option', 'name_col' => 'name', 'hashref' => { 'disabled' => '' }, 'element_name' => 'report_option', 'multiple' => 'multiple', - ) - %> + &> % } @@ -189,24 +178,33 @@ - <% include( '/elements/tr-checkbox.html', + <& /elements/tr-checkbox.html, 'label' => 'Custom packages', 'field' => 'custom', 'value' => 1, 'onchange' => 'custom_changed(this);', - ) - %> - - <% include( '/elements/tr-selectmultiple-part_pkg.html' ) %> + &> + + <& /elements/tr-selectmultiple-part_pkg.html &> + + <& /elements/tr-title.html, value => mt('Location search options') &> + +% my @location_options = qw(cust nocust census nocensus); + <& /elements/tr-checkbox-multiple.html, + 'label' => 'Where package location:', + 'field' => 'loc', + 'options' => \@location_options, + 'labels' => { 'cust' => "is the customer's default location", + 'nocust' => "is not the customer's default location", + 'census' => "has a census tract", + 'nocensus' => "does not have a census tract", + }, + 'value' => { map { $_ => 1 } @location_options }, + &> - - - + <& /elements/tr-title.html, value => mt('Display options') &> - - - - <% include( '/elements/tr-select-cust-fields.html' ) %> + <& /elements/tr-select-cust-fields.html &>
- Package search options -
 
Display options