<TH CLASS="grid" BGCOLOR="#cccccc">Services</TH>
</TR>
-% my %part_pkg = ();
+% $FS::cust_pkg::DEBUG = 2;
% foreach my $cust_pkg (@$packages) {
%
% if ( $bgcolor eq $bgcolor1 ) {
% $bgcolor = $bgcolor1;
% }
%
-% $part_pkg{$cust_pkg->pkgpart} ||= $cust_pkg->part_pkg;
-% $cust_pkg->{'_pkgpart'} ||= $part_pkg{$cust_pkg->pkgpart}; #XXX cache kludge
-%
% my %iopt = (
% 'bgcolor' => $bgcolor,
% 'cust_pkg' => $cust_pkg,
-% 'part_pkg' => $part_pkg{$cust_pkg->pkgpart},
+% 'part_pkg' => $cust_pkg->part_pkg,
% %conf_opt,
% );
%
-% my $oldDEBUG = $FS::cust_pkg::DEBUG;
-% $FS::cust_pkg::DEBUG = 2;
<!--pkgnum: <% $cust_pkg->pkgnum %>-->
<TR>
<% include('packages/services.html', %iopt) %>
</TR>
-% $FS::cust_pkg::DEBUG = $oldDEBUG;
-
% }
</TABLE>
$method = 'all_pkgs';
}
- my @packages = $cust_main->$method();
+ my $cust_pkg_fields =
+ join(', ', map { "cust_pkg.$_ AS $_" } fields('cust_pkg') );
+
+ my $part_pkg_fields =
+ join(', ', map { "part_pkg.$_ AS part_pkg_$_" } fields('part_pkg') );
+
+ my $group_by =
+ join(', ', map "cust_pkg.$_", fields('cust_pkg') ). ', '.
+ join(', ', map "part_pkg.$_", fields('part_pkg') );
+
+ my $num_cust_svc =
+ '( SELECT COUNT(*) FROM cust_svc WHERE cust_pkg.pkgnum = cust_svc.svcnum )';
+
+ my @packages = $cust_main->$method( {
+ 'select' => " $cust_pkg_fields, $part_pkg_fields, ".
+ " $num_cust_svc AS num_cust_svc ",
+ 'addl_from' => ' LEFT JOIN part_pkg USING ( pkgpart ) ',
+ } );
my $num_old_packages = scalar(@packages);
+ foreach my $cust_pkg ( @packages ) {
+ my %hash = $cust_pkg->hash;
+ my %part_pkg = map { /^part_pkg_(.+)$/ or die; ( $1 => $hash{$_} ); }
+ grep { /^part_pkg_/ } keys %hash;
+ $cust_pkg->{'_pkgpart'} = new FS::part_pkg \%part_pkg;
+ $cust_pkg->{'_num_cust_svc'} = $cust_pkg->get('num_cust_svc');
+ }
+
unless ( $cgi->param('showoldpackages') ) {
my $years = $conf->config('cust_main-packages-years') || 2;
my $seconds = 31556926; #60*60*24*365.2422 is close enough