communigate provisioning phase 2: Domain:Account Defaults:Settings: RulesAllowed...
[freeside.git] / FS / FS / otaker_Mixin.pm
1 package FS::otaker_Mixin;
2
3 use strict;
4 use Carp qw( croak ); #confess );
5 use FS::Record qw( qsearch qsearchs );
6 use FS::access_user;
7
8 sub otaker {
9   my $self = shift;
10   if ( scalar(@_) ) { #set
11     my $otaker = shift;
12     my $access_user = qsearchs('access_user', { 'username' => $otaker } )
13       or croak "can't set otaker: $otaker not found!"; #confess?
14     $self->usernum( $access_user->usernum );
15     $otaker; #not sure return is used anywhere, but just in case
16   } else { #get
17     if ( $self->usernum ) {
18       $self->access_user->username;
19     } elsif ( length($self->get('otaker')) ) {
20       $self->get('otaker');
21     } else {
22       '';
23     }
24   }
25 }
26
27 sub access_user {
28   my $self = shift;
29   qsearchs('access_user', { 'usernum' => $self->usernum } );
30 }
31
32 sub _upgrade_otaker {
33   my $class = shift;
34   my $table = $class->table;
35
36   while ( 1 ) {
37     my @records = qsearch({
38                     'table'     => $table,
39                     'hashref'   => {},
40                     'extra_sql' => 'WHERE otaker IS NOT NULL LIMIT 1000',
41                   });
42     last unless @records;
43
44     foreach my $record (@records) {
45       eval { $record->otaker($record->otaker) };
46       if ( $@ ) {
47         my $access_user = new FS::access_user {
48           'username'  => $record->otaker,
49           '_password' => 'CHANGEME',
50           'first'     => 'Legacy',
51           'last'      => 'User',
52           'disabled'  => 'Y',
53         };
54         my $error = $access_user->insert;
55         die $error if $error;
56         $record->otaker($record->otaker);
57       }
58       $record->set('otaker', '');
59       my $error = $record->replace;
60       die $error if $error;
61     }
62
63   }
64
65 }
66
67 1;