use vars qw( @ISA );
use FS::Record qw( qsearch qsearchs );
use FS::svc_acct;
+use FS::radius_group;
@ISA = qw(FS::Record);
=head1 DESCRIPTION
An FS::radius_usergroup object links an account (see L<FS::svc_acct>) with a
-RADIUS group. FS::radius_usergroup inherits from FS::Record. The following
-fields are currently supported:
+RADIUS group (see L<FS::radius_group>). FS::radius_usergroup inherits from
+FS::Record. The following fields are currently supported:
=over 4
=item svcnum - Account (see L<FS::svc_acct>).
-=item groupname - group name
+=item groupnum - RADIUS group (see L<FS::radius_group>).
=back
sub check {
my $self = shift;
+ my $svcnum = $self->svcnum;
+ die "radius_usergroup.groupname is deprecated" if $self->groupname;
$self->ut_numbern('usergroupnum')
- || $self->ut_number('svcnum')
- || $self->ut_foreign_key('svcnum','svc_acct','svcnum')
- || $self->ut_text('groupname')
+ || ( $self->ut_foreign_key('svcnum','svc_acct','svcnum')
+ && $self->ut_foreign_key('svcnum','svc_broadband','svcnum')
+ && "Can't find radius_usergroup.svcnum $svcnum in svc_acct.svcnum or svc_broadband.svcnum" )
+ || $self->ut_foreign_key('groupnum','radius_group','groupnum')
+ || $self->SUPER::check
;
}
-=item svc_acct
+=item svc_x
-Returns the account associated with this record (see L<FS::svc_acct>).
+Returns the account associated with this record (see L<FS::svc_acct> and
+L<FS::svc_broadband>).
=cut
sub svc_acct {
my $self = shift;
- qsearchs('svc_acct', { svcnum => $self->svcnum } );
+ qsearchs('svc_acct', { svcnum => $self->svcnum } ) ||
+ qsearchs('svc_broadband', { svcnum => $self->svcnum } )
}
-=back
+=item radius_group
+
+Returns the RADIUS group associated with this record (see L<FS::radius_group>).
-=head1 BUGS
+=cut
-Don't let 'em get you down.
+sub radius_group {
+ my $self = shift;
+ qsearchs('radius_group', { 'groupnum' => $self->groupnum } );
+}
+
+sub _upgrade_data { #class method
+ my ($class, %opts) = @_;
+
+ my %group_cache = map { $_->groupname => $_->groupnum }
+ qsearch('radius_group', {});
+
+ my @radius_usergroup = qsearch('radius_usergroup', {} );
+ my $error = '';
+ foreach my $rug ( @radius_usergroup ) {
+ my $groupname = $rug->groupname;
+ next unless $groupname;
+ unless(defined($group_cache{$groupname})) {
+ my $g = new FS::radius_group {
+ 'groupname' => $groupname,
+ 'description' => $groupname,
+ };
+ $error = $g->insert;
+ die $error if $error;
+ $group_cache{$groupname} = $g->groupnum;
+ }
+ $rug->groupnum($group_cache{$groupname});
+ $rug->groupname('');
+ $error = $rug->replace;
+ die $error if $error;
+ }
+}
+
+=back
=head1 SEE ALSO
-L<svc_acct>, L<FS::Record>, schema.html from the base documentation.
+L<svc_acct>, L<FS::radius_group>, L<FS::Record>, schema.html from the base documentation.
=cut