show MAC address vendors
[freeside.git] / httemplate / view / svc_broadband.cgi
1 <& elements/svc_Common.html,
2   table        => 'svc_broadband',
3   labels       => \%labels,
4   fields       => \@fields,
5   svc_callback => \&svc_callback,
6   radius_usage => 1,
7 &>
8 <%init>
9
10 my $conf = FS::Conf->new;
11 my $fields = FS::svc_broadband->table_info->{'fields'};
12 my %labels = map { $_ => ( ref($fields->{$_}) 
13                             ? $fields->{$_}{'label'} 
14                             : $fields->{$_}
15                           );
16                  } keys %$fields;
17
18 #my %labels = ();
19
20 $labels{'description'} = emt('Description');
21 $labels{'speed_down'} = emt('Download Speed');
22 $labels{'speed_up'} = emt('Upload Speed');
23 $labels{'ip_addr'} = emt('IP Address');
24 $labels{'usergroup'} = emt('RADIUS groups'); #?
25
26 $labels{'coordinates'} = 'Latitude/Longitude';
27
28 my @fields = (
29   'description',
30   { field => 'routernum', value_callback => \&router },
31   'speed_down',
32   'speed_up',
33   { field => 'ip_addr', value_callback => \&ip_addr },
34   { field => 'sectornum', value_callback => \&sectornum },
35   { field => 'mac_addr', type=>'mac_addr', value_callback => \&mac_addr },
36   #'latitude',
37   #'longitude',
38   { field => 'coordinates', value_callback => \&coordinates },
39   'altitude',
40
41   'radio_serialnum',
42   'radio_location',
43   'poe_location',
44   'rssi',
45   'suid',
46   { field => 'shared_svcnum', value_callback=> \&shared_svcnum, }, #value_callback => 
47
48   'vlan_profile',
49   'authkey',
50   'plan_id',
51 );
52
53 push @fields,
54   { field => 'usergroup', value_callback => \&usergroup }
55   if $conf->exists('svc_broadband-radius');
56
57 sub router {
58   my $svc = shift;
59   my $router = $svc->router;
60   my $block = $svc->addr_block;
61   $router = $router->routernum . ': ' . $router->routername if $router;
62   $block = '; '.$block->cidr if $block;
63   $router . $block
64 }
65
66 sub ip_addr {
67   my $svc = shift;
68   my $ip_addr = $svc->ip_addr;
69   my $out = $ip_addr;
70   $out .= ' (' . include('/elements/popup_link-ping.html', ip => $ip_addr) . ')'
71     if $ip_addr;
72   if ( my $addr_block = $svc->addr_block ) {
73     $out .= '<br>Netmask: ' . $addr_block->NetAddr->mask .
74             '<br>Gateway: ' . $addr_block->ip_gateway;
75   }
76   $out;
77 }
78
79 sub mac_addr {
80   my $svc = shift;
81   $svc->mac_addr_formatted('U',':');
82 }
83
84 sub usergroup {
85   my $svc = shift;
86   my $usergroup = $svc->usergroup;
87   join('<BR>', $svc->radius_groups('long_description'));
88 }
89
90 sub sectornum {
91   my $svc_broadband = shift;
92   return '' unless $svc_broadband->sectornum;
93   my $tower_sector = $svc_broadband->tower_sector;
94   my $link = $tower_sector->ip_addr
95                ? '<A HREF="http://'. $tower_sector->ip_addr. '">'
96                : '';
97
98   $link .  $tower_sector->description. ( $link ? '</A>' : '');
99 }
100
101 sub coordinates {
102   my $s = shift; #$svc_broadband
103   return '' unless $s->latitude && $s->longitude;
104
105   my $d = $s->description;
106   my $agentnum;
107   unless ($d) {
108     if ( my $cust_pkg = $s->cust_svc->cust_pkg ) {
109       $d = $cust_pkg->cust_main->name_short;
110       $agentnum = $cust_pkg->cust_main->agentnum;
111     }
112   }
113   
114   #'Latitude: '. $s->latitude. ', Longitude: '. $s->longitude. ' '.
115   $s->latitude. ', '. $s->longitude. ' '.
116     include('/elements/coord-links.html', 
117       $s->latitude,
118       $s->longitude,
119       $d,
120       $agentnum
121     );
122 }
123
124 sub shared_svcnum {
125   my $svc_broadband = shift;
126   return '' unless $svc_broadband->shared_svcnum;
127
128   my $shared_svc_broadband =
129     qsearchs('svc_broadband', { 'svcnum' => $svc_broadband->shared_svcnum,
130                               }
131                               #agent virt?
132             )
133       or return '';
134   my $shared_cust_pkg = $shared_svc_broadband->cust_svc->cust_pkg;
135
136   $shared_svc_broadband->label.
137     ( $shared_cust_pkg
138          ? ' ('. $shared_cust_pkg->cust_main->name. ')'
139          : ''
140     );
141 }
142
143 sub svc_callback {
144   # trying to move to the callback style
145   my ($cgi, $svc_x, $part_svc, $cust_pkg, $fields, $opt) = @_;
146
147   if (    $part_svc->part_svc_column('latitude')->columnflag eq 'F' 
148        && $part_svc->part_svc_column('longitude')->columnflag eq 'F' 
149      )
150   {
151     @$fields = grep { !ref($_) || $_->{field} ne 'coordinates' } @$fields;
152   }
153
154   # again, we assume at most one of these exports per part_svc
155   my ($nas_export) = $part_svc->part_export('broadband_nas');
156   if ( $nas_export ) {
157     my $nas = qsearchs('nas', { 'svcnum' => $svc_x->svcnum });
158     if ( $nas ) {
159       $svc_x->set($_, $nas->$_) foreach (fields('nas'));
160       push @$fields, qw(shortname secret type ports server community);
161       $opt->{'labels'}{'shortname'}  = 'Short name';
162       $opt->{'labels'}{'secret'}     = 'Shared secret';
163       $opt->{'labels'}{'type'}       = 'Type';
164       $opt->{'labels'}{'ports'}      = 'Ports';
165       $opt->{'labels'}{'server'}     = 'Server';
166       $opt->{'labels'}{'community'}  = 'Community';
167     } #if $nas
168   } #$nas_export
169 };
170
171
172 </%init>