per-agent disable_previous_balance, #15863
[freeside.git] / FS / FS / bill_batch.pm
index 3afe209..1a46db0 100644 (file)
@@ -2,9 +2,11 @@ package FS::bill_batch;
 
 use strict;
 use vars qw( @ISA $me $DEBUG );
+use CAM::PDF;
+use FS::Conf;
 use FS::Record qw( qsearch qsearchs dbh );
+use FS::agent;
 use FS::cust_bill_batch;
-use CAM::PDF;
 
 @ISA = qw( FS::Record );
 $me = '[ FS::bill_batch ]';
@@ -37,6 +39,8 @@ inherits from FS::Record.  The following fields are currently supported:
 
 =item batchnum - primary key
 
+=item agentnum - empty for global batches or agent (see L<FS::agent>)
+
 =item status - either 'O' (open) or 'R' (resolved/closed).
 
 =item pdf - blob field for temporarily storing the invoice as a PDF.
@@ -80,6 +84,7 @@ sub print_pdf {
       die $error if $error;
     }
   }
+  $job->update_statustext(100, 'Combining invoices') if $job;
 
   return $pdf_out->toPDF;
 }
@@ -96,26 +101,38 @@ sub close {
   return $self->replace;
 }
 
-=back
+sub check {
+  my $self = shift;
 
-=head1 CLASS METHODS
+  my $error =
+       $self->ut_numbern('batchnum')
+    || $self->ut_foreign_keyn('agentnum', 'agent', 'agentnum')
+    || $self->ut_enum('status', [ 'O', 'R' ] )
+  ;
+  return $error if $error;
 
-=item get_open_batch
+  $self->SUPER::check;
+}
+
+=item agent
 
-Returns the currently open batch.  There should only be one at a time.
+Returns the agent (see L<FS::agent>) for this invoice batch.
 
 =cut
 
-sub get_open_batch {
-  my $class = shift;
-  my $batch = qsearchs('bill_batch', { status => 'O' });
-  return $batch if $batch;
-  $batch = FS::bill_batch->new({status => 'O'});
-  my $error = $batch->insert;
-  die $error if $error;
-  return $batch;
+sub agent {
+  my $self = shift;
+  qsearchs( 'agent', { 'agentnum' => $self->agentnum } );
 }
 
+=back
+
+=head1 SUBROUTINES
+
+=item process_print_pdf
+
+=cut
+
 use Storable 'thaw';
 use Data::Dumper;
 use MIME::Base64;
@@ -128,13 +145,17 @@ sub process_print_pdf {
   my $batch = FS::bill_batch->by_key($param->{batchnum});
   die "batch '$param->{batchnum}' not found!\n" if !$batch;
 
+  if ( $param->{'close'} ) {
+    my $error = $batch->close;
+    die $error if $error;
+  }
+
   my $pdf = $batch->print_pdf($job);
   $batch->pdf($pdf);
   my $error = $batch->replace;
   die $error if $error;
 }
 
-
 =back
 
 =head1 BUGS