summaryrefslogtreecommitdiff
path: root/FS/FS/svc_acct.pm
diff options
context:
space:
mode:
authorivan <ivan>2001-08-20 09:41:52 +0000
committerivan <ivan>2001-08-20 09:41:52 +0000
commitc6708c86785662d8f0c12e23936bf7b1916f411c (patch)
tree56019cdd07ea8bfb1711af7bcab05b64dad0a035 /FS/FS/svc_acct.pm
parent0fd508f695b4f19a447eba7663f59dc7fb4033d3 (diff)
dtrt when deleting accouts wrt forwards, catchalls & other references to
svc_acct records depreciate svc_acct_sm further; move qmail catchall handling to svc_domain
Diffstat (limited to 'FS/FS/svc_acct.pm')
-rw-r--r--FS/FS/svc_acct.pm57
1 files changed, 52 insertions, 5 deletions
diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm
index 42eb7d9..6551d94 100644
--- a/FS/FS/svc_acct.pm
+++ b/FS/FS/svc_acct.pm
@@ -13,6 +13,8 @@ use Net::SSH qw(ssh);
use FS::part_svc;
use FS::svc_acct_pop;
use FS::svc_acct_sm;
+use FS::cust_main_invoice;
+use FS::svc_domain;
@ISA = qw( FS::svc_Common );
@@ -232,11 +234,21 @@ $username and $dir.
sub delete {
my $self = shift;
- my $error;
- return "Can't delete an account which has mail aliases pointed to it!"
+ return "Can't delete an account which has (svc_acct_sm) mail aliases!"
if $self->uid && qsearch( 'svc_acct_sm', { 'domuid' => $self->uid } );
+ return "Can't delete an account which is a (svc_forward) source!"
+ if qsearch( 'svc_forward', { 'srcsvc' => $self->svcnum } );
+
+ return "Can't delete an account which is a (svc_forward) destination!"
+ if qsearch( 'svc_forward', { 'dstsvc' => $self->svcnum } );
+
+ return "Can't delete an account with (svc_www) web service!"
+ if qsearch( 'svc_www', { 'usersvc' => $self->usersvc } );
+
+ # what about records in session ?
+
local $SIG{HUP} = 'IGNORE';
local $SIG{INT} = 'IGNORE';
local $SIG{QUIT} = 'IGNORE';
@@ -244,8 +256,43 @@ sub delete {
local $SIG{TSTP} = 'IGNORE';
local $SIG{PIPE} = 'IGNORE';
- $error = $self->SUPER::delete;
- return $error if $error;
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ foreach my $cust_main_invoice (
+ qsearch( 'cust_main_invoice', { 'dest' => $self->svcnum } )
+ ) {
+ my %hash = $cust_main_invoice->hash;
+ $hash{'dest'} = $self->email;
+ my $new = new FS::cust_main_invoice \%hash;
+ my $error = $new->replace($cust_main_invoice);
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
+ foreach my $svc_domain (
+ qsearch( 'svc_domain', { 'catchall' => $self->svcnum } )
+ ) {
+ my %hash = new FS::svc_domain->hash;
+ $hash{'catchall'} = '';
+ my $new = new FS::svc_domain \%hash;
+ my $error = $new->replace($svc_domain);
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
+ my $error = $self->SUPER::delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
my( $username, $dir ) = (
$self->username,
@@ -574,7 +621,7 @@ sub email {
=head1 VERSION
-$Id: svc_acct.pm,v 1.24 2001-08-19 15:53:34 jeff Exp $
+$Id: svc_acct.pm,v 1.25 2001-08-20 09:41:52 ivan Exp $
=head1 BUGS