package FS::tower;
+use base qw( FS::o2m_Common FS::Record );
use strict;
-use base qw( FS::o2m_Common FS::Record );
+use List::Util qw( max );
use FS::Record qw( qsearch qsearchs );
use FS::tower_sector;
-use List::Util qw( max );
=head1 NAME
=cut
-# the new method can be inherited from FS::Record, if a table method is defined
-
sub table { 'tower'; }
=item insert
Adds this record to the database. If there is an error, returns the error,
otherwise returns false.
-=cut
-
=item delete
Delete this record from the database.
-=cut
-
=item replace OLD_RECORD
Replaces the OLD_RECORD with this one in the database. If there is an error,
=cut
-# the replace method can be inherited from FS::Record
+sub replace {
+ my $self = shift;
+ my $old = shift || $self->replace_old;
+ # editing the tower location needs to regenerate coverage on its sectors
+ my $regen_coverage = 0;
+ foreach (qw(latitude longitude height)) {
+ $regen_coverage = 1 if $self->get($_) != $old->get($_);
+ }
+
+ my $error = $self->SUPER::replace($old);
+ return $error if $error;
+
+ if ($regen_coverage) {
+ foreach my $sector ($self->tower_sector) {
+ $sector->queue_generate_coverage;
+ }
+ }
+}
=item check
=cut
-# the check method should currently be supplied - FS::Record contains some
-# data checking routines
-
sub check {
my $self = shift;
$self->ut_numbern('towernum')
|| $self->ut_text('towername')
|| $self->ut_enum('disabled', [ '', 'Y' ])
+ || $self->ut_coordn('latitude')
+ || $self->ut_coordn('longitude')
+ || $self->ut_enum('coord_auto', [ '', 'Y' ])
+ || $self->ut_floatn('altitude')
+ || $self->ut_floatn('height')
+ || $self->ut_floatn('veg_height')
+ || $self->ut_alphan('color')
;
return $error if $error;
sub process_o2m {
my $self = shift;
my %opt = @_;
- my $params = $opt{params};
+ my $params = +{ %{$opt{params}} };
# Adjust to make sure our default sector is in the list.
my $default_sector = $self->default_sector