From f16b7061d422461897e2a929fd47e2a7eecbaa64 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 16 Jan 2014 20:40:20 -0800 Subject: [PATCH] when sending statements as payment receipts, ensure the payment appears on the statement, #24850 --- FS/FS/Template_Mixin.pm | 12 +++++++++--- FS/FS/cust_bill.pm | 46 ++++++++++++++++++++++++++++++++++------------ 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/FS/FS/Template_Mixin.pm b/FS/FS/Template_Mixin.pm index 2d9be618f..990f31fbc 100644 --- a/FS/FS/Template_Mixin.pm +++ b/FS/FS/Template_Mixin.pm @@ -1223,7 +1223,9 @@ sub print_generic { # credits my $credittotal = 0; - foreach my $credit ( $self->_items_credits('trim_len'=>60) ) { + foreach my $credit ( + $self->_items_credits( 'template' => $template, 'trim_len' => 60 ) + ) { my $total; $total->{'total_item'} = &$escape_function($credit->{'description'}); @@ -1249,13 +1251,17 @@ sub print_generic { $invoice_data{'credittotal'} = sprintf('%.2f', $credittotal); #credits (again) - foreach my $credit ( $self->_items_credits('trim_len'=>32) ) { + foreach my $credit ( + $self->_items_credits( 'template' => $template, 'trim_len'=>32 ) + ) { push @buf, [ $credit->{'description'}, $money_char.$credit->{'amount'} ]; } # payments my $paymenttotal = 0; - foreach my $payment ( $self->_items_payments ) { + foreach my $payment ( + $self->_items_payments( 'template' => $template ) + ) { my $total = {}; $total->{'total_item'} = &$escape_function($payment->{'description'}); $paymenttotal += $payment->{'amount'}; diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index 9a971dd3a..63ae88471 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -1971,7 +1971,7 @@ sub print_csv { my $pmt_cr_applied = 0; $pmt_cr_applied += $_->{'amount'} - foreach ( $self->_items_payments, $self->_items_credits ) ; + foreach ( $self->_items_payments(%opt), $self->_items_credits(%opt) ) ; my $totaldue = sprintf('%.2f', $self->owed + $previous_balance); @@ -2998,14 +2998,22 @@ sub _items_credits { #credits my @objects; if ( $self->conf->exists('previous_balance-payments_since') ) { - my $date = 0; - $date = $self->previous_bill->_date if $self->previous_bill; - @objects = qsearch('cust_credit', { - 'custnum' => $self->custnum, - '_date' => {op => '>=', value => $date}, + if ( $opt{'template'} eq 'statement' ) { + # then the current bill is a "statement" (i.e. an invoice sent as + # a payment receipt) + # and in that case we want to see payments on or after THIS invoice + @objects = qsearch('cust_credit', { + 'custnum' => $self->custnum, + '_date' => {op => '>=', value => $self->_date}, }); - # hard to do this in the qsearch... - @objects = grep { $_->_date < $self->_date } @objects; + } else { + my $date = 0; + $date = $self->previous_bill->_date if $self->previous_bill; + @objects = qsearch('cust_credit', { + 'custnum' => $self->custnum, + '_date' => {op => '>=', value => $date}, + }); + } } else { @objects = $self->cust_credited; } @@ -3033,18 +3041,32 @@ sub _items_credits { sub _items_payments { my $self = shift; + my %opt = @_; my @b; my $detailed = $self->conf->exists('invoice_payment_details'); my @objects; if ( $self->conf->exists('previous_balance-payments_since') ) { - my $date = 0; - $date = $self->previous_bill->_date if $self->previous_bill; - @objects = qsearch('cust_pay', { + # then show payments dated on/after the previous bill... + if ( $opt{'template'} eq 'statement' ) { + # then the current bill is a "statement" (i.e. an invoice sent as + # a payment receipt) + # and in that case we want to see payments on or after THIS invoice + @objects = qsearch('cust_pay', { + 'custnum' => $self->custnum, + '_date' => {op => '>=', value => $self->_date}, + }); + } else { + # the normal case: payments on or after the previous invoice + my $date = 0; + $date = $self->previous_bill->_date if $self->previous_bill; + @objects = qsearch('cust_pay', { 'custnum' => $self->custnum, '_date' => {op => '>=', value => $date}, }); - @objects = grep { $_->_date < $self->_date } @objects; + # and before the current bill... + @objects = grep { $_->_date < $self->_date } @objects; + } } else { @objects = $self->cust_bill_pay; } -- 2.11.0