summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2012-07-10 14:55:18 -0700
committerMark Wells <mark@freeside.biz>2012-07-10 14:55:18 -0700
commiteea8f640d0008d8b7a2987cc530cbec157cc652f (patch)
treed57c0d162e5d8c258c8e892389ba3b69d65840f7
parent35441752ed24a30b2ccba25db4322d9ddbc88f2d (diff)
fix uncancellation of services, from #17518
-rw-r--r--FS/FS/cust_pkg.pm32
1 files changed, 18 insertions, 14 deletions
diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm
index 627a7fc3e..6c7895809 100644
--- a/FS/FS/cust_pkg.pm
+++ b/FS/FS/cust_pkg.pm
@@ -970,21 +970,25 @@ sub uncancel {
}
my $svc_error = $svc_x->insert;
- if ( $svc_error && $options{svc_fatal} ) {
- $dbh->rollback if $oldAutoCommit;
- return $svc_error;
- } else {
- my $cust_svc = qsearchs('cust_svc', { 'svcnum' => $svc_x->svcnum });
- if ( $cust_svc ) {
- my $cs_error = $cust_svc->delete;
- if ( $cs_error ) {
- $dbh->rollback if $oldAutoCommit;
- return $cs_error;
+ if ( $svc_error ) {
+ if ( $options{svc_fatal} ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $svc_error;
+ } else {
+ push @svc_errors, $svc_error;
+ # is this necessary? svc_Common::insert already deletes the
+ # cust_svc if inserting svc_x fails.
+ my $cust_svc = qsearchs('cust_svc', { 'svcnum' => $svc_x->svcnum });
+ if ( $cust_svc ) {
+ my $cs_error = $cust_svc->delete;
+ if ( $cs_error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $cs_error;
+ }
}
- }
- }
- push @svc_errors, $svc_error if $svc_error;
- }
+ } # svc_fatal
+ } # svc_error
+ } #foreach $h_cust_svc
#these are pretty rare, but should handle them
# - dsl_device (mac addresses)