allow non-integer minutes in CDR usage pools, #5738, see also #28308
authorMark Wells <mark@freeside.biz>
Fri, 16 May 2014 02:16:43 +0000 (19:16 -0700)
committerMark Wells <mark@freeside.biz>
Fri, 16 May 2014 02:16:43 +0000 (19:16 -0700)
FS/FS/ClientAPI/MyAccount.pm
FS/FS/Schema.pm
FS/FS/cdr_cust_pkg_usage.pm
FS/FS/cust_pkg.pm
FS/FS/cust_pkg_usage.pm
FS/FS/part_pkg_usage.pm
httemplate/view/cust_main/packages/package.html

index e5078f9..6619eb1 100644 (file)
@@ -1724,7 +1724,7 @@ sub list_svcs {
     my $tag = $part->description . ($part->shared ? 1 : 0);
     my $row = $usage_pools{$tag} 
           ||= [ $part->description, 0, 0, $part->shared ? 1 : 0 ];
-    $row->[1] += $_->minutes; # minutes remaining
+    $row->[1] += sprintf('%.1f', $_->minutes); # minutes remaining
     $row->[2] += $part->minutes; # minutes total
   }
 
index 416587d..12064af 100644 (file)
@@ -2735,7 +2735,7 @@ sub tables_hashref {
       'columns' => [
         'pkgusagenum', 'serial', '', '', '', '',
         'pkgnum',         'int', '', '', '', '',
-        'minutes',        'int', '', '', '', '',
+        'minutes',        'double precision', '', '', '', '',
         'pkgusagepart',   'int', '', '', '', '',
       ],
       'primary_key'  => 'pkgusagenum',
@@ -2756,7 +2756,7 @@ sub tables_hashref {
         'cdrusagenum', 'bigserial', '', '', '', '',
         'acctid',      'bigint',    '', '', '', '',
         'pkgusagenum', 'int',       '', '', '', '',
-        'minutes',     'int',       '', '', '', '',
+        'minutes',     'double precision',       '', '', '', '',
       ],
       'primary_key'  => 'cdrusagenum',
       'unique'       => [],
@@ -4713,7 +4713,7 @@ sub tables_hashref {
       'columns' => [
         'pkgusagepart', 'serial',   '', '', '', '',
         'pkgpart',  'int',      '', '', '', '',
-        'minutes',  'int',      '', '', '', '',
+        'minutes',  'double precision',      '', '', '', '',
         'priority', 'int',  'NULL', '', '', '',
         'shared',   'char', 'NULL',  1, '', '',
         'rollover', 'char', 'NULL',  1, '', '',
index 7de8764..5d68d66 100644 (file)
@@ -86,7 +86,7 @@ sub check {
     $self->ut_numbern('cdrusagenum')
     || $self->ut_foreign_key('acctid', 'cdr', 'acctid')
     || $self->ut_foreign_key('pkgusagenum', 'cust_pkg_usage', 'pkgusagenum')
-    || $self->ut_number('minutes')
+    || $self->ut_float('minutes')
   ;
   return $error if $error;
 
index b1cdf45..cabecd6 100644 (file)
@@ -4015,7 +4015,7 @@ sub apply_usage {
         minutes     => min($cust_pkg_usage->minutes, $minutes),
     });
     $cust_pkg_usage->set('minutes',
-      sprintf('%.0f', $cust_pkg_usage->minutes - $cdr_cust_pkg_usage->minutes)
+      $cust_pkg_usage->minutes - $cdr_cust_pkg_usage->minutes
     );
     $error = $cust_pkg_usage->replace || $cdr_cust_pkg_usage->insert;
     $minutes -= $cdr_cust_pkg_usage->minutes;
index d295842..84ba66e 100644 (file)
@@ -117,7 +117,7 @@ sub check {
   my $error = 
     $self->ut_numbern('pkgusagenum')
     || $self->ut_foreign_key('pkgnum', 'cust_pkg', 'pkgnum')
-    || $self->ut_numbern('minutes')
+    || $self->ut_floatn('minutes')
     || $self->ut_foreign_key('pkgusagepart', 'part_pkg_usage', 'pkgusagepart')
   ;
   return $error if $error;
index 008a2a9..b19c63d 100644 (file)
@@ -116,7 +116,7 @@ sub check {
   my $error = 
     $self->ut_numbern('pkgusagepart')
     || $self->ut_foreign_key('pkgpart', 'part_pkg', 'pkgpart')
-    || $self->ut_number('minutes')
+    || $self->ut_float('minutes')
     || $self->ut_numbern('priority')
     || $self->ut_flag('shared')
     || $self->ut_flag('rollover')
index d83bab4..9f6169c 100644 (file)
 %     $trstyle = ' CLASS="shared"' if $part->shared;
     <TR<%$trstyle%>>
       <TD ALIGN="right"><% $part->description %>: </TD>
-      <TD <%$color%> ALIGN="right"><% $usage->minutes %></TD>
+      <TD <%$color%> ALIGN="right"><% sprintf('%.1f', $usage->minutes) %></TD>
       <TD <%$color%>> / </TD>
       <TD <%$color%>><% $part->minutes %></TD>
 %     if ( $part->shared ) {