[freeside-commits] freeside/FS/FS cust_pay.pm,1.41,1.42
Ivan,,,
ivan at wavetail.420.am
Mon Oct 10 05:20:59 PDT 2005
Update of /home/cvs/cvsroot/freeside/FS/FS
In directory wavetail:/tmp/cvs-serv29161/FS/FS
Modified Files:
cust_pay.pm
Log Message:
updated quick payment entry
Index: cust_pay.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/cust_pay.pm,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -d -r1.41 -r1.42
--- cust_pay.pm 14 Jul 2005 10:52:46 -0000 1.41
+++ cust_pay.pm 10 Oct 2005 12:20:57 -0000 1.42
@@ -122,12 +122,13 @@
$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 @@
$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
More information about the freeside-commits
mailing list