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