[freeside-commits] branch master updated. ceeaad3d99869f159bf2fee490aafa4c95d03365

Ivan ivan at 420.am
Wed Jan 7 14:30:15 PST 2015


The branch, master has been updated
       via  ceeaad3d99869f159bf2fee490aafa4c95d03365 (commit)
      from  7a577311abdb174c4a5b52bd5f0d751931097efd (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ceeaad3d99869f159bf2fee490aafa4c95d03365
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Wed Jan 7 14:30:15 2015 -0800

    add city search, RT#31659

diff --git a/FS/FS/cust_main/Search.pm b/FS/FS/cust_main/Search.pm
index 461633a..f0a7d41 100644
--- a/FS/FS/cust_main/Search.pm
+++ b/FS/FS/cust_main/Search.pm
@@ -728,6 +728,18 @@ sub search {
   }
 
   ##
+  # city
+  ##
+  if ( $params->{'city'} =~ /\S/ ) {
+    my $city = dbh->quote($params->{'city'});
+    push @where, "EXISTS(
+      SELECT 1 FROM cust_location
+      WHERE cust_location.custnum = cust_main.custnum
+        AND cust_location.city = $city
+    )";
+  }
+
+  ##
   # county
   ##
   if ( $params->{'county'} =~ /\S/ ) {
diff --git a/httemplate/elements/city.html b/httemplate/elements/city.html
index 6a2142f..5f4d4e0 100644
--- a/httemplate/elements/city.html
+++ b/httemplate/elements/city.html
@@ -2,22 +2,24 @@
 
 Example:
 
-  include( '/elements/city.html',
-    #recommended
-    country    => $current_country,
-    state      => $current_state,
-    county     => $current_county,
-    city       => $current_city,
-
-    #optional
-    prefix        => $optional_unique_prefix,
-    onchange      => $javascript,
-    disabled      => 0, #bool
-#    disable_empty => 1, #defaults to 1, disable the empty option
-#    empty_label   => 'all', #label for empty option
-#    disable_select => 1, # disable the selector (just show a text input)
-    style         => [ 'attribute:value', 'another:value' ],
-  );
+  <& /elements/city.html,
+       #recommended
+       country        => $current_country,
+       state          => $current_state,
+       county         => $current_county,
+       city           => $current_city,
+
+       #optional
+       prefix         => $optional_unique_prefix,
+       onchange       => $javascript,
+       disabled       => 0, #bool
+       style          => [ 'attribute:value', 'another:value' ],
+       disable_empty  => 1, #defaults to 1, set to 0 to disable the empty option
+       empty_label    => 'all', #label for empty option
+       disable_text   => 1, # disable the text input (just show the select)
+       #doesn't work as an option yet, set when conf tax_district_method
+       #disable_select => 1, # disable the selector (just show a text input)
+  &>
 
 </%doc>
 
@@ -47,16 +49,22 @@ function <% $pre %>county_changed(what, callback) {}
 
   function <% $pre %>county_changed(what, callback) {
 
+    what.form.<% $pre %>city_select.disabled = 'disabled';
+
     county  = what.options[what.selectedIndex].value;
     state   = what.form.<% $pre %>state.options[what.form.<% $pre %>state.selectedIndex].value;
     country = what.form.<% $pre %>country.options[what.form.<% $pre %>country.selectedIndex].value;
 
     function <% $pre %>update_cities(cities) {
-     
+
       // blank the current city list
       for ( var i = what.form.<% $pre %>city_select.length; i >= 0; i-- )
           what.form.<% $pre %>city_select.options[i] = null;
 
+%     unless ( $opt{disable_empty} ) {
+        opt( what.form.<% $pre %>city_select, '', <% $opt{empty_label} |js_string %> );
+%     }
+
       // add the new cities
       var citiesArray = eval('(' + cities + ')' );
 
@@ -67,7 +75,7 @@ function <% $pre %>county_changed(what, callback) {}
           opt(what.form.<% $pre %>city_select, citiesArray[s], cityLabel);
       }
 
-     if ( citiesArray.length > 1 || citiesArray[0].length ) { 
+     if ( citiesArray.length > 1 || (citiesArray[0] && citiesArray[0].length) ){
         // turn off the text city, turn on the select
         saved_<%$pre%>city = what.form.<%$ pre %>city.value;
         <%$pre%>city_select_changed(what.form.<% $pre %>city_select);
@@ -80,6 +88,8 @@ function <% $pre %>county_changed(what, callback) {}
         what.form.<% $pre %>city_select.style.display = 'none';
       }
 
+      what.form.<% $pre %>city_select.disabled = '';
+
       //run the callback
       if ( callback != null )
         callback();
@@ -98,39 +108,44 @@ function <% $pre %>county_changed(what, callback) {}
 
 % } #!disable_select
 
-<INPUT TYPE     = "text"
+<INPUT TYPE     = "<% $opt{disable_text} ? 'hidden' : 'text' %>"
        NAME     = "<%$pre%>city"
        ID       = "<%$pre%>city"
        VALUE    = "<% $opt{'city'} |h %>"
+% unless ( $opt{disable_text} ) {
        onChange = "<% $opt{'onchange'} %>"
        <% $opt{'disabled'} %>
        <% $text_style %>
+% }
 >
 
 % if ( $disable_select ) {
 %# avoid JS errors
-<INPUT TYPE="hidden" ID="city_select">
-% }
-% else {
+    <INPUT TYPE="hidden" ID="city_select">
+% } else {
 
-<SELECT NAME     = "<%$pre%>city_select"
-        ID       = "<%$pre%>city_select"
-        onChange = "<%$pre%>city_select_changed(this); <% $opt{'onchange'} %>"
-        <% $opt{'disabled'} %>
-        <% $select_style %>
->
+    <SELECT NAME     = "<%$pre%>city_select"
+            ID       = "<%$pre%>city_select"
+            onChange = "<%$pre%>city_select_changed(this); <% $opt{onchange} %>"
+            <% $opt{disabled} %>
+            <% $select_style %>
+    >
 
-% foreach my $city ( @cities ) {
+%   unless ( $opt{'disable_empty'} ) {
+      <OPTION VALUE="" <% $opt{city} eq '' ? 'SELECTED' : '' %>><% $opt{empty_label} %>
+%   }
 
-    <OPTION VALUE="<% $city |h %>"
-            <% $city eq $opt{'city'} ? 'SELECTED' : '' %>
-    ><% $city eq $opt{'empty_data_value'} ? $opt{'empty_data_label'} : $city %>
+%   foreach my $city ( @cities ) {
 
-% }
+      <OPTION VALUE="<% $city |h %>"
+              <% $city eq $opt{city} ? 'SELECTED' : '' %>
+      ><% $city eq $opt{empty_data_value} ? $opt{empty_data_label} : $city %>
 
-</SELECT>
+%   }
+
+    </SELECT>
 % }
-%#           VALUE    = "<% $curr_value |h %>"
+
 <%init>
 
 my %opt = @_;
@@ -142,6 +157,8 @@ my $conf = new FS::Conf;
 # tax district table.
 my $disable_select = 1 if $conf->config('tax_district_method');
 
+$opt{'disable_empty'} = 1 unless exists($opt{'disable_empty'});
+
 my $text_style   = $opt{'style'} ? [ @{ $opt{'style'} } ] : [];
 my $select_style = $opt{'style'} ? [ @{ $opt{'style'} } ] : [];
 
diff --git a/httemplate/elements/select-country.html b/httemplate/elements/select-country.html
index 724afe3..f3d9876 100644
--- a/httemplate/elements/select-country.html
+++ b/httemplate/elements/select-country.html
@@ -40,6 +40,8 @@ Example:
     }
   
     function <% $pre %>country_changed(what, callback) {
+
+      what.form.<% $pre %>state.disabled = 'disabled';
   
       country = what.options[what.selectedIndex].value;
   
@@ -61,6 +63,8 @@ Example:
                 stateLabel = <% $opt{state_empty_label} || '(n/a)' |js_string %>;
             opt(what.form.<% $pre %>state, statesArray[s], stateLabel);
         }
+
+        what.form.<% $pre %>state.disabled = '';
   
         //run the callback
         if ( callback != null ) {
diff --git a/httemplate/elements/select-county.html b/httemplate/elements/select-county.html
index 058993f..cce085f 100644
--- a/httemplate/elements/select-county.html
+++ b/httemplate/elements/select-county.html
@@ -12,7 +12,7 @@ Example:
     prefix        => $optional_unique_prefix,
     onchange      => $javascript,
     disabled      => 0, #bool
-    disable_empty => 1, #defaults to 1, disable the empty option
+    disable_empty => 1, #defaults to 1, set to 0 to disable the empty option
     empty_label   => 'all', #label for empty option
     style         => [ 'attribute:value', 'another:value' ],
   &>
@@ -36,6 +36,8 @@ Example:
   
     function <% $pre %>state_changed(what, callback) {
 
+      what.form.<% $pre %>county.disabled = 'disabled';
+
       state = what.options[what.selectedIndex].value;
       country = what.form.<% $pre %>country.options[what.form.<% $pre %>country.selectedIndex].value;
   
@@ -44,6 +46,10 @@ Example:
         // blank the current county list
         for ( var i = what.form.<% $pre %>county.length; i >= 0; i-- )
             what.form.<% $pre %>county.options[i] = null;
+
+%       unless ( $opt{disable_empty} ) {
+          opt( what.form.<% $pre %>county, '', <% $opt{empty_label} |js_string %> );
+%       }
   
         // add the new counties
         var countiesArray = eval('(' + counties + ')' );
@@ -58,14 +64,20 @@ Example:
 
         if ( countiesArray.length > 1 ) { 
           what.form.<% $pre %>county.style.display = '';
-          //countyFormLabel.style.visibility = 'visible';
-          countyFormLabel.style.display = '';
+          if ( countyFormLabel )  {
+            //countyFormLabel.style.visibility = 'visible';
+            countyFormLabel.style.display = '';
+          }
         } else {
           what.form.<% $pre %>county.style.display = 'none';
-          //countyFormLabel.style.visibility = 'hidden';
-          countyFormLabel.style.display = 'none';
+          if ( countyFormLabel ) {
+            //countyFormLabel.style.visibility = 'hidden';
+            countyFormLabel.style.display = 'none';
+          }
         }
 
+        what.form.<% $pre %>county.disabled = '';
+
         //run the callback
         if ( callback != null )  {
           callback();
diff --git a/httemplate/search/cust_main.html b/httemplate/search/cust_main.html
index 19456e6..503e782 100755
--- a/httemplate/search/cust_main.html
+++ b/httemplate/search/cust_main.html
@@ -41,7 +41,7 @@ my %search_hash = ();
 
 #scalars
 my @scalars = qw (
-  agentnum salesnum status address county state zip country
+  agentnum salesnum status address city county state zip country
   paydate_year paydate_month invoice_terms
   no_censustract with_geocode with_email tax no_tax POST no_POST
   custbatch usernum
diff --git a/httemplate/search/report_cust_main.html b/httemplate/search/report_cust_main.html
index 2b40672..cacb7de 100755
--- a/httemplate/search/report_cust_main.html
+++ b/httemplate/search/report_cust_main.html
@@ -6,7 +6,7 @@
   <TABLE BGCOLOR="#cccccc" CELLSPACING=0>
 
     <TR>
-      <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Search options') |h %></FONT></TH>
+      <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Basic search options') |h %></FONT></TH>
     </TR>
 
     <& /elements/tr-select-agent.html,
@@ -40,48 +40,6 @@
     &>
 
     <TR>
-      <TD ALIGN="right" VALIGN="center"><% mt('Address') |h %></TD>
-      <TD><INPUT TYPE="text" NAME="address" SIZE=54></TD>
-    </TR>
-
-    <TR>
-      <TD ALIGN="right" VALIGN="center"><% mt('County') |h %></TD>
-      <TD>
-        <& /elements/select-county.html,
-             disable_empty => 0,
-             empty_label   => '(all)',
-        &>
-      </TD>
-    </TR>
-    
-
-    <TR>
-      <TD ALIGN="right" VALIGN="center"><% mt('State') |h %></TD>
-      <TD>
-        <& /elements/select-state.html,
-             disable_empty => 0,
-             empty_label   => '(all)',
-        &>
-      </TD>
-    </TR>
-    
-    <TR>
-      <TD ALIGN="right" VALIGN="center"><% mt('Zip') |h %></TD>
-      <TD><INPUT TYPE="text" NAME="zip" SIZE=12></TD>
-    </TR>
-
-    <TR>
-      <TD ALIGN="right" VALIGN="center"><% mt('Country') |h %></TD>
-      <TD>
-        <& /elements/select-country.html,
-             disable_empty       => 0,
-             state_disable_empty => 0,
-             state_empty_label   => '(all)',
-        &>
-      </TD>
-    </TR>
-
-    <TR>
         <TD ALIGN="right" VALIGN="center"><% mt('Signup date') |h %></TD>
         <TD>
         <TABLE>
@@ -168,6 +126,74 @@
         </TD>
       </TR>
 
+    <TR>
+      <TH CLASS="background" COLSPAN=2> </TH>
+    </TR>
+
+    <TR>
+      <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Location search options') |h %></FONT></TH>
+    </TR>
+
+    <TR>
+      <TD ALIGN="right" VALIGN="center"><% mt('Address') |h %></TD>
+      <TD><INPUT TYPE="text" NAME="address" SIZE=54></TD>
+    </TR>
+
+    <TR>
+      <TD ALIGN="right" VALIGN="center"><% mt('City') |h %></TD>
+      <TD>
+        <& /elements/city.html,
+             disable_empty => 0,
+             empty_label   => '(all)',
+             disable_text  => 1,
+        &>
+      </TD>
+    </TR>
+
+    <TR>
+      <TD ALIGN="right" VALIGN="center"><% mt('County') |h %></TD>
+      <TD>
+        <& /elements/select-county.html,
+             disable_empty => 0,
+             empty_label   => '(all)',
+        &>
+      </TD>
+    </TR>
+    
+    <TR>
+      <TD ALIGN="right" VALIGN="center"><% mt('State') |h %></TD>
+      <TD>
+        <& /elements/select-state.html,
+             disable_empty => 0,
+             empty_label   => '(all)',
+        &>
+      </TD>
+    </TR>
+    
+    <TR>
+      <TD ALIGN="right" VALIGN="center"><% mt('Zip') |h %></TD>
+      <TD><INPUT TYPE="text" NAME="zip" SIZE=12></TD>
+    </TR>
+
+    <TR>
+      <TD ALIGN="right" VALIGN="center"><% mt('Country') |h %></TD>
+      <TD>
+        <& /elements/select-country.html,
+             disable_empty       => 0,
+             state_disable_empty => 0,
+             state_empty_label   => '(all)',
+        &>
+      </TD>
+    </TR>
+
+    <TR>
+      <TH CLASS="background" COLSPAN=2> </TH>
+    </TR>
+
+    <TR>
+      <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Billing search options') |h %></FONT></TH>
+    </TR>
+
     <& /elements/tr-select-payby.html,
                   'payby_type'   => 'cust',
                   'multiple'     => 1,
@@ -252,7 +278,7 @@
     &>
 
     <TR>
-      <TD ALIGN="right" VALIGN="center"><% mt('With email address(es)') |h %></TD>
+      <TD ALIGN="right" VALIGN="center"><% mt('With invoicing email address(es)') |h %></TD>
         <TD><INPUT TYPE="checkbox" NAME="with_email"></TD>
     </TR>
 

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/cust_main/Search.pm               |   12 ++++
 httemplate/elements/city.html           |   87 +++++++++++++----------
 httemplate/elements/select-country.html |    4 ++
 httemplate/elements/select-county.html  |   22 ++++--
 httemplate/search/cust_main.html        |    2 +-
 httemplate/search/report_cust_main.html |  114 +++++++++++++++++++------------
 6 files changed, 156 insertions(+), 85 deletions(-)




More information about the freeside-commits mailing list