[freeside-commits] branch FREESIDE_4_BRANCH updated. 250979a64087d6113c2ef5eb617dc6e979ceda80
Mark Wells
mark at 420.am
Fri Jul 3 15:32:11 PDT 2015
The branch, FREESIDE_4_BRANCH has been updated
via 250979a64087d6113c2ef5eb617dc6e979ceda80 (commit)
from 5069e4b5dc1b71eb3df22223ff3cfb84efb96daf (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 250979a64087d6113c2ef5eb617dc6e979ceda80
Author: Mark Wells <mark at freeside.biz>
Date: Fri Jul 3 11:38:23 2015 -0700
make new gross sales calculation optional, #25943
diff --git a/FS/FS/Report/Table/Monthly.pm b/FS/FS/Report/Table/Monthly.pm
index 0ff7efd..f4ba020 100644
--- a/FS/FS/Report/Table/Monthly.pm
+++ b/FS/FS/Report/Table/Monthly.pm
@@ -182,9 +182,15 @@ sub data {
push @{$data{label}}, "$smonth/$syear"; # sprintf?
my $speriod = timelocal(0,0,0,1,$smonth-1,$syear);
- push @{$data{speriod}}, $speriod;
if ( ++$smonth == 13 ) { $syear++; $smonth=1; }
my $eperiod = timelocal(0,0,0,1,$smonth-1,$syear);
+ # 12-month mode: show results in a sliding window ending at $eperiod,
+ # but starting 12 months before.
+ if ( $self->{'12mo'}) {
+ $speriod = timelocal(0,0,0,1,$smonth-1,$syear-1);
+ }
+
+ push @{$data{speriod}}, $speriod;
push @{$data{eperiod}}, $eperiod;
my $col = 0; # a "column" here is the data corresponding to an item
diff --git a/FS/FS/cust_bill/Search.pm b/FS/FS/cust_bill/Search.pm
index 62c55d6..38f11d1 100644
--- a/FS/FS/cust_bill/Search.pm
+++ b/FS/FS/cust_bill/Search.pm
@@ -7,6 +7,7 @@ use FS::Record qw( qsearchs dbh );
use FS::cust_main;
use FS::access_user;
use FS::Conf;
+use charnames ':full';
=item search HASHREF
@@ -18,7 +19,9 @@ following additional parameters valid:
=over 4
-=item newest_percust
+=item newest_percust - only show the most recent invoice for each customer
+
+=item invoiced - show the invoiced amount (excluding discounts) instead of gross sales
=back
@@ -27,7 +30,8 @@ following additional parameters valid:
sub search {
my( $class, $params ) = @_;
- my( $count_query, $count_addl ) = ( '', '' );
+ my $count_query = '';
+ my @count_addl;
#some false laziness w/cust_bill::re_X
@@ -77,21 +81,30 @@ sub search {
my $money = (FS::Conf->new->config('money_char') || '$') . '%.2f';
- $count_query = 'SELECT COUNT(*), '. join(', ',
- map "SUM($_)",
- ( 'charged + discounted',
- 'discounted',
- 'credited',
- 'charged - credited',
- 'charged - credited - paid',
- )
- );
- $count_addl = [ "$money sales (gross)",
- "− $money discounted",
- "− $money credited",
- "= $money sales (net)",
+ my @sums = ( 'credited', # credits
+ 'charged - credited', # net sales
+ 'charged - credited - paid', # balance due
+ );
+
+ @count_addl = ( "\N{MINUS SIGN} $money credited",
+ "= $money net sales",
"$money outstanding balance",
- ];
+ );
+
+ if ( $params->{'invoiced'} ) {
+
+ unshift @sums, 'charged';
+ unshift @count_addl, "$money invoiced";
+
+ } else {
+
+ unshift @sums, 'charged + discounted', 'discounted';
+ unshift @count_addl, "$money gross sales",
+ "\N{MINUS SIGN} $money discounted";
+
+ }
+
+ $count_query = 'SELECT COUNT(*), '. join(', ', map "SUM($_)", @sums);
}
$count_query .= " FROM cust_bill $join $extra_sql";
@@ -115,7 +128,7 @@ sub search {
'order_by' => 'ORDER BY '. ( $params->{'order_by'} || 'cust_bill._date' ),
'count_query' => $count_query,
- 'count_addl' => $count_addl,
+ 'count_addl' => \@count_addl,
};
}
diff --git a/httemplate/graph/elements/monthly.html b/httemplate/graph/elements/monthly.html
index 4b988f1..1a94281 100644
--- a/httemplate/graph/elements/monthly.html
+++ b/httemplate/graph/elements/monthly.html
@@ -27,7 +27,7 @@ Example:
'start_year' => $syear,
'end_month' => $emonth,
'end_year' => $eyear,
-
+ '12mo' => 0,
#optional, pulled from CGI params if not specified,
#only if 'daily' option is given
@@ -96,6 +96,8 @@ $opt{'start_year'} ||= $cgi->param('start_year'); # || 1899+$curyear;
$opt{'end_month'} ||= $cgi->param('end_month'); # || $curmon+1;
$opt{'end_year'} ||= $cgi->param('end_year'); # || 1900+$curyear;
+$opt{'12mo'} ||= $cgi->param('12mo') ? 1 : 0;
+
$opt{'projection'} ||= $cgi->param('projection') ? 1 : 0;
if ( $opt{'daily'} ) { # daily granularity
@@ -119,6 +121,7 @@ my %reportopts = (
'end_day' => $opt{'end_day'},
'end_month' => $opt{'end_month'},
'end_year' => $opt{'end_year'},
+ '12mo' => $opt{'12mo'},
'projection' => $opt{'projection'},
'agentnum' => $opt{'agentnum'},
'refnum' => $opt{'refnum'},
diff --git a/httemplate/graph/money_time.cgi b/httemplate/graph/money_time.cgi
index b44adea..aa17eb2 100644
--- a/httemplate/graph/money_time.cgi
+++ b/httemplate/graph/money_time.cgi
@@ -41,35 +41,35 @@ my $referralname = $part_referral ? $part_referral->referral.' ' : '';
# need to clean this up. the false symmetry of "gross" and "net" everything
# makes it aesthetically hard to make this report more useful.
-my @items = qw( gross netsales
- discounted
+my @items = ($cgi->param('exclude_discount') ? 'invoiced' : 'gross');
+push @items,
+ qw( discounted netsales
credits netcredits
payments receipts
refunds netrefunds
cashflow netcashflow
- );
-if ( $cgi->param('12mo') == 1 ) {
- @items = map $_.'_12mo', @items;
-}
+ );
my %label = (
'gross' => 'Gross Sales',
- 'netsales' => 'Net Sales',
+ 'invoiced' => 'Invoiced Sales',
+ 'netsales' => 'Net Sales',
'discounted' => 'Discounts',
'credits' => 'Gross Credits',
- 'netcredits' => 'Net Credits',
+ 'netcredits' => 'Net Credits',
'payments' => 'Gross Receipts',
- 'receipts' => 'Net Receipts',
+ 'receipts' => 'Net Receipts',
'refunds' => 'Gross Refunds',
- 'netrefunds' => 'Net Refunds',
+ 'netrefunds' => 'Net Refunds',
'cashflow' => 'Gross Cashflow',
- 'netcashflow' => 'Net Cashflow',
+ 'netcashflow' => 'Net Cashflow',
);
my %graph_suffix = (
'gross' => ' (invoiced + discounts)',
+ 'invoiced' => '',
'netsales' => ' (invoiced - applied credits)',
- 'discounted' => ' (discounts)',
+ 'discounted' => '',
'credits' => ' (credited)',
'netcredits' => ' (applied credits)',
'payments' => ' (payments)',
@@ -81,14 +81,9 @@ my %graph_suffix = (
);
my %graph_label = map { $_ => $label{$_}.$graph_suffix{$_} } keys %label;
-$label{$_.'_12mo'} = $label{$_}. " (prev 12 months)"
- foreach keys %label;
-
-$graph_label{$_.'_12mo'} = $graph_label{$_}. " (prev 12 months)"
- foreach keys %graph_label;
-
my %color = (
'gross' => '9999ff', #light blue
+ 'invoiced' => '9999ff', #light blue
'netsales' => '0000cc', #blue
'credits' => 'ff9999', #light red
'netcredits' => 'cc0000', #red
@@ -108,6 +103,7 @@ $ar .= ";cust_classnum=$_" foreach @classnums;
my %link = (
'gross' => "${p}search/cust_bill.html?$ar;",
+ 'invoiced' => "${p}search/cust_bill.html?$ar;invoiced=1;",
'netsales' => "${p}search/cust_bill.html?$ar;net=1;",
'credits' => "${p}search/cust_credit.html?$ar;",
'netcredits' => "${p}search/cust_credit_bill.html?$ar;",
@@ -119,4 +115,12 @@ my %link = (
);
# XXX link 12mo?
+if ( $cgi->param('12mo') ) {
+ $label{$_} .= " (prev 12 months)"
+ foreach keys %label;
+
+ $graph_label{$_} .= " (prev 12 months)"
+ foreach keys %graph_label;
+}
+
</%init>
diff --git a/httemplate/graph/report_money_time.html b/httemplate/graph/report_money_time.html
index 315d31b..8f534c0 100644
--- a/httemplate/graph/report_money_time.html
+++ b/httemplate/graph/report_money_time.html
@@ -36,9 +36,25 @@
)
%>
-<TR>
- <TD ALIGN="right"><INPUT TYPE="checkbox" NAME="12mo" VALUE="1"></TD>
- <TD>Show 12 month totals instead of monthly values</TD>
+<tr>
+ <td />
+ <td>
+ <& /elements/checkbox.html,
+ field => '12mo',
+ value => 1,
+ &>
+ <% emt('Show 12 month totals instead of monthly values') %>
+ </td>
+</tr>
+ <td />
+ <td>
+ <& /elements/checkbox.html,
+ field => 'exclude_discount',
+ value => 1,
+ curr_value => 0,
+ &>
+ <% emt('Exclude discounts from total sales') %>
+ </td>
</TR>
</TABLE>
diff --git a/httemplate/search/cust_bill.html b/httemplate/search/cust_bill.html
index 6626736..017e829 100755
--- a/httemplate/search/cust_bill.html
+++ b/httemplate/search/cust_bill.html
@@ -8,7 +8,7 @@
'count_addl' => $count_addl,
'redirect' => $link,
'header' => [ emt('Invoice #'),
- emt('Gross Amount'),
+ emt($invoiced ? 'Charged' : 'Gross Amount'),
emt('Discount'),
emt('Credits'),
emt('Net Amount'),
@@ -18,7 +18,7 @@
],
'fields' => [
'display_invnum',
- 'gross',
+ $invoiced ? 'charged' : 'gross',
'discounted',
'credited',
'net',
@@ -28,7 +28,7 @@
],
'sort_fields' => [
'COALESCE( agent_invid, invnum )',
- 'gross',
+ $invoiced ? 'charged' : 'gross',
'discounted',
'credited',
'net',
@@ -87,6 +87,9 @@ my( $count_query, $sql_query );
my $count_addl = '';
my %search = ();
+# show invoiced amount (charged) instead of gross sales
+my $invoiced = $cgi->param('invoiced') ? 1 : 0;
+
if ( $cgi->param('invnum') =~ /^\s*(FS-)?(\d+)\s*$/ ) {
my $join_cust_main = FS::UI::Web::join_cust_main('cust_bill');
@@ -132,7 +135,7 @@ if ( $cgi->param('invnum') =~ /^\s*(FS-)?(\d+)\s*$/ ) {
#scalars
for (qw( agentnum custnum cust_status refnum invnum_min invnum_max
- open net newest_percust
+ open net newest_percust invoiced
))
{
diff --git a/httemplate/search/report_cust_bill.html b/httemplate/search/report_cust_bill.html
index e80c6e8..bd40b96 100644
--- a/httemplate/search/report_cust_bill.html
+++ b/httemplate/search/report_cust_bill.html
@@ -88,7 +88,12 @@
<TR>
<TD ALIGN="right"><INPUT TYPE="checkbox" NAME="open" VALUE="1" CHECKED></TD>
<TD><% mt('Show only open invoices') |h %></TD>
- </TR>
+</TR>
+
+<TR>
+ <TD ALIGN="right"><INPUT TYPE="checkbox" NAME="invoiced" VALUE="1"></TD>
+ <TD><% emt('Exclude discounts from gross amount billed'), %></TD>
+</TR>
% unless ( $custnum ) {
<TR>
-----------------------------------------------------------------------
Summary of changes:
FS/FS/Report/Table/Monthly.pm | 8 +++++-
FS/FS/cust_bill/Search.pm | 47 ++++++++++++++++++++-----------
httemplate/graph/elements/monthly.html | 5 +++-
httemplate/graph/money_time.cgi | 40 ++++++++++++++------------
httemplate/graph/report_money_time.html | 22 +++++++++++++--
httemplate/search/cust_bill.html | 11 +++++---
httemplate/search/report_cust_bill.html | 7 ++++-
7 files changed, 95 insertions(+), 45 deletions(-)
More information about the freeside-commits
mailing list