fix 'Can't call method "setup" on an undefined value' error when using into rates...
[freeside.git] / FS / FS / acct_snarf.pm
index 7c51d69..9816de9 100644 (file)
@@ -2,7 +2,9 @@ package FS::acct_snarf;
 
 use strict;
 use vars qw( @ISA );
-use FS::Record;
+use Tie::IxHash;
+use FS::Record qw( qsearchs );
+use FS::cust_svc;
 
 @ISA = qw( FS::Record );
 
@@ -35,6 +37,8 @@ fields are currently supported:
 
 =item snarfnum - primary key
 
+=item snarfname - Label
+
 =item svcnum - Account (see L<FS::svc_acct>)
 
 =item machine - external machine to download mail from
@@ -88,11 +92,42 @@ returns the error, otherwise returns false.
 
 # the replace method can be inherited from FS::Record
 
+=item cust_svc
+
+=cut
+
+sub cust_svc {
+  my $self = shift;
+  qsearchs('cust_svc', { 'svcnum' => $self->svcnum } );
+}
+
+
+=item svc_export
+
+Calls the replace export for any communigate exports attached to this rule's
+service.
+
+=cut
+
+sub svc_export {
+  my $self = shift;
+
+  my $cust_svc = $self->cust_svc;
+  my $svc_x = $cust_svc->svc_x;
+  
+  #_singledomain too
+  my @exports = $cust_svc->part_svc->part_export('communigate_pro');
+  my @errors = map $_->export_replace($svc_x, $svc_x), @exports;
+
+  @errors ? join(' / ', @errors) : '';
+
+}
+
 =item check
 
-Checks all fields to make sure this is a valid example.  If there is
-an error, returns the error, otherwise returns false.  Called by the insert
-and replace methods.
+Checks all fields to make sure this is a valid external mail account.  If
+there is an error, returns the error, otherwise returns false.  Called by the
+insert and replace methods.
 
 =cut
 
@@ -100,11 +135,17 @@ sub check {
   my $self = shift;
   my $error =
        $self->ut_numbern('snarfnum')
+    || $self->ut_textn('snarfname') #alphasn?
     || $self->ut_number('svcnum')
     || $self->ut_foreign_key('svcnum', 'svc_acct', 'svcnum')
     || $self->ut_domain('machine')
-    || $self->alphan('protocol')
+    || $self->ut_alphan('protocol')
     || $self->ut_textn('username')
+    || $self->ut_numbern('check_freq')
+    || $self->ut_enum('leavemail', [ '', 'Y' ])
+    || $self->ut_enum('apop', [ '', 'Y' ])
+    || $self->ut_enum('tls', [ '', 'Y' ])
+    || $self->ut_alphan('mailbox')
   ;
   return $error if $error;
 
@@ -114,6 +155,52 @@ sub check {
   ''; #no error
 }
 
+sub check_freq_labels {
+
+  tie my %hash, 'Tie::IxHash',
+    0 => 'Never',
+    60 => 'minute',
+    120 => '2 minutes',
+    180 => '3 minutes',
+    300 => '5 minutes',
+    600 => '10 minutes',
+    900 => '15 minutes',
+    1800 => '30 minutes',
+    3600 => 'hour',
+    7200 => '2 hours',
+    10800 => '3 hours',
+    21600 => '6 hours',
+    43200 => '12 hours',
+    86400 => 'day',
+    172800 => '2 days',
+    259200 => '3 days',
+    604800 => 'week',
+    1000000000 => 'Disabled',
+  ;
+
+  \%hash;
+}
+
+=item cgp_hashref
+
+Returns a hashref representing this external mail account, suitable for
+Communigate Pro API commands:
+
+=cut
+
+sub cgp_hashref {
+  my $self = shift;
+  {
+    'authName' => $self->username,
+    'domain'   => $self->machine,
+    'password' => $self->_password,
+    'period'   => $self->check_freq.'s',
+    'APOP'     => ( $self->apop      eq 'Y' ? 'YES' : 'NO' ),
+    'TLS'      => ( $self->tls       eq 'Y' ? 'YES' : 'NO' ),
+    'Leave'    => ( $self->leavemail eq 'Y' ? 'YES' : 'NO' ), #XXX leave??
+  };
+}
+
 =back
 
 =head1 BUGS