[freeside-commits] branch FREESIDE_3_BRANCH updated. 529413f23d545179ff07ac393713a225a78014c2

Mark Wells mark at 420.am
Fri Sep 5 14:55:17 PDT 2014


The branch, FREESIDE_3_BRANCH has been updated
       via  529413f23d545179ff07ac393713a225a78014c2 (commit)
      from  b13dda3c202b7eb07167e6423ee71c63f18cdac1 (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 529413f23d545179ff07ac393713a225a78014c2
Author: Mark Wells <mark at freeside.biz>
Date:   Fri Sep 5 14:47:53 2014 -0700

    validate parameter in balance_age condition, #15045

diff --git a/FS/FS/part_event/Condition/balance_age.pm b/FS/FS/part_event/Condition/balance_age.pm
index 8480659..701dafd 100644
--- a/FS/FS/part_event/Condition/balance_age.pm
+++ b/FS/FS/part_event/Condition/balance_age.pm
@@ -5,6 +5,46 @@ use base qw( FS::part_event::Condition );
 
 sub description { 'Customer balance age'; }
 
+=item check_options OPTIONS
+
+Validate options
+
+=cut
+
+my $duration_rx = qr/^(\d+)$/;
+my $unit_rx = qr/^[wmdh]$/;
+my $both_rx = qr/^(\d+)([wmdh])/;
+
+sub check_options {
+  my ($self, $options) = @_;
+
+  my $age       = $options->{age};
+  my $age_units = $options->{age_units};
+
+  return "Invalid (age) must be defined: $age"
+    unless( defined $age );
+
+  # over-ride possibly inaccurate unit indicator
+  if( $age =~ /$both_rx/ ){
+    $age = $1;
+    $age_units = $2;
+  }
+
+  return "Invalid (age_units) must be defined: $age_units"
+    unless defined $age_units;
+
+  return "Invalid (age) must be integer: $age"
+    unless( $age =~ /$duration_rx/ );
+
+  return "Invalid (age) must be non-zero: $age"
+    if ( $age == 0 );
+
+  return( "Invalid (age_units) must be m/w/d/h: $age_units" )
+    unless( $age_units =~ /$unit_rx/i );
+
+  return '';
+}
+
 sub option_fields {
   (
     'balance' => { 'label'      => 'Balance over',
diff --git a/httemplate/edit/process/part_event.html b/httemplate/edit/process/part_event.html
index a8c434c..481439d 100644
--- a/httemplate/edit/process/part_event.html
+++ b/httemplate/edit/process/part_event.html
@@ -85,6 +85,21 @@
       if ( $cgi->param('_initialize') ) {
         $cgi->param('disabled', 'Y');
       }
+
+      my $balance_age_rx = qr/^(condition.+)\.balance_age\.age$/;
+
+      foreach my $param ( keys %{ $cgi->Vars() } ){
+
+	next unless ( $param =~ /$balance_age_rx/ );
+	next unless $cgi->param($1) eq 'balance_age';
+
+	my $errstr = FS::part_event::Condition::balance_age->
+	  check_options( { age       => $cgi->param($param),
+			   age_units => $cgi->param("${param}_units") } );
+
+	return $errstr if $errstr;
+      }
+
       return '';
     },
     'noerror_callback' => sub {
diff --git a/httemplate/elements/menu.html b/httemplate/elements/menu.html
index 7e329cf..61cdd74 100644
--- a/httemplate/elements/menu.html
+++ b/httemplate/elements/menu.html
@@ -113,8 +113,9 @@ tie my %report_customers, 'Tie::IxHash';
 $report_customers{'List customers'} = [ \%report_customers_lists, 'List customers' ]
   if $curuser->access_right('List all customers');
 $report_customers{'Zip code distribution'}     = [ $fsurl. 'search/report_cust_main-zip.html', 'Zip codes by number of customers' ];
-$report_customers{'Customer signup report'}       = [ $fsurl. 'graph/report_cust_signup.html', 'New customer signups by date' ],
-$report_customers{'Advanced customer reports'} = [ $fsurl. 'search/report_cust_main.html', 'by status, signup date, agent, etc.' ]
+$report_customers{'Customer signup report'}    = [ $fsurl. 'graph/report_cust_signup.html',    'New customer signups by date' ];
+$report_customers{'Signup date report'}        = [ $fsurl. 'graph/report_signupdate.html',     'Signup date report (by date of signup)' ];
+$report_customers{'Advanced customer reports'} = [ $fsurl. 'search/report_cust_main.html',     'by status, signup date, agent, etc.' ]
   if $curuser->access_right('Advanced customer search');
 
 tie my %report_invoices_open, 'Tie::IxHash',
diff --git a/httemplate/graph/signupdate.cgi b/httemplate/graph/signupdate.cgi
index 5b70758..23e4596 100644
--- a/httemplate/graph/signupdate.cgi
+++ b/httemplate/graph/signupdate.cgi
@@ -32,22 +32,23 @@ my @count = (0) x 24;
 my %where;
 $where{'agentnum'} = $agentnum if $agentnum;
 $where{'usernum'}   = $usernum if $usernum;
-my $sdate = $cgi->param('start_year').
-            '-'.
-            $cgi->param('start_month').
-            '-01';
-my $edate = ($cgi->param('end_year') + 
-               ($cgi->param('end_month')==12)).
-            '-'.
-            ($cgi->param('end_month') % 12 + 1).
-            '-01'; # first day of the next month
-
-my $sql = "AND signupdate >= ".str2time($sdate).
-          " AND signupdate < ".str2time($edate);
+
+my $sdate = DateTime->new(
+    year       => $cgi->param('start_year'),
+    month      => $cgi->param('start_month'),
+)->epoch();
+
+my $edate = DateTime->new(
+    year       => $cgi->param('end_year'),
+    month      => ($cgi->param('end_month') % 12 + 1) # first day of the next month
+)->epoch();
+
+my $where .= " AND signupdate >= $sdate ".
+             " AND signupdate <= $edate ";
 
 foreach my $cust (qsearch({ table   => 'cust_main', 
                             hashref => \%where,
-                            extra_sql => $sql } )) {
+                            extra_sql => $where } )) {
   next if !$cust->signupdate;
   my $hour = time2str('%H',$cust->signupdate);
   $count[$hour]++;

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

Summary of changes:
 FS/FS/part_event/Condition/balance_age.pm |   40 +++++++++++++++++++++++++++++
 httemplate/edit/process/part_event.html   |   15 +++++++++++
 httemplate/elements/menu.html             |    5 ++--
 httemplate/graph/signupdate.cgi           |   27 +++++++++----------
 4 files changed, 72 insertions(+), 15 deletions(-)




More information about the freeside-commits mailing list