# If it is encrypted and the private key is not availaible then we can't
# check the credit card.
-
- my $check_payinfo = 1;
-
- if ($self->is_encrypted($self->payinfo)) {
- $check_payinfo = 0;
- }
+ my $check_payinfo = ! $self->is_encrypted($self->payinfo);
if ( $check_payinfo && $self->payby =~ /^(CARD|DCRD)$/ ) {
'paid' => $cust_pay_pending->paid,
'_date' => '',
'payby' => $cust_pay_pending->payby,
- #'payinfo' => $payinfo,
+ 'payinfo' => $options{'payinfo'},
'paybatch' => $paybatch,
'paydate' => $cust_pay_pending->paydate,
'pkgnum' => $cust_pay_pending->pkgnum,
my $self = shift;
my $time = shift;
-# my $custnum = $self->custnum;
-#
-# my $owed_sql = FS::cust_bill->owed_sql;
-#
-# my $sql = "
-# SELECT SUM($owed_sql) FROM cust_bill
-# WHERE custnum = $custnum
-# AND _date <= $time
-# ";
-#
-# my $sth = dbh->prepare($sql) or die dbh->errstr;
-# $sth->execute() or die $sth->errstr;
-#
-# return sprintf( '%.2f', $sth->fetchrow_arrayref->[0] );
+ my $custnum = $self->custnum;
- my $total_bill = 0;
- foreach my $cust_bill (
- grep { $_->_date <= $time }
- qsearch('cust_bill', { 'custnum' => $self->custnum, } )
- ) {
- $total_bill += $cust_bill->owed;
- }
- sprintf( "%.2f", $total_bill );
+ my $owed_sql = FS::cust_bill->owed_sql;
+
+ my $sql = "
+ SELECT SUM($owed_sql) FROM cust_bill
+ WHERE custnum = $custnum
+ AND _date <= $time
+ ";
+
+ sprintf( "%.2f", $self->scalar_sql($sql) );
}
sub total_unapplied_credits {
my $self = shift;
- my $total_credit = 0;
- $total_credit += $_->credited foreach $self->cust_credit;
- sprintf( "%.2f", $total_credit );
+
+ my $custnum = $self->custnum;
+
+ my $unapplied_sql = FS::cust_credit->unapplied_sql;
+
+ my $sql = "
+ SELECT SUM($unapplied_sql) FROM cust_credit
+ WHERE custnum = $custnum
+ ";
+
+ sprintf( "%.2f", $self->scalar_sql($sql) );
+
}
=item total_unapplied_credits_pkgnum PKGNUM
sub total_unapplied_payments {
my $self = shift;
- my $total_unapplied = 0;
- $total_unapplied += $_->unapplied foreach $self->cust_pay;
- sprintf( "%.2f", $total_unapplied );
+
+ my $custnum = $self->custnum;
+
+ my $unapplied_sql = FS::cust_pay->unapplied_sql;
+
+ my $sql = "
+ SELECT SUM($unapplied_sql) FROM cust_pay
+ WHERE custnum = $custnum
+ ";
+
+ sprintf( "%.2f", $self->scalar_sql($sql) );
+
}
=item total_unapplied_payments_pkgnum PKGNUM
sub total_unapplied_refunds {
my $self = shift;
- my $total_unapplied = 0;
- $total_unapplied += $_->unapplied foreach $self->cust_refund;
- sprintf( "%.2f", $total_unapplied );
+ my $custnum = $self->custnum;
+
+ my $unapplied_sql = FS::cust_refund->unapplied_sql;
+
+ my $sql = "
+ SELECT SUM($unapplied_sql) FROM cust_refund
+ WHERE custnum = $custnum
+ ";
+
+ sprintf( "%.2f", $self->scalar_sql($sql) );
+
}
=item balance
sub balance {
my $self = shift;
- sprintf( "%.2f",
- $self->total_owed
- + $self->total_unapplied_refunds
- - $self->total_unapplied_credits
- - $self->total_unapplied_payments
- );
+ $self->balance_date_range;
}
=item balance_date TIME
sub balance_date {
my $self = shift;
- my $time = shift;
- sprintf( "%.2f",
- $self->total_owed_date($time)
- + $self->total_unapplied_refunds
- - $self->total_unapplied_credits
- - $self->total_unapplied_payments
- );
+ $self->balance_date_range(shift);
}
-=item balance_date_range START_TIME [ END_TIME [ OPTION => VALUE ... ] ]
+=item balance_date_range [ START_TIME [ END_TIME [ OPTION => VALUE ... ] ] ]
-Returns the balance for this customer, only considering invoices with date
-earlier than START_TIME, and optionally not later than END_TIME
+Returns the balance for this customer, optionally considering invoices with
+date earlier than START_TIME, and not later than END_TIME
(total_owed_date minus total_unapplied_credits minus total_unapplied_payments).
Times are specified as SQL fragments or numeric
WHERE cust_refund.custnum = cust_main.custnum )
"; }
-=item balance_date_sql START_TIME [ END_TIME [ OPTION => VALUE ... ] ]
+=item balance_date_sql [ START_TIME [ END_TIME [ OPTION => VALUE ... ] ] ]
-Returns an SQL fragment to retreive the balance for this customer, only
-considering invoices with date earlier than START_TIME, and optionally not
+Returns an SQL fragment to retreive the balance for this customer, optionally
+considering invoices with date earlier than START_TIME, and not
later than END_TIME (total_owed_date minus total_unapplied_credits minus
total_unapplied_payments).