summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
Diffstat (limited to 'FS')
-rw-r--r--FS/FS.pm3
-rw-r--r--FS/FS/export_svc.pm123
-rw-r--r--FS/FS/part_export.pm89
-rw-r--r--FS/FS/part_svc.pm9
-rw-r--r--FS/MANIFEST2
-rw-r--r--FS/t/export_svc.t5
6 files changed, 198 insertions, 33 deletions
diff --git a/FS/FS.pm b/FS/FS.pm
index 60831ecd5..36fabcb8e 100644
--- a/FS/FS.pm
+++ b/FS/FS.pm
@@ -57,6 +57,9 @@ L<FS::part_svc> - Service definition class
L<FS::part_svc_column> - Column constraint class
+L<FS::export_svc> - Class linking service definitions (see L<FS::part_svc>)
+with exports (see L<FS::part_export>)
+
L<FS::part_export> - External provisioning export class
L<FS::part_export_option> - Export option class
diff --git a/FS/FS/export_svc.pm b/FS/FS/export_svc.pm
new file mode 100644
index 000000000..da9ac698a
--- /dev/null
+++ b/FS/FS/export_svc.pm
@@ -0,0 +1,123 @@
+package FS::export_svc;
+
+use strict;
+use vars qw( @ISA );
+use FS::Record qw( qsearch qsearchs );
+use FS::part_export;
+use FS::part_svc;
+
+@ISA = qw(FS::Record);
+
+=head1 NAME
+
+FS::export_svc - Object methods for export_svc records
+
+=head1 SYNOPSIS
+
+ use FS::export_svc;
+
+ $record = new FS::export_svc \%hash;
+ $record = new FS::export_svc { 'column' => 'value' };
+
+ $error = $record->insert;
+
+ $error = $new_record->replace($old_record);
+
+ $error = $record->delete;
+
+ $error = $record->check;
+
+=head1 DESCRIPTION
+
+An FS::export_svc object links a service definition (see L<FS::part_svc>) to
+an export (see L<FS::part_export>). FS::export_svc inherits from FS::Record.
+The following fields are currently supported:
+
+=over 4
+
+=item exportsvcnum - primary key
+
+=item exportnum - export (see L<FS::part_export>)
+
+=item svcpart - service definition (see L<FS::part_svc>)
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item new HASHREF
+
+Creates a new record. To add the record to the database, see L<"insert">.
+
+Note that this stores the hash reference, not a distinct copy of the hash it
+points to. You can ask the object for a copy with the I<hash> method.
+
+=cut
+
+# the new method can be inherited from FS::Record, if a table method is defined
+
+sub table { 'export_svc'; }
+
+=item insert
+
+Adds this record to the database. If there is an error, returns the error,
+otherwise returns false.
+
+=cut
+
+# the insert method can be inherited from FS::Record
+
+=item delete
+
+Delete this record from the database.
+
+=cut
+
+# the delete method can be inherited from FS::Record
+
+=item replace OLD_RECORD
+
+Replaces the OLD_RECORD with this one in the database. If there is an error,
+returns the error, otherwise returns false.
+
+=cut
+
+# the replace method can be inherited from FS::Record
+
+=item check
+
+Checks all fields to make sure this is a valid record. If there is
+an error, returns the error, otherwise returns false. Called by the insert
+and replace methods.
+
+=cut
+
+# the check method should currently be supplied - FS::Record contains some
+# data checking routines
+
+sub check {
+ my $self = shift;
+
+ $self->ut_numbern('exportsvcnum')
+ || $self->ut_number('exportnum')
+ || $self->ut_foreign_key('exportnum', 'part_export', 'exportnum')
+ || $self->ut_number('svcpart')
+ || $self->ut_foreign_key('svcpart', 'part_svc', 'svcpart')
+ ;
+}
+
+=back
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::part_export>, L<FS::part_svc>, L<FS::Record>, schema.html from the base
+documentation.
+
+=cut
+
+1;
+
diff --git a/FS/FS/part_export.pm b/FS/FS/part_export.pm
index a43c3844e..8af413b1d 100644
--- a/FS/FS/part_export.pm
+++ b/FS/FS/part_export.pm
@@ -5,6 +5,7 @@ use vars qw( @ISA );
use FS::Record qw( qsearch qsearchs dbh );
use FS::part_svc;
use FS::part_export_option;
+use FS::export_svc;
@ISA = qw(FS::Record);
@@ -19,7 +20,7 @@ FS::part_export - Object methods for part_export records
$record = new FS::part_export \%hash;
$record = new FS::part_export { 'column' => 'value' };
- ($new_record, $options) = $template_recored->clone( $svcpart );
+ #($new_record, $options) = $template_recored->clone( $svcpart );
$error = $record->insert( { 'option' => 'value' } );
$error = $record->insert( \%options );
@@ -40,8 +41,6 @@ fields are currently supported:
=item exportnum - primary key
-=item svcpart - Service definition (see L<FS::part_svc>) to which this export applies
-
=item machine - Machine name
=item exporttype - Export type
@@ -67,27 +66,29 @@ points to. You can ask the object for a copy with the I<hash> method.
sub table { 'part_export'; }
-=item clone SVCPART
-
-An alternate constructor. Creates a new export by duplicating an existing
-export. The given svcpart is assigned to the new export.
-
-Returns a list consisting of the new export object and a hashref of options.
-
=cut
-sub clone {
- my $self = shift;
- my $class = ref($self);
- my %hash = $self->hash;
- $hash{'exportnum'} = '';
- $hash{'svcpart'} = shift;
- ( $class->new( \%hash ),
- { map { $_->optionname => $_->optionvalue }
- qsearch('part_export_option', { 'exportnum' => $self->exportnum } )
- }
- );
-}
+#=item clone SVCPART
+#
+#An alternate constructor. Creates a new export by duplicating an existing
+#export. The given svcpart is assigned to the new export.
+#
+#Returns a list consisting of the new export object and a hashref of options.
+#
+#=cut
+#
+#sub clone {
+# my $self = shift;
+# my $class = ref($self);
+# my %hash = $self->hash;
+# $hash{'exportnum'} = '';
+# $hash{'svcpart'} = shift;
+# ( $class->new( \%hash ),
+# { map { $_->optionname => $_->optionvalue }
+# qsearch('part_export_option', { 'exportnum' => $self->exportnum } )
+# }
+# );
+#}
=item insert HASHREF
@@ -173,6 +174,14 @@ sub delete {
}
}
+ foreach my $export_svc ( $self->export_svc ) {
+ my $error = $export_svc->delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
$dbh->commit or die $dbh->errstr if $oldAutoCommit;
'';
@@ -258,13 +267,11 @@ sub check {
my $error =
$self->ut_numbern('exportnum')
|| $self->ut_domain('machine')
- || $self->ut_number('svcpart')
|| $self->ut_alpha('exporttype')
;
return $error if $error;
- return "Unknown svcpart: ". $self->svcpart
- unless qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } );
+ warn $self->machine. "!!!\n";
$self->machine =~ /^([\w\-\.]*)$/
or return "Illegal machine: ". $self->machine;
@@ -273,20 +280,39 @@ sub check {
$self->nodomain =~ /^(Y?)$/ or return "Illegal nodomain: ". $self->nodomain;
$self->nodomain($1);
+ $self->deprecated(1); #BLAH
+
#check exporttype?
''; #no error
}
-=item part_svc
+#=item part_svc
+#
+#Returns the service definition (see L<FS::part_svc>) for this export.
+#
+#=cut
+#
+#sub part_svc {
+# my $self = shift;
+# qsearchs('part_svc', { svcpart => $self->svcpart } );
+#}
+
+sub part_svc {
+ use Carp;
+ croak "FS::part_export::part_svc deprecated";
+ #confess "FS::part_export::part_svc deprecated";
+}
+
+=item export_svc
-Returns the service definition (see L<FS::part_svc>) for this export.
+Returns a list of associated FS::export_svc records.
=cut
-sub part_svc {
+sub export_svc {
my $self = shift;
- qsearchs('part_svc', { svcpart => $self->svcpart } );
+ qsearch('export_svc', { 'exportnum' => $self->exportnum } );
}
=item part_export_option
@@ -413,9 +439,12 @@ Probably.
Hmm... cust_export class (not necessarily a database table...) ... ?
+deprecated column...
+
=head1 SEE ALSO
-L<FS::part_export_option>, L<FS::part_svc>, L<FS::svc_acct>, L<FS::svc_domain>,
+L<FS::part_export_option>, L<FS::export_svc>, L<FS::svc_acct>,
+L<FS::svc_domain>,
L<FS::svc_forward>, L<FS::Record>, schema.html from the base documentation.
=cut
diff --git a/FS/FS/part_svc.pm b/FS/FS/part_svc.pm
index 7ef996f5f..959a3f887 100644
--- a/FS/FS/part_svc.pm
+++ b/FS/FS/part_svc.pm
@@ -5,6 +5,7 @@ use vars qw( @ISA );
use FS::Record qw( qsearch qsearchs fields dbh );
use FS::part_svc_column;
use FS::part_export;
+use FS::export_svc;
@ISA = qw(FS::Record);
@@ -316,15 +317,15 @@ sub all_part_svc_column {
sub part_export {
my $self = shift;
- my %search = ( 'svcpart' => $self->svcpart );
- qsearch('part_export', \%search);
+ map { qsearchs('part_export', { 'exportnum' => $_->exportnum } ) }
+ qsearch('export_svc', { 'svcpart' => $self->svcpart } );
}
=back
=head1 VERSION
-$Id: part_svc.pm,v 1.12 2002-03-26 13:58:29 ivan Exp $
+$Id: part_svc.pm,v 1.13 2002-04-11 22:05:31 ivan Exp $
=head1 BUGS
@@ -333,6 +334,8 @@ Delete is unimplemented.
The list of svc_* tables is hardcoded. When svc_acct_pop is renamed, this
should be fixed.
+all_part_svc_column and part_export methods should be documented
+
=head1 SEE ALSO
L<FS::Record>, L<FS::part_svc_column>, L<FS::part_pkg>, L<FS::pkg_svc>,
diff --git a/FS/MANIFEST b/FS/MANIFEST
index dd9eb0906..440c75565 100644
--- a/FS/MANIFEST
+++ b/FS/MANIFEST
@@ -45,6 +45,7 @@ FS/cust_refund.pm
FS/cust_credit_refund.pm
FS/cust_svc.pm
FS/part_bill_event.pm
+FS/export_svc.pm
FS/part_export.pm
FS/part_export_option.pm
FS/part_export/infostreet.pm
@@ -97,6 +98,7 @@ t/cust_svc.t
t/domain_record.t
t/nas.t
t/part_bill_event.t
+t/export_svc.t
t/part_export.t
t/part_export_option.t
t/part_export-infostreet.t
diff --git a/FS/t/export_svc.t b/FS/t/export_svc.t
new file mode 100644
index 000000000..773c5dea7
--- /dev/null
+++ b/FS/t/export_svc.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::export_svc;
+$loaded=1;
+print "ok 1\n";