2 name_singular => 'tower',
4 viewall_dir => 'browse',
5 html_init => include('/elements/mapselect.html'),
6 fields => [ 'towername',
7 { field=>'disabled', type=>'checkbox', value=>'Y', },
8 { field=>'color', type=>'pickcolor' },
9 { field => 'default_ip_addr',
10 curr_value_callback => $default_ip_addr_callback },
18 # { field => 'sectornum',
19 # type => 'tower_sector',
20 # o2m_table => 'tower_sector',
21 # m2_label => 'Sector',
22 # m2_error_callback => $m2_error_callback,
24 { type => 'tower_sectors',
26 # does its own o2m-thing
29 labels => { 'towernum' => 'Tower',
30 'towername' => 'Name',
31 'sectornum' => 'Sector',
32 'disabled' => 'Disabled',
33 'default_ip_addr' => 'Tower IP address',
34 'latitude' => 'Latitude',
35 'longitude' => 'Longitude',
36 'altitude' => 'Altitude (feet)',
37 'height' => 'Tower height (feet)',
38 'veg_height' => 'Vegetation height (feet)',
40 'up_rate_limit' => 'Up Rate Limit(Kbps)',
41 'down_rate_limit' => 'Down Rate Limit(Kbps)',
46 my $m2_error_callback = sub { # reconstruct the list
47 my ($cgi, $object) = @_;
50 sectorname ip_addr height freq_mhz direction width tilt v_width db_high db_low sector_range up_rate_limit down_rate_limit
55 new FS::tower_sector {
56 'towernum' => $object->towernum,
57 'sectornum' => scalar( $cgi->param($k) ),
58 map { $_ => scalar( $cgi->param($k.'_'.$_) ) } @fields,
60 } grep length($cgi->param($_.'_sectorname')),
61 grep /^sectornum\d+$/,
65 my $default_ip_addr_callback = sub {
66 my ($cgi, $object) = @_;
67 my $sector = $object ? $object->default_sector : '';
68 $sector ? $sector->ip_addr : '';