X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpay_batch.pm;h=5448b031e6d2d1ed99ab1340872dcf03d0ae4b48;hb=dad604abef4fbebc421e753ad5a141879faf67b9;hp=86ef7b07425b4a34524aa32cb4626e09f878b855;hpb=8cc02af5f02c09118764e4b763dcc9ebec08c2e3;p=freeside.git diff --git a/FS/FS/pay_batch.pm b/FS/FS/pay_batch.pm index 86ef7b074..5448b031e 100644 --- a/FS/FS/pay_batch.pm +++ b/FS/FS/pay_batch.pm @@ -6,7 +6,6 @@ use Time::Local; use Text::CSV_XS; use FS::Record qw( dbh qsearch qsearchs ); use FS::cust_pay; -use FS::part_bill_event qw(due_events); @ISA = qw(FS::Record); @@ -31,8 +30,8 @@ FS::pay_batch - Object methods for pay_batch records =head1 DESCRIPTION -An FS::pay_batch object represents an example. FS::pay_batch inherits from -FS::Record. The following fields are currently supported: +An FS::pay_batch object represents an payment batch. FS::pay_batch inherits +from FS::Record. The following fields are currently supported: =over 4 @@ -55,7 +54,7 @@ FS::Record. The following fields are currently supported: =item new HASHREF -Creates a new example. To add the example to the database, see L<"insert">. +Creates a new batch. To add the batch 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 method. @@ -94,7 +93,7 @@ returns the error, otherwise returns false. =item check -Checks all fields to make sure this is a valid example. If there is +Checks all fields to make sure this is a valid batch. If there is an error, returns the error, otherwise returns false. Called by the insert and replace methods. @@ -454,6 +453,20 @@ sub import_results { $new_cust_pay_batch->status('Approved'); + } elsif ( &{$declined_condition}(\%hash) ) { + + $new_cust_pay_batch->status('Declined'); + + } + + my $error = $new_cust_pay_batch->replace($cust_pay_batch); + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "error updating status of paybatchnum $hash{'paybatchnum'}: $error\n"; + } + + if ( $new_cust_pay_batch->status =~ /Approved/i ) { + my $cust_pay = new FS::cust_pay ( { 'custnum' => $custnum, 'payby' => $payby, @@ -469,33 +482,38 @@ sub import_results { $cust_pay->cust_main->apply_payments; - } elsif ( &{$declined_condition}(\%hash) ) { + } elsif ( $new_cust_pay_batch->status =~ /Declined/i ) { - $new_cust_pay_batch->status('Declined'); + #false laziness w/cust_main::collect - foreach my $part_bill_event ( due_events ( $new_cust_pay_batch, - 'DCLN', - '', - '') ) { + my $due_cust_event = $new_cust_pay_batch->cust_main->due_cust_event( + #'check_freq' => '1d', #? + 'eventtable' => 'cust_pay_batch', + 'objects' => [ $new_cust_pay_batch ], + ); + unless( ref($due_cust_event) ) { + $dbh->rollback if $oldAutoCommit; + return $due_cust_event; + } - # don't run subsequent events if balance<=0 - last if $cust_pay_batch->cust_main->balance <= 0; + foreach my $cust_event ( @$due_cust_event ) { + + #XXX lock event + + #re-eval event conditions (a previous event could have changed things) + next unless $cust_event->test_conditions; - if (my $error = $part_bill_event->do_event($new_cust_pay_batch)) { + if ( my $error = $cust_event->do_event() ) { # gah, even with transactions. - $dbh->commit if $oldAutoCommit; #well. - return $error; + #$dbh->commit if $oldAutoCommit; #well. + $dbh->rollback if $oldAutoCommit; + return $error; } } } - my $error = $new_cust_pay_batch->replace($cust_pay_batch); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error updating status of paybatchnum $hash{'paybatchnum'}: $error\n"; - } }