This commit was generated by cvs2svn to compensate for changes in r4407,
[freeside.git] / httemplate / search / cust_pkg.cgi
1 <%
2
3 my %part_pkg = map { $_->pkgpart => $_ } qsearch('part_pkg', {});
4
5 my($query) = $cgi->keywords;
6
7 my $orderby;
8 my @where;
9 my $cjoin = '';
10
11 if ( $cgi->param('agentnum') =~ /^(\d+)$/ and $1 ) {
12   $cjoin = "LEFT JOIN cust_main USING ( custnum )";
13   push @where,
14     "agentnum = $1";
15 }
16
17 if ( $cgi->param('magic') && $cgi->param('magic') eq 'bill' ) {
18   $orderby = 'ORDER BY bill';
19
20   my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi);
21   push @where,
22     "bill >= $beginning ",
23     "bill <= $ending",
24     '( cancel IS NULL OR cancel = 0 )';
25
26 } else {
27
28   if ( $cgi->param('magic') &&
29        $cgi->param('magic') =~ /^(active|suspended|cancell?ed)$/
30   ) {
31
32     $orderby = 'ORDER BY pkgnum';
33
34     if ( $cgi->param('magic') eq 'active' ) {
35
36       #push @where,
37       #  '( susp IS NULL OR susp = 0 )',
38       #  '( cancel IS NULL OR cancel = 0)';
39       push @where, FS::cust_pkg->active_sql();
40
41     } elsif ( $cgi->param('magic') eq 'suspended' ) {
42
43       push @where,
44         'susp IS NOT NULL',
45         'susp != 0',
46         '( cancel IS NULL OR cancel = 0)';
47
48     } elsif ( $cgi->param('magic') =~ /^cancell?ed$/ ) {
49
50       push @where,
51         'cancel IS NOT NULL',
52         'cancel != 0';
53
54     } else {
55       die "guru meditation #420";
56     }
57
58     if ( $cgi->param('pkgpart') =~ /^(\d+)$/ ) {
59       push @where, "pkgpart = $1";
60     }
61
62   } elsif ( $query eq 'pkgnum' ) {
63
64     $orderby = 'ORDER BY pkgnum';
65
66   } elsif ( $query eq 'APKG_pkgnum' ) {
67   
68     $orderby = 'ORDER BY pkgnum';
69   
70     push @where, '0 < (
71       SELECT count(*) FROM pkg_svc
72        WHERE pkg_svc.pkgpart =  cust_pkg.pkgpart
73          AND pkg_svc.quantity > ( SELECT count(*) FROM cust_svc
74                                    WHERE cust_svc.pkgnum  = cust_pkg.pkgnum
75                                      AND cust_svc.svcpart = pkg_svc.svcpart
76                                 )
77     )';
78     
79   } else {
80     die "Empty or unknown QUERY_STRING!";
81   }
82
83 }
84
85 my $extra_sql = scalar(@where) ? ' WHERE '. join(' AND ', @where) : '';
86
87 my $count_query = "SELECT COUNT(*) FROM cust_pkg $cjoin $extra_sql";
88
89 my $sql_query = {
90   'table'     => 'cust_pkg',
91   'hashref'   => {},
92   'select'    => join(', ',
93                             'cust_pkg.*',
94                             'cust_main.custnum as cust_main_custnum',
95                             FS::UI::Web::cust_sql_fields(),
96                  ),
97   'extra_sql' => "$extra_sql $orderby",
98   'addl_from' => ' LEFT JOIN cust_main USING ( custnum ) ',
99                  #' LEFT JOIN part_pkg  USING ( pkgpart ) '
100 };
101
102 my $link = sub {
103   [ "${p}view/cust_main.cgi?".shift->custnum.'#cust_pkg', 'pkgnum' ];
104 };
105
106 my $clink = sub {
107   my $cust_pkg = shift;
108   $cust_pkg->cust_main_custnum
109     ? [ "${p}view/cust_main.cgi?", 'custnum' ] 
110     : '';
111 };
112
113 #if ( scalar(@cust_pkg) == 1 ) {
114 #  print $cgi->redirect("${p}view/cust_main.cgi?". $cust_pkg[0]->custnum.
115 #                       "#cust_pkg". $cust_pkg[0]->pkgnum );
116
117 #    my @cust_svc = qsearch( 'cust_svc', { 'pkgnum' => $pkgnum } );
118 #    my $rowspan = scalar(@cust_svc) || 1;
119
120 #    my $n2 = '';
121 #    foreach my $cust_svc ( @cust_svc ) {
122 #      my($label, $value, $svcdb) = $cust_svc->label;
123 #      my $svcnum = $cust_svc->svcnum;
124 #      my $sview = $p. "view";
125 #      print $n2,qq!<TD><A HREF="$sview/$svcdb.cgi?$svcnum"><FONT SIZE=-1>$label</FONT></A></TD>!,
126 #            qq!<TD><A HREF="$sview/$svcdb.cgi?$svcnum"><FONT SIZE=-1>$value</FONT></A></TD>!;
127 #      $n2="</TR><TR>";
128 #    }
129
130 sub time_or_blank {
131    my $column = shift;
132    return sub {
133      my $record = shift;
134      my $value = $record->get($column); #mmm closures
135      $value ? time2str('%b %d %Y', $value ) : '';
136    };
137 }
138
139 %><%=  include( 'elements/search.html',
140                   'title'       => 'Package Search Results', 
141                   'name'        => 'packages',
142                   'query'       => $sql_query,
143                   'count_query' => $count_query,
144                   'redirect'    => $link,
145                   'header'      => [ '#',
146                                      'Package',
147                                      'Status',
148                                      'Freq.',
149                                      'Setup',
150                                      'Last bill',
151                                      'Next bill',
152                                      'Susp.',
153                                      'Expire',
154                                      'Cancel',
155                                      FS::UI::Web::cust_header(),
156                                      'Services',
157                                    ],
158                   'fields'      => [
159                     'pkgnum',
160                     sub { my $part_pkg = $part_pkg{shift->pkgpart};
161                           $part_pkg->pkg; # ' - '. $part_pkg->comment;
162                         },
163                     sub { ucfirst(shift->status); },
164                     sub { #shift->part_pkg->freq_pretty;
165                           my $part_pkg = $part_pkg{shift->pkgpart};
166                           $part_pkg->freq_pretty;
167                         },
168
169                     #sub { time2str('%b %d %Y', shift->setup); },
170                     #sub { time2str('%b %d %Y', shift->last_bill); },
171                     #sub { time2str('%b %d %Y', shift->bill); },
172                     #sub { time2str('%b %d %Y', shift->susp); },
173                     #sub { time2str('%b %d %Y', shift->expire); },
174                     #sub { time2str('%b %d %Y', shift->get('cancel')); },
175                     ( map { time_or_blank($_) }
176                           qw( setup last_bill bill susp expire cancel ) ),
177
178                     \&FS::UI::Web::cust_fields,
179                     #sub { '<table border=0 cellspacing=0 cellpadding=0 STYLE="border:none">'.
180                     #      join('', map { '<tr><td align="right" style="border:none">'. $_->[0].
181                     #                     ':</td><td style="border:none">'. $_->[1]. '</td></tr>' }
182                     #                   shift->labels
183                     #          ).
184                     #      '</table>';
185                     #    },
186                     sub {
187                           [ map {
188                                   [ 
189                                     { 'data' => $_->[0]. ':',
190                                       'align'=> 'right',
191                                     },
192                                     { 'data' => $_->[1],
193                                       'align'=> 'left',
194                                       'link' => $p. 'view/' .
195                                                 $_->[2]. '.cgi?'. $_->[3],
196                                     },
197                                   ];
198                                 } shift->labels
199                           ];
200                         },
201                   ],
202                   'color' => [
203                     '',
204                     '',
205                     sub { shift->statuscolor; },
206                     '',
207                     '',
208                     '',
209                     '',
210                     '',
211                     '',
212                     '',
213                     ( map { '' } FS::UI::Web::cust_header() ),
214                     '',
215                   ],
216                   'style' => [ '', '', 'b' ],
217                   'size'  => [ '', '', '-1', ],
218                   'align' => 'rlclrrrrrr',
219                   'links' => [
220                     $link,
221                     $link,
222                     '',
223                     '',
224                     '',
225                     '',
226                     '',
227                     '',
228                     '',
229                     '',
230                     ( map { $clink } FS::UI::Web::cust_header() ),
231                     '',
232                   ],
233               )
234 %>