% ### % # Services % ### % my $showdidlink = browse_received_did_inventory($cust_pkg->custnum); % foreach my $part_svc ( % $cust_pkg->part_svc( % 'summarize_size' => $opt{'cust_pkg-large_pkg_size'}, % 'hide_discontinued' => $opt{'cust_pkg-hide_discontinued-part_svc'}, % ) % ) { % % my $num_cust_svc = $cust_pkg->num_cust_svc( $part_svc->svcpart ); % % if ( $opt{'cust_pkg-large_pkg_size'} > 0 and % $opt{'cust_pkg-large_pkg_size'} <= $num_cust_svc ) { # summarize % % my $hint = $hints{$part_svc->svcdb}; % if ( $hint ) { % } #$hint % % } else { # don't summarize % % foreach my $cust_svc ( @{ $part_svc->cust_pkg_svc } ) { % if ( $cust_pkg->getfield('cancel') > 0 ) { <& /elements/tr-cust_svc_cancel.html, %opt, 'part_svc' => $part_svc, 'cust_svc' => $cust_svc, 'cust_pkg' => $cust_pkg, &> % } % else { <& /elements/tr-cust_svc.html, %opt, 'part_svc' => $part_svc, 'cust_svc' => $cust_svc, 'cust_pkg' => $cust_pkg, &> % } #if cancel > 0 % } #foreach $cust_svc % } #if summarizing % if ( ! $cust_pkg->get('cancel') % && $curuser->access_right('Provision customer service') % && $part_svc->num_avail % ) { % } % } #foreach part_svc % if ($cust_pkg->get('cancel')) { % foreach my $svc ( % $cust_pkg->uncancel_svc_summary('summarize_size' => $opt{'cust_pkg-large_pkg_size'}, 'no_test_reprovision' => 1) % ) { % } % }
% my $href="${p}search/cust_pkg_svc.html?svcpart=".$part_svc->svcpart. % ";pkgnum=".$cust_pkg->pkgnum; <% $part_svc->svc |h %> (<% mt("view all [_1]", $num_cust_svc) |h %>)
% if ( $opt{no_links} ) { <% $part_svc->svc |h %>: <% $part_svc->num_avail %> <% mt('Available') |h %> % } else { <% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %> % } % if ( $curuser->access_right('Bulk provision customer service') % && $part_svc->svcdb eq 'svc_phone' % && ! $opt{no_links} % ) % { % if ( $part_svc->num_avail > 5 ) { % local $opt{'bulk'} = 1; % local $opt{'svc_phone_bulk_provision_simple'} = $svc_phone_bulk_provision_simple; % local $opt{'num_avail'} = $part_svc->num_avail;
<% svc_provision_link($cust_pkg, $part_svc, \%opt, $curuser) %> % } % if ($showdidlink) {
<% mt('Browse Received DID Inventory') |h %> % } % }
<% $svc->{'svc'} |h %> <% $svc->{'num_cust_svc'} ? $svc->{'num_cust_svc'} . ' ' . emt('services in history') : (defined($svc->{'label'}) ? $svc->{'label'} : emt('(cannot load svc label)')) |h %>
<%init> my %opt = @_; my $bgcolor = $opt{'bgcolor'}; my $cust_pkg = $opt{'cust_pkg'}; my $part_pkg = $opt{'part_pkg'}; my $svc_phone_bulk_provision_simple = $opt{'svc_phone-bulk_provision_simple'}; my $curuser = $FS::CurrentUser::CurrentUser; sub svc_provision_link { my ($cust_pkg, $part_svc, $opt, $curuser) = @_; ( my $svc_nbsp = $part_svc->svc ) =~ s/\s+/ /g; my $num_avail = $part_svc->num_avail; my $query = "pkgnum=". $cust_pkg->pkgnum. ';'. "svcpart=". $part_svc->svcpart; $query .= ';bulk=1' if $opt->{bulk}; my $url; if ( $part_svc->svcdb eq 'svc_external' #could be generalized && $opt->{'svc_external-skip_manual'} ) { $url = "${p}edit/process/". $part_svc->svcdb. ".cgi?$query"; } elsif ( $part_svc->svcdb eq 'svc_phone' && $opt->{bulk} && $opt->{svc_phone_bulk_provision_simple} ) { $query .= ';num_avail='. $opt->{num_avail}; $url = "${p}edit/bulk-svc_phone.html?$query"; } else { $url = svc_url( 'm' => $m, 'action' => 'edit', 'part_svc' => $part_svc, 'query' => $query, ); } my $action = $opt->{bulk} ? 'Bulk provision' : 'Provision'; my $link = qq!!. emt("$action [_1] ([_2])",$svc_nbsp,$num_avail).''; if ( $opt->{'legacy_link'} && $curuser->access_right('View/link unlinked services') && ! $opt{bulk} ) { $link .= '
'. qq!!. emt("Link to legacy [_1] ([_2])",$svc_nbsp,$num_avail).''; } $link; } sub browse_received_did_inventory { local($FS::Record::qsearch_qualify_columns) = 1; qsearch({ 'table' => 'did_order', 'hashref' => { 'custnum' => $_[0] }, 'extra_sql' => ' LIMIT 1' }) || qsearch({ 'table' => 'did_order_item', 'hashref' => { 'custnum' => $_[0] }, 'addl_from' => ' INNER JOIN did_order ON did_order_item.ordernum = did_order.ordernum', 'extra_sql' => ' LIMIT 1' }); } my %hints = ( svc_acct => emt('(user or email)'), svc_domain => emt('(domain)'), svc_broadband => emt('(ip or mac)'), svc_forward => emt('(email)'), svc_phone => emt('(phone)'), svc_pbx => emt('(phone)'), );