X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fview%2Fcust_main%2Fpackages%2Fservices.html;h=a23a4c2fefd9d1ad3a0d7c8ae6691a2129df323a;hb=bb174fcb28d7df1673a9c55edc7d953017b5288f;hp=1e473736bc711ecf2348e6ff1ab9553ca2e60d88;hpb=7d751137371d5e6e263265e7aa37433ad7f871c3;p=freeside.git diff --git a/httemplate/view/cust_main/packages/services.html b/httemplate/view/cust_main/packages/services.html index 1e473736b..a23a4c2fe 100644 --- a/httemplate/view/cust_main/packages/services.html +++ b/httemplate/view/cust_main/packages/services.html @@ -3,51 +3,73 @@ % ### <TD CLASS="inv" BGCOLOR="<% $bgcolor %>"> - <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%"> - -% #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 } ) { - + <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=2 WIDTH="100%"> + <SCRIPT TYPE="text/javascript"> +function clearhint_search_cust_svc(obj, str) { + if (obj.value == str) obj.value = ''; +} + </SCRIPT> + +% my $showdidlink = browse_received_did_inventory($cust_pkg->custnum); +% foreach my $part_svc ( +% $cust_pkg->part_svc( +% 'summarize_size' => $opt{'cust_pkg-large_pkg_size'}, +% 'hide_discontinued' => $opt{'cust_pkg-hide_discontinued-part_svc'}, +% ) +% ) { +% +% my $num_cust_svc = $cust_pkg->num_cust_svc( $part_svc->svcpart ); +% +% if ( $opt{'cust_pkg-large_pkg_size'} > 0 and +% $opt{'cust_pkg-large_pkg_size'} <= $num_cust_svc ) { # summarize +% <TR> - <TD ALIGN="right" VALIGN="top"><% FS::UI::Web::svc_link($m, $part_svc, $cust_svc) %></TD> - <TD STYLE="padding-bottom:0px"><B><% FS::UI::Web::svc_label_link($m, $part_svc, $cust_svc) %></B></TD> - <TD><% FS::UI::Web::svc_export_links($m, $part_svc, $cust_svc) %></TD> + <TD ALIGN="right" VALIGN="top"> +% my $href="${p}search/cust_pkg_svc.html?svcpart=".$part_svc->svcpart. +% ";pkgnum=".$cust_pkg->pkgnum; + <A HREF="<% $href %>"><% $part_svc->svc |h %></A> + </TD> + <TD ALIGN="left" VALIGN="top"> + <A HREF="<% $href %>"><B>(<% mt("view all [_1]", $num_cust_svc) |h %>)</B></A> + </TD> </TR> - +% my $hint = $hints{$part_svc->svcdb}; +% if ( $hint ) { <TR> - <TD ALIGN="right" COLSPAN="3" VALIGN="top" STYLE="padding-bottom:1px;padding-top:0px"><FONT SIZE="-2" COLOR="#FFD000"> - - <% $cust_svc->overlimit ? "Overlimit: ". time2str('%b %o %Y' . ($opt{'cust_pkg-display_times'} ? ' %l:%M %P' : ''), $cust_svc->overlimit) : '' %> - </FONT></TD> + <TD></TD> + <TD ALIGN="left" VALIGN="top"> + <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> + </TD> </TR> - - <TR> - <TD ALIGN="right" VALIGN="top" STYLE="padding-bottom:5px;padding-top:0px"><FONT SIZE="-2"> - -% if ( $curuser->access_right('Recharge customer service') -% && $part_svc->svcdb eq 'svc_acct' -% && ( $cust_svc->svc_x->seconds ne '' -% || $cust_svc->svc_x->upbytes ne '' -% || $cust_svc->svc_x->downbytes ne '' -% || $cust_svc->svc_x->totalbytes ne '' -% ) -% ) { - ( <%svc_recharge_link($cust_svc)%> ) -% } - </FONT></TD> - - <TD ALIGN="right" VALIGN="top" STYLE="padding-bottom:5px;padding-top:0px"><FONT SIZE="-2"> - -% if ( $curuser->access_right('Unprovision customer service') ) { - ( <%svc_unprovision_link($cust_svc)%> ) -% } - </FONT></TD> - </TR> -% } - +% } #$hint +% +% } else { # don't summarize +% +% foreach my $cust_svc ( @{ $part_svc->cust_pkg_svc } ) { +% if ( $cust_pkg->getfield('cancel') > 0 ) { + <& /elements/tr-cust_svc_cancel.html, + %opt, + 'part_svc' => $part_svc, + 'cust_svc' => $cust_svc, + 'cust_pkg' => $cust_pkg, + &> +% } +% else { + <& /elements/tr-cust_svc.html, + %opt, + 'part_svc' => $part_svc, + 'cust_svc' => $cust_svc, + 'cust_pkg' => $cust_pkg, + &> +% } #if cancel > 0 +% } #foreach $cust_svc +% } #if summarizing % if ( ! $cust_pkg->get('cancel') % && $curuser->access_right('Provision customer service') % && $part_svc->num_avail @@ -55,13 +77,53 @@ <TR> <TD COLSPAN=3 ALIGN="center" STYLE="padding-bottom:4px;padding-top:0px"> - <B><% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %></B> + + <B> +% if ( $opt{no_links} ) { + <% $part_svc->svc |h %>: <% $part_svc->num_avail %> + <% mt('Available') |h %> +% } else { + <% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %> +% } + </B> + +% if ( $curuser->access_right('Bulk provision customer service') +% && $part_svc->svcdb eq 'svc_phone' +% && ! $opt{no_links} +% ) +% { +% if ( $part_svc->num_avail > 5 ) { +% local $opt{'bulk'} = 1; +% local $opt{'svc_phone_bulk_provision_simple'} = $svc_phone_bulk_provision_simple; +% local $opt{'num_avail'} = $part_svc->num_avail; + <BR><% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %> +% } +% if ($showdidlink) { + <BR><A HREF="<%$p%>browse/did_order.html?custnum=<%$cust_pkg->custnum%>"><% mt('Browse Received DID Inventory') |h %></A> +% } +% } </TD> </TR> -% } +% } + +% } #foreach part_svc + +% if ($cust_pkg->get('cancel')) { +% foreach my $svc ( +% $cust_pkg->uncancel_svc_summary('summarize_size' => $opt{'cust_pkg-large_pkg_size'}, 'no_test_reprovision' => 1) +% ) { + <TR> + <TD ALIGN="right" VALIGN="top"><% $svc->{'svc'} |h %></TD> + <TD STYLE="padding-bottom:0px; font-style: italic"> + <% $svc->{'num_cust_svc'} + ? $svc->{'num_cust_svc'} . ' ' . emt('services in history') + : (defined($svc->{'label'}) ? $svc->{'label'} : emt('(cannot load svc label)')) |h %> + </TD> + </TR> +% } +% } -% } </TABLE> </TD> @@ -73,47 +135,80 @@ my %opt = @_; my $bgcolor = $opt{'bgcolor'}; my $cust_pkg = $opt{'cust_pkg'}; my $part_pkg = $opt{'part_pkg'}; +my $svc_phone_bulk_provision_simple = $opt{'svc_phone-bulk_provision_simple'}; + my $curuser = $FS::CurrentUser::CurrentUser; sub svc_provision_link { my ($cust_pkg, $part_svc, $opt, $curuser) = @_; - ( my $svc_nbsp = $part_svc->svc ) =~ s/\s+/ /g; + + ( my $svc_nbsp = $part_svc->svc ) =~ s/\s+/ /g; my $num_avail = $part_svc->num_avail; - my $pkgnum_svcpart = "pkgnum=". $cust_pkg->pkgnum. ';'. - "svcpart=". $part_svc->svcpart; + + my $query = "pkgnum=". $cust_pkg->pkgnum. ';'. + "svcpart=". $part_svc->svcpart; + $query .= ';bulk=1' if $opt->{bulk}; + my $url; if ( $part_svc->svcdb eq 'svc_external' #could be generalized && $opt->{'svc_external-skip_manual'} ) { - $url = "${p}edit/process/". $part_svc->svcdb. ".cgi?$pkgnum_svcpart"; + $url = "${p}edit/process/". $part_svc->svcdb. ".cgi?$query"; + } elsif ( $part_svc->svcdb eq 'svc_phone' && $opt->{bulk} + && $opt->{svc_phone_bulk_provision_simple} + ) + { + $query .= ';num_avail='. $opt->{num_avail}; + $url = "${p}edit/bulk-svc_phone.html?$query"; } else { $url = svc_url( 'm' => $m, 'action' => 'edit', 'part_svc' => $part_svc, - 'query' => $pkgnum_svcpart, + 'query' => $query, ); - #$url = "${p}edit/$svcpart->{svcdb}.cgi?$pkgnum_svcpart"; } + my $action = $opt->{bulk} ? 'Bulk provision' : 'Provision'; + my $link = qq!<A CLASS="provision" HREF="$url">!. - "Provision $svc_nbsp ($num_avail)</A>"; + emt("$action [_1] ([_2])",$svc_nbsp,$num_avail).'</A>'; + if ( $opt->{'legacy_link'} && $curuser->access_right('View/link unlinked services') + && ! $opt{bulk} ) { $link .= '<BR>'. - qq!<A CLASS="provision" HREF="${p}misc/link.cgi?!. - qq!$pkgnum_svcpart">!. - "Link to legacy $svc_nbsp ($num_avail)</A>"; + qq!<A CLASS="provision" HREF="${p}misc/link.cgi?$query">!. + emt("Link to legacy [_1] ([_2])",$svc_nbsp,$num_avail).'</A>'; } + $link; } -sub svc_unprovision_link { - my $cust_svc = shift or return ''; - qq!<A HREF="javascript:areyousure('${p}misc/unprovision.cgi?!. $cust_svc->svcnum. - qq!', 'Permanently unprovision and delete this service?')">Unprovision</A>!; +sub browse_received_did_inventory { + local($FS::Record::qsearch_qualify_columns) = 1; + qsearch({ + 'table' => 'did_order', + 'hashref' => { 'custnum' => $_[0] }, + 'extra_sql' => ' LIMIT 1' + }) || + qsearch({ + 'table' => 'did_order_item', + 'hashref' => { 'custnum' => $_[0] }, + 'addl_from' => ' INNER JOIN did_order ON did_order_item.ordernum = did_order.ordernum', + 'extra_sql' => ' LIMIT 1' + }); } +my %hints = ( +svc_acct => emt('(user or email)'), +svc_domain => emt('(domain)'), +svc_broadband => emt('(ip or mac)'), +svc_forward => emt('(email)'), +svc_phone => emt('(phone)'), +svc_pbx => emt('(phone)'), +); + </%init>