fix large package display with multiple svcparts, #9821
[freeside.git] / httemplate / view / cust_main / packages / services.html
1 % ###
2 % # Services
3 % ###
4
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 = '';
10 }
11     </SCRIPT>
12
13 %  foreach my $part_svc ( $cust_pkg->part_svc ) {
14
15 %    my $num_cust_svc = $cust_pkg->num_cust_svc( $part_svc->svcpart );
16
17 %    if ( $opt{'cust_pkg-large_pkg_size'} > 0 and
18 %         $opt{'cust_pkg-large_pkg_size'} <= $num_cust_svc ) {
19 %      # summarize
20       <TR>
21         <TD ALIGN="right" VALIGN="top">
22 %       my $href="${p}search/cust_pkg_svc.html?svcpart=".$part_svc->svcpart.
23 %          ";pkgnum=".$cust_pkg->pkgnum;
24         <A HREF="<% $href %>"><% $part_svc->svc %></A>
25         </TD>
26         <TD ALIGN="left" VALIGN="top">
27         <A HREF="<% $href %>"><B>(<% mt("view all [_1]", $cust_pkg->num_svcs) |h %>)</B></A>
28         </TD>
29       </TR>
30 %     my $hint = $hints{$part_svc->svcdb};
31 %     if ( $hint ) {
32       <TR>
33         <TD></TD>
34         <TD ALIGN="left" VALIGN="top">
35         <FORM name="svcpart<%$part_svc->svcpart%>_search" STYLE="display:inline"
36         ACTION="<%$p%>search/cust_pkg_svc.html" METHOD="GET">
37         <INPUT TYPE="hidden" NAME="svcpart" VALUE="<%$part_svc->svcpart%>">
38         <INPUT TYPE="hidden" NAME="pkgnum" VALUE="<%$cust_pkg->pkgnum%>">
39         <INPUT TYPE="text" NAME="search_svc"
40         onfocus="clearhint_search_cust_svc(this, '<%$hint%>')" VALUE="<%$hint%>">
41         <INPUT TYPE="submit" VALUE="Search"></FORM>
42         </TD>
43       </TR>
44 %     } #$hint
45 %    }
46 %    else { # don't summarize
47 %      foreach my $cust_svc ( @{ $part_svc->cust_pkg_svc } ) {
48 %        if ( $cust_pkg->getfield('cancel') > 0 ) {
49       <& /elements/tr-cust_svc_cancel.html,
50                   %opt,
51                   'part_svc' => $part_svc,
52                   'cust_svc' => $cust_svc,
53                   'cust_pkg' => $cust_pkg,
54        &>
55 %        }
56 %        else {
57       <& /elements/tr-cust_svc.html,
58                   %opt,
59                   'part_svc' => $part_svc,
60                   'cust_svc' => $cust_svc,
61                   'cust_pkg' => $cust_pkg,
62        &>
63 %       } #if cancel > 0
64 %     } #foreach $cust_svc
65 %   } #if summarizing
66 %   if (    ! $cust_pkg->get('cancel')
67 %        && $curuser->access_right('Provision customer service') 
68 %        && $part_svc->num_avail
69 %      ) {
70
71       <TR>
72         <TD COLSPAN=3 ALIGN="center" STYLE="padding-bottom:4px;padding-top:0px">
73           <B><% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %></B>
74 %        if ( $curuser->access_right('Bulk provision customer service') 
75 %               && $part_svc->svcdb eq 'svc_phone' ) {
76             <BR><A HREF="<%$p%>browse/did_order.html?custnum=<%$cust_pkg->custnum%>"><% mt('Browse Received DID Inventory') |h %></A> 
77 %       }
78         </TD>
79       </TR>
80
81 %   } 
82
83 % } 
84
85     </TABLE>
86   </TD>
87
88 <%init>
89
90 my %opt = @_;
91
92 my $bgcolor  = $opt{'bgcolor'};
93 my $cust_pkg = $opt{'cust_pkg'};
94 my $part_pkg = $opt{'part_pkg'};
95 my $curuser  = $FS::CurrentUser::CurrentUser;
96
97 my $conf = new FS::Conf;
98
99 sub svc_provision_link {
100   my ($cust_pkg, $part_svc, $opt, $curuser) = @_;
101   ( my $svc_nbsp = $part_svc->svc ) =~ s/\s+/ /g;
102   my $num_avail = $part_svc->num_avail;
103   my $pkgnum_svcpart = "pkgnum=". $cust_pkg->pkgnum. ';'.
104                        "svcpart=". $part_svc->svcpart;
105   my $url;
106   if ( $part_svc->svcdb eq 'svc_external' #could be generalized
107        && $opt->{'svc_external-skip_manual'}
108   ) {
109     $url = "${p}edit/process/". $part_svc->svcdb. ".cgi?$pkgnum_svcpart";
110   } else {
111     $url = svc_url(
112                     'm'        => $m,
113                     'action'   => 'edit',
114                     'part_svc' => $part_svc, 
115                     'query'    => $pkgnum_svcpart,
116                   );
117   }
118
119   my $link = qq!<A CLASS="provision" HREF="$url">!.
120              emt("Provision [_1] ([_2])",$svc_nbsp,$num_avail).'</A>';
121   if ( $opt->{'legacy_link'}
122        && $curuser->access_right('View/link unlinked services')
123      )
124   {
125     $link .= '<BR>'.
126              qq!<A CLASS="provision" HREF="${p}misc/link.cgi?!.
127              qq!$pkgnum_svcpart">!.
128             emt("Link to legacy [_1] ([_2])",$svc_nbsp,$num_avail).'</A>';
129   }
130   $link;
131 }
132
133 my %hints = (
134 svc_acct      => emt('(user or email)'),
135 svc_domain    => emt('(domain)'),
136 svc_broadband => emt('(ip or mac)'),
137 svc_forward   => emt('(email)'),
138 svc_phone     => emt('(phone)'),
139 svc_pbx       => emt('(phone)'),
140 );
141
142 </%init>