Merge branch 'master' of git.freeside.biz:/home/git/freeside
[freeside.git] / httemplate / view / cust_main / packages.html
index 9098511..4903e18 100755 (executable)
@@ -78,48 +78,6 @@ for (var i = 0; i < all_buttons.length; i++) {
 if ( el ) el.scrollIntoView(true);
 </&>
 </SCRIPT>
-% unless ( $opt{no_links} ) {
-
-%   my $s = 0;
-
-% if ( $curuser->access_right('Qualify service') ) { 
-  <% $s++ ? ' | ' : '' %>
-  <& qual_link.html, $cust_main &>
-% }
-
-% if ( $curuser->access_right('Order customer package') ) { 
-  <% $s++ ? ' | ' : '' %>
-  <& /elements/order_pkg_link.html, 'cust_main'=>$cust_main &>
-% } 
-
-% if ( $curuser->access_right('One-time charge') ) {
-  <% $s++ ? ' | ' : '' %>
-  <& /elements/one_time_charge_link.html, 'custnum'=>$cust_main->custnum &>
-% } 
-
-% if ( $curuser->access_right('Bulk move customer services') ) { 
-  <% $s++ ? ' | ' : '' %>
-
-  <& /elements/popup_link-cust_main.html,
-               'label'       => emt('Move services between packages'),
-               'action'      => "${p}edit/bulk-cust_svc-pkgnum.html",
-               'cust_main'   => $cust_main,
-               'actionlabel' => emt('Move services'),
-               'width'       => 968, #763,
-               'height'      => 575,
-  &>
-
-% } 
-
-% if ( $curuser->access_right('Bulk change customer packages') ) { 
-  <% $s++ ? ' | ' : '' %>
-  <A HREF="<% $p %>edit/cust_pkg.cgi?<% $cust_main->custnum %>"><% mt('Bulk order and cancel packages') |h %></A>
-% } 
-
-<BR><BR>
-
-% } # unless $opt{no_links}
-
 <TABLE>
   <TR>
     <TD ALIGN="left" VALIGN="top">
@@ -153,22 +111,6 @@ if ( el ) el.scrollIntoView(true);
 
     </TD>
 
-%   unless ( $opt{no_links} ) {
-
-    <TD ALIGN="right">
-      <A HREF="<%$p%>search/report_cust_pkg.html?custnum=<% $cust_main->custnum %>"><% mt('Package reports') |h %></A>
-% if ( $curuser->access_right('Qualify service') ) { 
-    | <A HREF="<%$p%>search/qual.cgi?custnum=<% $cust_main->custnum %>"><% mt('View Qualifications') |h %></A>
-% }
-      <BR>
-      <% mt('Service reports:') |h %> 
-        <A HREF="<%$p%>search/report_svc_acct.html?custnum=<% $cust_main->custnum %>"><% mt('accounts') |h %></A><BR>
-      <% mt('Usage reports:') |h %> 
-        <A HREF="<%$p%>search/report_cdr.html?custnum=<% $cust_main->custnum %>"><% mt('CDRs') |h %></A>
-    </TD>
-
-%   } # unless $opt{no_links}
-
   </TR>
 
   <TR>
@@ -238,8 +180,11 @@ my @packages = $cust_main->all_pkgs( {
   },
 } );
 
+my $is_anything_hidden = 0; # optimization
+
 my %change_to_from; # target pkgnum => current cust_pkg, for future changes
 my %changed_from; # old pkgnum => new cust_pkg, for past changes
+my %supplementals_of; # main pkgnum => arrayref of supplementals
 
 foreach my $cust_pkg ( @packages ) {
   my %hash = $cust_pkg->hash;
@@ -248,18 +193,33 @@ foreach my $cust_pkg ( @packages ) {
   $cust_pkg->{'_pkgpart'} = new FS::part_pkg \%part_pkg;
   if ( $cust_pkg->change_to_pkgnum ) {
     $change_to_from{$cust_pkg->change_to_pkgnum} = $cust_pkg;
+    $is_anything_hidden = 1;
   }
   if ( $cust_pkg->change_pkgnum ) {
     $changed_from{$cust_pkg->change_pkgnum} = $cust_pkg;
+    $is_anything_hidden = 1;
+  }
+  if ( $cust_pkg->main_pkgnum ) {
+    $supplementals_of{$cust_pkg->main_pkgnum} ||= [];
+    push @{ $supplementals_of{$cust_pkg->main_pkgnum} }, $cust_pkg;
+    $is_anything_hidden = 1;
   }
 }
 
 # filter out hidden package changes
-if ( keys %change_to_from or keys %changed_from ) {
+if ( $is_anything_hidden ) {
   my @displayable_packages;
   foreach my $cust_pkg (@packages) {
 
-    if ( exists( $change_to_from{$cust_pkg->pkgnum} ) ) {
+    # if this package has any supplemental packages, it should remember them
+    $cust_pkg->set('_supplemental', $supplementals_of{$cust_pkg->pkgnum});
+
+    if ( $cust_pkg->main_pkgnum ) {
+
+      # it's a supplemental package of something else, and shouldn't be on the
+      # root list
+
+    } elsif ( exists( $change_to_from{$cust_pkg->pkgnum} ) ) {
 
       # $cust_pkg is an ordered, not-yet-active package change target
       my $change_from = $change_to_from{ $cust_pkg->pkgnum };
@@ -275,7 +235,9 @@ if ( keys %change_to_from or keys %changed_from ) {
       $changed_to->set('changed_from_pkg', $cust_pkg);
 
     } else {
+
       push @displayable_packages, $cust_pkg;
+
     }
 
   }
@@ -310,7 +272,7 @@ $num_old_packages -= scalar(@packages);
 # don't include supplemental packages in this list; they'll be found from
 # their main packages
 # (as will change-target packages)
-@packages = grep !$_->main_pkgnum, @packages;
+####@packages = grep !$_->main_pkgnum, @packages;
 
 foreach my $cust_pkg ( @packages ) {
   $cust_pkg->{'_cust_pkg_discount_active'} =