summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2012-05-08 20:34:47 -0700
committerIvan Kohler <ivan@freeside.biz>2012-05-08 20:34:47 -0700
commite4e9e2f1fe6f48cf22486962c6bf84f50d201358 (patch)
tree9cf0119aee57e7b8568ac2e085c0caa085032562 /FS
parenta68564e6856a7ea63763eeaf7962a5cb2df649af (diff)
fix service definition modifiers (inventory, hardware) w/svc_broadband, RT#17659
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/Schema.pm11
-rw-r--r--FS/FS/inventory_item.pm1
-rw-r--r--FS/FS/svc_Common.pm36
3 files changed, 29 insertions, 19 deletions
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index 84ab528..8b9d10a 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -3171,11 +3171,12 @@ sub tables_hashref {
'inventory_item' => {
'columns' => [
- 'itemnum', 'serial', '', '', '', '',
- 'classnum', 'int', '', '', '', '',
- 'agentnum', 'int', 'NULL', '', '', '',
- 'item', 'varchar', '', $char_d, '', '',
- 'svcnum', 'int', 'NULL', '', '', '',
+ 'itemnum', 'serial', '', '', '', '',
+ 'classnum', 'int', '', '', '', '',
+ 'agentnum', 'int', 'NULL', '', '', '',
+ 'item', 'varchar', '', $char_d, '', '',
+ 'svcnum', 'int', 'NULL', '', '', '',
+ 'svc_field', 'varchar', 'NULL', $char_d, '', '',
],
'primary_key' => 'itemnum',
'unique' => [ [ 'classnum', 'item' ] ],
diff --git a/FS/FS/inventory_item.pm b/FS/FS/inventory_item.pm
index 39a0dff..477c934 100644
--- a/FS/FS/inventory_item.pm
+++ b/FS/FS/inventory_item.pm
@@ -111,6 +111,7 @@ sub check {
'Edit global inventory'] )
|| $self->ut_text('item')
|| $self->ut_foreign_keyn('svcnum', 'cust_svc', 'svcnum' )
+ || $self->ut_alphan('svc_field')
;
return $error if $error;
diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm
index ff00ce0..19f5819 100644
--- a/FS/FS/svc_Common.pm
+++ b/FS/FS/svc_Common.pm
@@ -5,6 +5,7 @@ use vars qw( @ISA $noexport_hack $DEBUG $me
$overlimit_missing_cust_svc_nonfatal_kludge );
use Carp qw( cluck carp croak confess ); #specify cluck have to specify them all
use Scalar::Util qw( blessed );
+use Lingua::EN::Inflect qw( PL_N );
use FS::Conf;
use FS::Record qw( qsearch qsearchs fields dbh );
use FS::cust_main_Mixin;
@@ -844,8 +845,7 @@ sub set_auto_inventory {
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
+ return "Out of ". PL_N($inventory_class->classname);
}
next if $columnflag eq 'M' && $inventory_item->svcnum == $self->svcnum;
@@ -853,31 +853,38 @@ sub set_auto_inventory {
$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";
- }
-
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(),
- },
+ 'table' => 'inventory_item',
+ 'hashref' => { 'classnum' => $classnum,
+ 'svcnum' => $old->svcnum,
+ },
+ 'extra_sql' => ' AND '.
+ '( ( svc_field IS NOT NULL AND svc_field = '.$dbh->quote($field).' )'.
+ ' OR ( svc_field IS NULL AND item = '. dbh->quote($old->$field).' )'.
+ ')',
});
if ( $old_inv ) {
$old_inv->svcnum('');
+ $old_inv->svc_field('');
my $oerror = $old_inv->replace;
if ( $oerror ) {
$dbh->rollback if $oldAutoCommit;
return "Error unprovisioning inventory: $oerror";
}
+ } else {
+ warn "old inventory_item not found for $field ". $self->$field;
}
}
+ $inventory_item->svcnum( $self->svcnum );
+ $inventory_item->svc_field( $field );
+ my $ierror = $inventory_item->replace();
+ if ( $ierror ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "Error provisioning inventory: $ierror";
+ }
+
}
$dbh->commit or die $dbh->errstr if $oldAutoCommit;
@@ -906,6 +913,7 @@ sub return_inventory {
foreach my $inventory_item ( $self->inventory_item ) {
$inventory_item->svcnum('');
+ $inventory_item->svc_field('');
my $error = $inventory_item->replace();
if ( $error ) {
$dbh->rollback if $oldAutoCommit;