1 package FS::cust_credit_refund;
5 use FS::Record qw( qsearch qsearchs dbh );
6 use FS::cust_main_Mixin;
10 @ISA = qw( FS::cust_main_Mixin 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">.
62 sub table { 'cust_credit_refund'; }
66 Adds this record to the database. If there is an error, returns the error,
67 otherwise returns false.
73 return "Can't apply refund to closed credit"
74 if $self->cust_credit->closed =~ /^Y/i;
75 return "Can't apply credit to closed refund"
76 if $self->cust_refund->closed =~ /^Y/i;
77 $self->SUPER::insert(@_);
82 Remove this cust_credit_refund from the database. If there is an error,
83 returns the error, otherwise returns false.
89 return "Can't remove refund from closed credit"
90 if $self->cust_credit->closed =~ /^Y/i;
91 return "Can't remove credit from closed refund"
92 if $self->cust_refund->closed =~ /^Y/i;
93 $self->SUPER::delete(@_);
96 =item replace OLD_RECORD
98 Currently unimplemented (accounting reasons).
103 return "Can't (yet?) modify cust_credit_refund records!";
108 Checks all fields to make sure this is a valid refund application. If there is
109 an error, returns the error, otherwise returns false. Called by the insert
118 $self->ut_numbern('creditrefundnum')
119 || $self->ut_number('crednum')
120 || $self->ut_number('refundnum')
121 || $self->ut_money('amount')
122 || $self->ut_numbern('_date')
124 return $error if $error;
126 return "amount must be > 0" if $self->amount <= 0;
128 return "unknown cust_credit.crednum: ". $self->crednum
129 unless my $cust_credit =
130 qsearchs( 'cust_credit', { 'crednum' => $self->crednum } );
132 return "Unknown refund"
133 unless my $cust_refund =
134 qsearchs( 'cust_refund', { 'refundnum' => $self->refundnum } );
136 $self->_date(time) unless $self->_date;
138 return "Cannot apply more than remaining value of credit"
139 unless $self->amount <= $cust_credit->credited;
141 return "Cannot apply more than remaining value of refund"
142 unless $self->amount <= $cust_refund->unapplied;
149 Returns the refund (see L<FS::cust_refund>)
155 qsearchs( 'cust_refund', { 'refundnum' => $self->refundnum } );
160 Returns the credit (see L<FS::cust_credit>)
166 qsearchs( 'cust_credit', { 'crednum' => $self->crednum } );
173 Delete and replace methods.
175 the checks for over-applied refunds could be better done like the ones in
180 L<FS::cust_credit>, L<FS::cust_refund>, L<FS::Record>, schema.html from the