diff options
author | mark <mark> | 2010-10-25 22:22:42 +0000 |
---|---|---|
committer | mark <mark> | 2010-10-25 22:22:42 +0000 |
commit | 0a51b87d75f8c93de863f729ef1ca568ca227e32 (patch) | |
tree | 17305873562562672fa2239fff869fc38b2fafa7 /httemplate | |
parent | 716be4fdacc0995d54a0df8c77268606f23fa768 (diff) |
summary display of bulk packages with many services, RT#9821
Diffstat (limited to 'httemplate')
-rwxr-xr-x | httemplate/misc/unprovision.cgi | 32 | ||||
-rw-r--r-- | httemplate/search/cust_pkg_svc.html | 117 | ||||
-rw-r--r-- | httemplate/search/cust_svc.html | 6 | ||||
-rwxr-xr-x | httemplate/view/cust_main/packages.html | 1 | ||||
-rw-r--r-- | httemplate/view/cust_main/packages/services.html | 44 | ||||
-rw-r--r-- | httemplate/view/elements/svc_Common.html | 16 |
6 files changed, 196 insertions, 20 deletions
diff --git a/httemplate/misc/unprovision.cgi b/httemplate/misc/unprovision.cgi index 4ab15fdc0..6f2c23815 100755 --- a/httemplate/misc/unprovision.cgi +++ b/httemplate/misc/unprovision.cgi @@ -1,6 +1,8 @@ %if ( $error ) { % errorpage($error); -%} else { +%} elsif ( $pkgnum ) { +<% $cgi->redirect(popurl(2)."search/cust_pkg_svc.html?svcpart=$svcpart;pkgnum=$pkgnum") %> +%} else { # $custnum should always exist <% $cgi->redirect(popurl(2)."view/cust_main.cgi?$custnum") %> %} <%init> @@ -9,18 +11,28 @@ die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('Unprovision customer service'); #untaint svcnum -my($query) = $cgi->keywords; -$query =~ /^(\d+)$/; -my $svcnum = $1; +my @svcnums; +my ($pkgnum, $svcpart, $custnum); +if( $cgi->param('svcnum') ) { + @svcnums = grep { $_ } map { /^(\d+)$/ && $1 } $cgi->param('svcnum'); + $pkgnum = $cgi->param('pkgnum'); + $svcpart = $cgi->param('svcpart'); + $custnum = $cgi->param('custnum'); +} +else { + @svcnums = map { /^(\d+)$/ && $1 } $cgi->keywords; +} -#my $svc_acct = qsearchs('svc_acct',{'svcnum'=>$svcnum}); -#die "Unknown svcnum!" unless $svc_acct; +my $error = ''; +foreach my $svcnum (@svcnums) { -my $cust_svc = qsearchs('cust_svc',{'svcnum'=>$svcnum}); -die "Unknown svcnum!" unless $cust_svc; + my $cust_svc = qsearchs('cust_svc',{'svcnum'=>$svcnum}); + die "Unknown svcnum!" unless $cust_svc; -my $custnum = $cust_svc->cust_pkg->custnum; + $custnum ||= $cust_svc->cust_pkg->custnum; -my $error = $cust_svc->cancel; + $error .= $cust_svc->cancel; + +} </%init> diff --git a/httemplate/search/cust_pkg_svc.html b/httemplate/search/cust_pkg_svc.html new file mode 100644 index 000000000..4f27d6617 --- /dev/null +++ b/httemplate/search/cust_pkg_svc.html @@ -0,0 +1,117 @@ +<% include( 'elements/search.html', + 'title' => $part_svc->svc.' services in package #'.$pkgnum, + 'name' => 'services', + 'html_form' => $html_form, + 'query' => $sql_query, + 'count_query' => $count_query, + 'redirect' => $link, + 'header' => [ '#', + 'Service', + '', #checkboxes + ], + 'fields' => [ 'svcnum', + sub { + ($_[0]->label)[1] + }, + sub { + $areboxes = 1; + '<INPUT TYPE="checkbox" NAME="svcnum" VALUE='.$_[0]->svcnum.'>' + }, + ], + 'links' => [ $link, + $link, + '', + ], + 'align' => 'rrlc', + 'color' => [ + ('')x4, + ], + 'style' => [ + ('')x4, + ], + 'html_foot' => sub { $areboxes ? $html_foot : '' } + ) +%> +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('List services'); + +my $pkgnum = $cgi->param('pkgnum'); +$pkgnum =~ /^(\d+)$/ or die "invalid pkgnum: $pkgnum"; +my @extra_sql = ( "cust_svc.pkgnum = $pkgnum" ); + +my $svcpart = $cgi->param('svcpart'); +$svcpart =~ /^(\d+)$/ or die "invalid svcpart: $svcpart"; +push @extra_sql, "cust_svc.svcpart = $svcpart"; +my $part_svc = qsearchs('part_svc', {svcpart => $svcpart}); +my $svcdb = $part_svc->svcdb; + +my $orderby = 'ORDER BY svcnum'; #others? + +my $addl_from = " LEFT JOIN part_svc USING (svcpart) +LEFT JOIN cust_pkg USING (pkgnum) +LEFT JOIN cust_main USING (custnum) +INNER JOIN $svcdb USING (svcnum)"; + +my $search_string; +if ( length( $cgi->param('search_svc') ) ) { + + $search_string = $cgi->param('search_svc'); + $search_string =~ s/(^\s+|\s+$)//; + push @extra_sql, "FS::$svcdb"->search_sql($search_string); + +} + +#here is the agent virtualization +push @extra_sql, $FS::CurrentUser::CurrentUser->agentnums_sql( + 'null_right' => 'View/link unlinked services' + ); + +my $extra_sql = ' WHERE '. join(' AND ', @extra_sql ); + +my $sql_query = { + 'select' => join(', ', + 'cust_svc.*', + 'part_svc.svc', + ), + 'table' => 'cust_svc', + 'addl_from' => $addl_from, + 'hashref' => {}, + 'extra_sql' => "$extra_sql $orderby", +}; + +#warn Dumper($sql_query)."\n"; + +my $count_query = "SELECT COUNT(*) FROM cust_svc $addl_from $extra_sql"; + +my $link = sub { + my $cust_svc = shift; + my $url = svc_url( + 'm' => $m, + 'action' => 'view', + 'svcdb' => $svcdb, + 'query' => '', + ); + [ $url, 'svcnum' ]; +}; + +my $html_form = qq! +<SCRIPT TYPE="text/javascript"> +function areyousure(obj) { + return confirm('Permanently delete the selected services?'); +} +</SCRIPT> +<FORM METHOD="POST" ACTION="${p}misc/unprovision.cgi" onsubmit="return areyousure()">!; + +my $areboxes = 0; + +my $html_foot = qq! +<BR> +<INPUT TYPE="submit" NAME="submit" VALUE="Unprovision selected"> +<INPUT TYPE="hidden" NAME="pkgnum" VALUE=$pkgnum> +<INPUT TYPE="hidden" NAME="svcpart" VALUE=$svcpart> +</FORM>!; + + +</%init> diff --git a/httemplate/search/cust_svc.html b/httemplate/search/cust_svc.html index 2c17561f2..61bfc7091 100644 --- a/httemplate/search/cust_svc.html +++ b/httemplate/search/cust_svc.html @@ -93,6 +93,10 @@ if ( length( $cgi->param('search_svc') ) ) { errorpage("No search term specified"); } +if ( $cgi->param('pkgnum') =~ /^(\d+)$/ ) { + push @extra_sql, "cust_svc.pkgnum = $1"; +} + #here is the agent virtualization push @extra_sql, $FS::CurrentUser::CurrentUser->agentnums_sql( 'null_right' => 'View/link unlinked services' @@ -113,6 +117,8 @@ my $sql_query = { 'extra_sql' => "$extra_sql $orderby", }; +warn Dumper($sql_query)."\n"; + my $count_query = "SELECT COUNT(*) FROM cust_svc $addl_from $extra_sql"; my $link = sub { diff --git a/httemplate/view/cust_main/packages.html b/httemplate/view/cust_main/packages.html index f0f156bf8..660d0ef86 100755 --- a/httemplate/view/cust_main/packages.html +++ b/httemplate/view/cust_main/packages.html @@ -163,6 +163,7 @@ my %conf_opt = ( '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'), ); #subroutines diff --git a/httemplate/view/cust_main/packages/services.html b/httemplate/view/cust_main/packages/services.html index 6e30922c5..512efccc4 100644 --- a/httemplate/view/cust_main/packages/services.html +++ b/httemplate/view/cust_main/packages/services.html @@ -4,12 +4,40 @@ <TD CLASS="inv" BGCOLOR="<% $bgcolor %>"> <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%"> + <SCRIPT TYPE="text/javascript"> +function clearhint_search_cust_svc(obj, str) { + if (obj.value == str) obj.value = ''; +} + </SCRIPT> % #foreach my $svcpart (sort {$a->{svcpart} <=> $b->{svcpart}} @{$pkg->{svcparts}}) { % foreach my $part_svc ( $cust_pkg->part_svc ) { -% #foreach my $service (@{$svcpart->{services}}) { -% foreach my $cust_svc ( @{ $part_svc->cust_pkg_svc } ) { +% if ( $opt{'cust_pkg-large_pkg_size'} > 0 and +% $opt{'cust_pkg-large_pkg_size'} <= $cust_pkg->num_svcs ) { +% # summarize + <TR> + <TD ALIGN="center" VALIGN="top"> +% my $href="${p}search/cust_pkg_svc.html?svcpart=".$part_svc->svcpart. +% ";pkgnum=".$cust_pkg->pkgnum; + <A HREF="<% $href %>"><% $part_svc->svc %></A> + <A HREF="<% $href %>"><B>(view all <% $cust_pkg->num_svcs %>)</B></A> +% my $hint = $hints{$part_svc->svcdb}; +% if ( $hint ) { + <BR> + <FORM name="svcpart<%$part_svc->svcpart%>_search" STYLE="display:inline" + ACTION="<%$p%>search/cust_pkg_svc.html" METHOD="GET"> + <INPUT TYPE="hidden" NAME="svcpart" VALUE="<%$part_svc->svcpart%>"> + <INPUT TYPE="hidden" NAME="pkgnum" VALUE="<%$cust_pkg->pkgnum%>"> + <INPUT TYPE="text" NAME="search_svc" + onfocus="clearhint_search_cust_svc(this, '<%$hint%>')" VALUE="<%$hint%>"> + <INPUT TYPE="submit" VALUE="Search"></FORM> +% } #$hint + </TD> + </TR> +% } +% else { +% foreach my $cust_svc ( @{ $part_svc->cust_pkg_svc } ) { <TR> <TD ALIGN="right" VALIGN="top"><% FS::UI::Web::svc_link($m, $part_svc, $cust_svc) %></TD> @@ -65,7 +93,8 @@ </TD> </TR> -% } +% } #foreach $cust_svc +% } % if ( ! $cust_pkg->get('cancel') % && $curuser->access_right('Provision customer service') @@ -137,4 +166,13 @@ sub svc_unprovision_link { qq!', 'Permanently unprovision and delete this service?')">Unprovision</A>!; } +my %hints = ( +svc_acct => '(user or email)', +svc_domain => '(domain)', +svc_broadband => '(ip or mac)', +svc_forward => '(email)', +svc_phone => '(phone)', +svc_pbx => '(phone)', +); + </%init> diff --git a/httemplate/view/elements/svc_Common.html b/httemplate/view/elements/svc_Common.html index 852640e0c..8a352f3fa 100644 --- a/httemplate/view/elements/svc_Common.html +++ b/httemplate/view/elements/svc_Common.html @@ -21,6 +21,13 @@ ) </%doc> +<SCRIPT> +function areyousure(href) { + if (confirm("Permanently delete this <% $label %>?") == true) + window.location.href = href; +} +</SCRIPT> + % if ( $custnum ) { <% include("/elements/header.html","View $label: $value") %> @@ -36,18 +43,13 @@ "javascript:areyousure(\'${p}misc/cancel-unaudited.cgi?$svcnum\')" )) %> - <SCRIPT> - function areyousure(href) { - if (confirm("Permanently delete this <% $label %>?") == true) - window.location.href = href; - } - </SCRIPT> - % } Service #<B><% $svcnum %></B> % my $url = $opt{'edit_url'} || $p. 'edit/'. $opt{'table'}. '.cgi?'; | <A HREF="<%$url%><%$svcnum%>">Edit this <% $label %></A> +| <A HREF="javascript:areyousure('<%$p.'misc/unprovision.cgi?'.$svcnum%>')"> +Unprovision this Service</A> <BR> <% ntable("#cccccc") %><TR><TD><% ntable("#cccccc",2) %> |