clean up package list UI: put actions in a dropdown
[freeside.git] / httemplate / view / cust_main / packages / section.html
index 4ac2e77..1601662 100755 (executable)
@@ -1,52 +1,87 @@
 % if ( @$packages ) { 
-%   my $bgcolor1 = '#eeeeee';
-%   my $bgcolor2 = '#ffffff';
-%   my $bgcolor = '';
-
+<THEAD>
 <TR>
 % #my $width = $show_location ? 'WIDTH="25%"' : 'WIDTH="33%"';
   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Package') |h %></TH>
   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Status') |h %></TH>
-%   if ( $show_location ) {
-  <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Location') |h %></TH>
-% }
+  <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Contact/Location') |h %></TH>
+% if (!$opt{no_services}) {
   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Services') |h %></TH>
+% }
 </TR>
+</THEAD>
 
 % #$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
+<BR>
+% }
+<%def .packagerow>
 %
-%     if ( $bgcolor eq $bgcolor1 ) {
-%       $bgcolor = $bgcolor2;
-%     } else {
-%       $bgcolor = $bgcolor1;
-%     }
-%
-%     my %iopt = (
-%       'bgcolor'  => $bgcolor,
-%       'cust_pkg' => $cust_pkg,
-%       'part_pkg' => $cust_pkg->part_pkg,
-%       %conf_opt,
-%     );
-%
-
+% my ($cust_pkg, %iopt) = @_;
+% $iopt{'cust_pkg'} = $cust_pkg;
+% $iopt{'part_pkg'} = $cust_pkg->part_pkg;
+% $iopt{'row'} = $row;
   <!--pkgnum: <% $cust_pkg->pkgnum %>-->
-  <TR>
+  <TR CLASS="row<%$row % 2%>">
     <& package.html, %iopt &>
-    <& status.html, %iopt &>
-%     if ( $show_location ) {
-    <& location.html, %iopt &>
-%     }
+    <& status.html,  %iopt &>
+    <TD CLASS="inv" BGCOLOR="<% $iopt{bgcolor} %>" WIDTH="20%" VALIGN="top">
+      <& contact.html, %iopt &>
+      <& location.html, %iopt &>
+    </TD>
+%   if (!$iopt{no_services}) {
     <& services.html, %iopt &>
+%   }
+  </TR>
+% # 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') ) {
+  <TR CLASS="row<% $row % 2 %>">
+    <TD COLSPAN=4>
+    <BUTTON CLASS="rolldown_button"
+            ID="rolldown_<% $cust_pkg->change_pkgnum %>">
+      History &#x2b07;
+    </BUTTON>
+% # 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,
+    &>
+    </TD>
   </TR>
-
-%   } #foreach $cust_pkg
-%# </TABLE>
-% } #if @$packages
-% else {
-<BR>
 % }
-
+% $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 &>
+%   }
+% }
+</%def>
+<%shared>
+my $row = 0;
+</%shared>
 <%init>
 
 my %opt = @_;
@@ -55,7 +90,6 @@ my $conf = new FS::Conf;
 my $curuser = $FS::CurrentUser::CurrentUser;
 
 my $packages = $opt{'packages'};
-my $show_location = $opt{'show_location'};
 
 # Sort order is hardcoded for now, can change this if needed.
 @$packages = sort { 
@@ -64,14 +98,30 @@ my $show_location = $opt{'show_location'};
   ( $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') || '$' ),
@@ -80,15 +130,21 @@ my %conf_opt = (
   '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'),
-  'svc_broadband-manage_link' => scalar($conf->config('svc_broadband-manage_link')),
-  'maestro-status_test'       => $conf->exists('maestro-status_test'),
-  'cust_pkg-large_pkg_size'   => $conf->config('cust_pkg-large_pkg_size'),
+  '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'),
 
-  # for packages.html Change location link
-  'show_location'             => $show_location,
 );
 
 </%init>