tax engine refactoring for Avalara and Billsoft tax vendors, #25718
[freeside.git] / FS / FS / part_svc.pm
index 7f22411..9ed56eb 100644 (file)
@@ -1,7 +1,8 @@
 package FS::part_svc;
+use base qw(FS::Record);
 
 use strict;
-use vars qw( @ISA $DEBUG );
+use vars qw( $DEBUG );
 use Tie::IxHash;
 use FS::Record qw( qsearch qsearchs fields dbh );
 use FS::Schema qw( dbdef );
@@ -11,8 +12,6 @@ use FS::export_svc;
 use FS::cust_svc;
 use FS::part_svc_class;
 
-@ISA = qw(FS::Record);
-
 $DEBUG = 0;
 
 =head1 NAME
@@ -58,6 +57,17 @@ 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.
+
+=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
@@ -387,11 +397,13 @@ sub check {
     $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
@@ -441,9 +453,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
@@ -467,7 +480,7 @@ are capable of returing available DID (phone number) information.
 
 sub part_export_did {
   my $self = shift;
-  grep $_->can('get_dids'), $self->part_export;
+  grep $_->can_get_dids, $self->part_export;
 }
 
 =item part_export_dsl_pull
@@ -709,13 +722,10 @@ Job-queue processor for web interface adds/edits
 
 =cut
 
-use Storable qw(thaw);
 use Data::Dumper;
-use MIME::Base64;
 sub process {
   my $job = shift;
-
-  my $param = thaw(decode_base64(shift));
+  my $param = shift;
   warn Dumper($param) if $DEBUG;
 
   my $old = qsearchs('part_svc', { 'svcpart' => $param->{'svcpart'} }) 
@@ -748,11 +758,9 @@ sub process {
                     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' );
                   }
@@ -791,13 +799,10 @@ Job-queue processor for web interface bulk customer service changes
 
 =cut
 
-use Storable qw(thaw);
 use Data::Dumper;
-use MIME::Base64;
 sub process_bulk_cust_svc {
   my $job = shift;
-
-  my $param = thaw(decode_base64(shift));
+  my $param = shift;
   warn Dumper($param) if $DEBUG;
 
   local($FS::svc_Common::noexport_hack) = 1