X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcontact.pm;h=f6d9d0329159618d10b0d1568221ce7ad759ae74;hb=bf09b9e785d014be69e06d001769e118e485a04d;hp=a824b8e53cd48e604bfbc41f4d7841977b7a3ab0;hpb=571291dda91dd92db80660aa3d67333b0c88fc34;p=freeside.git diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm index a824b8e53..f6d9d0329 100644 --- a/FS/FS/contact.pm +++ b/FS/FS/contact.pm @@ -378,7 +378,8 @@ sub delete { } } - my $error = $self->SUPER::delete; + my $error = $self->delete_password_history + || $self->SUPER::delete; if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; @@ -742,9 +743,9 @@ sub firstlast { =item by_selfservice_email EMAILADDRESS -Alternate search constructor (class method). Given an email address, -returns the contact for that address, or the empty string if no contact -has that email address. +Alternate search constructor (class method). Given an email address, returns +the contact for that address. If that contact doesn't have selfservice access, +or there isn't one, returns the empty string. =cut @@ -755,7 +756,8 @@ sub by_selfservice_email { 'table' => 'contact_email', 'addl_from' => ' LEFT JOIN contact USING ( contactnum ) ', 'hashref' => { 'emailaddress' => $email, }, - 'extra_sql' => " AND ( disabled IS NULL OR disabled = '' )", + 'extra_sql' => " AND ( contact.disabled IS NULL ) ". + " AND ( contact.selfservice_access = 'Y' )", }) or return ''; $contact_email->contact; @@ -876,9 +878,9 @@ sub send_reset_email { my $agentnum = $cust_main ? $cust_main->agentnum : ''; my $msgnum = $conf->config('selfservice-password_reset_msgnum', $agentnum); #die "selfservice-password_reset_msgnum unset" unless $msgnum; - return { 'error' => "selfservice-password_reset_msgnum unset" } unless $msgnum; + return "selfservice-password_reset_msgnum unset" unless $msgnum; my $msg_template = qsearchs('msg_template', { msgnum => $msgnum } ); - return { 'error' => "selfservice-password_reset_msgnum cannot be loaded" } unless $msg_template; + return "selfservice-password_reset_msgnum cannot be loaded" unless $msg_template; my %msg_template = ( 'to' => join(',', map $_->emailaddress, @contact_email ), 'cust_main' => $cust_main, @@ -890,7 +892,7 @@ sub send_reset_email { my $cust_msg = $msg_template->prepare( %msg_template ); my $error = $cust_msg->insert; - return { 'error' => $error } if $error; + return $error if $error; my $queue = new FS::queue { 'job' => 'FS::cust_msg::process_send', 'custnum' => $cust_main ? $cust_main->custnum : '', @@ -944,6 +946,7 @@ sub _upgrade_data { #class method # always migrate cust_main_invoice records over local $FS::cust_main::import = 1; # override require_phone and such my $search = FS::Cursor->new('cust_main_invoice', {}); + my %custnum_dest; while (my $cust_main_invoice = $search->fetch) { my $custnum = $cust_main_invoice->custnum; my $dest = $cust_main_invoice->dest; @@ -955,20 +958,27 @@ sub _upgrade_data { #class method if !$svc_acct; $dest = $svc_acct->email; } + push @{ $custnum_dest{$custnum} ||= [] }, $dest; - my $error = $cust_main->replace( invoicing_list => [ $dest ] ); - + my $error = $cust_main_invoice->delete; if ( $error ) { - die "custnum $custnum, invoice destination $dest, creating contact: $error\n"; + die "custnum $custnum, cleaning up cust_main_invoice: $error\n"; } + } - $error = $cust_main_invoice->delete; - die "custnum $custnum, cleaning up cust_main_invoice: $error\n" if $error; - - } # while $search->fetch + foreach my $custnum (keys %custnum_dest) { + my $dests = $custnum_dest{$custnum}; + my $cust_main = FS::cust_main->by_key($custnum); + my $error = $cust_main->replace( invoicing_list => $dests ); + if ( $error ) { + die "custnum $custnum, creating contact: $error\n"; + } + } unless ( FS::upgrade_journal->is_done('contact_invoice_dest') ) { + local($skip_fuzzyfiles) = 1; + foreach my $contact (qsearch('contact', {})) { my $error = $contact->replace; die $error if $error;