oops, don't comment out &swapuid in &adminsuidsetup!
[freeside.git] / site_perl / cust_main.pm
index 77ebb2d..a89896d 100644 (file)
@@ -203,7 +203,8 @@ sub check {
   my $self = shift;
 
   my $error =
-    $self->ut_number('agentnum')
+    $self->ut_numbern('custnum')
+    || $self->ut_number('agentnum')
     || $self->ut_number('refnum')
     || $self->ut_textn('company')
     || $self->ut_text('address1')
@@ -254,7 +255,7 @@ sub check {
       } );
   }
 
-  $self->zip =~ /^([\w\-]{10})$/ or return "Illegal zip";
+  $self->zip =~ /^([\w\-]{5,10})$/ or return "Illegal zip";
   $self->zip($1);
 
   $self->payby =~ /^(CARD|BILL|COMP)$/ or return "Illegal payby";
@@ -355,7 +356,7 @@ If there is an error, returns the error, otherwise returns false.
 
 sub bill {
   my( $self, %options ) = @_;
-  my $time = $options{'time'} || $^T;
+  my $time = $options{'time'} || time;
 
   my $error;
 
@@ -365,6 +366,7 @@ sub bill {
   local $SIG{QUIT} = 'IGNORE';
   local $SIG{TERM} = 'IGNORE';
   local $SIG{TSTP} = 'IGNORE';
+  local $SIG{PIPE} = 'IGNORE';
 
   # find the packages which are due for billing, find out how much they are
   # & generate invoice database.
@@ -542,7 +544,7 @@ return an error.  By default, they don't.
 
 sub collect {
   my( $self, %options ) = @_;
-  my $invoice_time = $options{'invoice_time'} || $^T;
+  my $invoice_time = $options{'invoice_time'} || time;
 
   my $total_owed = $self->balance;
   return '' unless $total_owed > 0; #redundant?????
@@ -553,6 +555,7 @@ sub collect {
   local $SIG{QUIT} = 'IGNORE';
   local $SIG{TERM} = 'IGNORE';
   local $SIG{TSTP} = 'IGNORE';
+  local $SIG{PIPE} = 'IGNORE';
 
   foreach my $cust_bill (
     qsearch('cust_bill', { 'custnum' => $self->custnum, } )
@@ -760,34 +763,42 @@ sub balance {
   sprintf( "%.2f", $self->total_owed - $self->total_credited );
 }
 
-=item invoicing_list [ ITEM, ITEM, ... ]
+=item invoicing_list [ ARRAYREF ]
 
-If arguements are given, sets these email addresses as invoice recipients
+If an arguement is given, sets these email addresses as invoice recipients
 (see L<FS::cust_main_invoice>).  Errors are not fatal and are not reported
 (except as warnings), so use check_invoicing_list first.
 
 Returns a list of email addresses (with svcnum entries expanded).
 
+Note: You can clear the invoicing list by passing an empty ARRAYREF.  You can
+check it without disturbing anything by passing nothing.
+
+This interface may change in the future.
+
 =cut
 
 sub invoicing_list {
-  my( $self, @addresses ) = @_;
-  if ( @addresses ) {
+  my( $self, $arrayref ) = @_;
+  if ( $arrayref ) {
     my @cust_main_invoice = 
       qsearch( 'cust_main_invoice', { 'custnum' => $self->custnum } );
     foreach my $cust_main_invoice ( @cust_main_invoice ) {
-      unless ( grep { $cust_main_invoice->address eq $_ } @addresses ) {
-        $cust_main_invoice->delete;
+      #warn $cust_main_invoice->destnum;
+      unless ( grep { $cust_main_invoice->address eq $_ } @{$arrayref} ) {
+        #warn $cust_main_invoice->destnum;
+        my $error = $cust_main_invoice->delete;
+        warn $error if $error;
       }
     }
     @cust_main_invoice =
       qsearch( 'cust_main_invoice', { 'custnum' => $self->custnum } );
-    foreach my $address ( @addresses ) {
+    foreach my $address ( @{$arrayref} ) {
       unless ( grep { $address eq $_->address } @cust_main_invoice ) {
-        my $cust_main_invoice = new FS::cust_main_invoice (
+        my $cust_main_invoice = new FS::cust_main_invoice ( {
           'custnum' => $self->custnum,
           'dest'    => $address,
-        );
+        );
         my $error = $cust_main_invoice->insert;
         warn $error if $error;
       } 
@@ -797,7 +808,7 @@ sub invoicing_list {
     qsearch( 'cust_main_invoice', { 'custnum' => $self->custnum } );
 }
 
-=item check_invoicing_list ITEM, ITEM
+=item check_invoicing_list ARRAYREF
 
 Checks these arguements as valid input for the invoicing_list method.  If there
 is an error, returns the error, otherwise returns false.
@@ -805,13 +816,16 @@ is an error, returns the error, otherwise returns false.
 =cut
 
 sub check_invoicing_list {
-  my( $self, @addresses ) = @_;
-  foreach my $address ( @addresses ) {
-    my $cust_main_invoice = new FS::cust_main_invoice (
+  my( $self, $arrayref ) = @_;
+  foreach my $address ( @{$arrayref} ) {
+    my $cust_main_invoice = new FS::cust_main_invoice ( {
       'custnum' => $self->custnum,
       'dest'    => $address,
-    );
-    my $error = $cust_main_invoice->check;
+    } );
+    my $error = $self->custnum
+                ? $cust_main_invoice->check
+                : $cust_main_invoice->checkdest
+    ;
     return $error if $error;
   }
   '';
@@ -821,7 +835,7 @@ sub check_invoicing_list {
 
 =head1 VERSION
 
-$Id: cust_main.pm,v 1.8 1998-12-29 11:59:39 ivan Exp $
+$Id: cust_main.pm,v 1.10 1999-01-25 12:26:09 ivan Exp $
 
 =head1 BUGS
 
@@ -877,7 +891,13 @@ enable cybercash, cybercash v3 support, don't need to import
 FS::UID::{datasrc,checkruid} ivan@sisd.com 98-sep-19-21
 
 $Log: cust_main.pm,v $
-Revision 1.8  1998-12-29 11:59:39  ivan
+Revision 1.10  1999-01-25 12:26:09  ivan
+yet more mod_perl stuff
+
+Revision 1.9  1999/01/18 09:22:41  ivan
+changes to track email addresses for email invoicing
+
+Revision 1.8  1998/12/29 11:59:39  ivan
 mostly properly OO, some work still to be done with svc_ stuff
 
 Revision 1.7  1998/12/16 09:58:52  ivan