X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fpart_svc.pm;h=3ed153e0cc66797d3e0d1ee1bbe7bb4bd5082d3e;hp=580038be2bfdc6888f587e08ff1769522357ef23;hb=ad7f49821d40ffd099a45acc32ba91e0e211aede;hpb=9c7dee35f91a386fcce14cb6c3e9d23ba3eee8af diff --git a/FS/FS/part_svc.pm b/FS/FS/part_svc.pm index 580038be2..3ed153e0c 100644 --- a/FS/FS/part_svc.pm +++ b/FS/FS/part_svc.pm @@ -133,7 +133,8 @@ sub insert { # fields('part_svc'); foreach my $field ( grep { $_ ne 'svcnum' - && defined( $self->getfield($svcdb.'__'.$_.'_flag') ) + && ( defined( $self->getfield($svcdb.'__'.$_.'_flag') ) + || $self->getfield($svcdb.'__'.$_.'_label') !~ /^\s*$/ ) } (fields($svcdb), @fields) ) { my $part_svc_column = $self->part_svc_column($field); @@ -142,20 +143,28 @@ sub insert { 'columnname' => $field, } ); - my $flag = $self->getfield($svcdb.'__'.$field.'_flag'); - #if ( uc($flag) =~ /^([DFMAX])$/ ) { - if ( uc($flag) =~ /^([A-Z])$/ ) { #part_svc_column will test it - my $parser = FS::part_svc->svc_table_fields($svcdb)->{$field}->{parse} - || sub { shift }; - $part_svc_column->setfield('columnflag', $1); - $part_svc_column->setfield('columnvalue', - &$parser($self->getfield($svcdb.'__'.$field)) - ); + my $flag = $self->getfield($svcdb.'__'.$field.'_flag'); + my $label = $self->getfield($svcdb.'__'.$field.'_label'); + if ( uc($flag) =~ /^([A-Z])$/ || $label !~ /^\s*$/ ) { + + if ( uc($flag) =~ /^([A-Z])$/ ) { + my $parser = FS::part_svc->svc_table_fields($svcdb)->{$field}->{parse} + || sub { shift }; + $part_svc_column->setfield('columnflag', $1); + $part_svc_column->setfield('columnvalue', + &$parser($self->getfield($svcdb.'__'.$field)) + ); + } + + $part_svc_column->setfield('columnlabel', $label) + if $label !~ /^\s*$/; + if ( $previous ) { $error = $part_svc_column->replace($previous); } else { $error = $part_svc_column->insert; } + } else { $error = $previous ? $previous->delete : ''; } @@ -254,24 +263,37 @@ sub replace { my $svcdb = $new->svcdb; foreach my $field ( grep { $_ ne 'svcnum' - && defined( $new->getfield($svcdb.'__'.$_.'_flag') ) + && ( defined( $new->getfield($svcdb.'__'.$_.'_flag') ) + || $new->getfield($svcdb.'__'.$_.'_label') !~ /^\s*$/ ) } (fields($svcdb),@fields) ) { + my $part_svc_column = $new->part_svc_column($field); my $previous = qsearchs('part_svc_column', { 'svcpart' => $new->svcpart, 'columnname' => $field, } ); - my $flag = $new->getfield($svcdb.'__'.$field.'_flag'); - #if ( uc($flag) =~ /^([DFMAX])$/ ) { - if ( uc($flag) =~ /^([A-Z])$/ ) { #part_svc_column will test it - my $parser = FS::part_svc->svc_table_fields($svcdb)->{$field}->{parse} + my $flag = $new->getfield($svcdb.'__'.$field.'_flag'); + my $label = $new->getfield($svcdb.'__'.$field.'_label'); + + if ( uc($flag) =~ /^([A-Z])$/ || $label !~ /^\s*$/ ) { + + if ( uc($flag) =~ /^([A-Z])$/ ) { + $part_svc_column->setfield('columnflag', $1); + my $parser = FS::part_svc->svc_table_fields($svcdb)->{$field}->{parse} || sub { shift }; - $part_svc_column->setfield('columnflag', $1); - $part_svc_column->setfield('columnvalue', - &$parser($new->getfield($svcdb.'__'.$field)) - ); + $part_svc_column->setfield('columnvalue', + &$parser($new->getfield($svcdb.'__'.$field)) + ); + } else { + $part_svc_column->setfield('columnflag', ''); + $part_svc_column->setfield('columnvalue', ''); + } + + $part_svc_column->setfield('columnlabel', $label) + if $label !~ /^\s*$/; + if ( $previous ) { $error = $part_svc_column->replace($previous); } else { @@ -702,7 +724,18 @@ sub process { ref($param->{'svc_acct__usergroup'}) ? join(',', @{$param->{'svc_acct__usergroup'}} ) : $param->{'svc_acct__usergroup'}; + + #unmunge cgp_accessmodes (falze laziness-ish w/edit/process/svc_acct.cgi) + $param->{'svc_acct__cgp_accessmodes'} ||= + join(' ', sort + grep { $_ !~ /^(flag|label)$/ } + map { /^svc_acct__cgp_accessmodes_([\w\/]+)$/ or die "no way"; $1; } + grep $param->{$_}, + grep /^svc_acct__cgp_accessmodes_([\w\/]+)$/, + keys %$param + ); + my $new = new FS::part_svc ( { map { $_ => $param->{$_}; @@ -713,17 +746,16 @@ sub process { push @fields, 'usergroup' if $svcdb eq 'svc_acct'; #kludge map { - if ( $param->{ $svcdb.'__'.$_.'_flag' } =~ /^[MA]$/ ) { - $param->{ $svcdb.'__'.$_ } = - delete( $param->{ $svcdb.'__'.$_.'_classnum' } ); + my $f = $svcdb.'__'.$_; + if ( $param->{ $f.'_flag' } =~ /^[MA]$/ ) { + $param->{ $f } = delete( $param->{ $f.'_classnum' } ); } - if ( $param->{ $svcdb.'__'.$_.'_flag' } =~ /^S$/ ) { - $param->{ $svcdb.'__'.$_} = - ref($param->{ $svcdb.'__'.$_}) - ? join(',', @{$param->{ $svcdb.'__'.$_ }} ) - : $param->{ $svcdb.'__'.$_ }; + if ( $param->{ $f.'_flag' } =~ /^S$/ ) { + $param->{ $f } = ref($param->{ $f }) + ? join(',', @{$param->{ $f }} ) + : $param->{ $f }; } - ( $svcdb.'__'.$_, $svcdb.'__'.$_.'_flag' ); + ( $f, $f.'_flag', $f.'_label' ); } @fields; @@ -738,7 +770,7 @@ sub process { my $error; if ( $param->{'svcpart'} ) { $error = $new->replace( $old, - '1.3-COMPAT', + '1.3-COMPAT', #totally bunk, as jeff noted [ 'usergroup' ], \%exportnums, $job