<& 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']; } ''; };