X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_pay.pm;h=620f6c6296762b710012c0145f6c579f725c0813;hb=6fd39bf8dfa989aaedea59e5e3cd609642f9e024;hp=4d06862d6d6c9c16ba36a47da07bc7d93f9a83bf;hpb=55c7e3cc18a45620f48ae62d3bc044a830bd8c95;p=freeside.git diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm index 4d06862d6..620f6c629 100644 --- a/FS/FS/cust_pay.pm +++ b/FS/FS/cust_pay.pm @@ -444,7 +444,7 @@ sub void { unless (ref($reason) || !$reason) { $reason = FS::reason->new_or_existing( - 'class' => 'X', + 'class' => 'P', 'type' => 'Void payment', 'reason' => $reason ); @@ -903,6 +903,58 @@ sub refund { return ''; } +### refund_to_unapply/unapply_refund false laziness with FS::cust_credit + +=item refund_to_unapply + +Returns L objects that will be deleted by L +(all currently applied refunds that aren't closed.) +Returns empty list if payment itself is closed. + +=cut + +sub refund_to_unapply { + my $self = shift; + return () if $self->closed; + qsearch({ + 'table' => 'cust_pay_refund', + 'hashref' => { 'paynum' => $self->paynum }, + 'addl_from' => 'LEFT JOIN cust_refund USING (refundnum)', + 'extra_sql' => "AND cust_refund.closed IS NULL AND cust_refund.source_paynum IS NULL", + }); +} + +=item unapply_refund + +Deletes all objects returned by L. + +=cut + +sub unapply_refund { + my $self = shift; + + 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; + + foreach my $cust_pay_refund ($self->refund_to_unapply) { + my $error = $cust_pay_refund->delete; + if ($error) { + dbh->rollback if $oldAutoCommit; + return $error; + } + } + + dbh->commit or die dbh->errstr if $oldAutoCommit; + return ''; +} + =back =head1 CLASS METHODS @@ -990,7 +1042,7 @@ sub batch_insert { Returns an SQL fragment to retreive the unapplied amount. -=cut +=cut sub unapplied_sql { my ($class, $start, $end) = @_;