fix skip_old when date has leading 0, RT#81480
[freeside.git] / FS / FS / part_pkg / voip_cdr.pm
index d96c472..87c3247 100644 (file)
@@ -4,6 +4,7 @@ use base qw( FS::part_pkg::recur_Common );
 use strict;
 use vars qw( $DEBUG %info );
 use Tie::IxHash;
+use Date::Parse;
 use Date::Format;
 use Text::CSV_XS;
 use FS::Conf;
@@ -65,7 +66,7 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash',
 ;
 
 %info = (
-  'name' => 'VoIP rating by plan of CDR records in an internal (or external) SQL table',
+  'name' => 'VoIP rating by plan of CDR records',
   'shortname' => 'VoIP/telco CDR rating (standard)',
   'inherit_fields' => [ 'prorate_Mixin', 'global_Mixin' ],
   'fields' => {
@@ -165,9 +166,13 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash',
                          },
 
     'use_cdrtypenum' => { 'name' => 'Only charge for CDRs where the CDR Type is set to this cdrtypenum: ',
+                          'validate' => \&FS::part_pkg::validate_number_blank,
+                          'js_validate' => 'digits: true',
                          },
     
     'ignore_cdrtypenum' => { 'name' => 'Do not charge for CDRs where the CDR Type is set to this cdrtypenum: ',
+                             'validate' => \&FS::part_pkg::validate_number_blank,
+                             'js_validate' => 'digits: true',
                          },
 
     'use_calltypenum' => { 'name' => 'Only charge for CDRs where the CDR Call Type is set to this calltypenum: ',
@@ -294,6 +299,9 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash',
     'bill_only_pkg_dates' => { 'name' => 'Only bill CDRs with a date during the package billing period',
                                'type' => 'checkbox',
                              },
+    'skip_old' => { 'name' => 'Do not charge for CDRs older than: ',
+                    'type' => 'date',
+                  },
 
     #XXX also have option for an external db?  these days we suck them into ours
 #    'cdr_location' => { 'name' => 'CDR database location'
@@ -355,11 +363,18 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash',
                        selfservice_format selfservice_inbound_format
                        usage_mandate usage_section summarize_usage 
                        usage_showzero bill_every_call bill_inactive_svcs
-                       bill_only_pkg_dates
+                       bill_only_pkg_dates skip_old
                        suspend_bill 
                      )
                   ],
   'weight' => 41,
+  'validate' => sub {
+    # Validation function for FS::part_pkg::check_options()
+    my $options = shift;
+    return "Please choose a Rate Plan for use with selected Rating Method"
+      if $options->{rating_method} eq 'prefix' &&  !$options->{ratenum};
+    return;
+  },
 );
 
 sub price_info {
@@ -663,6 +678,10 @@ sub check_chargable {
       and length($cdr->max_callers)
       and $cdr->max_callers <= $self->option_cacheable('skip_max_callers');
 
+  return "calldate < ". $self->option_cacheable('skip_old')
+    if length($self->option_cacheable('skip_old'))
+    && $cdr->calldate_unix < str2time($self->option_cacheable('skip_old')); 
+
   #all right then, rate it
   '';
 }
@@ -724,4 +743,3 @@ sub hide_svc_detail {
 
 
 1;
-