-% my @cust_svc = @{shift @lol_cust_svc};
-% #my(@cust_svc) = qsearch( 'cust_svc', { 'pkgnum' => $_->pkgnum } );
-% my $rowspan = scalar(@cust_svc) || 1;
-%
-% print $n1, qq!<TD CLASS="grid" BGCOLOR="$bgcolor" ROWSPAN=$rowspan><A HREF="$pkgview"><FONT SIZE=-1>$pkg_comment</FONT></A></TD>!;
-%
-% my($n2)='';
-% foreach my $cust_svc ( @cust_svc ) {
-% my($label, $value, $svcdb) = $cust_svc->label;
-% my($svcnum) = $cust_svc->svcnum;
-% my($sview) = $p.'view';
-% print $n2,
-% qq!<TD CLASS="grid" BGCOLOR="$bgcolor" >!. FS::UI::Web::svc_link($m, $cust_svc->part_svc, $cust_svc) . qq!</TD> !.
-% qq!<TD CLASS="grid" BGCOLOR="$bgcolor" >!. FS::UI::Web::svc_label_link($m, $cust_svc->part_svc, $cust_svc) . qq!</TD> !;
-% $n2="</TR><TR>";
-% }
-%
-% unless ( @cust_svc ) {
-% print qq!<TD CLASS="grid" BGCOLOR="$bgcolor" COLSPAN=2> </TD>!;
+% # cust_svc stuff, built earlier
+% my %cust_svc_by_svcpart = %{ shift @all_cust_svc };
+% my $pkg_rowspan = shift @pkg_rowspans;
+
+ <% $n1 %><TD CLASS="grid" BGCOLOR="<% $bgcolor %>" ROWSPAN="<% $pkg_rowspan %>">
+ <A HREF="$pkgview"><FONT SIZE=-1><% $pkg_comment %></FONT></A></TD>
+
+% my $n2 = '';
+% my $td = '<TD CLASS="grid" BGCOLOR="'.$bgcolor.'">';
+%
+% foreach my $svcpart ( sort keys %cust_svc_by_svcpart ) { #sort order?
+% my $these = $cust_svc_by_svcpart{$svcpart};
+% my $num_cust_svc = scalar @$these; # always at least 1
+% if ( $large_pkg_size > 0 && $num_cust_svc >= $large_pkg_size ) {
+ <% $n2 %>
+% # summarize
+% # link opens a new search for this pkgnum/svcnum combo
+% my $href = $p.'search/cust_pkg_svc.html?svcpart='.$svcpart.
+% ';pkgnum='.$pkgnum;
+ <% $td %>
+ <A HREF="<% $href %>"><% $these->[0]->part_svc->svc %></A>
+ </TD>
+ <% $td %>
+ <A HREF="<% $href %>"><B>(view all <% $num_cust_svc %>)</B></A>
+ </TD>
+ </TR><TR>
+ <% $td %></TD>
+ <% $td %><& /elements/search-cust_svc.html,
+ 'svcpart' => $svcpart,
+ 'pkgnum' => $pkgnum,
+ &></TD>
+% $n2="</TR><TR>";
+% }
+% else { # do not summarize
+% foreach my $cust_svc ( @$these ) {
+ <% $n2 %>
+ <% $td %>
+ <% FS::UI::Web::svc_link($m, $cust_svc->part_svc, $cust_svc) %>
+ </TD>
+ <% $td %>
+ <% FS::UI::Web::svc_label_link($m, $cust_svc->part_svc, $cust_svc) %>
+ </TD>
+% $n2 = "</TR><TR>";
+% } # foreach $cust_svc
+% }
+% } # foreach $svcpart
+%
+% unless ( %cust_svc_by_svcpart ) {
+ <TD CLASS="grid" BGCOLOR="<% $bgcolor %>" COLSPAN=2> </TD>