1 package FS::otaker_Mixin;
4 use Carp qw( croak ); #confess );
5 use FS::Record qw( qsearch qsearchs );
11 if ( scalar(@_) ) { #set
13 my $access_user = qsearchs('access_user', { 'username' => $otaker } );
14 if ( !$access_user && $otaker =~ /^(.+), (.+)$/ ) { #same as below..
15 my($lastname, $firstname) = ($1, $2);
16 $otaker = lc($firstname.$lastname);
18 $access_user = qsearchs('access_user', { 'first' => $firstname,
19 'last' => $lastname } )
20 || qsearchs('access_user', { 'username' => $otaker } );
22 croak "can't set otaker: $otaker not found!" unless $access_user; #confess?
23 $self->usernum( $access_user->usernum );
24 $otaker; #not sure return is used anywhere, but just in case
26 if ( $self->usernum ) {
27 # avoid a common failure mode: this should work even when the table
28 # isn't foreign-keyed to access_user
29 my $access_user = FS::access_user->by_key($self->usernum);
31 croak "otaker called on ".$self->table."#".
32 $self->get($self->primary_key).
33 " but user does not exist";
35 return $access_user->username;
36 } elsif ( length($self->get('otaker')) ) {
46 my $table = $class->table;
48 my $limit = ( $table eq 'cust_attachment' ? 10 : 1000 );
51 my @records = qsearch({
54 'extra_sql' => "WHERE otaker IS NOT NULL LIMIT $limit",
58 foreach my $record (@records) {
59 eval { $record->otaker($record->otaker) };
61 my $username = $record->otaker;
62 my($lastname, $firstname) = ( 'User', 'Legacy' );
63 if ( $username =~ /^(.+), (.+)$/ ) {
64 ($lastname, $firstname) = ($1, $2);
65 $username = lc($firstname.$lastname);
68 my $access_user = new FS::access_user {
69 'username' => $username,
70 '_password' => 'CHANGEME',
71 'first' => $firstname,
75 my $error = $access_user->insert;
77 $record->otaker($record->otaker);
79 $record->set('otaker', '');
80 my $error = $record->replace;
84 if ( $table eq 'cust_attachment' ) {
85 warn " committing (cust_attachment) \n";
86 dbh->commit or die dbh->errstr;