summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2016-03-04 11:35:51 -0800
committerIvan Kohler <ivan@freeside.biz>2016-03-04 11:35:51 -0800
commitd256989a19dd100823d35a11929edb1ae07d9883 (patch)
tree6074cd4525de3c2b0f177e1088a86673bba1697b
parent9000d0d9daea14055bda2c28b3a33c5742930460 (diff)
optimize package list on order new package, RT#39822
-rw-r--r--FS/FS/part_pkg.pm20
-rw-r--r--httemplate/elements/select-part_pkg.html5
-rw-r--r--httemplate/elements/select-table.html1
-rw-r--r--httemplate/misc/cust-part_pkg.cgi3
4 files changed, 29 insertions, 0 deletions
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 ).