This commit was generated by cvs2svn to compensate for changes in r4407,
[freeside.git] / httemplate / search / svc_acct.cgi
1 <%
2
3 my $orderby = 'ORDER BY svcnum';
4
5 my($query)=$cgi->keywords;
6 $query ||= ''; #to avoid use of unitialized value errors
7
8 my $cjoin = '';
9 my @extra_sql = ();
10 if ( $query =~ /^UN_(.*)$/ ) {
11   $query = $1;
12   $cjoin = 'LEFT JOIN cust_svc USING ( svcnum )';
13   push @extra_sql, 'pkgnum IS NULL';
14 }
15
16 if ( $query eq 'svcnum' ) {
17   #$orderby = "ORDER BY svcnum";
18 } elsif ( $query eq 'username' ) {
19   $orderby = "ORDER BY LOWER(username)";
20 } elsif ( $query eq 'uid' ) {
21   $orderby = "ORDER BY uid";
22   push @extra_sql, "uid IS NOT NULL";
23 } elsif ( $cgi->param('popnum') =~ /^(\d+)$/ ) {
24   push @extra_sql, "popnum = $1";
25   $orderby = "ORDER BY LOWER(username)";
26 } elsif ( $cgi->param('svcpart') =~ /^(\d+)$/ ) {
27   $cjoin ||= 'LEFT JOIN cust_svc USING ( svcnum )';
28   push @extra_sql, "svcpart = $1";
29   $orderby = "ORDER BY uid";
30   #$orderby = "ORDER BY svcnum";
31 } else {
32   $orderby = "ORDER BY uid";
33
34   my @username_sql;
35
36   my %username_type;
37   foreach ( $cgi->param('username_type') ) {
38     $username_type{$_}++;
39   }
40
41   $cgi->param('username') =~ /^([\w\-\.\&]+)$/; #untaint username_text
42   my $username = $1;
43
44   push @username_sql, "username ILIKE '$username'"
45     if $username_type{'Exact'}
46     || $username_type{'Fuzzy'};
47
48   push @username_sql, "username ILIKE '\%$username\%'"
49     if $username_type{'Substring'}
50     || $username_type{'All'};
51
52   if ( $username_type{'Fuzzy'} || $username_type{'All'} ) {
53     &FS::svc_acct::check_and_rebuild_fuzzyfiles;
54     my $all_username = &FS::svc_acct::all_username;
55
56     my %username;
57     if ( $username_type{'Fuzzy'} || $username_type{'All'} ) { 
58       foreach ( amatch($username, [ qw(i) ], @$all_username) ) {
59         $username{$_}++; 
60       }
61     }
62
63     #if ($username_type{'Sound-alike'}) {
64     #}
65
66     push @username_sql, "username = '$_'"
67       foreach (keys %username);
68
69   }
70
71   push @extra_sql, '( '. join( ' OR ', @username_sql). ' )';
72
73 }
74
75 my $extra_sql = 
76   scalar(@extra_sql)
77     ? ' WHERE '. join(' AND ', @extra_sql )
78     : '';
79
80 my $count_query = "SELECT COUNT(*) FROM svc_acct $cjoin $extra_sql";
81 #if ( keys %svc_acct ) {
82 #  $count_query .= ' WHERE '.
83 #                    join(' AND ', map "$_ = ". dbh->quote($svc_acct{$_}),
84 #                                      keys %svc_acct
85 #                        );
86 #}
87
88 my $sql_query = {
89   'table' => 'svc_acct',
90   'hashref'   => {}, # \%svc_acct,
91   'select'    => join(', ',
92                     'svc_acct.*',
93                     'cust_main.custnum',
94                     FS::UI::Web::cust_sql_fields(),
95                   ),
96   'extra_sql' => "$extra_sql $orderby",
97   'addl_from' => ' LEFT JOIN cust_svc  USING ( svcnum  ) '.
98                  ' LEFT JOIN part_svc  USING ( svcpart ) '.
99                  ' LEFT JOIN cust_pkg  USING ( pkgnum  ) '.
100                  ' LEFT JOIN cust_main USING ( custnum ) ',
101 };
102
103 my $link      = [ "${p}view/svc_acct.cgi?",   'svcnum'  ];
104 my $link_cust = sub {
105   my $svc_acct = shift;
106   if ( $svc_acct->custnum ) {
107     [ "${p}view/cust_main.cgi?", 'custnum' ];
108   } else {
109     '';
110   }
111 };
112
113 %><%= include( 'elements/search.html',
114                  'title'       => 'Account Search Results',
115                  'name'        => 'accounts',
116                  'query'       => $sql_query,
117                  'count_query' => $count_query,
118                  'redirect'    => $link,
119                  'header'      => [ '#',
120                                     'Account',
121                                     'UID',
122                                     'Service',
123                                     FS::UI::Web::cust_header(),
124                                   ],
125                  'fields'      => [ 'svcnum',
126                                     'email',
127                                     'uid',
128                                     'svc',
129                                     \&FS::UI::Web::cust_fields,
130                                   ],
131                  'links'       => [ $link,
132                                     $link,
133                                     $link,
134                                     '',
135                                     ( map { $link_cust }
136                                           FS::UI::Web::cust_header()
137                                     ),
138                                   ],
139              )
140 %>