& elements/search.html,
'title' => 'Phone Number (DID) Search Results',
'name_singular' => 'phone number',
'query' => {
'table' => 'phone_avail',
'hashref' => $hashref,
'select' => join(', ',
'phone_avail.*',
'cust_main.custnum',
FS::UI::Web::cust_sql_fields(),
),
'extra_sql' => $search,
'addl_from' => $addl_from,
},
'count_query' => $count_query,
'header' => [ '#',
'State',
'Phone Number',
'Rate Center',
'Batch',
'Export',
'Service',
FS::UI::Web::cust_header(),
],
'fields' => [
'availnum',
'state',
sub { my $pn = shift;
'+'. $pn->countrycode. ' '.
$pn->npa. ' '. $pn->nxx. '-'. $pn->station;
},
sub { shift->get('name') },
'availbatch',
sub {
my $pa = shift;
return '' unless $pa->part_export;
$pa->part_export->exportname;
},
sub {
my $pa = shift;
return '' unless $pa->cust_svc;
my($label,$value) = $pa->cust_svc->label;
$label . ": " . $value;
},
\&FS::UI::Web::cust_fields,
'',
],
'align' => 'rllllllc'.FS::UI::Web::cust_aligns(),
'links' => [
'',
'',
'',
'',
'',
'', #XXX #$export_link - to what exactly?
$svc_link,
( map { $_ ne 'Cust. Status' ? $link_cust : '' }
FS::UI::Web::cust_header()
),
'',
],
'color' => [
'',
'',
'',
'',
'',
'',
'',
FS::UI::Web::cust_colors(),
'',
],
'style' => [
'',
'',
'',
'',
'',
'',
'',
FS::UI::Web::cust_styles(),
'',
],
&>
<%init>
die "access denied"
unless ( $FS::CurrentUser::CurrentUser->access_right('List inventory')
);
my @search = ();
push @search, "availbatch = '$1'"
if ( $cgi->param('availbatch') =~ /^([\w\d \/\:\-\.]+)$/ );
push @search, "countrycode = '$1'"
if ( $cgi->param('countrycode') =~ /^(\d{1,3})$/ );
push @search, "phone_avail.state = '$1'"
if ( $cgi->param('state') =~ /^(\w{2})$/ );
# i know that the regexps match more than NPA/NXX, but this is good enough now
push @search, "npa = '$1'"
if ( $cgi->param('npa') =~ /^(\d{3})$/ );
push @search, "nxx = '$1'"
if ( $cgi->param('npa') =~ /^\d{3}$/ && $cgi->param('nxx') =~ /^(\d{3})$/ );
push @search, "name = '$1'"
if ( $cgi->param('ratecenter') =~ /^([\w \-\.]+)$/ );
push @search, "svcnum is null"
if ( $cgi->param('avail_status') eq 'AVAIL' );
push @search, "svcnum is not null"
if ( $cgi->param('avail_status') eq 'UNAVAIL' );
# #here is the agent virtualization
# push @search, $FS::CurrentUser::CurrentUser->agentnums_sql;
my $search = scalar(@search)
? ' WHERE '. join(' AND ', @search)
: '';
my $addl_from = ' LEFT JOIN cust_svc USING ( svcnum ) '.
#' LEFT JOIN part_svc USING ( svcpart ) '.
' LEFT JOIN cust_pkg USING ( pkgnum ) '.
FS::UI::Web::join_cust_main('cust_pkg', 'cust_pkg');
my $count_query = "SELECT COUNT(*) FROM phone_avail $search"; #$addl_from?
# All of these relationships are left joined in the many-to-one direction,
# so including $addl_from won't affect the count. Logic!
my $hashref = {};
$hashref->{'ordernum'} = $1 if $cgi->param('ordernum') =~ /^(\d+)$/;
my $link_cust = sub {
my $phone_avail = shift;
if ( $phone_avail->svcnum ) {
my $cust_svc = $phone_avail->cust_svc;
if ( $cust_svc->pkgnum ) {
#my $cust_main = $cust_svc->cust_pkg->cust_main;
return [ "${p}view/cust_main.cgi?", 'custnum' ];
}
}
'';
};
my $svc_link = sub {
my $phone_avail = shift;
my $cust_svc = $phone_avail->cust_svc;
if ( $cust_svc ) {
return [ "${p}view/svc_phone.cgi?", 'svcnum'];
}
'';
};
%init>