summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorBrian Medley <bpm@snafu.org>2012-04-24 07:40:14 -0500
committerBrian Medley <bpm@snafu.org>2012-04-24 07:40:14 -0500
commit05364e1a107233d35792a76bf6d23d00dd5611cf (patch)
treee448de80cfdb2c4de1453d2c8ebdc14febe3498c /FS
parenta502263ac279815f164ba2abfffec919c6250dcb (diff)
parentbe368a6ee2dca0ddd4aa53c0b912e09498bef24a (diff)
Merge branch 'master' of git.freeside.biz:/home/git/freeside
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/cust_pay.pm42
1 files changed, 32 insertions, 10 deletions
diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm
index ef30809b0..e15bf0154 100644
--- a/FS/FS/cust_pay.pm
+++ b/FS/FS/cust_pay.pm
@@ -760,6 +760,12 @@ objects. Returns a list, each element representing the status of inserting the
corresponding payment - empty. If there is an error inserting any payment, the
entire transaction is rolled back, i.e. all payments are inserted or none are.
+FS::cust_pay objects may have the pseudo-field 'apply_to', containing a
+reference to an array of (uninserted) FS::cust_bill_pay objects. If so,
+those objects will be inserted with the paynum of the payment, and for
+each one, an error message or an empty string will be inserted into the
+list of errors.
+
For example:
my @errors = FS::cust_pay->batch_insert(@cust_pay);
@@ -786,19 +792,35 @@ sub batch_insert {
local $FS::UID::AutoCommit = 0;
my $dbh = dbh;
- my $errors = 0;
+ my $num_errors = 0;
- my @errors = map {
- my $error = $_->insert( 'manual' => 1 );
- if ( $error ) {
- $errors++;
- } else {
- $_->cust_main->apply_payments;
+ my @errors;
+ foreach my $cust_pay (@_) {
+ my $error = $cust_pay->insert( 'manual' => 1 );
+ push @errors, $error;
+ $num_errors++ if $error;
+
+ if ( ref($cust_pay->get('apply_to')) eq 'ARRAY' ) {
+
+ foreach my $cust_bill_pay ( @{ $cust_pay->apply_to } ) {
+ if ( $error ) { # insert placeholders if cust_pay wasn't inserted
+ push @errors, '';
+ }
+ else {
+ $cust_bill_pay->set('paynum', $cust_pay->paynum);
+ my $apply_error = $cust_bill_pay->insert;
+ push @errors, $apply_error || '';
+ $num_errors++ if $apply_error;
+ }
+ }
+
+ } elsif ( !$error ) { #normal case: apply payments as usual
+ $cust_pay->cust_main->apply_payments;
}
- $error;
- } @_;
- if ( $errors ) {
+ }
+
+ if ( $num_errors ) {
$dbh->rollback if $oldAutoCommit;
} else {
$dbh->commit or die $dbh->errstr if $oldAutoCommit;