diff options
author | ivan <ivan> | 2005-10-10 12:20:57 +0000 |
---|---|---|
committer | ivan <ivan> | 2005-10-10 12:20:57 +0000 |
commit | 550685eff557af23e242c545d6a9e27a7ef44f23 (patch) | |
tree | f269ba2ad03102153812a8e95d4c7b8ecb5f7994 /FS | |
parent | cf8f8aafc5595b31f24a7b0d06289c830d123cb8 (diff) |
updated quick payment entry
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/cust_pay.pm | 60 |
1 files changed, 58 insertions, 2 deletions
diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm index 0f872a4d2..a7d69901f 100644 --- a/FS/FS/cust_pay.pm +++ b/FS/FS/cust_pay.pm @@ -122,12 +122,13 @@ sub insert { $self->custnum($cust_bill->custnum ); } - my $cust_main = $self->cust_main; - my $old_balance = $cust_main->balance; my $error = $self->check; return $error if $error; + my $cust_main = $self->cust_main; + my $old_balance = $cust_main->balance; + $error = $self->SUPER::insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -398,6 +399,61 @@ sub check { $self->SUPER::check; } +=item batch_insert CUST_PAY_OBJECT, ... + +Class method which inserts multiple payments. Takes a list of FS::cust_pay +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. + +For example: + + my @errors = FS::cust_pay->batch_insert(@cust_pay); + my $num_errors = scalar(grep $_, @errors); + if ( $num_errors == 0 ) { + #success; all payments were inserted + } else { + #failure; no payments were inserted. + } + +=cut + +sub batch_insert { + my $self = shift; #class method + + local $SIG{HUP} = 'IGNORE'; + local $SIG{INT} = 'IGNORE'; + local $SIG{QUIT} = 'IGNORE'; + local $SIG{TERM} = 'IGNORE'; + local $SIG{TSTP} = 'IGNORE'; + local $SIG{PIPE} = 'IGNORE'; + + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + + my $errors = 0; + + my @errors = map { + my $error = $_->insert; + if ( $error ) { + $errors++; + } else { + $_->cust_main->apply_payments; + } + $error; + } @_; + + if ( $errors ) { + $dbh->rollback if $oldAutoCommit; + } else { + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + } + + @errors; + +} + =item cust_bill_pay Returns all applications to invoices (see L<FS::cust_bill_pay>) for this |