diff options
author | ivan <ivan> | 2010-03-01 22:00:34 +0000 |
---|---|---|
committer | ivan <ivan> | 2010-03-01 22:00:34 +0000 |
commit | 41c2a84b999e4daa853e11dd344471120bc8edaf (patch) | |
tree | 62e6ae3c894da685dce8b719f88204f24c643519 /FS | |
parent | 1b0536a4ebdc1abf6b171d15f821fe2997b7e021 (diff) |
fix up editing services w/manual select from inventory, RT#7010
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/svc_Common.pm | 21 |
1 files changed, 20 insertions, 1 deletions
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; |