[freeside-commits] branch FREESIDE_4_BRANCH updated. 18397f32cae23998cc293cb8bff6bc1117f2bde5

Ivan ivan at 420.am
Wed Mar 9 11:17:05 PST 2016


The branch, FREESIDE_4_BRANCH has been updated
       via  18397f32cae23998cc293cb8bff6bc1117f2bde5 (commit)
      from  86c59324daa6a96eef6bf80013f4ab412e7c67c6 (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 18397f32cae23998cc293cb8bff6bc1117f2bde5
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Wed Mar 9 11:17:05 2016 -0800

    package filters in a large package list, RT#39822

diff --git a/httemplate/elements/select-cust_location.html b/httemplate/elements/select-cust_location.html
new file mode 100644
index 0000000..29563c5
--- /dev/null
+++ b/httemplate/elements/select-cust_location.html
@@ -0,0 +1,65 @@
+<SELECT NAME     = "locationnum"
+        ID       = "locationnum"
+%     if ( $opt{onchange} ) {
+        onchange = "<% $opt{onchange} %>"
+%     }
+    >
+
+% #false laziness w/select-table.html
+% my @pre_options  = $opt{pre_options}  ? @{ $opt{pre_options} } : ();
+% while ( @pre_options ) { 
+%   my $pre_opt   = shift(@pre_options);
+%   my $pre_label = shift(@pre_options);
+%   my $selected = #$opt{'all_selected'}
+%                  # || ( ref($locationnum) && $locationnum->{$pre_opt} )
+%                  # ||
+%                       ( $locationnum eq $pre_opt );
+    <OPTION VALUE="<% $pre_opt %>"
+            <% $selected ? 'SELECTED' : '' %>
+    ><% $pre_label %>
+% } 
+
+% if ( $cust_main ) {
+%   my $selected = ( $locationnum == $cust_main->ship_locationnum );
+    <OPTION VALUE="<% $cust_main->ship_locationnum %>"
+            <% $selected ? 'SELECTED' : '' %>
+    ><% $opt{'empty_label'} || '(default service address)' |h %>
+% }
+
+% if ( $opt{'is_optional'} ) {
+  <OPTION VALUE="-2" <% $locationnum == -2 ? 'SELECTED' : ''%>><% $opt{'optional_label'} || '(not required)' |h %>
+% }
+
+% foreach my $loc ( @{ $opt{cust_location} } ) {
+%   # don't show the ship_location redundantly
+%   next if $cust_main && $cust_main->ship_locationnum == $loc->locationnum;
+    <OPTION VALUE="<% $loc->locationnum %>"
+            <% $locationnum == $loc->locationnum ? 'SELECTED' : '' %>
+    ><% $loc->line( cust_main      => $cust_main,
+                    countrydefault => $countrydefault,
+                  )
+     |h %>
+% }
+
+% if ( $addnew ) {
+    <OPTION VALUE="-1"
+            <% $locationnum == -1 ? 'SELECTED' : '' %>
+    >Add new location
+% }
+
+</SELECT>
+<%init>
+
+my $conf = new FS::Conf;
+my $countrydefault = $conf->config('countrydefault') || 'US';
+
+my %opt = @_;
+my $cust_main     = $opt{'cust_main'};
+my $locationnum   = $opt{'curr_value'};
+
+$opt{'cust_location'} ||= [ $cust_main ? $cust_main->cust_location : () ];
+
+my $addnew = exists($opt{addnew}) ? $opt{addnew}
+                                  : $cust_main ? 1 : ( $locationnum>0 ? 0 : 1 );
+
+</%init>
diff --git a/httemplate/elements/select-table.html b/httemplate/elements/select-table.html
index d7ec015..6fb6b38 100644
--- a/httemplate/elements/select-table.html
+++ b/httemplate/elements/select-table.html
@@ -159,7 +159,7 @@ my $key = $opt{'value_col'} || $dbdef_table->primary_key;
 
 my $name_col = $opt{'name_col'};
 
-my $value = $opt{'curr_value'} || $opt{'value'};
+my $value = exists($opt{'curr_value'}) ? $opt{'curr_value'} : $opt{'value'};
 $value = [ split(/\s*,\s*/, $value) ] if $opt{'multiple'} && $value =~ /,/;
 
 #my $addl_from = $opt{'addl_from'} || '';
diff --git a/httemplate/elements/tr-select-cust_location.html b/httemplate/elements/tr-select-cust_location.html
index 7a5b43b..3078f2c 100644
--- a/httemplate/elements/tr-select-cust_location.html
+++ b/httemplate/elements/tr-select-cust_location.html
@@ -183,33 +183,14 @@ Example:
 <TR>
   <<%$th%> ALIGN="right"><% $opt{'label'} || emt('Service location') %></<%$th%>>
   <TD COLSPAN=7>
-    <SELECT NAME     = "locationnum"
-            ID       = "locationnum"
-            onchange = "locationnum_changed(this);"
-    >
-% if ( $cust_main ) {
-      <OPTION VALUE="<% $cust_main->ship_locationnum %>"><% $opt{'empty_label'} || '(default service address)' |h %>
-% }
-% if ( $opt{'is_optional'} ) {
-    <OPTION VALUE="-2" <% $locationnum == -2 ? 'SELECTED' : ''%>><% $opt{'optional_label'} || '(not required)' |h %>
-% }
-%
-%     foreach my $loc ( @cust_location ) {
-%       # don't show the ship_location redundantly
-%       next if $cust_main && $cust_main->ship_locationnum == $loc->locationnum;
-        <OPTION VALUE="<% $loc->locationnum %>"
-                <% $locationnum == $loc->locationnum ? 'SELECTED' : '' %>
-        ><% $loc->line( cust_main      => $cust_main,
-                        countrydefault => $countrydefault,
-                      )
-         |h %>
-%     }
-%     if ( $addnew ) {
-        <OPTION VALUE="-1"
-                <% $locationnum == -1 ? 'SELECTED' : '' %>
-        >Add new location
-%     }
-    </SELECT>
+
+    <& /elements/select-cust_location.html,
+         %opt,
+         'curr_value'    => $locationnum,
+         'cust_location' => \@cust_location,
+         'onchange'      => 'locationnum_changed(this);',
+    &>
+
   </TD>
 </TR>
 
diff --git a/httemplate/view/cust_main/packages.html b/httemplate/view/cust_main/packages.html
index ddd92b3..9add4b2 100755
--- a/httemplate/view/cust_main/packages.html
+++ b/httemplate/view/cust_main/packages.html
@@ -44,6 +44,7 @@ table.hiddenrows {
 }
 
 </STYLE>
+
 % # activate rolldown buttons for hidden package blocks
 <SCRIPT TYPE="text/javascript">
 function toggle_rolldown() {
@@ -79,10 +80,71 @@ for (var i = 0; i < all_buttons.length; i++) {
 if ( el ) el.scrollIntoView(true);
 </&>
 </SCRIPT>
+
 <TABLE>
   <TR>
     <TD ALIGN="left" VALIGN="top">
 
+% my $br = 0;
+
+% if ( $total_pkgs > $maxrecords ) {
+
+%   if ( 1 ) { #FS::pkg_class->num_pkg_class ) {
+      <% $br++ ? ' | ' : '' %>
+      Class: <& /elements/select-cust-pkg_class.html,
+                  curr_value  => scalar($cgi->param('classnum')),
+                  onchange    => 'classnum_changed(this);',
+                  pre_options => [ '-1' => 'all',
+                                    '0' => '(none)',
+                                 ],
+             &>
+%   }
+
+    <% $br++ ? ' | ' : '' %>
+    Status: <& /elements/select-cust_pkg-status.html,
+                 curr_value => scalar($cgi->param('status')),
+                 onchange   => 'status_changed(this);',
+            &>
+
+%   if ( 1 ) { #$cust_main->num_cust_location ) {
+      <% $br++ ? ' | ' : '' %>
+      Location: <& /elements/select-cust_location.html,
+                     cust_main   => $cust_main,
+                     curr_value  => scalar($cgi->param('locationnum')),
+                     addnew      => 0,
+                     onchange    => 'locationnum_changed(this);',
+                     pre_options => [ '-1' => 'all', ],
+                &>
+%   }
+
+  <SCRIPT TYPE="text/javascript">
+
+    function classnum_changed(what) {
+%     my $classnum = $cgi->param('classnum');
+%     $cgi->delete('classnum');
+      window.location = '<% $cgi->self_url %>;classnum=' + what.options[what.selectedIndex].value;
+%     $cgi->param('classnum', $classnum);
+    }
+
+    function status_changed(what) {
+%     my $status = $cgi->param('status');
+%     $cgi->delete('status');
+      window.location = '<% $cgi->self_url %>;status=' + what.options[what.selectedIndex].value;
+%     $cgi->param('status', $status);
+    }
+
+    function locationnum_changed(what) {
+%     my $locationnum = $cgi->param('locationnum');
+%     $cgi->delete('locationnum');
+      window.location = '<% $cgi->self_url %>;locationnum=' + what.options[what.selectedIndex].value;
+%     $cgi->param('locationnum', $locationnum);
+    }
+    
+  </SCRIPT>
+
+% }
+
+<% $br++ ? ' | ' : '' %>
 % if ( $cust_main->num_cancelled_pkgs ) {
 %     if ( $cgi->param('showcancelledpackages') eq '0' #see if it was set by me
 %          || ( $conf->exists('hidecancelledpackages')
@@ -92,24 +154,25 @@ if ( el ) el.scrollIntoView(true);
 %     {
 %       my $prev = $cgi->param('showcancelledpackages');
 %       $cgi->param('showcancelledpackages', 1);
-  ( <a href="<% $cgi->self_url %>"><% mt('show') |h %> 
+  <a href="<% $cgi->self_url %>"><% mt('show') |h %> 
 %       $cgi->param('showcancelledpackages', $prev);
 %   } else {
 %       $cgi->param('showcancelledpackages', 0);
-  ( <a href="<% $cgi->self_url %>"><% mt('hide') |h %> 
+  <a href="<% $cgi->self_url %>"><% mt('hide') |h %> 
 %       $cgi->param('showcancelledpackages', 1);
 %   } 
 
- <% mt('cancelled packages') |h %></a> )
+ <% mt('cancelled packages') |h %></a>
 % } 
 
+<% $br++ ? ' | ' : '' %>
 % if ( $cgi->param('showoldpackages') ) {
 %   $cgi->param('showoldpackages', 0);
-    ( <a href="<% $cgi->self_url %>"><% mt('hide old packages') |h %></a> )
+    <a href="<% $cgi->self_url %>"><% mt('hide old packages') |h %></a>
 %   $cgi->param('showoldpackages', 1);
 % } else {
 %   $cgi->param('showoldpackages', 1);
-    ( <a href="<% $cgi->self_url %>"><% mt('show old packages') |h %></a> )
+    <a href="<% $cgi->self_url %>"><% mt('show old packages') |h %></a>
 %   $cgi->param('showoldpackages', 0);
 % }
 
@@ -218,6 +281,27 @@ unless ( $cgi->param('showoldpackages') ) {
   )";
 }
 
+if ( $cgi->param('classnum') =~ /^(\d+)$/ ) {
+  my $classnum = $1;
+  if ( $classnum == 0 ) {
+    $extra_sql .= " AND part_pkg.classnum IS NULL ";
+  } else {
+    $extra_sql .= " AND part_pkg.classnum = $classnum ";
+  }
+}
+
+if ( $cgi->param('status') =~ /^([\w ]+)$/ ) {
+  my $status = $1;
+  $extra_sql .= ' AND '. FS::cust_pkg->status_sql. " = '$status' ";
+}
+
+if ( $cgi->param('locationnum') =~ /^(\d+)$/ ) {
+  my $locationnum = $1;
+  $extra_sql .= " AND cust_pkg.locationnum = $locationnum ";
+}
+
+my $total_pkgs = $cust_main->all_pkgs;
+
 my $num_method = $hide_cancelled ? 'ncancelled_pkgs' : 'all_pkgs';
 my $num_pkgs = $cust_main->$num_method({ 
   'addl_from' => $addl_from,

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

Summary of changes:
 httemplate/elements/select-cust_location.html    |   65 +++++++++++++++
 httemplate/elements/select-table.html            |    2 +-
 httemplate/elements/tr-select-cust_location.html |   35 ++------
 httemplate/view/cust_main/packages.html          |   94 ++++++++++++++++++++--
 4 files changed, 163 insertions(+), 33 deletions(-)
 create mode 100644 httemplate/elements/select-cust_location.html




More information about the freeside-commits mailing list