simple bulk provisioning of phone number ranges, RT#29800
[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=2 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 (
14 %    $cust_pkg->part_svc(
15 %      'summarize_size'    => $opt{'cust_pkg-large_pkg_size'},
16 %      'hide_discontinued' => $opt{'cust_pkg-hide_discontinued-part_svc'},
17 %    )
18 %  ) {
19 %
20 %    my $num_cust_svc = $cust_pkg->num_cust_svc( $part_svc->svcpart );
21 %
22 %    if ( $opt{'cust_pkg-large_pkg_size'} > 0 and
23 %         $opt{'cust_pkg-large_pkg_size'} <= $num_cust_svc ) { # summarize
24 %
25       <TR>
26         <TD ALIGN="right" VALIGN="top">
27 %       my $href="${p}search/cust_pkg_svc.html?svcpart=".$part_svc->svcpart.
28 %          ";pkgnum=".$cust_pkg->pkgnum;
29         <A HREF="<% $href %>"><% $part_svc->svc |h %></A>
30         </TD>
31         <TD ALIGN="left" VALIGN="top">
32         <A HREF="<% $href %>"><B>(<% mt("view all [_1]", $num_cust_svc) |h %>)</B></A>
33         </TD>
34       </TR>
35 %     my $hint = $hints{$part_svc->svcdb};
36 %     if ( $hint ) {
37       <TR>
38         <TD></TD>
39         <TD ALIGN="left" VALIGN="top">
40         <FORM name="svcpart<%$part_svc->svcpart%>_search" STYLE="display:inline"
41         ACTION="<%$p%>search/cust_pkg_svc.html" METHOD="GET">
42         <INPUT TYPE="hidden" NAME="svcpart" VALUE="<%$part_svc->svcpart%>">
43         <INPUT TYPE="hidden" NAME="pkgnum" VALUE="<%$cust_pkg->pkgnum%>">
44         <INPUT TYPE="text" NAME="search_svc"
45         onfocus="clearhint_search_cust_svc(this, '<%$hint%>')" VALUE="<%$hint%>">
46         <INPUT TYPE="submit" VALUE="Search"></FORM>
47         </TD>
48       </TR>
49 %     } #$hint
50 %
51 %    } else { # don't summarize
52 %
53 %      foreach my $cust_svc ( @{ $part_svc->cust_pkg_svc } ) {
54 %        if ( $cust_pkg->getfield('cancel') > 0 ) {
55       <& /elements/tr-cust_svc_cancel.html,
56                   %opt,
57                   'part_svc' => $part_svc,
58                   'cust_svc' => $cust_svc,
59                   'cust_pkg' => $cust_pkg,
60        &>
61 %        }
62 %        else {
63       <& /elements/tr-cust_svc.html,
64                   %opt,
65                   'part_svc' => $part_svc,
66                   'cust_svc' => $cust_svc,
67                   'cust_pkg' => $cust_pkg,
68        &>
69 %       } #if cancel > 0
70 %     } #foreach $cust_svc
71 %   } #if summarizing
72 %   if (    ! $cust_pkg->get('cancel')
73 %        && $curuser->access_right('Provision customer service') 
74 %        && $part_svc->num_avail
75 %      ) {
76
77       <TR>
78         <TD COLSPAN=3 ALIGN="center" STYLE="padding-bottom:4px;padding-top:0px">
79
80           <B>
81 %         if ( $opt{no_links} ) {
82             <% $part_svc->svc |h %>: <% $part_svc->num_avail %>
83             <% mt('Available') |h %>
84 %         } else {
85             <% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %>
86 %         }
87           </B>
88
89 %        if ( $curuser->access_right('Bulk provision customer service') 
90 %               && $part_svc->svcdb eq 'svc_phone'
91 %               && ! $opt{no_links}
92 %           )
93 %        {
94 %          if ( $part_svc->num_avail > 5 ) {
95 %             local $opt{'bulk'} = 1;
96 %             local $opt{'svc_phone_bulk_provision_simple'} =  $svc_phone_bulk_provision_simple;
97 %             local $opt{'num_avail'} = $part_svc->num_avail;
98               <BR><% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %>
99 %           }
100 %           #XXX if there's orders for this customer {
101               <BR><A HREF="<%$p%>browse/did_order.html?custnum=<%$cust_pkg->custnum%>"><% mt('Browse Received DID Inventory') |h %></A> 
102 %           #}
103 %       }
104         </TD>
105       </TR>
106
107 %   } 
108
109 % } 
110
111     </TABLE>
112   </TD>
113
114 <%init>
115
116 my %opt = @_;
117
118 my $bgcolor  = $opt{'bgcolor'};
119 my $cust_pkg = $opt{'cust_pkg'};
120 my $part_pkg = $opt{'part_pkg'};
121 my $svc_phone_bulk_provision_simple = $opt{'svc_phone-bulk_provision_simple'};
122
123 my $curuser  = $FS::CurrentUser::CurrentUser;
124
125 sub svc_provision_link {
126   my ($cust_pkg, $part_svc, $opt, $curuser) = @_;
127
128   ( my $svc_nbsp = $part_svc->svc ) =~ s/\s+/ /g;
129   my $num_avail = $part_svc->num_avail;
130
131   my $query = "pkgnum=". $cust_pkg->pkgnum. ';'.
132               "svcpart=". $part_svc->svcpart;
133   $query .= ';bulk=1' if $opt->{bulk};
134
135   my $url;
136   if ( $part_svc->svcdb eq 'svc_external' #could be generalized
137        && $opt->{'svc_external-skip_manual'}
138   ) {
139     $url = "${p}edit/process/". $part_svc->svcdb. ".cgi?$query";
140   } elsif ( $part_svc->svcdb eq 'svc_phone' && $opt->{bulk}
141               && $opt->{svc_phone_bulk_provision_simple}
142           )
143   {
144     $query .= ';num_avail='. $opt->{num_avail};
145     $url = "${p}edit/bulk-svc_phone.html?$query";
146   } else {
147     $url = svc_url(
148                     'm'        => $m,
149                     'action'   => 'edit',
150                     'part_svc' => $part_svc, 
151                     'query'    => $query,
152                   );
153   }
154
155   my $action = $opt->{bulk} ? 'Bulk provision' : 'Provision';
156
157   my $link = qq!<A CLASS="provision" HREF="$url">!.
158              emt("$action [_1] ([_2])",$svc_nbsp,$num_avail).'</A>';
159
160   if ( $opt->{'legacy_link'}
161        && $curuser->access_right('View/link unlinked services')
162        && ! $opt{bulk}
163      )
164   {
165     $link .= '<BR>'.
166              qq!<A CLASS="provision" HREF="${p}misc/link.cgi?$query">!.
167             emt("Link to legacy [_1] ([_2])",$svc_nbsp,$num_avail).'</A>';
168   }
169
170   $link;
171 }
172
173 my %hints = (
174 svc_acct      => emt('(user or email)'),
175 svc_domain    => emt('(domain)'),
176 svc_broadband => emt('(ip or mac)'),
177 svc_forward   => emt('(email)'),
178 svc_phone     => emt('(phone)'),
179 svc_pbx       => emt('(phone)'),
180 );
181
182 </%init>