352f5ea9d92fe67228b677c68d2f7f2db144b203
[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 %  my $showdidlink = browse_received_did_inventory($cust_pkg->custnum);
14 %  foreach my $part_svc (
15 %    $cust_pkg->part_svc(
16 %      'summarize_size'    => $opt{'cust_pkg-large_pkg_size'},
17 %      'hide_discontinued' => $opt{'cust_pkg-hide_discontinued-part_svc'},
18 %    )
19 %  ) {
20 %
21 %    my $num_cust_svc = $cust_pkg->num_cust_svc( $part_svc->svcpart );
22 %
23 %    if ( $opt{'cust_pkg-large_pkg_size'} > 0 and
24 %         $opt{'cust_pkg-large_pkg_size'} <= $num_cust_svc ) { # summarize
25 %
26       <TR>
27         <TD ALIGN="right" VALIGN="top">
28 %       my $href="${p}search/cust_pkg_svc.html?svcpart=".$part_svc->svcpart.
29 %          ";pkgnum=".$cust_pkg->pkgnum;
30         <A HREF="<% $href %>"><% $part_svc->svc |h %></A>
31         </TD>
32         <TD ALIGN="left" VALIGN="top">
33         <A HREF="<% $href %>"><B>(<% mt("view all [_1]", $num_cust_svc) |h %>)</B></A>
34         </TD>
35       </TR>
36 %     my $hint = $hints{$part_svc->svcdb};
37 %     if ( $hint ) {
38       <TR>
39         <TD></TD>
40         <TD ALIGN="left" VALIGN="top">
41         <FORM name="svcpart<%$part_svc->svcpart%>_search" STYLE="display:inline"
42         ACTION="<%$p%>search/cust_pkg_svc.html" METHOD="GET">
43         <INPUT TYPE="hidden" NAME="svcpart" VALUE="<%$part_svc->svcpart%>">
44         <INPUT TYPE="hidden" NAME="pkgnum" VALUE="<%$cust_pkg->pkgnum%>">
45         <INPUT TYPE="text" NAME="search_svc"
46         onfocus="clearhint_search_cust_svc(this, '<%$hint%>')" VALUE="<%$hint%>">
47         <INPUT TYPE="submit" VALUE="Search"></FORM>
48         </TD>
49       </TR>
50 %     } #$hint
51 %
52 %    } else { # don't summarize
53 %
54 %      foreach my $cust_svc ( @{ $part_svc->cust_pkg_svc } ) {
55 %        if ( $cust_pkg->getfield('cancel') > 0 ) {
56       <& /elements/tr-cust_svc_cancel.html,
57                   %opt,
58                   'part_svc' => $part_svc,
59                   'cust_svc' => $cust_svc,
60                   'cust_pkg' => $cust_pkg,
61        &>
62 %        }
63 %        else {
64       <& /elements/tr-cust_svc.html,
65                   %opt,
66                   'part_svc' => $part_svc,
67                   'cust_svc' => $cust_svc,
68                   'cust_pkg' => $cust_pkg,
69        &>
70 %       } #if cancel > 0
71 %     } #foreach $cust_svc
72 %   } #if summarizing
73 %   if (    ! $cust_pkg->get('cancel')
74 %        && $curuser->access_right('Provision customer service') 
75 %        && $part_svc->num_avail
76 %      ) {
77
78       <TR>
79         <TD COLSPAN=3 ALIGN="center" STYLE="padding-bottom:4px;padding-top:0px">
80
81           <B>
82 %         if ( $opt{no_links} ) {
83             <% $part_svc->svc |h %>: <% $part_svc->num_avail %>
84             <% mt('Available') |h %>
85 %         } else {
86             <% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %>
87 %         }
88           </B>
89
90 %        if ( $curuser->access_right('Bulk provision customer service') 
91 %               && $part_svc->svcdb eq 'svc_phone'
92 %               && ! $opt{no_links}
93 %           )
94 %        {
95 %          if ( $part_svc->num_avail > 5 ) {
96 %             local $opt{'bulk'} = 1;
97 %             local $opt{'svc_phone_bulk_provision_simple'} =  $svc_phone_bulk_provision_simple;
98 %             local $opt{'num_avail'} = $part_svc->num_avail;
99               <BR><% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %>
100 %           }
101 %           if ($showdidlink) {
102               <BR><A HREF="<%$p%>browse/did_order.html?custnum=<%$cust_pkg->custnum%>"><% mt('Browse Received DID Inventory') |h %></A> 
103 %           }
104 %       }
105         </TD>
106       </TR>
107
108 %   }
109
110 % } #foreach part_svc
111
112 % if ($cust_pkg->get('cancel')) {
113 %   foreach my $svc (sort { $a->{'svcpart'} <=> $b->{'svcpart'} } 
114 %                      $cust_pkg->uncancel_svc_summary('summarize_size' => $opt{'cust_pkg-large_pkg_size'})
115 %   ) {
116 %     next unless $svc->{'reprovisionable'};
117       <TR>
118         <TD ALIGN="right" VALIGN="top"><% $svc->{'svc'} |h %></TD>
119         <TD STYLE="padding-bottom:0px; font-style: italic"><% $svc->{'label'} |h %></TD>
120       </TR>
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 $svc_phone_bulk_provision_simple = $opt{'svc_phone-bulk_provision_simple'};
136
137 my $curuser  = $FS::CurrentUser::CurrentUser;
138
139 sub svc_provision_link {
140   my ($cust_pkg, $part_svc, $opt, $curuser) = @_;
141
142   ( my $svc_nbsp = $part_svc->svc ) =~ s/\s+/ /g;
143   my $num_avail = $part_svc->num_avail;
144
145   my $query = "pkgnum=". $cust_pkg->pkgnum. ';'.
146               "svcpart=". $part_svc->svcpart;
147   $query .= ';bulk=1' if $opt->{bulk};
148
149   my $url;
150   if ( $part_svc->svcdb eq 'svc_external' #could be generalized
151        && $opt->{'svc_external-skip_manual'}
152   ) {
153     $url = "${p}edit/process/". $part_svc->svcdb. ".cgi?$query";
154   } elsif ( $part_svc->svcdb eq 'svc_phone' && $opt->{bulk}
155               && $opt->{svc_phone_bulk_provision_simple}
156           )
157   {
158     $query .= ';num_avail='. $opt->{num_avail};
159     $url = "${p}edit/bulk-svc_phone.html?$query";
160   } else {
161     $url = svc_url(
162                     'm'        => $m,
163                     'action'   => 'edit',
164                     'part_svc' => $part_svc, 
165                     'query'    => $query,
166                   );
167   }
168
169   my $action = $opt->{bulk} ? 'Bulk provision' : 'Provision';
170
171   my $link = qq!<A CLASS="provision" HREF="$url">!.
172              emt("$action [_1] ([_2])",$svc_nbsp,$num_avail).'</A>';
173
174   if ( $opt->{'legacy_link'}
175        && $curuser->access_right('View/link unlinked services')
176        && ! $opt{bulk}
177      )
178   {
179     $link .= '<BR>'.
180              qq!<A CLASS="provision" HREF="${p}misc/link.cgi?$query">!.
181             emt("Link to legacy [_1] ([_2])",$svc_nbsp,$num_avail).'</A>';
182   }
183
184   $link;
185 }
186
187 sub browse_received_did_inventory {
188   local($FS::Record::qsearch_qualify_columns) = 1;
189   qsearch({
190     'table' => 'did_order',
191     'hashref' => { 'custnum' => $_[0] },
192     'extra_sql' => ' LIMIT 1'
193   }) ||
194   qsearch({
195     'table' => 'did_order_item',
196     'hashref' => { 'custnum' => $_[0] },
197     'addl_from' => ' INNER JOIN did_order ON did_order_item.ordernum = did_order.ordernum',
198     'extra_sql' => ' LIMIT 1'
199   });
200 }
201
202 my %hints = (
203 svc_acct      => emt('(user or email)'),
204 svc_domain    => emt('(domain)'),
205 svc_broadband => emt('(ip or mac)'),
206 svc_forward   => emt('(email)'),
207 svc_phone     => emt('(phone)'),
208 svc_pbx       => emt('(phone)'),
209 );
210
211 </%init>