X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_credit_refund.pm;h=ff2454d9f569a6fb48193a55cbe839e02a29e86b;hp=8b7d6dac3f6a94c34dcfba48a653ce4ab444a7af;hb=4a881cc149f6892da35f85b767a1e806f237a05f;hpb=ef5490483c6b97512c4a1fe0ec841c2044e346af diff --git a/FS/FS/cust_credit_refund.pm b/FS/FS/cust_credit_refund.pm index 8b7d6dac3..ff2454d9f 100644 --- a/FS/FS/cust_credit_refund.pm +++ b/FS/FS/cust_credit_refund.pm @@ -57,6 +57,8 @@ L and L for conversion functions. Creates a new record. To add the record to the database, see L<"insert">. +=cut + sub table { 'cust_credit_refund'; } =item insert @@ -68,43 +70,9 @@ otherwise returns false. sub insert { 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; - my $dbh = dbh; - - my $error = $self->check; + my $error = $self->SUPER::insert; return $error if $error; - $error = $self->SUPER::insert; - - my $cust_refund = - qsearchs('cust_refund', { 'refundnum' => $self->refundnum } ) - or do { - $dbh->rollback if $oldAutoCommit; - return "unknown cust_refund.refundnum: ". $self->refundnum - }; - - my $refund_total = 0; - $refund_total += $_ foreach map { $_->amount } - qsearch('cust_credit_refund', { 'refundnum' => $self->refundnum } ); - - if ( $refund_total > $cust_refund->refund ) { - $dbh->rollback if $oldAutoCommit; - return "total cust_credit_refund.amount $refund_total for refundnum ". - $self->refundnum. - " greater than cust_refund.refund ". $cust_refund->refund; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; } @@ -130,8 +98,9 @@ sub replace { =item check -Checks all fields to make sure this is a valid payment. If there is an error, -returns the error, otherwise returns false. Called by the insert method. +Checks all fields to make sure this is a valid refund application. If there is +an error, returns the error, otherwise returns false. Called by the insert +method. =cut @@ -147,14 +116,25 @@ sub check { ; return $error if $error; - return "amount must be > 0" if $self->amount == 0; + return "amount must be > 0" if $self->amount <= 0; + + return "unknown cust_credit.crednum: ". $self->crednum + unless my $cust_credit = + qsearchs( 'cust_credit', { 'crednum' => $self->crednum } ); + + return "Unknown refund" + unless my $cust_refund = + qsearchs( 'cust_refund', { 'refundnum' => $self->refundnum } ); $self->_date(time) unless $self->_date; - return "unknown cust_credit.crednum: ". $self->crednum - unless qsearchs( 'cust_credit', { 'crednum' => $self->crednum } ); + return "Cannot apply more than remaining value of credit" + unless $self->amount <= $cust_credit->credited; - ''; #no error + return "Cannot apply more than remaining value of refund" + unless $self->amount <= $cust_refund->unapplied; + + $self->SUPER::check; } =item cust_refund @@ -174,7 +154,7 @@ Returns the credit (see L) =cut -sub cust_refund { +sub cust_credit { my $self = shift; qsearchs( 'cust_credit', { 'crednum' => $self->crednum } ); } @@ -183,7 +163,7 @@ sub cust_refund { =head1 VERSION -$Id: cust_credit_refund.pm,v 1.6 2002-01-24 11:52:02 ivan Exp $ +$Id: cust_credit_refund.pm,v 1.11 2004-06-29 04:02:44 ivan Exp $ =head1 BUGS