package FS::cust_main_invoice;
+use base qw( FS::Record );
use strict;
-use vars qw(@ISA $conf $mydomain);
-use Exporter;
-use FS::Record qw( qsearchs );
+use FS::Record qw( qsearchs dbh );
use FS::Conf;
-use FS::cust_main;
use FS::svc_acct;
-
-@ISA = qw( FS::Record );
-
-#ask FS::UID to run this stuff for us later
-$FS::UID::callback{'FS::cust_main_invoice'} = sub {
- $conf = new FS::Conf;
- $mydomain = $conf->config('domain');
-};
+use FS::Msgcat qw(gettext);
=head1 NAME
FS::cust_main_invoice - Object methods for cust_main_invoice records
+=head1 ANNOUNCEMENT
+
+This is deprecated in version 4. Instead, contacts with the "invoice_dest"
+attribute should be used.
+
=head1 SYNOPSIS
use FS::cust_main_invoice;
=item custnum - customer (see L<FS::cust_main>)
-=item dest - Invoice destination: If numeric, a svcnum (see L<FS::svc_acct>), if string, a literal email address, or `POST' to enable mailing (the default if no cust_main_invoice records exist)
+=item dest - Invoice destination: If numeric, a svcnum (see L<FS::svc_acct>), if string, a literal email address, `POST' to enable mailing (the default if no cust_main_invoice records exist), or `FAX' to enable faxing via a HylaFAX server.
=back
return "Can't change custnum!" unless $old->custnum == $new->custnum;
- $new->SUPER::replace;
+ $new->SUPER::replace($old);
}
Checks all fields to make sure this is a valid invoice destination. If there is
an error, returns the error, otherwise returns false. Called by the insert
-and repalce methods.
+and replace methods.
=cut
;
return $error if $error;
- return "Unknown customer"
- unless qsearchs('cust_main',{ 'custnum' => $self->custnum });
-
- ''; #noerror
+ $self->SUPER::check;
}
=item checkdest
-Checks the dest field only. If it finds that the account ends in the
-same domain configured as the B<domain> configuration file, it will change the
-invoice destination from an email address to a service number (see
-L<FS::svc_acct>).
+Checks the dest field only.
+
+#If it finds that the account ends in the
+#same domain configured as the B<domain> configuration file, it will change the
+#invoice destination from an email address to a service number (see
+#L<FS::svc_acct>).
=cut
my $error = $self->ut_text('dest');
return $error if $error;
- if ( $self->dest eq 'POST' ) {
+ my $conf = new FS::Conf;
+
+ if ( $self->dest =~ /^(POST|FAX)$/ ) {
#contemplate our navel
} elsif ( $self->dest =~ /^(\d+)$/ ) {
- return "Unknown local account (specified by svcnum)"
+ return "Unknown local account (specified by svcnum: ". $self->dest. ")"
unless qsearchs( 'svc_acct', { 'svcnum' => $self->dest } );
- } elsif ( $self->dest =~ /^([\w\.\-]+)\@(([\w\.\-]+\.)+\w+)$/ ) {
+ } elsif ( $conf->exists('emailinvoice-apostrophe')
+ ? $self->dest =~ /^\s*([\w\.\-\&\+\']+)\@(([\w\.\-]+\.)+\w+)\s*$/
+ : $self->dest =~ /^\s*([\w\.\-\&\+]+)\@(([\w\.\-]+\.)+\w+)\s*$/ ){
my($user, $domain) = ($1, $2);
- if ( $domain eq $mydomain ) {
- my $svc_acct = qsearchs( 'svc_acct', { 'username' => $user } );
- return "Unknown local account (specified literally)" unless $svc_acct;
- $svc_acct->svcnum =~ /^(\d+)$/ or die "Non-numeric svcnum?!";
- $self->dest($1);
- }
+ $self->dest("$1\@$2");
} else {
- return "Illegal destination!";
+ return gettext("illegal_email_invoice_address"). ': '. $self->dest;
}
''; #no error
=item address
-Returns the literal email address for this record (or `POST').
+Returns the literal email address for this record (or `POST' or `FAX').
=cut
if ( $self->dest =~ /^(\d+)$/ ) {
my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $1 } )
or return undef;
- $svc_acct->username . '@' . $mydomain;
+ $svc_acct->email;
} else {
$self->dest;
}
}
+=item cust_main
+
+Returns the parent customer object (see L<FS::cust_main>).
+
=back
-=head1 VERSION
+=cut
+
+sub _upgrade_schema {
+ my ($class, %opts) = @_;
+
+ # delete records where custnum points to a nonexistent customer
+ my $sql = 'DELETE FROM cust_main_invoice
+ WHERE NOT EXISTS (
+ SELECT 1 FROM cust_main WHERE cust_main.custnum = cust_main_invoice.custnum
+ )';
+ my $sth = dbh->prepare($sql) or die dbh->errstr;
+ $sth->execute or die $sth->errstr;
-$Id: cust_main_invoice.pm,v 1.5 2001-08-11 00:01:39 ivan Exp $
+ '';
+}
=head1 BUGS