diff options
-rw-r--r-- | FS/FS/svc_Common.pm | 21 | ||||
-rw-r--r-- | 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(); <OPTION VALUE="<% $recvalue %>" - <% $opt{'all_selected'} || ref($value) && $value->{$recvalue} || $value == $recvalue + <% $opt{'all_selected'} || ref($value) && $value->{$recvalue} || $value && $value eq $recvalue # not == because of value_col ? ' SELECTED' : '' %> % foreach my $att ( @{ $opt{'extra_option_attributes'} } ) { |