4 % #my $width = $show_location ? 'WIDTH="25%"' : 'WIDTH="33%"';
5 <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Package') |h %></TH>
6 <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Status') |h %></TH>
7 <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Contact/Location') |h %></TH>
8 % if (!$opt{no_services}) {
9 <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Services') |h %></TH>
14 % #$FS::cust_pkg::DEBUG = 2;
15 % foreach my $cust_pkg (@$packages) {
16 % # if requested, this can override cust_pkg-group_by_location
17 <& .packagerow, $cust_pkg,
19 ( map { $_ => $opt{$_} } qw(
20 cust_main bgcolor no_links cust_location_cache
21 before_pkg_callback before_svc_callback after_svc_callback
22 cust_pkg-group_by_location
26 'has_cust_payby_auto' => $opt{cust_main}->has_cust_payby_auto,
29 % } else { # there are no packages
34 % my ($cust_pkg, %iopt) = @_;
35 % $iopt{'cust_pkg'} = $cust_pkg;
36 % $iopt{'part_pkg'} = $cust_pkg->part_pkg;
37 <!--pkgnum: <% $cust_pkg->pkgnum %>-->
38 <TR CLASS="row<%$row % 2%>">
39 <& package.html, %iopt &>
40 <& status.html, %iopt &>
41 <TD CLASS="inv" BGCOLOR="<% $iopt{bgcolor} %>" WIDTH="20%" VALIGN="top">
42 <& contact.html, %iopt &>
43 <& location.html, %iopt &>
45 % if (!$iopt{no_services}) {
46 <& services.html, %iopt &>
49 % # insert hidden predecessors to this package, if any
50 % # and a rolldown button to show them
51 % # (we'll make it do something later)
52 % if ( $cust_pkg->get('changed_from_pkg') ) {
53 <TR CLASS="row<% $row % 2 %>">
55 <BUTTON CLASS="rolldown_button"
56 ID="rolldown_<% $cust_pkg->change_pkgnum %>">
59 % # the hidden block here has ID="cust_pkgX" where X is the first pkgnum
61 <& hidden.html, $cust_pkg->get('changed_from_pkg'),
63 'next_pkg' => $cust_pkg,
69 % # show the change target, if there is one
70 % if ( $cust_pkg->change_to_pkg ) {
71 <& .packagerow, $cust_pkg->change_to_pkg, %iopt, 'change_from' => 1 &>
73 % # include supplemental packages if any
74 % if ( $cust_pkg->_supplemental ) {
75 % $iopt{'supplemental'} = ($iopt{'supplemental'} || 0) + 1;
76 % foreach my $supp_pkg (@{ $cust_pkg->_supplemental }) {
77 <& .packagerow, $supp_pkg, %iopt &>
87 my $conf = new FS::Conf;
89 my $curuser = $FS::CurrentUser::CurrentUser;
91 my $packages = $opt{'packages'};
93 # Sort order is hardcoded for now, can change this if needed.
95 ( $a->getfield('cancel') <=> $b->getfield('cancel') ) or
96 ( $a->getfield('setup') <=> $b->getfield('setup') ) or
97 ( $a->getfield('pkgnum') <=> $b->getfield('pkgnum') )
100 my %change_custnum = map { $_->change_custnum => 1 }
101 grep { $_->change_custnum }
102 grep { $_->getfield('cancel') }
105 my $pkg_attached = ( scalar(keys %change_custnum) == 1
106 && ! grep { ! $_->getfield('cancel') } @$packages
109 my $countrydefault = scalar($conf->config('countrydefault')) || 'US';
113 'invoice-unitprice' => $conf->exists('invoice-unitprice'),
114 'show_pkgnum' => $curuser->option('show_pkgnum'),
115 'part_pkg-term_discounts' => $conf->exists('part_pkg-term_discounts'),
117 #for services.html and status.html
118 'cust_pkg-display_times' => ($conf->exists('cust_pkg-display_times')
119 || $curuser->option('cust_pkg-display_times')),
121 'cust_pkg-show_autosuspend' => $conf->exists('cust_pkg-show_autosuspend'),
122 'pkg_attached' => $pkg_attached,
123 'part_pkg-delay_cancel-days' => $conf->config('part_pkg-delay_cancel-days') || 1,
124 #for status.html pkg-balances
125 'pkg-balances' => $conf->exists('pkg-balances'),
126 'money_char' => ( $conf->config('money_char') || '$' ),
129 'countrydefault' => $countrydefault,
130 'statedefault' => ( scalar($conf->config('statedefault'))
131 || ($countrydefault eq 'US' ? 'CA' : '') ),
132 'cust_pkg-group_by_location'=> $conf->exists('cust_pkg-group_by_location'),
133 'cust_main-require_censustract'=> $conf->exists('cust_main-require_censustract'),
134 'company_address' => [ $conf->config('company_address', $opt{cust_main}->agentnum ) ],
137 'svc_external-skip_manual' => $conf->exists('svc_external-skip_manual'),
138 'svc_phone-bulk_provision_simple' => $conf->exists('svc_phone-bulk_provision_simple'),
139 'legacy_link' => $conf->exists('legacy_link'),
140 'manage_link' => scalar($conf->config('svc_broadband-manage_link')),
141 'manage_link_text' => scalar($conf->config('svc_broadband-manage_link_text')),
142 'manage_link_loc' => scalar($conf->config('svc_broadband-manage_link_loc')),
143 'manage_link-new_window' => $conf->exists('svc_broadband-manage_link-new_window'),
144 'cust_pkg-large_pkg_size' => scalar($conf->config('cust_pkg-large_pkg_size')),
145 'cust_pkg-hide_discontinued-part_svc' => $conf->exists('cust_pkg-hide_discontinued-part_svc'),