[freeside-commits] branch master updated. a3f6af253b06d80e3be43b0f954df9c18a93c12d

Mark Wells mark at 420.am
Tue Feb 21 11:25:34 PST 2012


The branch, master has been updated
       via  a3f6af253b06d80e3be43b0f954df9c18a93c12d (commit)
       via  42c5857d4df6eb6108a7d5f79569c9273384a245 (commit)
      from  c96f38c9a16df1fe84172e53cf58acd551b1937d (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 a3f6af253b06d80e3be43b0f954df9c18a93c12d
Merge: 42c5857 c96f38c
Author: Mark Wells <mark at freeside.biz>
Date:   Mon Feb 20 23:53:06 2012 -0800

    Merge branch 'master' of git.freeside.biz:/home/git/freeside


commit 42c5857d4df6eb6108a7d5f79569c9273384a245
Author: Mark Wells <mark at freeside.biz>
Date:   Mon Feb 20 23:02:16 2012 -0800

    customer signup date event condition, #16591

diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm
index 6cc32bd..63eb47c 100644
--- a/FS/FS/Mason.pm
+++ b/FS/FS/Mason.pm
@@ -546,6 +546,8 @@ sub mason_interps {
     ${$_[0]} =~ s/(['\\])/\\$1/g;
     ${$_[0]} =~ s/\r/\\r/g;
     ${$_[0]} =~ s/\n/\\n/g;
+    # prevent premature termination of the script
+    ${$_[0]} =~ s[</script>][<\\/script>]ig;
     ${$_[0]} = "'". ${$_[0]}. "'";
   };
 
diff --git a/FS/FS/part_event/Condition.pm b/FS/FS/part_event/Condition.pm
index 914256f..b969cf6 100644
--- a/FS/FS/part_event/Condition.pm
+++ b/FS/FS/part_event/Condition.pm
@@ -269,6 +269,23 @@ sub option_label {
 
 =back
 
+=item option_type OPTION
+
+Returns the type of the option, as a string: 'text', 'money', 'date',
+or 'freq'.
+
+=cut
+
+sub option_type {
+  my( $self, $optionname ) = @_;
+
+  my %option_fields = $self->option_fields;
+
+  ref( $option_fields{$optionname} )
+    ? $option_fields{$optionname}->{'type'} 
+    : 'text'
+}
+
 =item option_age_from OPTION FROM_TIMESTAMP
 
 Retreives a condition option, parses it from a frequency (such as "1d", "1w" or
diff --git a/FS/FS/part_event/Condition/signupdate.pm b/FS/FS/part_event/Condition/signupdate.pm
new file mode 100644
index 0000000..30613a2
--- /dev/null
+++ b/FS/FS/part_event/Condition/signupdate.pm
@@ -0,0 +1,48 @@
+package FS::part_event::Condition::signupdate;
+
+use strict;
+use base qw( FS::part_event::Condition );
+use FS::Record qw(str2time_sql str2time_sql_closing);
+use Date::Parse 'str2time';
+
+sub description { 'Customer signed up during date range' }
+
+sub option_fields {
+  (
+    # actually stored as strings
+    'start' => {  label   => 'First day',
+                  type    => 'date',
+                  format  => '%Y-%m-%d', },
+    'end'   => {  label => 'Last day',
+                  type  => 'date', 
+                  format  => '%Y-%m-%d', },
+  );
+}
+
+sub condition {
+
+  my($self, $object, %opt) = @_;
+
+  my $cust_main = $self->cust_main($object);
+  my $start = $self->option('start');
+  my $end = $self->option('end');
+
+  (!$start or $cust_main->signupdate >= str2time($start)) and
+  (!$end   or $cust_main->signupdate <  str2time($end) + 86400);
+}
+
+sub condition_sql {
+  my( $class, $table, %opt ) = @_;
+  return 'true' if $opt{'driver_name'} ne 'Pg';
+
+  my $start = $class->condition_sql_option('start');
+  my $end = $class->condition_sql_option('end');
+
+  $start = "$start IS NULL OR cust_main.signupdate >=" . 
+           str2time_sql . "($start)::timestamp" . str2time_sql_closing;
+  $end   = "$end IS NULL OR cust_main.signupdate < 86400 + " . 
+           str2time_sql . "($end)::timestamp" . str2time_sql_closing;
+  "($start) AND ($end)";
+}
+
+1;
diff --git a/httemplate/edit/part_event.html b/httemplate/edit/part_event.html
index e005cbb..702471b 100644
--- a/httemplate/edit/part_event.html
+++ b/httemplate/edit/part_event.html
@@ -500,6 +500,9 @@ tie my %all_conditions, 'Tie::IxHash',
   '' => { 'description' => '*** Select new condition ***', },
   FS::part_event_condition->conditions();
 
+# *** Select new condition *** sorts to the beginning anyway
+(tied %all_conditions)->SortByValue;
+
 my %condition_labels = map { $_ => $all_conditions{$_}->{'description'} }
                            keys %all_conditions;
 
@@ -539,6 +542,8 @@ tie my %all_actions, 'Tie::IxHash',
   '' => { 'description' => '*** Select event action ***', },
   FS::part_event->actions();
 
+(tied %all_actions)->SortByValue;
+
 my %action_labels = map { $_ => $all_actions{$_}->{'description'} }
                         keys %all_actions;
 
diff --git a/httemplate/elements/selectlayers.html b/httemplate/elements/selectlayers.html
index 89fe41b..dd279bd 100644
--- a/httemplate/elements/selectlayers.html
+++ b/httemplate/elements/selectlayers.html
@@ -162,6 +162,7 @@ Example:
 
 my $conf = new FS::Conf;
 my $money_char = $conf->config('money_char') || '$';
+my $date_noinit = 0;
 
 </%once>
 <%init>
@@ -220,10 +221,24 @@ sub layer_callback {
     my $type = $lf->{type} || 'text';
 
     my $include = $type;
-    $include = "input-$include" if $include =~ /^(text|money)$/;
-    $include = "tr-$include" unless $include eq 'hidden';
 
-    $html .= include( "/elements/$include.html",
+    if ( $include eq 'date' ) {
+      # several important differences from other tr-*
+      $html .= include( '/elements/tr-input-date-field.html',
+        {
+          'name'  => "$layer_prefix$field",
+          'value' => $value,
+          'label' => $lf->{label},
+          'format'=> $lf->{format},
+          'noinit'=> $date_noinit,
+        }
+      );
+      $date_noinit = 1;
+    }
+    else {
+      $include = "input-$include" if $include =~ /^(text|money)$/;
+      $include = "tr-$include" unless $include eq 'hidden';
+      $html .= include( "/elements/$include.html",
                         %$lf,
                         'field'      => "$layer_prefix$field",
                         'id'         => "$layer_prefix$field", #separate?
@@ -233,8 +248,8 @@ sub layer_callback {
                         'value'      => ( $lf->{'value'} || $value ), #hmm.
                         'curr_value' => $value,
                     );
-
-  }
+    }
+  } #foreach $field
   $html .= '</TABLE>';
   return $html;
 }

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

Summary of changes:
 FS/FS/Mason.pm                           |    2 +
 FS/FS/part_event/Condition.pm            |   17 ++++++++++
 FS/FS/part_event/Condition/signupdate.pm |   48 ++++++++++++++++++++++++++++++
 httemplate/edit/part_event.html          |    5 +++
 httemplate/elements/selectlayers.html    |   25 ++++++++++++---
 5 files changed, 92 insertions(+), 5 deletions(-)
 create mode 100644 FS/FS/part_event/Condition/signupdate.pm




More information about the freeside-commits mailing list