2 name_singular => 'tower',
4 viewall_dir => 'browse',
5 fields => [ 'towername',
6 { field=>'disabled', type=>'checkbox', value=>'Y', },
7 { field => 'default_ip_addr',
8 curr_value_callback => $default_ip_addr_callback },
9 { field => 'sectornum',
10 type => 'tower_sector',
11 o2m_table => 'tower_sector',
13 m2_error_callback => $m2_error_callback,
16 labels => { 'towernum' => 'Tower',
17 'towername' => 'Name',
18 'sectornum' => 'Sector',
19 'disabled' => 'Disabled',
20 'default_ip_addr' => 'Tower IP address',
25 my $m2_error_callback = sub { # reconstruct the list
26 my ($cgi, $object) = @_;
28 my @fields = qw(sectorname ip_addr);
31 next if !length($cgi->param($k.'_sectorname'));
32 new FS::tower_sector {
33 'towernum' => $object->towernum,
34 'sectornum' => scalar( $cgi->param($k) ),
35 map { $_ => scalar( $cgi->param($k.'_'.$_) ) } @fields,
37 } grep /^sectornum\d+$/, ($cgi->param);
40 my $default_ip_addr_callback = sub {
41 my ($cgi, $object) = @_;
42 my $sector = $object ? $object->default_sector : '';
43 $sector ? $sector->ip_addr : '';