From ea3c94b9862524f0d17931e77bf3955bac5ad83f Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 1 Mar 2010 22:00:25 +0000 Subject: [PATCH] fix up editing services w/manual select from inventory, RT#7010 --- FS/FS/svc_Common.pm | 21 ++++++++++++++++++++- httemplate/elements/select-table.html | 2 +- 2 files changed, 21 insertions(+), 2 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; diff --git a/httemplate/elements/select-table.html b/httemplate/elements/select-table.html index 772f0c653..741e51e49 100644 --- a/httemplate/elements/select-table.html +++ b/httemplate/elements/select-table.html @@ -94,7 +94,7 @@ Example: % { % my $recvalue = $record->$key();