% # my %part_pkg = map { $_->pkgpart => $_ } qsearch('part_pkg', {}); my($query) = $cgi->keywords; my @where = (); ## # parse agent ## if ( $cgi->param('agentnum') =~ /^(\d+)$/ and $1 ) { push @where, "agentnum = $1"; } ## # parse status ## if ( $cgi->param('magic') eq 'active' || $cgi->param('status') eq 'active' ) { push @where, FS::cust_pkg->active_sql(); } elsif ( $cgi->param('magic') eq 'inactive' || $cgi->param('status') eq 'inactive' ) { push @where, FS::cust_pkg->inactive_sql(); } elsif ( $cgi->param('magic') eq 'suspended' || $cgi->param('status') eq 'suspended' ) { push @where, FS::cust_pkg->suspended_sql(); } elsif ( $cgi->param('magic') =~ /^cancell?ed$/ || $cgi->param('status') =~ /^cancell?ed$/ ) { push @where, FS::cust_pkg->cancelled_sql(); } elsif ( $cgi->param('status') =~ /^(one-time charge|inactive)$/ ) { push @where, FS::cust_pkg->inactive_sql(); } ### # parse package class ### #false lazinessish w/graph/cust_bill_pkg.cgi my $classnum = 0; my @pkg_class = (); if ( exists($cgi->Vars->{'classnum'}) && $cgi->param('classnum') =~ /^(\d*)$/ ) { $classnum = $1; if ( $classnum ) { #a specific class push @where, "classnum = $classnum"; #@pkg_class = ( qsearchs('pkg_class', { 'classnum' => $classnum } ) ); #die "classnum $classnum not found!" unless $pkg_class[0]; #$title .= $pkg_class[0]->classname.' '; } elsif ( $classnum eq '' ) { #the empty class push @where, "classnum IS NULL"; #$title .= 'Empty class '; #@pkg_class = ( '(empty class)' ); } elsif ( $classnum eq '0' ) { #@pkg_class = qsearch('pkg_class', {} ); # { 'disabled' => '' } ); #push @pkg_class, '(empty class)'; } else { die "illegal classnum"; } } #eslaf ### # parse magic, legacy, etc. ### my $orderby; if ( $cgi->param('magic') && $cgi->param('magic') eq 'bill' ) { $orderby = 'ORDER BY bill'; my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi); push @where, #"bill >= $beginning ", #"bill <= $ending", "CASE WHEN bill IS NULL THEN 0 ELSE bill END >= $beginning ", "CASE WHEN bill IS NULL THEN 0 ELSE bill END <= $ending", #'( cancel IS NULL OR cancel = 0 )' ; } else { if ( $cgi->param('magic') && $cgi->param('magic') =~ /^(active|inactive|suspended|cancell?ed)$/ ) { $orderby = 'ORDER BY pkgnum'; if ( $cgi->param('pkgpart') =~ /^(\d+)$/ ) { push @where, "pkgpart = $1"; } } elsif ( $query eq 'pkgnum' ) { $orderby = 'ORDER BY pkgnum'; } elsif ( $query eq 'APKG_pkgnum' ) { $orderby = 'ORDER BY pkgnum'; push @where, '0 < ( SELECT count(*) FROM pkg_svc WHERE pkg_svc.pkgpart = cust_pkg.pkgpart AND pkg_svc.quantity > ( SELECT count(*) FROM cust_svc WHERE cust_svc.pkgnum = cust_pkg.pkgnum AND cust_svc.svcpart = pkg_svc.svcpart ) )'; } else { die "Empty or unknown QUERY_STRING!"; } } ## # setup queries, links, subs, etc. for the search ## # here is the agent virtualization push @where, $FS::CurrentUser::CurrentUser->agentnums_sql; my $extra_sql = scalar(@where) ? ' WHERE '. join(' AND ', @where) : ''; my $addl_from = 'LEFT JOIN cust_main USING ( custnum ) '. 'LEFT JOIN part_pkg USING ( pkgpart ) '. 'LEFT JOIN pkg_class USING ( classnum ) '; my $count_query = "SELECT COUNT(*) FROM cust_pkg $addl_from $extra_sql"; my $sql_query = { 'table' => 'cust_pkg', 'hashref' => {}, 'select' => join(', ', 'cust_pkg.*', ( map "part_pkg.$_", qw( pkg freq ) ), 'pkg_class.classname', 'cust_main.custnum as cust_main_custnum', FS::UI::Web::cust_sql_fields( $cgi->param('cust_fields') ), ), 'extra_sql' => "$extra_sql $orderby", 'addl_from' => $addl_from, }; my $link = sub { [ "${p}view/cust_main.cgi?".shift->custnum.'#cust_pkg', 'pkgnum' ]; }; my $clink = sub { my $cust_pkg = shift; $cust_pkg->cust_main_custnum ? [ "${p}view/cust_main.cgi?", 'custnum' ] : ''; }; #if ( scalar(@cust_pkg) == 1 ) { # print $cgi->redirect("${p}view/cust_main.cgi?". $cust_pkg[0]->custnum. # "#cust_pkg". $cust_pkg[0]->pkgnum ); # my @cust_svc = qsearch( 'cust_svc', { 'pkgnum' => $pkgnum } ); # my $rowspan = scalar(@cust_svc) || 1; # my $n2 = ''; # foreach my $cust_svc ( @cust_svc ) { # my($label, $value, $svcdb) = $cust_svc->label; # my $svcnum = $cust_svc->svcnum; # my $sview = $p. "view"; # print $n2,qq!
'. $_->[0]. # ': | '. $_->[1]. ' |