mask echeck acct# on invoices, RT#26859
[freeside.git] / FS / FS / part_svc.pm
index 1bb66ed..e1ffa36 100644 (file)
@@ -55,6 +55,13 @@ L<FS::svc_domain>, and L<FS::svc_forward>, among others.
 
 =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.
+
 =back
 
 =head1 METHODS
@@ -386,6 +393,8 @@ sub check {
     || $self->ut_alpha('svcdb')
     || $self->ut_enum('disabled', [ '', 'Y' ] )
     || $self->ut_enum('preserve', [ '', 'Y' ] )
+    || $self->ut_enum('selfservice_access', [ '', 'hidden', 'readonly' ] )
+    || $self->ut_enum('restrict_edit_password', [ '', 'Y' ] )
   ;
   return $error if $error;
 
@@ -436,9 +445,10 @@ sub part_export {
   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
@@ -885,7 +895,8 @@ sub _upgrade_data {  #class method
                             'description' => $groupname,
                             };
             $error = $g->insert;
-            die $error if $error;
+            die "Error inserting new radius_group for service definition group \"$groupname\": $error"
+              if $error;
         }
         push @groupnums, $g->groupnum;
     }
@@ -894,6 +905,21 @@ sub _upgrade_data {  #class method
     die $error if $error;
   }
 
+  my @badlabels = qsearch({
+    'table' => 'part_svc_column',
+    'hashref' => {},
+    'extra_sql' => 'WHERE columnlabel IN ('.
+      "'Descriptive label for this particular device.',".
+      "'IP address.  Leave blank for automatic assignment.',".
+      "'Maximum upload speed for this service in Kbps.  0 denotes unlimited.',".
+      "'Maximum download speed for this service in Kbps.  0 denotes unlimited.')"
+  });
+  foreach my $col ( @badlabels ) {
+    $col->columnlabel('');
+    my $error = $col->replace;
+    die $error if $error;
+  }
+
 }
 
 =head1 BUGS