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 );
use FS::cust_svc;
use FS::part_svc_class;
-@ISA = qw(FS::Record);
-
$DEBUG = 0;
=head1 NAME
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
sub insert {
my $self = shift;
my @fields = ();
- my @exportnums = ();
@fields = @{shift(@_)} if @_;
- if ( @_ ) {
- my $exportnums = shift;
- @exportnums = grep $exportnums->{$_}, keys %$exportnums;
- }
+ my $exportnums = shift || {};
my $job = '';
$job = shift if @_;
}
# add export_svc records
+ my @exportnums = grep $exportnums->{$_}, keys %$exportnums;
my $slice = 100/scalar(@exportnums) if @exportnums;
my $done = 0;
foreach my $exportnum ( @exportnums ) {
my $export_svc = new FS::export_svc ( {
'exportnum' => $exportnum,
'svcpart' => $self->svcpart,
+ 'role' => $exportnums->{$exportnum},
} );
$error = $export_svc->insert($job, $slice*$done++, $slice);
if ( $error ) {
# maintain export_svc records
- if ( $exportnums ) {
+ if ( $exportnums ) { # hash of exportnum => role
#false laziness w/ edit/process/agent_type.cgi
+ #and, more importantly, with m2m_Common
my @new_export_svc = ();
foreach my $part_export ( qsearch('part_export', {}) ) {
my $exportnum = $part_export->exportnum;
};
my $export_svc = qsearchs('export_svc', $hashref);
- if ( $export_svc && ! $exportnums->{$exportnum} ) {
- $error = $export_svc->delete;
- if ( $error ) {
- $dbh->rollback if $oldAutoCommit;
- return $error;
+ if ( $export_svc ) {
+ my $old_role = $export_svc->role || 1; # 1 = null in the db
+ if ( ! $exportnums->{$exportnum}
+ or $old_role ne $exportnums->{$exportnum} ) {
+
+ $error = $export_svc->delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ undef $export_svc; # on a role change, force it to be reinserted
+
}
- } elsif ( ! $export_svc && $exportnums->{$exportnum} ) {
+ } # if $export_svc
+ if ( ! $export_svc && $exportnums->{$exportnum} ) {
+ # also applies if it's been undef'd because of role change
+ $hashref->{role} = $exportnums->{$exportnum};
push @new_export_svc, new FS::export_svc ( $hashref );
}
$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_enum('restrict_edit_password', [ '', 'Y' ] )
+ || $self->ut_flag('restrict_edit_password')
+ || $self->ut_flag('has_router')
;
return $error if $error;
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
=item select_label - Used with select_table, this is the field name of labels
+=item select_allow_empty - Used with select_table, adds an empty option
+
=back
=cut
=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'} })
my %exportnums =
map { $_->exportnum => ( $param->{'exportnum'.$_->exportnum} || '') }
qsearch('part_export', {} );
-
+ foreach my $exportnum (%exportnums) {
+ my $role = $param->{'exportnum'.$exportnum.'_role'};
+ # role is undef if the export has no role selector
+ if ( $exportnums{$exportnum} && $role ) {
+ $exportnums{$exportnum} = $role;
+ }
+ }
my $error;
if ( $param->{'svcpart'} ) {
$error = $new->replace( $old,
=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