should really fix the cust_main_note upgrade bullshit, RT#8580
[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     if ( !$access_user && $otaker =~ /^(.+), (.+)$/ ) { #same as below..
14       $otaker = lc($2.$1);
15       $access_user = qsearchs('access_user', { 'username' => $otaker } );
16     }
17     croak "can't set otaker: $otaker not found!" unless $access_user; #confess?
18     $self->usernum( $access_user->usernum );
19     $otaker; #not sure return is used anywhere, but just in case
20   } else { #get
21     if ( $self->usernum ) {
22       $self->access_user->username;
23     } elsif ( length($self->get('otaker')) ) {
24       $self->get('otaker');
25     } else {
26       '';
27     }
28   }
29 }
30
31 sub access_user {
32   my $self = shift;
33   qsearchs('access_user', { 'usernum' => $self->usernum } );
34 }
35
36 sub _upgrade_otaker {
37   my $class = shift;
38   my $table = $class->table;
39
40   while ( 1 ) {
41     my @records = qsearch({
42                     'table'     => $table,
43                     'hashref'   => {},
44                     'extra_sql' => 'WHERE otaker IS NOT NULL LIMIT 1000',
45                   });
46     last unless @records;
47
48     foreach my $record (@records) {
49       eval { $record->otaker($record->otaker) };
50       if ( $@ ) {
51         my $username = $record->otaker;
52         if ( $username =~ /^(.+), (.+)$/ ) {
53           $username = lc($2.$1);
54         }
55         my $access_user = new FS::access_user {
56           'username'  => $username,
57           '_password' => 'CHANGEME',
58           'first'     => 'Legacy',
59           'last'      => 'User',
60           'disabled'  => 'Y',
61         };
62         my $error = $access_user->insert;
63         die $error if $error;
64         $record->otaker($record->otaker);
65       }
66       $record->set('otaker', '');
67       my $error = $record->replace;
68       die $error if $error;
69     }
70
71   }
72
73 }
74
75 1;