This commit was manufactured by cvs2svn to create tag 'freeside_2_1_1'.
[freeside.git] / httemplate / view / cust_main / packages.html
index 72846b8..811ac3c 100755 (executable)
@@ -1,18 +1,7 @@
-<A NAME="cust_pkg"><FONT SIZE="+2">Packages</FONT></A><BR>
-
 % my $s = 0;
 % if ( $curuser->access_right('Order customer package') ) { 
   <% $s++ ? ' | ' : '' %>
-  <% include( '/elements/popup_link-cust_main.html',
-                'action'      => $p. 'misc/order_pkg.html',
-                'label'       => 'Order&nbsp;new&nbsp;package',
-                'actionlabel' => 'Order new package',
-                'color'       => '#333399',
-                'cust_main'   => $cust_main,
-                'closetext'   => 'Close',
-                'width'       => 763,
-            )
-  %>
+  <% include('order_pkg_link.html', $cust_main) %>
 % } 
 
 % if ( $curuser->access_right('One-time charge')
   <A HREF="<% $p %>edit/cust_pkg.cgi?<% $cust_main->custnum %>">Bulk order and cancel packages</A> (preserves services)
 % } 
 
-
 <BR><BR>
+
+<TABLE>
+  <TR>
+    <TD ALIGN="left">
+
 % if ( @$packages ) {
 
 Current packages
@@ -40,19 +33,37 @@ Current packages
 %             )
 %        )
 %     {
+%       my $prev = $cgi->param('showcancelledpackages');
 %       $cgi->param('showcancelledpackages', 1);
-%
-
   ( <a href="<% $cgi->self_url %>">show
+%       $cgi->param('showcancelledpackages', $prev);
 %   } else {
 %       $cgi->param('showcancelledpackages', 0);
-%
-
   ( <a href="<% $cgi->self_url %>">hide
+%       $cgi->param('showcancelledpackages', 1);
 %   } 
 
  cancelled packages</a> )
 % } 
+% if ( $num_old_packages ) {
+%   $cgi->param('showoldpackages', 1);
+    ( <a href="<% $cgi->self_url %>">show old packages</a> )
+% } elsif ( $cgi->param('showoldpackages') ) {
+%   $cgi->param('showoldpackages', 0);
+    ( <a href="<% $cgi->self_url %>">hide old packages</a> )
+% }
+
+    </TD>
+    <TD ALIGN="right">
+      <A HREF="<%$p%>search/report_cust_pkg.html?custnum=<% $cust_main->custnum %>">Package reports</A><BR>
+      Service reports:
+        <A HREF="<%$p%>search/report_svc_acct.html?custnum=<% $cust_main->custnum %>">accounts</A>
+    </TD>
+  </TR>
+
+  <TR>
+    <TD COLSPAN=2>
+
 % if ( @$packages ) { 
 
 <% include('/elements/table-grid.html') %>
@@ -69,6 +80,7 @@ Current packages
   <TH CLASS="grid" BGCOLOR="#cccccc">Services</TH>
 </TR>
 
+% #$FS::cust_pkg::DEBUG = 2;
 % foreach my $cust_pkg (@$packages) {
 %
 %   if ( $bgcolor eq $bgcolor1 ) {
@@ -83,6 +95,7 @@ Current packages
 %     'part_pkg' => $cust_pkg->part_pkg,
 %     %conf_opt,
 %   );
+%
 
     <!--pkgnum: <% $cust_pkg->pkgnum %>-->
     <TR>
@@ -102,6 +115,10 @@ Current packages
 <BR>
 % } 
 
+    </TD>
+  </TR>
+</TABLE>
+
 % if ( $cgi->param('fragment') =~ /^cust_pkg(\d+)$/ ) {
   <SCRIPT>
     // IE-specific hack.  other browsers listen to #fragments
@@ -119,7 +136,7 @@ my $conf = new FS::Conf;
 
 my $curuser = $FS::CurrentUser::CurrentUser;
 
-my $packages = get_packages($cust_main, $conf);
+my( $packages, $num_old_packages ) = get_packages($cust_main, $conf);
 
 my $show_location = $conf->exists('cust_pkg-always_show_location')
                         || ( grep $_->locationnum, @$packages ); # ? '1' : '0';
@@ -131,6 +148,9 @@ my %conf_opt = (
 
   #for status.html
   'cust_pkg-show_autosuspend' => $conf->exists('cust_pkg-show_autosuspend'),
+  #for status.html pkg-balances
+  'pkg-balances'              => $conf->exists('pkg-balances'),
+  'money_char'                => ( $conf->config('money_char') || '$' ),
 
   #for location.html
   'countrydefault'            => $countrydefault,
@@ -139,6 +159,8 @@ my %conf_opt = (
   #for services.html
   'svc_external-skip_manual'  => $conf->exists('svc_external-skip_manual'),
   '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'),
 );
 
 #subroutines
@@ -146,8 +168,7 @@ my %conf_opt = (
 sub get_packages {
   my $cust_main = shift or return undef;
   my $conf = shift;
-  
-  my @packages = ();
+
   my $method;
   if (  $cgi->param('showcancelledpackages') eq '0' #see if it was set by me
      || ( $conf->exists('hidecancelledpackages')
@@ -159,7 +180,50 @@ sub get_packages {
     $method = 'all_pkgs';
   }
 
-  [ $cust_main->$method() ];
+  my $cust_pkg_fields =
+    join(', ', map { "cust_pkg.$_ AS $_"          } fields('cust_pkg') );
+
+  my $part_pkg_fields =
+    join(', ', map { "part_pkg.$_ AS part_pkg_$_" } fields('part_pkg') );
+
+  my $group_by =
+    join(', ', map "cust_pkg.$_", fields('cust_pkg') ). ', '.
+    join(', ', map "part_pkg.$_", fields('part_pkg') );
+
+  my $num_svcs = '( SELECT COUNT(*) FROM cust_svc '.
+                 '    WHERE cust_svc.pkgnum = cust_pkg.pkgnum ) AS num_svcs';
+
+  my @packages = $cust_main->$method( {
+    'select'    => "$cust_pkg_fields, $part_pkg_fields, $num_svcs",
+    'addl_from' => 'LEFT JOIN part_pkg USING ( pkgpart )',
+  } );
+  my $num_old_packages = scalar(@packages);
+
+  foreach my $cust_pkg ( @packages ) {
+    my %hash = $cust_pkg->hash;
+    my %part_pkg = map  { /^part_pkg_(.+)$/ or die; ( $1 => $hash{$_} ); }
+                   grep { /^part_pkg_/ } keys %hash;
+    $cust_pkg->{'_pkgpart'} = new FS::part_pkg \%part_pkg;
+  }
+
+  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);
+
+  ( \@packages, $num_old_packages );
 }
 
 </%init>