[freeside-commits] branch master updated. 17956978685bcc30c8532c94b89b4d481d337c4e

Mark Wells mark at 420.am
Mon Sep 12 12:25:38 PDT 2016


The branch, master has been updated
       via  17956978685bcc30c8532c94b89b4d481d337c4e (commit)
      from  752e12c741bcb43a1b3eec64c213452adc56b843 (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 17956978685bcc30c8532c94b89b4d481d337c4e
Author: Mark Wells <mark at freeside.biz>
Date:   Mon Sep 12 12:25:21 2016 -0700

    respect CDR price rounding in invoice details, #72451 and #72330

diff --git a/FS/FS/detail_format.pm b/FS/FS/detail_format.pm
index 78517dd..46c6300 100644
--- a/FS/FS/detail_format.pm
+++ b/FS/FS/detail_format.pm
@@ -35,9 +35,9 @@ a subclass.
 OPTIONS may contain:
 
 - buffer: an arrayref to store details into.  This may avoid the need for a
-large copy operation at the end of processing.  However, since summary formats
-will produce nothing until the end of processing, C<finish> must be called
-after all CDRs have been appended.
+large copy operation at the end of processing.  However, since summary
+formats will produce nothing until the end of processing, C<finish> must be
+called after all CDRs have been appended.
 
 - inbound: a flag telling the formatter to format CDRs for display to the
 receiving party, rather than the originator.  In this case, the
@@ -48,6 +48,9 @@ with the C<inbound> method.
 - locale: a locale string to use for static text and date formats.  This is
 optional.
 
+- rounding: the number of decimal places to show in the amount column. This
+is optional, and defaults to whatever's in the schema (which is 4).
+
 =cut
 
 sub new {
@@ -72,6 +75,7 @@ sub new {
   my $self = { conf => FS::Conf->new({ locale => $locale }),
                csv  => Text::CSV_XS->new({ binary => 1 }),
                inbound  => ($opt{'inbound'} ? 1 : 0),
+               rounding => $opt{'rounding'},
                buffer   => ($opt{'buffer'} || []),
                _lh      => FS::L10N->get_handle($locale),
                _dh      => eval { Date::Language->new($language_name) } ||
@@ -212,6 +216,8 @@ sub single_detail {
   my $object = $self->{inbound} ? $cdr->cdr_termination(1) : $cdr;
   my $price = $object->rated_price if $object;
   $price = 0 if $cdr->freesidestatus eq 'no-charge';
+  $price = sprintf('%.*f', $self->{'rounding'}, $price)
+    if $self->{'rounding'} and length($price);
 
   FS::cust_bill_pkg_detail->new( {
       'acctid'      => ($self->{inbound} ? '' : $cdr->acctid),
@@ -303,7 +309,15 @@ sub price {
   my $object = $self->{inbound} ? $cdr->cdr_termination(1) : $cdr;
   my $price = $object->rated_price if $object;
   $price = '0.00' if $object->freesidestatus eq 'no-charge';
-  length($price) ? $self->money_char . $price : '';
+  $price = sprintf('%.*f', $self->{'rounding'}, $price)
+    if $self->{'rounding'};
+  if (length($price)) {
+    $price = sprintf('%.*f', $self->{'rounding'}, $price)
+      if $self->{'rounding'};
+    return $self->money_char . $price;
+  } else {
+    return '';
+  }
 }
 
 1;
diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm
index 7d9a7f5..50ae0af 100644
--- a/FS/FS/part_pkg/voip_cdr.pm
+++ b/FS/FS/part_pkg/voip_cdr.pm
@@ -423,7 +423,8 @@ sub calc_usage {
 
   my $formatter = FS::detail_format->new($output_format,
     buffer => $details,
-    locale => $cust_pkg->cust_main->locale
+    locale => $cust_pkg->cust_main->locale,
+    rounding  => ($self->option_cacheable('rounding') || 2),
   );
 
   my $use_duration = $self->option('use_duration');
diff --git a/FS/FS/part_pkg/voip_tiered.pm b/FS/FS/part_pkg/voip_tiered.pm
index 0ad0ff6..d8607a6 100644
--- a/FS/FS/part_pkg/voip_tiered.pm
+++ b/FS/FS/part_pkg/voip_tiered.pm
@@ -196,7 +196,10 @@ sub calc_usage {
 
   my $output_format = $self->option('output_format', 'Hush!') || 'default';
 
-  my $formatter = FS::detail_format->new($output_format, buffer => $details);
+  my $formatter = FS::detail_format->new($output_format,
+    buffer => $details,
+    rounding => ($self->option_cacheable('rounding') || 2))
+  ;
 
   my $charges = 0;
 

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/detail_format.pm        |   22 ++++++++++++++++++----
 FS/FS/part_pkg/voip_cdr.pm    |    3 ++-
 FS/FS/part_pkg/voip_tiered.pm |    5 ++++-
 3 files changed, 24 insertions(+), 6 deletions(-)




More information about the freeside-commits mailing list