fix svc_broadband search by svcpart (links from browse/part_svc, in particular
[freeside.git] / httemplate / search / svc_broadband.cgi
1 %die "access denied"
2 %  unless $FS::CurrentUser::CurrentUser->access_right('List services');
3 %
4 %my $conf = new FS::Conf;
5 %
6 %my @svc_broadband = ();
7 %my $sortby=\*svcnum_sort;
8 %#XXX agent-virtualization needs to be finished :/
9 %my $agentnums_sql = $FS::CurrentUser::CurrentUser->agentnums_sql( 
10 %                      'null_right' => 'View/link unlinked services'
11 %                    );
12 %
13 %if ( $cgi->param('magic') =~ /^(all|unlinked)$/ ) {
14 %
15 %  @svc_broadband = qsearch(
16 %    'table'     => 'svc_broadband',
17 %    'hashref'   => {},
18 %    #needs the join first 'extra_sql' => "WHERE $agentnums_sql",
19 %  );
20 %
21 %  if ( $cgi->param('magic') eq 'unlinked' ) {
22 %    @svc_broadband = grep { qsearchs('cust_svc', {
23 %                                                   'svcnum' => $_->svcnum,
24 %                                                   'pkgnum' => '',
25 %                                                 }
26 %                                    )
27 %                          }
28 %                     @svc_broadband;
29 %  } else {
30 %
31 %  if ( $cgi->param('sortby') =~ /^(\w+)$/ ) {
32 %    my $sortby = $1;
33 %    if ( $sortby eq 'blocknum' ) {
34 %      $sortby = \*blocknum_sort;
35 %    }
36 %  }
37 %
38 %} elsif ( $cgi->param('svcpart') =~ /^(\d+)$/ ) {
39 %
40 %  @svc_broadband = qsearch( {
41 %                              'table'     => 'svc_broadband',
42 %                              'addl_from' => 'LEFT JOIN cust_svc USING svcnum',
43 %                              'extra_sql' => "WHERE svcpart = $1",
44 %                            }
45 %                          );
46 %
47 %} elsif ( $cgi->param('ip_addr') =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/ ) {
48 %  my $ip_addr = $1;
49 %  @svc_broadband = qsearchs('svc_broadband',{'ip_addr'=>$ip_addr});
50 %}
51 %
52 %my %routerbyblock = ();
53 %foreach my $router (qsearch('router', {})) {
54 %  foreach ($router->addr_block) {
55 %    $routerbyblock{$_->blocknum} = $router;
56 %  }
57 %}
58 %
59 %if ( scalar(@svc_broadband) == 1 ) {
60 %  print $cgi->redirect(popurl(2). "view/svc_broadband.cgi?". $svc_broadband[0]->svcnum);
61 %  #exit;
62 %} elsif ( scalar(@svc_broadband) == 0 ) {
63 %
64
65 <!-- mason kludge -->
66 %
67 %  eidiot "No matching broadband services found!\n";
68 %} else {
69 %
70
71 <!-- mason kludge -->
72 %
73 %  my($total)=scalar(@svc_broadband);
74 %  print header("Broadband Search Results",''), <<END;
75 %
76 %    $total matching broadband services found
77 %    <TABLE BORDER=4 CELLSPACING=0 CELLPADDING=0>
78 %      <TR>
79 %        <TH>Service #</TH>
80 %       <TH>Router</TH>
81 %        <TH>IP Address</TH>
82 %      </TR>
83 %END
84 %
85 %  foreach my $svc_broadband (
86 %    sort $sortby (@svc_broadband)
87 %  ) {
88 %    my($svcnum,$ip_addr,$routername,$routernum)=(
89 %      $svc_broadband->svcnum,
90 %      $svc_broadband->ip_addr,
91 %      $routerbyblock{$svc_broadband->blocknum}->routername,
92 %      $routerbyblock{$svc_broadband->blocknum}->routernum,
93 %    );
94 %
95 %    my $rowspan = 1;
96 %
97 %    print <<END;
98 %    <TR>
99 %      <TD ROWSPAN=$rowspan><A HREF="${p}view/svc_broadband.cgi?$svcnum">$svcnum</A></TD>
100 %      <TD ROWSPAN=$rowspan><A HREF="${p}view/router.cgi?$routernum">$routername</A></TD>
101 %      <TD ROWSPAN=$rowspan><A HREF="${p}view/svc_broadband.cgi?$svcnum">$ip_addr</A></TD>
102 %END
103 %
104 %    #print @rows;
105 %    print "</TR>";
106 %
107 %  }
108
109 %  print <<END;
110 %    </TABLE>
111 %  </BODY>
112 %</HTML>
113 %END
114 %
115 %}
116 %
117 %sub svcnum_sort {
118 %  $a->getfield('svcnum') <=> $b->getfield('svcnum');
119 %}
120 %
121 %sub blocknum_sort {
122 %  if ($a->getfield('blocknum') == $b->getfield('blocknum')) {
123 %    $a->getfield('ip_addr') cmp $b->getfield('ip_addr');
124 %  } else {
125 %    $a->getfield('blocknum') cmp $b->getfield('blocknum');
126 %  }
127 %}
128 %
129 %
130 %
131