[freeside-commits] branch master updated. 739d18b193ef10c6a238759af994f4abd53b4f8a
Ivan
ivan at 420.am
Mon May 5 18:19:42 PDT 2014
The branch, master has been updated
via 739d18b193ef10c6a238759af994f4abd53b4f8a (commit)
from 34a63e9fab07ff8165dea6d207e088d29c880f83 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 739d18b193ef10c6a238759af994f4abd53b4f8a
Author: Ivan Kohler <ivan at freeside.biz>
Date: Mon May 5 18:19:41 2014 -0700
commission reporting optimizations, RT#28964
diff --git a/FS/FS/sales.pm b/FS/FS/sales.pm
index bdeaf1b..f1b406d 100644
--- a/FS/FS/sales.pm
+++ b/FS/FS/sales.pm
@@ -205,28 +205,37 @@ sub cust_bill_pkg {
qsearch( $self->cust_bill_pkg_search(@_) )
}
-sub cust_credit {
+sub cust_credit_search {
my( $self, $sdate, $edate, %search ) = @_;
$search{'hashref'}->{'commission_salesnum'} = $self->salesnum;
+ my @where = ();
+ push @where, "cust_credit._date >= $sdate" if $sdate;
+ push @where, "cust_credit._date < $edate" if $edate;
+
my $classnum_sql = '';
if ( exists($search{'commission_classnum'}) ) {
my $classnum = delete($search{'commission_classnum'});
- $classnum_sql = " AND part_pkg.classnum ". ( $classnum ? " = $classnum"
- : " IS NULL " );
+ push @where, 'part_pkg.classnum '. ( $classnum ? " = $classnum"
+ : " IS NULL " );
$search{'addl_from'} .=
' LEFT JOIN cust_pkg ON ( commission_pkgnum = cust_pkg.pkgnum ) '.
' LEFT JOIN part_pkg USING ( pkgpart ) ';
}
- qsearch({ 'table' => 'cust_credit',
- 'extra_sql' => " AND cust_credit._date >= $sdate ".
- " AND cust_credit._date < $edate ".
- $classnum_sql,
- %search,
- });
+ my $extra_sql = "AND ".join(' AND ', map {"( $_ )"} @where);
+
+ { 'table' => 'cust_credit',
+ 'extra_sql' => $extra_sql,
+ %search,
+ };
+}
+
+sub cust_credit {
+ my $self = shift;
+ qsearch( $self->cust_credit_search(@_) )
}
=back
diff --git a/httemplate/search/sales_commission.html b/httemplate/search/sales_commission.html
index 57b6cdc..710461c 100644
--- a/httemplate/search/sales_commission.html
+++ b/httemplate/search/sales_commission.html
@@ -66,17 +66,20 @@ my $sales_sub_maker = sub {
sub {
my $sales = shift;
- #efficiency improvement: ask the db for a sum instead of all the records
- my $total = 0;
- my @cust_bill_pkg = $sales->cust_bill_pkg(
+ my $search = $sales->cust_bill_pkg_search(
$beginning,
$ending,
'cust_main_sales' => $cust_main_sales,
'paid' => $paid,
);
- $total += $_->get($field) foreach @cust_bill_pkg;
+ die 'cust_bill_pkg_search hashref not yet handled' if $search->{hashref};
- $money_char. sprintf('%.2f', $total);
+ my $total = FS::Record->scalar_sql(
+ "SELECT SUM(cust_bill_pkg.$field) FROM cust_bill_pkg ". #$search->{table}
+ $search->{addl_from}. ' '. $search->{extra_sql}
+ );
+
+ return $money_char. sprintf('%.2f', $total);
};
};
@@ -84,11 +87,21 @@ my $commission_sub = sub {
my $sales = shift;
#efficiency improvement: ask the db for a sum instead of all the records
- my $total_credit = 0;
- my @cust_credit = $sales->cust_credit( $beginning, $ending );
- $total_credit += $_->amount foreach @cust_credit;
+ #my $total_credit = 0;
+ #my @cust_credit = $sales->cust_credit( $beginning, $ending );
+ #$total_credit += $_->amount foreach @cust_credit;
+
+ my $search = $sales->cust_credit_search( $beginning, $ending );
+
+ my $sql =
+ "SELECT SUM(cust_credit.amount) FROM cust_credit ". #$search->{table}
+ $search->{addl_from}. ' '.
+ ' WHERE commission_salesnum = ? '. #$search->{hashref}
+ $search->{extra_sql};
+
+ my $total = FS::Record->scalar_sql($sql, $sales->salesnum);
- $money_char. sprintf('%.2f', $total_credit);
+ $money_char. sprintf('%.2f', $total);
};
my $commission_link = [ 'cust_credit.html?'.
-----------------------------------------------------------------------
Summary of changes:
FS/FS/sales.pm | 27 ++++++++++++++++++---------
httemplate/search/sales_commission.html | 31 ++++++++++++++++++++++---------
2 files changed, 40 insertions(+), 18 deletions(-)
More information about the freeside-commits
mailing list