=item preserve - Preserve after cancellation, empty or 'Y'
+=item selfservice_access - Access allowed to the service via self-service:
+empty for full access, "readonly" for read-only, "hidden" to hide it entirely
+
+=item restrict_edit_password - Require the "Provision customer service" access
+right to change the password field, rather than just "Edit password". Only
+relevant to svc_acct for now.
+
+=item has_router - Allow the service to have an L<FS::router> connected
+through it. Probably only relevant to svc_broadband, svc_acct, and svc_dsl
+for now.
+
=back
=head1 METHODS
$self->ut_numbern('svcpart')
|| $self->ut_text('svc')
|| $self->ut_alpha('svcdb')
- || $self->ut_enum('disabled', [ '', 'Y' ] )
- || $self->ut_enum('preserve', [ '', 'Y' ] )
+ || $self->ut_flag('disabled')
+ || $self->ut_flag('preserve')
|| $self->ut_enum('selfservice_access', [ '', 'hidden', 'readonly' ] )
|| $self->ut_foreign_keyn('classnum', 'part_svc_class', 'classnum' )
- ;
+ || $self->ut_flag('restrict_edit_password')
+ || $self->ut_flag('has_router')
+;
return $error if $error;
my @fields = eval { fields( $self->svcdb ) }; #might die
my $self = shift;
my %search;
$search{'exporttype'} = shift if @_;
- sort { $a->weight <=> $b->weight }
- map { qsearchs('part_export', { 'exportnum' => $_->exportnum, %search } ) }
- qsearch('export_svc', { 'svcpart' => $self->svcpart } );
+ map { $_ } #behavior of sort undefined in scalar context
+ sort { $a->weight <=> $b->weight }
+ map { qsearchs('part_export', { 'exportnum'=>$_->exportnum, %search } ) }
+ qsearch('export_svc', { 'svcpart'=>$self->svcpart } );
}
=item part_export_usage
if ( $flag =~ /^[MAH]$/ ) {
$param->{ $f } = delete( $param->{ $f.'_classnum' } );
}
- if ( $flag =~ /^S$/
- or $_ eq 'usergroup' ) {
- $param->{ $f } = ref($param->{ $f })
- ? join(',', @{$param->{ $f }} )
- : $param->{ $f };
+ if ( ( $flag =~ /^[MAHS]$/ or $_ eq 'usergroup' )
+ and ref($param->{ $f }) ) {
+ $param->{ $f } = join(',', @{ $param->{ $f } });
}
( $f, $f.'_flag', $f.'_label' );
}