diff options
author | Ivan Kohler <ivan@freeside.biz> | 2012-06-13 14:34:53 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2012-06-13 14:34:53 -0700 |
commit | daa09251fec52517b630b3f6935041dc7c795f90 (patch) | |
tree | 25066d724604f2a218d8c80707667f7a1b78bbd0 /httemplate | |
parent | 15dbf6151b7e6e3b32e55fd6609725f650349460 (diff) | |
parent | 41967a7cac39ce2156b9b86436ade82f9a99104e (diff) |
Merge branch 'master' of git.freeside.biz:/home/git/freeside
Diffstat (limited to 'httemplate')
-rw-r--r-- | httemplate/search/prepaid_income.html | 20 | ||||
-rw-r--r-- | httemplate/search/unearned_detail.html | 25 |
2 files changed, 29 insertions, 16 deletions
diff --git a/httemplate/search/prepaid_income.html b/httemplate/search/prepaid_income.html index d02345edc..ebac5a2a9 100644 --- a/httemplate/search/prepaid_income.html +++ b/httemplate/search/prepaid_income.html @@ -56,7 +56,7 @@ <BR> <% $actual_label %><% $actual_label ? 'u' : 'U' %>nearned revenue -is the amount of unearned revenue +is the as-yet-unearned portion of revenue <% $actual_label ? 'Freeside has actually' : '' %> invoiced for packages with <% $cgi->param('include_monthly') ? 'terms extending into the future.' @@ -148,17 +148,20 @@ foreach my $agentnum (@agentnums) { } elsif ( $mode eq 'paid' ) { $unearned_base = FS::cust_bill_pkg->paid_sql(@opt); } - my $period = "CAST(cust_bill_pkg.edate - cust_bill_pkg.sdate AS REAL)"; - my $elapsed = "GREATEST( $now - cust_bill_pkg.sdate, 0 )"; - my $remaining = "(1 - $elapsed/$period)"; - + + my $edate_zero = midnight_sql('edate'); + my $sdate_zero = midnight_sql('sdate'); + my $period = "CAST( ($edate_zero - $sdate_zero) / 86400.0 AS DECIMAL(10,0) )"; + my $remaining = "GREATEST( + CAST( ($edate_zero - $now) / 86400.0 AS DECIMAL(10,0) ), + 0)"; + my $fraction = "$remaining / $period"; + my $unearned_sql = "CAST( - GREATEST( $unearned_base * $remaining, 0 ) + GREATEST( $unearned_base * $fraction, 0 ) AS DECIMAL(10,2) )"; - my $float = 'REAL'; #'DOUBLE PRECISION'; - my $select = "SUM( $unearned_sql )"; if ( !$cgi->param('include_monthly') ) { @@ -186,7 +189,6 @@ foreach my $agentnum (@agentnums) { $where "; - warn $sql; my $sth = dbh->prepare($sql) or die dbh->errstr; $sth->execute or die $sth->errstr; my $total = $sth->fetchrow_arrayref->[0]; diff --git a/httemplate/search/unearned_detail.html b/httemplate/search/unearned_detail.html index 831625e7f..02d514cbe 100644 --- a/httemplate/search/unearned_detail.html +++ b/httemplate/search/unearned_detail.html @@ -1,5 +1,6 @@ <& elements/search.html, - 'title' => emt("Unearned revenue - ".ucfirst($unearned_mode)), + 'title' => emt("Unearned revenue - ".ucfirst($unearned_mode)) . ' (' . + time2str('%b %d %Y', $unearned) . ')', 'name' => emt('line items'), 'query' => $query, 'count_query' => $count_query, @@ -41,8 +42,8 @@ date_sub('last_credit'), #Charge start date_sub('sdate'), - #Charge end - date_sub('edate'), + #Charge end, minus most of a day + date_sub('before_edate'), #Invoice 'invnum', #Invoice date @@ -167,11 +168,19 @@ else { # whatever we're using as the base, only show rows where it's positive push @where, "$unearned_base > 0"; -my $period = "CAST(cust_bill_pkg.edate - cust_bill_pkg.sdate AS REAL)"; -my $elapsed = "GREATEST( $unearned - cust_bill_pkg.sdate, 0 )"; -my $remaining = "(1 - $elapsed/$period)"; +my $edate_zero = midnight_sql('edate'); +my $sdate_zero = midnight_sql('sdate'); +# $unearned is one second before midnight on the date requested for the report. -$unearned_sql = "CAST( $unearned_base * $remaining AS DECIMAL(10,2) )"; +# suppress partial days for more accounting-like behavior +my $period = "CAST( ($edate_zero - $sdate_zero) / 86400.0 AS DECIMAL(10,0) )"; + +my $remaining = "GREATEST( + CAST( ($edate_zero - $unearned) / 86400.0 AS DECIMAL(10,0) ), + 0)"; +my $fraction = "$remaining / $period"; + +$unearned_sql = "CAST( $unearned_base * $fraction AS DECIMAL(10,2) )"; push @select, "$unearned_sql AS unearned_revenue"; # last payment/credit date @@ -187,6 +196,8 @@ foreach my $x (qw(pay credit)) { push @select, "($last_date_sql) AS last_$x"; } +push @select, '(edate - 82799) AS before_edate'; + #no itemdesc #no tax report group kludge #no tax exemption |