agent virtualization, take one (stuff from "inactive" changeset snuck into cust_main...
[freeside.git] / httemplate / search / svc_forward.cgi
1 <%
2
3 my $conf = new FS::Conf;
4
5 my($query)=$cgi->keywords;
6 $query ||= ''; #to avoid use of unitialized value errors
7
8 my $orderby;
9
10 my @extra_sql = ();
11 if ( $query =~ /^UN_(.*)$/ ) { #UN searches need to be acl'ed (and need to
12                                     #fix $agentnums_sql
13   $query = $1;
14   push @extra_sql, 'pkgnum IS NULL';
15 }
16
17 if ( $query eq 'svcnum' ) {
18   $orderby = 'ORDER BY svcnum';
19 } else {
20   eidiot('unimplemented');
21 }
22
23 my $addl_from = ' LEFT JOIN cust_svc  USING ( svcnum  ) '.
24                 ' LEFT JOIN part_svc  USING ( svcpart ) '.
25                 ' LEFT JOIN cust_pkg  USING ( pkgnum  ) '.
26                 ' LEFT JOIN cust_main USING ( custnum ) ';
27
28 #here is the agent virtualization
29 push @extra_sql, $FS::CurrentUser::CurrentUser->agentnums_sql;
30
31 my $extra_sql = 
32   scalar(@extra_sql)
33     ? ' WHERE '. join(' AND ', @extra_sql )
34     : '';
35
36 my $count_query = "SELECT COUNT(*) FROM svc_forward $addl_from $extra_sql";
37 my $sql_query = {
38   'table'     => 'svc_forward',
39   'hashref'   => {},
40   'select'    => join(', ',
41                    'svc_forward.*',
42                     'cust_main.custnum',
43                     FS::UI::Web::cust_sql_fields(),
44                  ),
45   'extra_sql' => "$extra_sql $orderby",
46   'addl_from' => $addl_from,
47 };
48
49 #        <TH>Service #<BR><FONT SIZE=-1>(click to view forward)</FONT></TH>
50 #        <TH>Mail to<BR><FONT SIZE=-1>(click to view account)</FONT></TH>
51 #        <TH>Forwards to<BR><FONT SIZE=-1>(click to view account)</FONT></TH>
52
53 my $link = [ "${p}view/svc_forward.cgi?", 'svcnum' ];
54
55 my $format_src = sub {
56   my $svc_forward = shift;
57   if ( $svc_forward->srcsvc_acct ) {
58     $svc_forward->srcsvc_acct->email;
59   } else {
60     my $src = $svc_forward->src;
61     $src = "<I>(anything)</I>$src" if $src =~ /^@/;
62     $src;
63   }
64 };
65
66 my $link_src = sub {
67   my $svc_forward = shift;
68   if ( $svc_forward->srcsvc_acct ) {
69     [ "${p}view/svc_acct.cgi?", 'srcsvc' ];
70   } else {
71     '';
72   }
73 };
74
75 my $format_dst = sub {
76   my $svc_forward = shift;
77   if ( $svc_forward->dstsvc_acct ) {
78     $svc_forward->dstsvc_acct->email;
79   } else {
80     $svc_forward->dst;
81   }
82 };
83
84 my $link_dst = sub {
85   my $svc_forward = shift;
86   if ( $svc_forward->dstsvc_acct ) {
87     [ "${p}view/svc_acct.cgi?", 'dstsvc' ];
88   } else {
89     '';
90   }
91 };
92
93 #smaller false laziness w/svc_*.cgi here
94 my $link_cust = sub {
95   my $svc_x = shift;
96   $svc_x->custnum ? [ "${p}view/cust_main.cgi?", 'custnum' ] : '';
97 };
98
99 %><%= include( 'elements/search.html',
100                  'title'             => "Mail forward Search Results",
101                  'name'              => 'mail forwards',
102                  'query'             => $sql_query,
103                  'count_query'       => $count_query,
104                  'redirect'          => $link,
105                  'header'            => [ '#',
106                                           'Service',
107                                           'Mail to',
108                                           'Forwards to',
109                                           FS::UI::Web::cust_header(),
110                                         ],
111                  'fields'            => [ 'svcnum',
112                                           'svc',
113                                           $format_src,
114                                           $format_dst,
115                                           \&FS::UI::Web::cust_fields,
116                                         ],
117                  'links'             => [ $link,
118                                           $link,
119                                           $link_src,
120                                           $link_dst,
121                                           ( map { $link_cust }
122                                                 FS::UI::Web::cust_header()
123                                           ),
124                                         ],
125              )
126 %>