optimize package list on order new package, RT#39822
authorIvan Kohler <ivan@freeside.biz>
Fri, 4 Mar 2016 19:35:51 +0000 (11:35 -0800)
committerIvan Kohler <ivan@freeside.biz>
Fri, 4 Mar 2016 19:35:51 +0000 (11:35 -0800)
FS/FS/part_pkg.pm
httemplate/elements/select-part_pkg.html
httemplate/elements/select-table.html
httemplate/misc/cust-part_pkg.cgi

index 3adbc06..45bdc62 100644 (file)
@@ -2332,6 +2332,26 @@ sub _pkgs_sql {
 
 }
 
+=item join_options_sql
+
+Returns an SQL fragment for JOINing the part_pkg_option records for this
+package's setup_fee and recur_fee (as setup_option and recur_option,
+respectively).  Useful for optimization.
+
+=cut
+
+sub join_options_sql {
+  #my $class = shift;
+  "
+    LEFT JOIN part_pkg_option AS setup_option
+      ON (     part_pkg.pkgpart = setup_option.pkgpart
+           AND setup_option.optionname = 'setup_fee' )
+    LEFT JOIN part_pkg_option AS recur_option
+      ON (     part_pkg.pkgpart = recur_option.pkgpart
+           AND recur_option.optionname = 'recur_fee' )
+  ";
+}
+
 =back
 
 =head1 SUBROUTINES
index fb45c0e..e5692a7 100644 (file)
@@ -155,6 +155,11 @@ if ( exists($opt{'classnum'}) && defined($opt{'classnum'}) ) {
 die 'Use of toggle_disabled with classnum has not been implemented'
   if exists $hash{'classnum'};
 
+$opt{'select'} = 'part_pkg.*, setup_option.optionvalue AS _setup_fee,
+                              recur_option.optionvalue AS _recur_fee'
+  unless $opt{'select'};
+$opt{'addl_from'} .= FS::part_pkg->join_options_sql;
+
 $opt{'extra_sql'} .= ( keys(%hash) ? ' AND ' : ' WHERE ' ).
                      FS::part_pkg->curuser_pkgs_sql;
 
index 4b6ddb4..d7ec015 100644 (file)
@@ -182,6 +182,7 @@ if ( $opt{'records'} ) {
     unless $opt{'presorted'};
 } else {
   @records = qsearch( {
+    'select'    => $opt{'select'} || '*',
     'table'     => $opt{'table'},
     'addl_from' => $opt{'addl_from'},
     'hashref'   => $hashref,
index dc9ba2a..8a46c1d 100644 (file)
@@ -23,7 +23,10 @@ if ( $classnum > 0 ) {
 } #else -1, all classes, so don't set classnum
 
 my @part_pkg = qsearch({
+  'select'    => 'part_pkg.*, setup_option.optionvalue AS _setup_fee,
+                              recur_option.optionvalue AS _recur_fee',
   'table'     => 'part_pkg',
+  'addl_from' => FS::part_pkg->join_options_sql,
   'hashref'   => \%hash,
   'extra_sql' =>
     ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql( 'null'=>1 ).