From: jeff Date: Sat, 1 Sep 2001 22:28:51 +0000 (+0000) Subject: haste makes waste... and left a method out X-Git-Tag: freeside_1_4_0pre11~390 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=42ac86258bce00f5e7fa2db7e375c4a344295a15 haste makes waste... and left a method out --- diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index 382cc492d..bd1f212b3 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -1239,6 +1239,57 @@ sub total_owed { sprintf( "%.2f", $total_bill ); } +=item apply_credits + +Applies (see L) unapplied credits (see L)to outstanding invoice balances in cronological order and returns the value +of any remaining unapplied credits available for refund (see L). + +=cut + +sub apply_credits { + my $self = shift; + + return 0 unless $self->total_credited; + + my @credits = sort { $b->_date <=> $a->_date} (grep { $_->credited > 0 } + qsearch('cust_credit', { 'custnum' => $self->custnum } ) ); + + my @invoices = sort { $a->_date <=> $b->_date} (grep { $_->owed > 0 } + qsearch('cust_bill', { 'custnum' => $self->custnum } ) ); + + my $credit; + + foreach my $cust_bill ( @invoices ) { + my $amount; + + if (!(defined $credit) || $credit->credited == 0) { + $credit = pop @credits; + last unless defined $credit; + } + + if ($cust_bill->owed >= $credit->credited) { + $amount=$credit->credited; + }else{ + $amount=$cust_bill->owed; + } + + my $cust_credit_bill = new FS::cust_credit_bill ( { + 'crednum' => $credit->crednum, + 'invnum' => $cust_bill->invnum, + 'amount' => $amount, + '_date' => time, + } ); + my $error = $cust_credit_bill->insert; + die $error if $error; + + redo if ($cust_bill->owed > 0); + + } + + return $self->total_credited; +} + + =item total_credited Returns the total credits (see L) for this customer. @@ -1399,7 +1450,7 @@ sub rebuild_fuzzyfiles { =head1 VERSION -$Id: cust_main.pm,v 1.24 2001-09-01 21:52:20 jeff Exp $ +$Id: cust_main.pm,v 1.25 2001-09-01 22:28:51 jeff Exp $ =head1 BUGS diff --git a/httemplate/docs/upgrade8.html b/httemplate/docs/upgrade8.html index b35194df2..765c2b8d5 100644 --- a/httemplate/docs/upgrade8.html +++ b/httemplate/docs/upgrade8.html @@ -75,8 +75,7 @@ CREATE TABLE cust_credit_bill ( crednum int not null, invnum int not null, _date timestamp not null, - amount decimal(10,2) not null, - PRIMARY KEY (crednum) + amount decimal(10,2) not null ); ALTER TABLE svc_acct ADD domsvc integer NOT NULL; @@ -93,6 +92,7 @@ ALTER TABLE part_svc ADD svc_forward__dst integer NULL; ALTER TABLE part_svc ADD svc_forward__dst_flag char(1) NULL; ALTER TABLE cust_main ADD referral_custnum integer NULL; CREATE INDEX cust_main3 ON cust_main ( referral_custnum ); +CREATE INDEX cust_credit_bill1 ON cust_credit_bill ( crednum ); CREATE INDEX cust_credit_bill2 ON cust_credit_bill ( invnum );