fix upgrades when cust_pkg.change_to_pkgnum points to a package that was removed...
authorIvan Kohler <ivan@freeside.biz>
Fri, 24 Feb 2017 18:22:27 +0000 (10:22 -0800)
committerIvan Kohler <ivan@freeside.biz>
Fri, 24 Feb 2017 18:22:27 +0000 (10:22 -0800)
FS/FS/Upgrade.pm
FS/FS/cust_pkg.pm

index a59dc1f..628b6f2 100644 (file)
@@ -567,6 +567,8 @@ sub upgrade_schema_data {
     #remove records referencing removed things with their FKs
     'pkg_referral' => [],
     'cust_bill_pkg_discount' => [],
+    #update records referencing removed things with their FKs
+    'cust_pkg' => [],
   ;
 
   \%hash;
index 1d0cc4f..039943e 100644 (file)
@@ -5560,6 +5560,23 @@ sub forward_emails {
 }
 
 # Used by FS::Upgrade to migrate to a new database.
+sub _upgrade_schema {  # class method
+  my ($class, %opts) = @_;
+
+  my $sql = '
+    UPDATE cust_pkg SET change_to_pkgnum = NULL
+      WHERE change_to_pkgnum IS NOT NULL
+        AND NOT EXISTS ( SELECT 1 FROM cust_pkg AS ctcp
+                           WHERE ctcp.pkgnum = cust_pkg.change_to_pkgnum
+                       )
+  ';
+
+  my $sth = dbh->prepare($sql) or die dbh->errstr;
+  $sth->execute or die $sth->errstr;
+  '';
+}
+
+# Used by FS::Upgrade to migrate to a new database.
 sub _upgrade_data {  # class method
   my ($class, %opts) = @_;
   $class->_upgrade_otaker(%opts);