svc_hardware: better error messages for bad hw_addr when not validating as a MAC...
[freeside.git] / FS / FS / cust_main_invoice.pm
index ec01842..31a07bc 100644 (file)
@@ -1,20 +1,21 @@
 package FS::cust_main_invoice;
+use base qw( FS::Record );
 
 use strict;
-use vars qw(@ISA);
-use Exporter;
-use FS::Record qw( qsearchs );
+use FS::Record qw( qsearchs dbh );
 use FS::Conf;
-use FS::cust_main;
 use FS::svc_acct;
 use FS::Msgcat qw(gettext);
 
-@ISA = qw( FS::Record );
-
 =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;
@@ -104,9 +105,6 @@ sub check {
   ;
   return $error if $error;
 
-  return "Unknown customer"
-    unless qsearchs('cust_main',{ 'custnum' => $self->custnum });
-
   $self->SUPER::check;
 }
 
@@ -167,14 +165,23 @@ sub address {
 
 Returns the parent customer object (see L<FS::cust_main>).
 
+=back
+
 =cut
 
-sub cust_main {
-  my $self = shift;
-  qsearchs( 'cust_main', { 'custnum' => $self->custnum } );
-}
+sub _upgrade_schema {
+  my ($class, %opts) = @_;
 
-=back
+  # 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;
+
+  '';
+}
 
 =head1 BUGS