% if ( @$packages ) { % #my $width = $show_location ? 'WIDTH="25%"' : 'WIDTH="33%"'; <% mt('Package') |h %> <% mt('Status') |h %> <% mt('Contact/Location') |h %> % if (!$opt{no_services}) { <% mt('Services') |h %> % } % #$FS::cust_pkg::DEBUG = 2; % foreach my $cust_pkg (@$packages) { % # if requested, this can override cust_pkg-group_by_location <& .packagerow, $cust_pkg, %conf_opt, ( map { $_ => $opt{$_} } qw( cust_main bgcolor no_links cust_location_cache before_pkg_callback before_svc_callback after_svc_callback cust_pkg-group_by_location no_services )), #for status.html 'has_cust_payby_auto' => $opt{cust_main}->has_cust_payby_auto, &> % } % } else { # there are no packages
% } <%def .packagerow> % % my ($cust_pkg, %iopt) = @_; % $iopt{'cust_pkg'} = $cust_pkg; % $iopt{'part_pkg'} = $cust_pkg->part_pkg; % $iopt{'row'} = $row; <& package.html, %iopt &> <& status.html, %iopt &> <& contact.html, %iopt &> <& location.html, %iopt &> % 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 % if ( $cust_pkg->_supplemental ) { % $iopt{'supplemental'} = ($iopt{'supplemental'} || 0) + 1; % foreach my $supp_pkg (@{ $cust_pkg->_supplemental }) { <& .packagerow, $supp_pkg, %iopt &> % } % } <%shared> my $row = 0; <%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, 'part_pkg-delay_cancel-days' => $conf->config('part_pkg-delay_cancel-days') || 1, #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'), );