backup the schema for tables we don't need the data from. RT#85959
[freeside.git] / FS / FS / agent_type.pm
index 5ba5ef2..e0f7495 100644 (file)
@@ -2,11 +2,12 @@ package FS::agent_type;
 
 use strict;
 use vars qw( @ISA );
-use FS::Record qw( qsearch );
+use FS::Record qw( qsearch dbh );
+use FS::m2m_Common;
 use FS::agent;
 use FS::type_pkgs;
 
-@ISA = qw( FS::Record );
+@ISA = qw( FS::m2m_Common FS::Record );
 
 =head1 NAME
 
@@ -44,9 +45,17 @@ FS::Record.  The following fields are currently supported:
 
 =over 4
 
-=item typenum - primary key (assigned automatically for new agent types)
+=item typenum
 
-=item atype - Text name of this agent type
+primary key (assigned automatically for new agent types)
+
+=item atype
+
+Text name of this agent type
+
+=item disabled
+
+Disabled flag, empty or 'Y'
 
 =back
 
@@ -102,8 +111,9 @@ sub check {
   my $self = shift;
 
   $self->ut_numbern('typenum')
-  or $self->ut_text('atype')
-  or $self->SUPER::check;
+    || $self->ut_text('atype')
+    || $self->ut_enum('disabled', [ '', 'Y' ] )
+    || $self->SUPER::check;
 
 }
 
@@ -118,9 +128,7 @@ L<FS::part_pkg>.
 sub pkgpart_hashref {
   my $self = shift;
   my %pkgpart;
-  #$pkgpart{$_}++ foreach $self->pkgpart;
-  # not compatible w/5.004_04 (fixed in 5.004_05)
-  foreach ( $self->pkgpart ) { $pkgpart{$_}++; }
+  $pkgpart{$_}++ foreach $self->pkgpart;
   \%pkgpart;
 }
 
@@ -135,6 +143,27 @@ sub type_pkgs {
   qsearch('type_pkgs', { 'typenum' => $self->typenum } );
 }
 
+=item type_pkgs_enabled
+
+Returns all FS::type_pkg objects (see L<FS::type_pkgs>) that link to enabled
+package definitions (see L<FS::part_pkg>).
+
+An additional strange feature is that the returned type_pkg objects also have
+all fields of the associated part_pkg object.
+
+=cut
+
+sub type_pkgs_enabled {
+  my $self = shift;
+  qsearch({
+    'table'     => 'type_pkgs',
+    'addl_from' => 'JOIN part_pkg USING ( pkgpart )',
+    'hashref'   => { 'typenum' => $self->typenum },
+    'extra_sql' => " AND ( disabled = '' OR disabled IS NULL )".
+                   " ORDER BY pkg",
+  });
+}
+
 =item pkgpart
 
 Returns the pkgpart of all package definitions (see L<FS::part_pkg>) for this
@@ -144,16 +173,25 @@ agent type.
 
 sub pkgpart {
   my $self = shift;
-  map $_->pkgpart, $self->type_pkgs;
+
+  #map $_->pkgpart, $self->type_pkgs;
+
+  my $sql = 'SELECT pkgpart FROM type_pkgs WHERE typenum = ?';
+  my $sth = dbh->prepare($sql)    or die  dbh->errstr;
+  $sth->execute( $self->typenum ) or die $sth->errstr;
+  map $_->[0], @{ $sth->fetchall_arrayref };
 }
 
 =back
 
-=head1 VERSION
+=head1 BUGS
 
-$Id: agent_type.pm,v 1.2 2003-08-05 00:20:40 khoff Exp $
+type_pkgs_enabled should order itself by something (pkg?)
 
-=head1 BUGS
+type_pkgs_enabled should populate something that caches for the part_pkg method
+rather than add fields to this object, right?  In fact we need a "poop" object
+framework that does that automatically for any joined search at some point....
+right?
 
 =head1 SEE ALSO