summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2015-10-27 01:15:29 -0500
committerJonathan Prykop <jonathan@freeside.biz>2015-10-27 01:15:29 -0500
commitc594747d4f8a1467987b9b241930ea3cbf0d899c (patch)
treeb9b24bf2b365561c416c896f3f97fb01b5090248
parent27f72f8225edc0d903ce534613ad037b7baf3bcf (diff)
RT#38765: Foreign key error during selfservice signup
-rw-r--r--FS/FS/cust_main/Billing_Realtime.pm5
-rw-r--r--FS/FS/cust_pay_pending.pm2
-rw-r--r--FS/FS/queue.pm20
3 files changed, 25 insertions, 2 deletions
diff --git a/FS/FS/cust_main/Billing_Realtime.pm b/FS/FS/cust_main/Billing_Realtime.pm
index c2ce680..7a20407 100644
--- a/FS/FS/cust_main/Billing_Realtime.pm
+++ b/FS/FS/cust_main/Billing_Realtime.pm
@@ -955,6 +955,8 @@ sub _realtime_bop_result {
return $e;
}
+ $cust_pay_pending->set('jobnum','');
+
}
if ( $options{'paynum_ref'} ) {
@@ -1063,8 +1065,9 @@ sub _realtime_bop_result {
if ( $placeholder ) {
my $error = $placeholder->depended_delete;
$error ||= $placeholder->delete;
+ $cust_pay_pending->set('jobnum','');
warn "error removing provisioning jobs after declined paypendingnum ".
- $cust_pay_pending->paypendingnum. ": $error\n";
+ $cust_pay_pending->paypendingnum. ": $error\n" if $error;
} else {
my $e = "error finding job $jobnum for declined paypendingnum ".
$cust_pay_pending->paypendingnum. "\n";
diff --git a/FS/FS/cust_pay_pending.pm b/FS/FS/cust_pay_pending.pm
index 63274b1..1a54203 100644
--- a/FS/FS/cust_pay_pending.pm
+++ b/FS/FS/cust_pay_pending.pm
@@ -393,6 +393,8 @@ sub approve {
warn $e;
return $e;
}
+
+ $self->set('jobnum','');
}
if ( $opt{'paynum_ref'} ) {
diff --git a/FS/FS/queue.pm b/FS/FS/queue.pm
index 67d124d..a0654a1 100644
--- a/FS/FS/queue.pm
+++ b/FS/FS/queue.pm
@@ -206,9 +206,27 @@ sub delete {
}
}
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ foreach my $cust_pay_pending (qsearch('cust_pay_pending',{ jobnum => $self->jobnum })) {
+ $cust_pay_pending->set('jobnum','');
+ my $error = $cust_pay_pending->replace();
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
my $error = $self->SUPER::delete;
- return $error if $error;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
unlink $reportname if $reportname;
'';