X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_Common.pm;h=fd2745dacf0108b93bf0c1b6850a48d7f1042795;hb=0e0512c9ede1e4042887e764f1909cadf12bbfb4;hp=8cbcc91bb17ad22c27835117a46bd3181f78cad9;hpb=2b11588f2aa418719decb2ef501b1762cede4385;p=freeside.git diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index 8cbcc91bb..fd2745dac 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -401,7 +401,7 @@ sub replace { local $FS::UID::AutoCommit = 0; my $dbh = dbh; - my $error = $new->set_auto_inventory; + my $error = $new->set_auto_inventory($old); if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; @@ -694,6 +694,7 @@ If there is an error, returns the error, otherwise returns false. sub set_auto_inventory { my $self = shift; + my $old = @_ ? shift : ''; my $error = $self->ut_numbern('svcnum') @@ -762,6 +763,24 @@ sub set_auto_inventory { return "Error provisioning inventory: $ierror"; } + if ( $old && $old->$field() && $old->$field() ne $self->$field() ) { + my $old_inv = qsearchs({ + 'table' => 'inventory_item', + 'hashref' => { 'classnum' => $classnum, + 'svcnum' => $old->svcnum, + 'item' => $old->$field(), + }, + }); + if ( $old_inv ) { + $old_inv->svcnum(''); + my $oerror = $old_inv->replace; + if ( $oerror ) { + $dbh->rollback if $oldAutoCommit; + return "Error unprovisioning inventory: $oerror"; + } + } + } + } $dbh->commit or die $dbh->errstr if $oldAutoCommit;