eliminate some false laziness in FS::Misc::send_email vs. msg_template/email.pm send_...
[freeside.git] / FS / FS / otaker_Mixin.pm
index ca17018..186c7d1 100644 (file)
@@ -4,6 +4,7 @@ use strict;
 use Carp qw( croak ); #confess );
 use FS::Record qw( qsearch qsearchs );
 use FS::access_user;
+use FS::UID qw( dbh );
 
 sub otaker {
   my $self = shift;
@@ -11,15 +12,27 @@ sub otaker {
     my $otaker = shift;
     my $access_user = qsearchs('access_user', { 'username' => $otaker } );
     if ( !$access_user && $otaker =~ /^(.+), (.+)$/ ) { #same as below..
-      $otaker = lc($2.$1);
-      $access_user = qsearchs('access_user', { 'username' => $otaker } );
+      my($lastname, $firstname) = ($1, $2);
+      $otaker = lc($firstname.$lastname);
+      $otaker =~ s/ //g;
+      $access_user =  qsearchs('access_user', { 'first' => $firstname, 
+                                                'last'  => $lastname  } )
+                   || qsearchs('access_user', { 'username' => $otaker } );
     }
     croak "can't set otaker: $otaker not found!" unless $access_user; #confess?
     $self->usernum( $access_user->usernum );
     $otaker; #not sure return is used anywhere, but just in case
   } else { #get
     if ( $self->usernum ) {
-      $self->access_user->username;
+      # avoid a common failure mode: this should work even when the table 
+      # isn't foreign-keyed to access_user
+      my $access_user = FS::access_user->by_key($self->usernum);
+      if (!$access_user) {
+        croak "otaker called on ".$self->table."#".
+              $self->get($self->primary_key).
+              " but user does not exist";
+      }
+      return $access_user->username;
     } elsif ( length($self->get('otaker')) ) {
       $self->get('otaker');
     } else {
@@ -28,20 +41,17 @@ sub otaker {
   }
 }
 
-sub access_user {
-  my $self = shift;
-  qsearchs('access_user', { 'usernum' => $self->usernum } );
-}
-
 sub _upgrade_otaker {
   my $class = shift;
   my $table = $class->table;
 
+  my $limit = ( $table eq 'cust_attachment' ? 10 : 1000 );
+
   while ( 1 ) {
     my @records = qsearch({
                     'table'     => $table,
                     'hashref'   => {},
-                    'extra_sql' => 'WHERE otaker IS NOT NULL LIMIT 1000',
+                    'extra_sql' => "WHERE otaker IS NOT NULL LIMIT $limit",
                   });
     last unless @records;
 
@@ -49,14 +59,17 @@ sub _upgrade_otaker {
       eval { $record->otaker($record->otaker) };
       if ( $@ ) {
         my $username = $record->otaker;
+        my($lastname, $firstname) = ( 'User', 'Legacy' );
         if ( $username =~ /^(.+), (.+)$/ ) {
-          $username = lc($2.$1);
+          ($lastname, $firstname) = ($1, $2);
+          $username = lc($firstname.$lastname);
+          $username =~ s/ //g;
         }
         my $access_user = new FS::access_user {
           'username'  => $username,
           '_password' => 'CHANGEME',
-          'first'     => 'Legacy',
-          'last'      => 'User',
+          'first'     => $firstname,
+          'last'      => $lastname,
           'disabled'  => 'Y',
         };
         my $error = $access_user->insert;
@@ -67,6 +80,11 @@ sub _upgrade_otaker {
       my $error = $record->replace;
       die $error if $error;
     }
+        
+    if ( $table eq 'cust_attachment' ) {
+       warn "  committing (cust_attachment) \n";
+       dbh->commit or die dbh->errstr;
+    }
 
   }