+ if ( $cust_pkg->change_pkgnum ) {
+ $changed_from{$cust_pkg->change_pkgnum} = $cust_pkg;
+ }
+}
+
+# filter out hidden package changes
+if ( keys %change_to_from or keys %changed_from ) {
+ my @displayable_packages;
+ foreach my $cust_pkg (@packages) {
+ if ( 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 };
+ $cust_pkg->set('change_from_pkg', $change_from);
+ $change_from->set('change_to_pkg', $cust_pkg);
+ } elsif ( exists( $changed_from{$cust_pkg->pkgnum} ) ) {
+ # $cust_pkg is a canceled package changed into another packge
+ my $changed_to = $changed_from{$cust_pkg->pkgnum};
+ if ( ( $hide_changed eq 'all' ) or
+ ( $hide_changed eq 'location'
+ and $changed_to->pkgpart == $cust_pkg->pkgpart
+ and $changed_to->refnum == $cust_pkg->refnum
+ and $changed_to->quantity == $cust_pkg->quantity )
+ ) {
+ # then we're hiding it
+ $cust_pkg->set('changed_to_pkg', $changed_to);
+ $changed_to->set('changed_from_pkg', $cust_pkg);
+ } else { # show it anyway
+ push @displayable_packages, $cust_pkg;
+ }
+ } else {
+ push @displayable_packages, $cust_pkg;
+ }
+ }
+ @packages = @displayable_packages;
+}
+
+# filter all cancelled packages if the user wants
+if ( $hide_cancelled ) {
+ @packages = grep { !$_->get('cancel') } @packages;
+}
+
+# filter out 'old' packages
+my $num_old_packages = scalar(@packages);
+
+unless ( $cgi->param('showoldpackages') ) {
+ my $years = $conf->config('cust_main-packages-years') || 2;
+ my $then = time - $years * 31556926; #60*60*24*365.2422 is close enough
+
+ my %hide = ( 'cancelled' => 'cancel',
+ 'one-time charge' => 'setup',
+ );
+
+ @packages =
+ grep { !exists($hide{$_->status}) or $_->get($hide{$_->status}) > $then
+ or $_->num_svcs #don't hide packages w/services
+ }
+ @packages;
+}
+
+$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;