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