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>(<% mt("view all [_1]", $cust_pkg->num_svcs) |h %>)</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 <& /elements/tr-cust_svc_cancel.html,
43 'part_svc' => $part_svc,
44 'cust_svc' => $cust_svc,
45 'cust_pkg' => $cust_pkg,
49 <& /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>
66 % if ( $curuser->access_right('Bulk provision customer service')
67 % && $part_svc->svcdb eq 'svc_phone' ) {
68 <BR><A HREF="<%$p%>browse/did_order.html?custnum=<%$cust_pkg->custnum%>"><% mt('Browse Received DID Inventory') |h %></A>
84 my $bgcolor = $opt{'bgcolor'};
85 my $cust_pkg = $opt{'cust_pkg'};
86 my $part_pkg = $opt{'part_pkg'};
87 my $curuser = $FS::CurrentUser::CurrentUser;
89 my $conf = new FS::Conf;
91 sub svc_provision_link {
92 my ($cust_pkg, $part_svc, $opt, $curuser) = @_;
93 ( my $svc_nbsp = $part_svc->svc ) =~ s/\s+/ /g;
94 my $num_avail = $part_svc->num_avail;
95 my $pkgnum_svcpart = "pkgnum=". $cust_pkg->pkgnum. ';'.
96 "svcpart=". $part_svc->svcpart;
98 if ( $part_svc->svcdb eq 'svc_external' #could be generalized
99 && $opt->{'svc_external-skip_manual'}
101 $url = "${p}edit/process/". $part_svc->svcdb. ".cgi?$pkgnum_svcpart";
106 'part_svc' => $part_svc,
107 'query' => $pkgnum_svcpart,
111 my $link = qq!<A CLASS="provision" HREF="$url">!.
112 mt("Provision [_1] ([_2])",$svc_nbsp,$num_avail).'</A>';
113 if ( $opt->{'legacy_link'}
114 && $curuser->access_right('View/link unlinked services')
118 qq!<A CLASS="provision" HREF="${p}misc/link.cgi?!.
119 qq!$pkgnum_svcpart">!.
120 mt("Link to legacy [_1] ([_2])",$svc_nbsp,$num_avail).'</A>';
126 svc_acct => mt('(user or email)'),
127 svc_domain => mt('(domain)'),
128 svc_broadband => mt('(ip or mac)'),
129 svc_forward => mt('(email)'),
130 svc_phone => mt('(phone)'),
131 svc_pbx => mt('(phone)'),