3 my %part_pkg = map { $_->pkgpart => $_ } qsearch('part_pkg', {});
5 my($query) = $cgi->keywords;
11 if ( $cgi->param('agentnum') =~ /^(\d+)$/ and $1 ) {
12 $cjoin = "LEFT JOIN cust_main USING ( custnum )";
17 if ( $cgi->param('magic') && $cgi->param('magic') eq 'bill' ) {
18 $orderby = 'ORDER BY bill';
20 my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi);
22 #"bill >= $beginning ",
24 "CASE WHEN bill IS NULL THEN 0 ELSE bill END >= $beginning ",
25 "CASE WHEN bill IS NULL THEN 0 ELSE bill END <= $ending",
26 '( cancel IS NULL OR cancel = 0 )';
30 if ( $cgi->param('magic') &&
31 $cgi->param('magic') =~ /^(active|suspended|cancell?ed)$/
34 $orderby = 'ORDER BY pkgnum';
36 if ( $cgi->param('magic') eq 'active' ) {
39 # '( susp IS NULL OR susp = 0 )',
40 # '( cancel IS NULL OR cancel = 0)';
41 push @where, FS::cust_pkg->active_sql();
43 } elsif ( $cgi->param('magic') eq 'suspended' ) {
48 '( cancel IS NULL OR cancel = 0)';
50 } elsif ( $cgi->param('magic') =~ /^cancell?ed$/ ) {
57 die "guru meditation #420";
60 if ( $cgi->param('pkgpart') =~ /^(\d+)$/ ) {
61 push @where, "pkgpart = $1";
64 } elsif ( $query eq 'pkgnum' ) {
66 $orderby = 'ORDER BY pkgnum';
68 } elsif ( $query eq 'APKG_pkgnum' ) {
70 $orderby = 'ORDER BY pkgnum';
73 SELECT count(*) FROM pkg_svc
74 WHERE pkg_svc.pkgpart = cust_pkg.pkgpart
75 AND pkg_svc.quantity > ( SELECT count(*) FROM cust_svc
76 WHERE cust_svc.pkgnum = cust_pkg.pkgnum
77 AND cust_svc.svcpart = pkg_svc.svcpart
82 die "Empty or unknown QUERY_STRING!";
87 my $extra_sql = scalar(@where) ? ' WHERE '. join(' AND ', @where) : '';
89 my $count_query = "SELECT COUNT(*) FROM cust_pkg $cjoin $extra_sql";
92 'table' => 'cust_pkg',
94 'select' => join(', ',
96 'cust_main.custnum as cust_main_custnum',
97 FS::UI::Web::cust_sql_fields(),
99 'extra_sql' => "$extra_sql $orderby",
100 'addl_from' => ' LEFT JOIN cust_main USING ( custnum ) ',
101 #' LEFT JOIN part_pkg USING ( pkgpart ) '
105 [ "${p}view/cust_main.cgi?".shift->custnum.'#cust_pkg', 'pkgnum' ];
109 my $cust_pkg = shift;
110 $cust_pkg->cust_main_custnum
111 ? [ "${p}view/cust_main.cgi?", 'custnum' ]
115 #if ( scalar(@cust_pkg) == 1 ) {
116 # print $cgi->redirect("${p}view/cust_main.cgi?". $cust_pkg[0]->custnum.
117 # "#cust_pkg". $cust_pkg[0]->pkgnum );
119 # my @cust_svc = qsearch( 'cust_svc', { 'pkgnum' => $pkgnum } );
120 # my $rowspan = scalar(@cust_svc) || 1;
123 # foreach my $cust_svc ( @cust_svc ) {
124 # my($label, $value, $svcdb) = $cust_svc->label;
125 # my $svcnum = $cust_svc->svcnum;
126 # my $sview = $p. "view";
127 # print $n2,qq!<TD><A HREF="$sview/$svcdb.cgi?$svcnum"><FONT SIZE=-1>$label</FONT></A></TD>!,
128 # qq!<TD><A HREF="$sview/$svcdb.cgi?$svcnum"><FONT SIZE=-1>$value</FONT></A></TD>!;
136 my $value = $record->get($column); #mmm closures
137 $value ? time2str('%b %d %Y', $value ) : '';
141 %><%= include( 'elements/search.html',
142 'title' => 'Package Search Results',
143 'name' => 'packages',
144 'query' => $sql_query,
145 'count_query' => $count_query,
146 #'redirect' => $link,
157 FS::UI::Web::cust_header(),
162 sub { my $part_pkg = $part_pkg{shift->pkgpart};
163 $part_pkg->pkg; # ' - '. $part_pkg->comment;
165 sub { ucfirst(shift->status); },
166 sub { #shift->part_pkg->freq_pretty;
167 my $part_pkg = $part_pkg{shift->pkgpart};
168 $part_pkg->freq_pretty;
171 #sub { time2str('%b %d %Y', shift->setup); },
172 #sub { time2str('%b %d %Y', shift->last_bill); },
173 #sub { time2str('%b %d %Y', shift->bill); },
174 #sub { time2str('%b %d %Y', shift->susp); },
175 #sub { time2str('%b %d %Y', shift->expire); },
176 #sub { time2str('%b %d %Y', shift->get('cancel')); },
177 ( map { time_or_blank($_) }
178 qw( setup last_bill bill susp expire cancel ) ),
180 \&FS::UI::Web::cust_fields,
181 #sub { '<table border=0 cellspacing=0 cellpadding=0 STYLE="border:none">'.
182 # join('', map { '<tr><td align="right" style="border:none">'. $_->[0].
183 # ':</td><td style="border:none">'. $_->[1]. '</td></tr>' }
191 { 'data' => $_->[0]. ':',
196 'link' => $p. 'view/' .
197 $_->[2]. '.cgi?'. $_->[3],
207 sub { shift->statuscolor; },
215 ( map { '' } FS::UI::Web::cust_header() ),
218 'style' => [ '', '', 'b' ],
219 'size' => [ '', '', '-1', ],
220 'align' => 'rlclrrrrrr',
232 ( map { $clink } FS::UI::Web::cust_header() ),