% if (!$iopt{no_services}) {
<& services.html, %iopt &>
% }
% # insert hidden predecessors to this package, if any
% # and a rolldown button to show them
% # (we'll make it do something later)
% if ( $cust_pkg->get('changed_from_pkg') ) {
% # the hidden block here has ID="cust_pkgX" where X is the first pkgnum
% # it contains.
<& hidden.html, $cust_pkg->get('changed_from_pkg'),
%iopt,
'next_pkg' => $cust_pkg,
&>
% }
% $row++;
% # show the change target, if there is one
% if ( $cust_pkg->change_to_pkg ) {
<& .packagerow, $cust_pkg->change_to_pkg, %iopt, 'change_from' => 1 &>
% }
% # include supplemental packages if any
% $iopt{'supplemental'} = ($iopt{'supplemental'} || 0) + 1;
% foreach my $supp_pkg ($cust_pkg->supplemental_pkgs) {
<& .packagerow, $supp_pkg, %iopt &>
% }
%def>
<%shared>
my $row = 0;
%shared>
<%init>
my %opt = @_;
my $conf = new FS::Conf;
my $curuser = $FS::CurrentUser::CurrentUser;
my $packages = $opt{'packages'};
# Sort order is hardcoded for now, can change this if needed.
@$packages = sort {
( $a->getfield('cancel') <=> $b->getfield('cancel') ) or
( $a->getfield('setup') <=> $b->getfield('setup') ) or
( $a->getfield('pkgnum') <=> $b->getfield('pkgnum') )
} @$packages;
my %change_custnum = map { $_->change_custnum => 1 }
grep { $_->change_custnum }
grep { $_->getfield('cancel') }
@$packages;
my $pkg_attached = ( scalar(keys %change_custnum) == 1
&& ! grep { ! $_->getfield('cancel') } @$packages
);
my $countrydefault = scalar($conf->config('countrydefault')) || 'US';
my %conf_opt = (
#for package.html
'invoice-unitprice' => $conf->exists('invoice-unitprice'),
'show_pkgnum' => $curuser->option('show_pkgnum'),
'part_pkg-term_discounts' => $conf->exists('part_pkg-term_discounts'),
#for services.html and status.html
'cust_pkg-display_times' => ($conf->exists('cust_pkg-display_times')
|| $curuser->option('cust_pkg-display_times')),
#for status.html
'cust_pkg-show_autosuspend' => $conf->exists('cust_pkg-show_autosuspend'),
'pkg_attached' => $pkg_attached,
#for status.html pkg-balances
'pkg-balances' => $conf->exists('pkg-balances'),
'money_char' => ( $conf->config('money_char') || '$' ),
#for location.html
'countrydefault' => $countrydefault,
'statedefault' => ( scalar($conf->config('statedefault'))
|| ($countrydefault eq 'US' ? 'CA' : '') ),
'cust_pkg-group_by_location'=> $conf->exists('cust_pkg-group_by_location'),
'cust_main-require_censustract'=> $conf->exists('cust_main-require_censustract'),
'company_address' => [ $conf->config('company_address', $opt{cust_main}->agentnum ) ],
#for services.html
'svc_external-skip_manual' => $conf->exists('svc_external-skip_manual'),
'svc_phone-bulk_provision_simple' => $conf->exists('svc_phone-bulk_provision_simple'),
'legacy_link' => $conf->exists('legacy_link'),
'manage_link' => scalar($conf->config('svc_broadband-manage_link')),
'manage_link_text' => scalar($conf->config('svc_broadband-manage_link_text')),
'manage_link_loc' => scalar($conf->config('svc_broadband-manage_link_loc')),
'manage_link-new_window' => $conf->exists('svc_broadband-manage_link-new_window'),
'cust_pkg-large_pkg_size' => scalar($conf->config('cust_pkg-large_pkg_size')),
'cust_pkg-hide_discontinued-part_svc' => $conf->exists('cust_pkg-hide_discontinued-part_svc'),
);
%init>