[freeside-commits] branch master updated. 3cdd4af468c2c93e1fe4ab6a0ac95537aca5068e
Mark Wells
mark at 420.am
Fri Jan 22 16:25:04 PST 2016
The branch, master has been updated
via 3cdd4af468c2c93e1fe4ab6a0ac95537aca5068e (commit)
via 19ecc46addd9225704aa524126169ec30d353822 (commit)
via f75e09ff051137a6b298801b1faae9443c6343a5 (commit)
from cae584bf375249ab6c1143f5c7cce2776e849e05 (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 3cdd4af468c2c93e1fe4ab6a0ac95537aca5068e
Author: Mark Wells <mark at freeside.biz>
Date: Fri Jan 22 16:22:30 2016 -0800
optionally round tax to the nearest cent for each line item, #39487
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 1bb6dcc..fda199e 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -5165,6 +5165,13 @@ and customer address. Include units.',
},
{
+ 'key' => 'tax-round_per_line_item',
+ 'section' => 'billing',
+ 'description' => 'Calculate tax and round to the nearest cent for each line item, rather than for the whole invoice.',
+ 'type' => 'checkbox',
+ },
+
+ {
'key' => 'cust_main-default_view',
'section' => 'UI',
'description' => 'Default customer view, for users who have not selected a default view in their preferences.',
diff --git a/FS/FS/TaxEngine/internal.pm b/FS/FS/TaxEngine/internal.pm
index f45bc08..d2a5d7f 100644
--- a/FS/FS/TaxEngine/internal.pm
+++ b/FS/FS/TaxEngine/internal.pm
@@ -3,6 +3,12 @@ package FS::TaxEngine::internal;
use strict;
use base 'FS::TaxEngine';
use FS::Record qw(dbh qsearch qsearchs);
+use FS::Conf;
+use vars qw( $conf );
+
+FS::UID->install_callback(sub {
+ $conf = FS::Conf->new;
+});
=head1 SUMMARY
@@ -63,6 +69,8 @@ sub taxline {
my $taxable_cents = 0;
my $tax_cents = 0;
+ my $round_per_line_item = $conf->exists('tax-round_per_line_item');
+
my $cust_main = $self->{cust_main};
my $custnum = $cust_main->custnum;
my $invoice_time = $self->{invoice_time};
@@ -258,7 +266,16 @@ sub taxline {
$taxable_charged = sprintf( "%.2f", $taxable_charged);
next if $taxable_charged == 0;
- my $this_tax_cents = int($taxable_charged * $tax_object->tax);
+ my $this_tax_cents = $taxable_charged * $self->tax;
+ if ( $round_per_line_item ) {
+ # Round the tax to the nearest cent for each line item, instead of
+ # across the whole invoice.
+ $this_tax_cents = sprintf('%.0f', $this_tax_cents);
+ } else {
+ # Otherwise truncate it so that rounding error is always positive.
+ $this_tax_cents = int($this_tax_cents);
+ }
+
my $location = FS::cust_bill_pkg_tax_location->new({
'taxnum' => $tax_object->taxnum,
'taxtype' => ref($tax_object),
@@ -273,11 +290,18 @@ sub taxline {
$tax_cents += $this_tax_cents;
} #foreach $cust_bill_pkg
- # now round and distribute
+ # calculate tax and rounding error for the whole group
my $extra_cents = sprintf('%.2f', $taxable_cents * $tax_object->tax / 100)
* 100 - $tax_cents;
# make sure we have an integer
$extra_cents = sprintf('%.0f', $extra_cents);
+
+ # if we're rounding per item, then ignore that and don't distribute any
+ # extra cents.
+ if ( $round_per_line_item ) {
+ $extra_cents = 0;
+ }
+
if ( $extra_cents < 0 ) {
die "nonsense extra_cents value $extra_cents";
}
commit 19ecc46addd9225704aa524126169ec30d353822
Merge: f75e09f cae584b
Author: Mark Wells <mark at freeside.biz>
Date: Fri Jan 22 16:15:50 2016 -0800
Merge branch 'master' of git.freeside.biz:/home/git/freeside
commit f75e09ff051137a6b298801b1faae9443c6343a5
Author: Mark Wells <mark at freeside.biz>
Date: Mon Jan 18 14:32:15 2016 -0800
spelling
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 0f94f8f..1bb6dcc 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -2617,7 +2617,7 @@ and customer address. Include units.',
'type' => 'select',
'select_hash' => [
'actual_oncard' => 'Default/classic behavior: set the flag if a customer has actual previous charges on the card.',
- 'transaction_is_recur' => 'Set the flag if the transaction itself is recurring, irregardless of previous charges on the card.',
+ 'transaction_is_recur' => 'Set the flag if the transaction itself is recurring, regardless of previous charges on the card.',
],
},
-----------------------------------------------------------------------
Summary of changes:
FS/FS/Conf.pm | 9 ++++++++-
FS/FS/TaxEngine/internal.pm | 28 ++++++++++++++++++++++++++--
2 files changed, 34 insertions(+), 3 deletions(-)
More information about the freeside-commits
mailing list