eliminate some false laziness in FS::Misc::send_email vs. msg_template/email.pm send_...
[freeside.git] / FS / FS / radius_usergroup.pm
index 647621d..cf3cdfa 100644 (file)
@@ -1,11 +1,10 @@
 package FS::radius_usergroup;
+use base qw(FS::Record);
 
 use strict;
-use vars qw( @ISA );
 use FS::Record qw( qsearch qsearchs );
 use FS::svc_acct;
-
-@ISA = qw(FS::Record);
+use FS::radius_group;
 
 =head1 NAME
 
@@ -29,8 +28,8 @@ FS::radius_usergroup - Object methods for radius_usergroup records
 =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
 
@@ -38,7 +37,7 @@ fields are currently supported:
 
 =item svcnum - Account (see L<FS::svc_acct>).
 
-=item groupname - group name
+=item groupnum - RADIUS group (see L<FS::radius_group>).
 
 =back
 
@@ -95,34 +94,69 @@ and replace methods.
 
 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
 
-=head1 BUGS
+Returns the RADIUS group associated with this record (see L<FS::radius_group>).
+
+=cut
 
-Don't let 'em get you down.
+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<FS::svc_acct>, L<FS::radius_group>, L<FS::Record>, schema.html from the base documentation.
 
 =cut