5 <TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
6 <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%">
7 <SCRIPT TYPE="text/javascript">
8 function clearhint_search_cust_svc(obj, str) {
9 if (obj.value == str) obj.value = '';
13 % foreach my $part_svc ( $cust_pkg->part_svc ) {
15 % if ( $opt{'cust_pkg-large_pkg_size'} > 0 and
16 % $opt{'cust_pkg-large_pkg_size'} <= $cust_pkg->num_svcs ) {
19 <TD ALIGN="center" VALIGN="top">
20 % my $href="${p}search/cust_pkg_svc.html?svcpart=".$part_svc->svcpart.
21 % ";pkgnum=".$cust_pkg->pkgnum;
22 <A HREF="<% $href %>"><% $part_svc->svc %></A>
23 <A HREF="<% $href %>"><B>(view all <% $cust_pkg->num_svcs %>)</B></A>
24 % my $hint = $hints{$part_svc->svcdb};
27 <FORM name="svcpart<%$part_svc->svcpart%>_search" STYLE="display:inline"
28 ACTION="<%$p%>search/cust_pkg_svc.html" METHOD="GET">
29 <INPUT TYPE="hidden" NAME="svcpart" VALUE="<%$part_svc->svcpart%>">
30 <INPUT TYPE="hidden" NAME="pkgnum" VALUE="<%$cust_pkg->pkgnum%>">
31 <INPUT TYPE="text" NAME="search_svc"
32 onfocus="clearhint_search_cust_svc(this, '<%$hint%>')" VALUE="<%$hint%>">
33 <INPUT TYPE="submit" VALUE="Search"></FORM>
38 % else { # don't summarize
39 % foreach my $cust_svc ( @{ $part_svc->cust_pkg_svc } ) {
40 % if ( $cust_pkg->getfield('cancel') > 0 ) {
41 <% include('/elements/tr-cust_svc_cancel.html',
43 'part_svc' => $part_svc,
44 'cust_svc' => $cust_svc,
45 'cust_pkg' => $cust_pkg,
49 <% include('/elements/tr-cust_svc.html',
51 'part_svc' => $part_svc,
52 'cust_svc' => $cust_svc,
53 'cust_pkg' => $cust_pkg,
56 % } #foreach $cust_svc
58 % if ( ! $cust_pkg->get('cancel')
59 % && $curuser->access_right('Provision customer service')
60 % && $part_svc->num_avail
64 <TD COLSPAN=3 ALIGN="center" STYLE="padding-bottom:4px;padding-top:0px">
65 <B><% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %></B>
80 my $bgcolor = $opt{'bgcolor'};
81 my $cust_pkg = $opt{'cust_pkg'};
82 my $part_pkg = $opt{'part_pkg'};
83 my $curuser = $FS::CurrentUser::CurrentUser;
85 my $conf = new FS::Conf;
87 sub svc_provision_link {
88 my ($cust_pkg, $part_svc, $opt, $curuser) = @_;
89 ( my $svc_nbsp = $part_svc->svc ) =~ s/\s+/ /g;
90 my $num_avail = $part_svc->num_avail;
91 my $pkgnum_svcpart = "pkgnum=". $cust_pkg->pkgnum. ';'.
92 "svcpart=". $part_svc->svcpart;
94 if ( $part_svc->svcdb eq 'svc_external' #could be generalized
95 && $opt->{'svc_external-skip_manual'}
97 $url = "${p}edit/process/". $part_svc->svcdb. ".cgi?$pkgnum_svcpart";
102 'part_svc' => $part_svc,
103 'query' => $pkgnum_svcpart,
105 #$url = "${p}edit/$svcpart->{svcdb}.cgi?$pkgnum_svcpart";
108 my $link = qq!<A CLASS="provision" HREF="$url">!.
109 "Provision $svc_nbsp ($num_avail)</A>";
110 if ( $opt->{'legacy_link'}
111 && $curuser->access_right('View/link unlinked services')
115 qq!<A CLASS="provision" HREF="${p}misc/link.cgi?!.
116 qq!$pkgnum_svcpart">!.
117 "Link to legacy $svc_nbsp ($num_avail)</A>";
123 svc_acct => '(user or email)',
124 svc_domain => '(domain)',
125 svc_broadband => '(ip or mac)',
126 svc_forward => '(email)',
127 svc_phone => '(phone)',
128 svc_pbx => '(phone)',