1 package FS::cust_credit_refund;
5 use FS::Record qw( qsearch qsearchs dbh );
6 #use FS::UID qw(getotaker);
10 @ISA = qw( FS::Record );
14 FS::cust_credit_refund - Object methods for cust_bill_pay records
18 use FS::cust_credit_refund;
20 $record = new FS::cust_credit_refund \%hash;
21 $record = new FS::cust_credit_refund { 'column' => 'value' };
23 $error = $record->insert;
25 $error = $new_record->replace($old_record);
27 $error = $record->delete;
29 $error = $record->check;
33 An FS::cust_credit_refund represents the application of a refund to a specific
34 credit. FS::cust_credit_refund inherits from FS::Record. The following fields
35 are currently supported:
39 =item creditrefundnum - primary key (assigned automatically)
41 =item crednum - Credit (see L<FS::cust_credit>)
43 =item refundnum - Refund (see L<FS::cust_refund>)
45 =item amount - Amount of the refund to apply to the specific credit.
47 =item _date - specified as a UNIX timestamp; see L<perlfunc/"time">. Also see
48 L<Time::Local> and L<Date::Parse> for conversion functions.
58 Creates a new record. To add the record to the database, see L<"insert">.
60 sub table { 'cust_credit_refund'; }
64 Adds this record to the database. If there is an error, returns the error,
65 otherwise returns false.
72 local $SIG{HUP} = 'IGNORE';
73 local $SIG{INT} = 'IGNORE';
74 local $SIG{QUIT} = 'IGNORE';
75 local $SIG{TERM} = 'IGNORE';
76 local $SIG{TSTP} = 'IGNORE';
77 local $SIG{PIPE} = 'IGNORE';
79 my $oldAutoCommit = $FS::UID::AutoCommit;
80 local $FS::UID::AutoCommit = 0;
83 my $error = $self->check;
84 return $error if $error;
86 $error = $self->SUPER::insert;
89 qsearchs('cust_refund', { 'refundnum' => $self->refundnum } )
91 $dbh->rollback if $oldAutoCommit;
92 return "unknown cust_refund.refundnum: ". $self->refundnum
96 $refund_total += $_ foreach map { $_->amount }
97 qsearch('cust_credit_refund', { 'refundnum' => $self->refundnum } );
99 if ( $refund_total > $cust_refund->refund ) {
100 $dbh->rollback if $oldAutoCommit;
101 return "total cust_credit_refund.amount $refund_total for refundnum ".
103 " greater than cust_refund.refund ". $cust_refund->refund;
106 $dbh->commit or die $dbh->errstr if $oldAutoCommit;
113 Currently unimplemented (accounting reasons).
118 return "Can't (yet?) delete cust_credit_refund records!";
121 =item replace OLD_RECORD
123 Currently unimplemented (accounting reasons).
128 return "Can't (yet?) modify cust_credit_refund records!";
133 Checks all fields to make sure this is a valid payment. If there is an error,
134 returns the error, otherwise returns false. Called by the insert method.
142 $self->ut_numbern('creditrefundnum')
143 || $self->ut_number('crednum')
144 || $self->ut_number('refundnum')
145 || $self->ut_money('amount')
146 || $self->ut_numbern('_date')
148 return $error if $error;
150 return "amount must be > 0" if $self->amount == 0;
152 $self->_date(time) unless $self->_date;
154 return "unknown cust_credit.crednum: ". $self->crednum
155 unless qsearchs( 'cust_credit', { 'crednum' => $self->crednum } );
162 Returns the refund (see L<FS::cust_refund>)
168 qsearchs( 'cust_refund', { 'refundnum' => $self->refundnum } );
175 $Id: cust_credit_refund.pm,v 1.4 2001-09-02 07:49:52 ivan Exp $
179 Delete and replace methods.
181 the checks for over-applied refunds could be better done like the ones in
186 L<FS::cust_credit>, L<FS::cust_refund>, L<FS::Record>, schema.html from the