fix "multiple states" links, RT#13922
[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 $svcpart (sort {$a->{svcpart} <=> $b->{svcpart}} @{$pkg->{svcparts}}) {
14 %  foreach my $part_svc ( $cust_pkg->part_svc ) {
15
16 %    my $num_cust_svc = $cust_pkg->num_cust_svc( $part_svc->svcpart );
17
18 %    if ( $opt{'cust_pkg-large_pkg_size'} > 0 and
19 %         $opt{'cust_pkg-large_pkg_size'} <= $num_cust_svc ) {
20 %      # summarize
21       <TR>
22         <TD ALIGN="right" VALIGN="top">
23 %       my $href="${p}search/cust_pkg_svc.html?svcpart=".$part_svc->svcpart.
24 %          ";pkgnum=".$cust_pkg->pkgnum;
25         <A HREF="<% $href %>"><% $part_svc->svc %></A></TD>
26         <TD ALIGN="left" VALIGN="top">
27         <A HREF="<% $href %>"><B>(view all <% $num_cust_svc %>)</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 {
47 %      foreach my $cust_svc ( @{ $part_svc->cust_pkg_svc } ) {
48
49       <TR>
50         <TD ALIGN="right" VALIGN="top"><% FS::UI::Web::svc_link($m, $part_svc, $cust_svc) %></TD>
51         <TD STYLE="padding-bottom:0px"><B><% FS::UI::Web::svc_label_link($m, $part_svc, $cust_svc) %></B></TD>
52         <TD><% FS::UI::Web::svc_export_links($m, $part_svc, $cust_svc) %></TD>
53       </TR>
54
55       <TR>
56         <TD ALIGN="right" COLSPAN="3" VALIGN="top" STYLE="padding-bottom:1px;padding-top:0px"><FONT SIZE="-2" COLOR="#FFD000">
57
58             <% $cust_svc->overlimit ? "Overlimit: ". time2str('%b %o %Y' . ($opt{'cust_pkg-display_times'} ? ' %l:%M %P' : ''), $cust_svc->overlimit) : '' %>
59           </FONT></TD>
60       </TR>
61
62       <TR>
63         <TD ALIGN="right" VALIGN="top" STYLE="padding-bottom:5px;padding-top:0px"><FONT SIZE="-2">
64
65 %         if ( $curuser->access_right('Recharge customer service')
66 %              && $part_svc->svcdb eq 'svc_acct'
67 %              && (    $cust_svc->svc_x->seconds    ne ''
68 %                   || $cust_svc->svc_x->upbytes    ne ''
69 %                   || $cust_svc->svc_x->downbytes  ne ''
70 %                   || $cust_svc->svc_x->totalbytes ne ''
71 %                 )
72 %         ) { 
73             (&nbsp;<%svc_recharge_link($cust_svc)%>&nbsp;)
74 %         }
75           </FONT></TD>
76
77           <TD ALIGN="right" VALIGN="top" STYLE="padding-bottom:5px;padding-top:0px">
78
79 %           my $ip_addr = $cust_svc->svc_x->ip_addr;
80
81 %           if ( $part_svc->svcdb eq 'svc_broadband' ) {
82               <FONT SIZE="-1" STYLE="float:left">(&nbsp;<% include('/elements/popup_link-ping.html', 'ip'=> $ip_addr ) %>&nbsp;)</FONT>
83
84 %           }
85
86 %           my $manage_link = $opt{'svc_broadband-manage_link'};
87 %           if ( $manage_link && $part_svc->svcdb eq 'svc_broadband' ) {
88 %             my $svc_manage_link = eval(qq("$manage_link"));
89               <FONT SIZE="-1" STYLE="float:left">(&nbsp;<A HREF="<% $svc_manage_link %>">Manage Device</A>&nbsp;)</FONT>
90
91 %           }
92
93 %           if ( $curuser->access_right('Unprovision customer service') ) { 
94               <FONT SIZE="-2">(&nbsp;<%svc_unprovision_link($cust_svc)%>&nbsp;)</FONT>
95 %           } 
96
97 %           if ( $part_svc->svcdb eq 'svc_pbx' && $opt{'maestro-status_test'} ){
98               <FONT SIZE="-2">(&nbsp;<A HREF="<% $p %>misc/maestro-customer_status-test.html?<% $cust_pkg->custnum.'+'.$cust_svc->svcnum %>">Test maestro status</A>&nbsp;)</FONT>
99 %           } 
100
101           </TD>
102         </TR>
103 %     } #foreach $cust_svc
104 %   }
105
106 %   if (    ! $cust_pkg->get('cancel')
107 %        && $curuser->access_right('Provision customer service') 
108 %        && $part_svc->num_avail
109 %      ) {
110
111       <TR>
112         <TD COLSPAN=3 ALIGN="center" STYLE="padding-bottom:4px;padding-top:0px">
113           <B><% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %></B>
114 %        if ( $curuser->access_right('Bulk provision customer service') 
115 %               && $part_svc->svcdb eq 'svc_phone' ) {
116             <BR><A HREF="<%$p%>browse/did_order.html?custnum=<%$cust_pkg->custnum%>">Browse Received DID Inventory</A> 
117 %       }
118         </TD>
119       </TR>
120
121 %   } 
122
123 % } 
124
125     </TABLE>
126   </TD>
127
128 <%init>
129
130 my %opt = @_;
131
132 my $bgcolor  = $opt{'bgcolor'};
133 my $cust_pkg = $opt{'cust_pkg'};
134 my $part_pkg = $opt{'part_pkg'};
135 my $curuser  = $FS::CurrentUser::CurrentUser;
136
137 my $conf = new FS::Conf;
138
139 sub svc_provision_link {
140   my ($cust_pkg, $part_svc, $opt, $curuser) = @_;
141   ( my $svc_nbsp = $part_svc->svc ) =~ s/\s+/&nbsp;/g;
142   my $num_avail = $part_svc->num_avail;
143   my $pkgnum_svcpart = "pkgnum=". $cust_pkg->pkgnum. ';'.
144                        "svcpart=". $part_svc->svcpart;
145   my $url;
146   if ( $part_svc->svcdb eq 'svc_external' #could be generalized
147        && $opt->{'svc_external-skip_manual'}
148   ) {
149     $url = "${p}edit/process/". $part_svc->svcdb. ".cgi?$pkgnum_svcpart";
150   } else {
151     $url = svc_url(
152                     'm'        => $m,
153                     'action'   => 'edit',
154                     'part_svc' => $part_svc, 
155                     'query'    => $pkgnum_svcpart,
156                   );
157     #$url = "${p}edit/$svcpart->{svcdb}.cgi?$pkgnum_svcpart";
158   }
159
160   my $link = qq!<A CLASS="provision" HREF="$url">!.
161              "Provision&nbsp;$svc_nbsp&nbsp;($num_avail)</A>";
162   if ( $opt->{'legacy_link'}
163        && $curuser->access_right('View/link unlinked services')
164      )
165   {
166     $link .= '<BR>'.
167              qq!<A CLASS="provision" HREF="${p}misc/link.cgi?!.
168              qq!$pkgnum_svcpart">!.
169             "Link&nbsp;to&nbsp;legacy&nbsp;$svc_nbsp&nbsp;($num_avail)</A>";
170   }
171   $link;
172 }
173
174 sub svc_unprovision_link {
175   my $cust_svc = shift or return '';
176   qq!<A HREF="javascript:areyousure('${p}misc/unprovision.cgi?!. $cust_svc->svcnum.
177   qq!', 'Permanently unprovision and delete this service?')">Unprovision</A>!;
178 }
179
180 my %hints = (
181 svc_acct      => '(user or email)',
182 svc_domain    => '(domain)',
183 svc_broadband => '(ip or mac)',
184 svc_forward   => '(email)',
185 svc_phone     => '(phone)',
186 svc_pbx       => '(phone)',
187 );
188
189 </%init>