}
}
- my $error = $self->SUPER::delete;
+ my $error = $self->delete_password_history
+ || $self->SUPER::delete;
if ( $error ) {
$dbh->rollback if $oldAutoCommit;
return $error;
=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
'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;
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,
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 : '',
# 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;
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;