From: Ivan Kohler Date: Fri, 4 Mar 2016 19:35:51 +0000 (-0800) Subject: optimize package list on order new package, RT#39822 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=d256989a19dd100823d35a11929edb1ae07d9883 optimize package list on order new package, RT#39822 --- diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index 3adbc06e8..45bdc6207 100644 --- a/FS/FS/part_pkg.pm +++ b/FS/FS/part_pkg.pm @@ -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 diff --git a/httemplate/elements/select-part_pkg.html b/httemplate/elements/select-part_pkg.html index fb45c0efa..e5692a798 100644 --- a/httemplate/elements/select-part_pkg.html +++ b/httemplate/elements/select-part_pkg.html @@ -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; diff --git a/httemplate/elements/select-table.html b/httemplate/elements/select-table.html index 4b6ddb40e..d7ec015f3 100644 --- a/httemplate/elements/select-table.html +++ b/httemplate/elements/select-table.html @@ -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, diff --git a/httemplate/misc/cust-part_pkg.cgi b/httemplate/misc/cust-part_pkg.cgi index dc9ba2af1..8a46c1dd3 100644 --- a/httemplate/misc/cust-part_pkg.cgi +++ b/httemplate/misc/cust-part_pkg.cgi @@ -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 ).