From 2d338b5a6e7594c0bd95e9490c3d21e7052b45c7 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 1 Mar 2010 19:38:31 +0000 Subject: [PATCH] enable manual selection from inventory dropdowns for svc_broadband, svc_external & svc_phone, RT#7010 --- FS/FS/svc_Common.pm | 72 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index ee270caff..8cbcc91bb 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -685,7 +685,9 @@ sub pbx_select_hash { =item set_auto_inventory -Sets any fields which auto-populate from inventory (see L). +Sets any fields which auto-populate from inventory (see L), and +also check any manually populated inventory fields. + If there is an error, returns the error, otherwise returns false. =cut @@ -715,39 +717,51 @@ sub set_auto_inventory { #set default/fixed/whatever fields from part_svc my $table = $self->table; foreach my $field ( grep { $_ ne 'svcnum' } $self->fields ) { + my $part_svc_column = $part_svc->part_svc_column($field); - if ( $part_svc_column->columnflag eq 'A' && $self->$field() eq '' ) { - - my $classnum = $part_svc_column->columnvalue; - my $inventory_item = qsearchs({ - 'table' => 'inventory_item', - 'hashref' => { 'classnum' => $classnum, - 'svcnum' => '', - }, - 'extra_sql' => 'LIMIT 1 FOR UPDATE', - }); - - unless ( $inventory_item ) { - $dbh->rollback if $oldAutoCommit; - my $inventory_class = - qsearchs('inventory_class', { 'classnum' => $classnum } ); - return "Can't find inventory_class.classnum $classnum" - unless $inventory_class; - return "Out of ". $inventory_class->classname. "s\n"; #Lingua:: BS - #for pluralizing - } + my $columnflag = $part_svc_column->columnflag; + next unless $columnflag =~ /^[AM]$/; - $inventory_item->svcnum( $self->svcnum ); - my $ierror = $inventory_item->replace(); - if ( $ierror ) { - $dbh->rollback if $oldAutoCommit; - return "Error provisioning inventory: $ierror"; - - } + next if $columnflag eq 'A' && $self->$field() ne ''; + + my $classnum = $part_svc_column->columnvalue; + my %hash = ( 'classnum' => $classnum ); + + if ( $columnflag eq 'A' && $self->$field() eq '' ) { + $hash{'svcnum'} = ''; + } elsif ( $columnflag eq 'M' ) { + return "Select inventory item for $field" unless $self->getfield($field); + $hash{'item'} = $self->getfield($field); + } + + my $inventory_item = qsearchs({ + 'table' => 'inventory_item', + 'hashref' => \%hash, + 'extra_sql' => 'LIMIT 1 FOR UPDATE', + }); + + unless ( $inventory_item ) { + $dbh->rollback if $oldAutoCommit; + my $inventory_class = + qsearchs('inventory_class', { 'classnum' => $classnum } ); + return "Can't find inventory_class.classnum $classnum" + unless $inventory_class; + return "Out of ". $inventory_class->classname. "s\n"; #Lingua:: BS + #for pluralizing + } + + next if $columnflag eq 'M' && $inventory_item->svcnum == $self->svcnum; - $self->setfield( $field, $inventory_item->item ); + $self->setfield( $field, $inventory_item->item ); + #if $columnflag eq 'A' && $self->$field() eq ''; + $inventory_item->svcnum( $self->svcnum ); + my $ierror = $inventory_item->replace(); + if ( $ierror ) { + $dbh->rollback if $oldAutoCommit; + return "Error provisioning inventory: $ierror"; } + } $dbh->commit or die $dbh->errstr if $oldAutoCommit; -- 2.11.0