1 package FS::cust_bill_pay;
2 use base qw( FS::cust_main_Mixin FS::cust_bill_ApplicationCommon );
8 #ask FS::UID to run this stuff for us later
9 FS::UID->install_callback( sub {
15 FS::cust_bill_pay - Object methods for cust_bill_pay records
19 use FS::cust_bill_pay;
21 $record = new FS::cust_bill_pay \%hash;
22 $record = new FS::cust_bill_pay { 'column' => 'value' };
24 $error = $record->insert;
26 $error = $new_record->replace($old_record);
28 $error = $record->delete;
30 $error = $record->check;
34 An FS::cust_bill_pay object represents the application of a payment to a
35 specific invoice. FS::cust_bill_pay inherits from
36 FS::cust_bill_ApplicationCommon and FS::Record. The following fields are
41 =item billpaynum - primary key (assigned automatically)
43 =item invnum - Invoice (see L<FS::cust_bill>)
45 =item paynum - Payment (see L<FS::cust_pay>)
47 =item amount - Amount of the payment to apply to the specific invoice.
49 =item _date - specified as a UNIX timestamp; see L<perlfunc/"time">. Also see
50 L<Time::Local> and L<Date::Parse> for conversion functions.
60 Creates a new record. To add the record to the database, see L<"insert">.
64 sub table { 'cust_bill_pay'; }
66 sub _app_source_name { 'payment'; }
67 sub _app_source_table { 'cust_pay'; }
68 sub _app_lineitem_breakdown_table { 'cust_bill_pay_pkg'; }
69 sub _app_part_pkg_weight_column { 'pay_weight'; }
73 Adds this record to the database. If there is an error, returns the error,
74 otherwise returns false.
78 Deletes this payment application, unless the closed flag for the parent payment
79 (see L<FS::cust_pay>) is set.
85 return "Can't delete application for closed payment"
86 if $self->cust_pay->closed =~ /^Y/i;
87 return "Can't delete application for closed invoice"
88 if $self->cust_bill->closed =~ /^Y/i;
89 $self->SUPER::delete(@_);
92 =item replace OLD_RECORD
94 Currently unimplemented (accounting reasons).
99 return "Can't modify application of payment!";
104 Checks all fields to make sure this is a valid payment application. If there
105 is an error, returns the error, otherwise returns false. Called by the insert
114 $self->ut_numbern('billpaynum')
115 || $self->ut_foreign_key('paynum', 'cust_pay', 'paynum' )
116 || $self->ut_foreign_key('invnum', 'cust_bill', 'invnum' )
117 || $self->ut_numbern('_date')
118 || $self->ut_money('amount')
119 || $self->ut_foreign_keyn('pkgnum', 'cust_pkg', 'pkgnum')
121 return $error if $error;
123 return "amount must be > 0" if $self->amount <= 0;
125 $self->_date(time) unless $self->_date;
127 return "Cannot apply more than remaining value of invoice"
128 unless $self->amount <= $self->cust_bill->owed;
130 return "Cannot apply more than remaining value of payment"
131 unless $self->amount <= $self->cust_pay->unapplied;
138 Returns the payment (see L<FS::cust_pay>)
140 =item send_receipt HASHREF | OPTION => VALUE ...
142 Sends a payment receipt for the associated payment, against this specific
143 invoice. If there is an error, returns the error, otherwise returns false.
145 See L<FS::cust_pay/send_receipt>.
151 my $opt = ref($_[0]) ? shift : { @_ };
152 $self->cust_pay->send_receipt(
153 'cust_bill' => $self->cust_bill,
162 Delete and replace methods.
166 L<FS::cust_pay>, L<FS::cust_bill>, L<FS::Record>, schema.html from the