diff options
Diffstat (limited to 'httemplate/view/cust_main/packages.html')
-rwxr-xr-x | httemplate/view/cust_main/packages.html | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/httemplate/view/cust_main/packages.html b/httemplate/view/cust_main/packages.html new file mode 100755 index 000000000..383c2a75e --- /dev/null +++ b/httemplate/view/cust_main/packages.html @@ -0,0 +1,184 @@ +% my $s = 0; + +% if ( $curuser->access_right('Qualify service') ) { + <% $s++ ? ' | ' : '' %> + <% include('qual_link.html', $cust_main) %> +% } + +% if ( $curuser->access_right('Order customer package') ) { + <% $s++ ? ' | ' : '' %> + <% include('order_pkg_link.html', $cust_main) %> +% } + +% if ( $curuser->access_right('One-time charge') +% && $conf->config('payby-default') ne 'HIDE' +% ) { + <% $s++ ? ' | ' : '' %> + <% include('one_time_charge_link.html', $cust_main) %> +% } + +% if ( $curuser->access_right('Bulk change customer packages') ) { + <% $s++ ? ' | ' : '' %> + <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 +% } +% if ( $cust_main->num_cancelled_pkgs ) { +% if ( $cgi->param('showcancelledpackages') eq '0' #see if it was set by me +% || ( $conf->exists('hidecancelledpackages') +% && ! $cgi->param('showcancelledpackages') +% ) +% ) +% { +% 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> +% if ( $curuser->access_right('Qualify service') ) { + | <A HREF="<%$p%>search/qual.cgi?custnum=<% $cust_main->custnum %>">View Qualifications</A> +% } + <BR> + Service reports: + <A HREF="<%$p%>search/report_svc_acct.html?custnum=<% $cust_main->custnum %>">accounts</A><BR> + Usage reports: + <A HREF="<%$p%>search/report_cdr.html?custnum=<% $cust_main->custnum %>">CDRs</A> + </TD> + </TR> + + <TR> + <TD COLSPAN=2> +% if ( $conf->exists('cust_pkg-group_by_location') and $show_location ) { +<% include('locations.html', + 'cust_main' => $cust_main, + 'packages' => $packages, +) %> +% } +% else { +% # in this format, put all packages in one section +<% include('/elements/table-grid.html') %> +<% include('packages/section.html', + 'packages' => $packages, + 'show_location' => $show_location, +) %> +</TABLE> +% } + </TD> + </TR> + +% if ( $cgi->param('fragment') =~ /^cust_pkg(\d+)$/ ) { + <SCRIPT> + // IE-specific hack. other browsers listen to #fragments + // is this even working? or is the #target redirection just working cause + // we set the URL params differently? + var el = document.getElementById( 'cust_pkg<% $1 %>' ); + if ( el ) el.scrollIntoView(true); + </SCRIPT> +% } +</TABLE> +<%init> + +my $cust_main = shift; +my %opt = @_; +my $conf = new FS::Conf; + +my $curuser = $FS::CurrentUser::CurrentUser; + +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'; + +my $countrydefault = scalar($conf->config('countrydefault')) || 'US'; +#subroutines + +sub get_packages { + my $cust_main = shift or return undef; + my $conf = shift; + + my $method; + if ( $cgi->param('showcancelledpackages') eq '0' #see if it was set by me + || ( $conf->exists('hidecancelledpackages') + && ! $cgi->param('showcancelledpackages') ) + ) + { + $method = 'ncancelled_pkgs'; + } else { + $method = 'all_pkgs'; + } + + 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> |