use strict;
use vars qw(@ISA $conf);
+
+use base qw(FS::svc_Radius_Mixin FS::svc_Tower_Mixin FS::svc_Common);
+{ no warnings 'redefine'; use NetAddr::IP; }
use FS::Record qw( qsearchs qsearch dbh );
use FS::svc_Common;
use FS::cust_svc;
use FS::addr_block;
use FS::part_svc_router;
-use NetAddr::IP;
-
-@ISA = qw( FS::svc_Common );
+use FS::tower_sector;
$FS::UID::callback{'FS::svc_broadband'} = sub {
$conf = new FS::Conf;
sub table_info {
{
- 'name' => 'Broadband',
- 'name_plural' => 'Broadband services',
- 'longname_plural' => 'Fixed (username-less) broadband services',
+ 'name' => 'Wireless broadband',
+ 'name_plural' => 'Wireless broadband services',
+ 'longname_plural' => 'Fixed wireless broadband services',
'display_weight' => 50,
'cancel_weight' => 70,
+ 'ip_field' => 'ip_addr',
'fields' => {
- 'description' => 'Descriptive label for this particular device.',
+ 'svcnum' => 'Service',
+ 'description' => 'Descriptive label for this particular device',
'speed_down' => 'Maximum download speed for this service in Kbps. 0 denotes unlimited.',
'speed_up' => 'Maximum upload speed for this service in Kbps. 0 denotes unlimited.',
'ip_addr' => 'IP address. Leave blank for automatic assignment.',
+ 'sectornum' => 'Tower sector',
'blocknum' => { 'label' => 'Address block',
'type' => 'select',
'select_table' => 'addr_block',
'longitude' => 'Longitude',
'altitude' => 'Altitude',
'vlan_profile' => 'VLAN profile',
+ 'usergroup' => {
+ label => 'RADIUS groups',
+ type => 'select-radius_group.html',
+ #select_table => 'radius_group',
+ #select_key => 'groupnum',
+ #select_label => 'groupname',
+ disable_inventory => 1,
+ multiple => 1,
+ },
},
};
}
=item routernum - arrayref
+=item sectornum - arrayref
+
+=item towernum - arrayref
+
=item order_by
=back
#agentnum
if ( $params->{'agentnum'} =~ /^(\d+)$/ and $1 ) {
- push @where, "agentnum = $1";
+ push @where, "cust_main.agentnum = $1";
}
push @where, $FS::CurrentUser::CurrentUser->agentnums_sql(
'null_right' => 'View/link unlinked services',
push @where, "addr_block.routernum = $1";
}
}
+
+ #sector and tower, as above
+ my @where_sector = $class->tower_sector_sql($params);
+ if ( @where_sector ) {
+ push @where, @where_sector;
+ push @from, 'LEFT JOIN tower_sector USING ( sectornum )';
+ }
#svcnum
if ( $params->{'svcnum'} =~ /^(\d+)$/ ) {
return $x unless ref($x);
- my $nw_coords = $conf->exists('svc_broadband-require-nw-coordinates');
- my $lat_lower = $nw_coords ? 1 : -90;
- my $lon_upper = $nw_coords ? -1 : 180;
+ # remove delimiters
+ my $mac_addr = uc($self->get('mac_addr'));
+ $mac_addr =~ s/[-: ]//g;
+ $self->set('mac_addr', $mac_addr);
my $error =
$self->ut_numbern('svcnum')
|| $self->ut_numbern('blocknum')
+ || $self->ut_foreign_keyn('sectornum', 'tower_sector', 'sectornum')
|| $self->ut_textn('description')
- || $self->ut_number('speed_up')
- || $self->ut_number('speed_down')
+ || $self->ut_numbern('speed_up')
+ || $self->ut_numbern('speed_down')
|| $self->ut_ipn('ip_addr')
|| $self->ut_hexn('mac_addr')
|| $self->ut_hexn('auth_key')
- || $self->ut_coordn('latitude', $lat_lower, 90)
- || $self->ut_coordn('longitude', -180, $lon_upper)
+ || $self->ut_coordn('latitude')
+ || $self->ut_coordn('longitude')
|| $self->ut_sfloatn('altitude')
|| $self->ut_textn('vlan_profile')
|| $self->ut_textn('plan_id')
}
}
+ if ( $cust_pkg && ! $self->latitude && ! $self->longitude ) {
+ my $l = $cust_pkg->cust_location_or_main;
+ if ( $l->ship_latitude && $l->ship_longitude ) {
+ $self->latitude( $l->ship_latitude );
+ $self->longitude( $l->ship_longitude );
+ } elsif ( $l->latitude && $l->longitude ) {
+ $self->latitude( $l->latitude );
+ $self->longitude( $l->longitude );
+ }
+ }
+
$error = $self->_check_ip_addr;
return $error if $error;