X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_main_invoice.pm;h=31a07bcfff4fe7c9598200ff7885b000e30a1fa7;hp=d06a718e1243035735ca6eeaf88c7984d32ef1be;hb=8d0e8149e7b19ad8543ac6c8c663be63dbc34762;hpb=9b1aada27ca0d46931edb05a34a9885e2f253778 diff --git a/FS/FS/cust_main_invoice.pm b/FS/FS/cust_main_invoice.pm index d06a718e1..31a07bcff 100644 --- a/FS/FS/cust_main_invoice.pm +++ b/FS/FS/cust_main_invoice.pm @@ -1,25 +1,21 @@ 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; @@ -48,7 +44,7 @@ FS::Record. The following fields are currently supported: =item custnum - customer (see L) -=item dest - Invoice destination: If numeric, a svcnum (see L), 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), 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 @@ -88,7 +84,7 @@ sub replace { return "Can't change custnum!" unless $old->custnum == $new->custnum; - $new->SUPER::replace; + $new->SUPER::replace($old); } @@ -96,7 +92,7 @@ sub replace { 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 @@ -109,17 +105,17 @@ sub check { ; 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 in the configuration files, it will change the -invoice destination from an email address to a service number instead. +Checks the dest field only. + +#If it finds that the account ends in the +#same domain configured as the B configuration file, it will change the +#invoice destination from an email address to a service number (see +#L). =cut @@ -129,21 +125,20 @@ sub checkdest { 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 @@ -151,25 +146,42 @@ sub checkdest { =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 sub address { my $self = shift; - if ( $self->dest =~ /(\d+)$/ ) { - my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $1 } ); - $svc_acct->username . '@' . $mydomain; + if ( $self->dest =~ /^(\d+)$/ ) { + my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $1 } ) + or return undef; + $svc_acct->email; } else { $self->dest; } } +=item cust_main + +Returns the parent customer object (see L). + =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.3 2001-07-27 06:17:46 thalakan Exp $ + ''; +} =head1 BUGS