RT#42043: Check for cancelled packages with a cancellation date age option [age_newes...
authorJonathan Prykop <jonathan@freeside.biz>
Thu, 4 Aug 2016 04:04:05 +0000 (23:04 -0500)
committerJonathan Prykop <jonathan@freeside.biz>
Thu, 4 Aug 2016 04:04:05 +0000 (23:04 -0500)
FS/FS/part_event/Condition.pm
FS/FS/part_event/Condition/hasnt_pkg_class_cancelled.pm
FS/FS/part_event/Condition/hasnt_pkgpart_cancelled.pm
httemplate/edit/process/part_event.html
httemplate/elements/tr-freq.html

index 36fbe9a..d1d5196 100644 (file)
@@ -312,7 +312,7 @@ sub option_age_from {
   } elsif ( $age =~ /^(\d+)d$/i ) {
     $mday -= $1;
   } elsif ( $age =~ /^(\d+)h$/i ) {
-    $hour -= $hour;
+    $hour -= $1;
   } else {
     die "unparsable age: $age";
   }
index 353e646..d54fb88 100644 (file)
@@ -21,9 +21,16 @@ sub option_fields {
                      'type'     => 'select-pkg_class',
                      'multiple' => 1,
                    },
-    'age'       => { 'label'      => 'Cancellation in last',
-                     'type'       => 'freq',
-                   },
+    'age_newest' => { 'label'      => 'Cancelled more than',
+                      'type'       => 'freq',
+                      'post_text'  => ' ago (blank for no limit)',
+                      'allow_blank' => 1,
+                    },
+    'age'        => { 'label'      => 'Cancelled less than',
+                      'type'       => 'freq',
+                      'post_text'  => ' ago (blank for no limit)',
+                      'allow_blank' => 1,
+                    },
   );
 }
 
@@ -32,11 +39,12 @@ sub condition {
 
   my $cust_main = $self->cust_main($object);
 
-  my $age = $self->option_age_from('age', $opt{'time'} );
+  my $oldest = length($self->option('age')) ? $self->option_age_from('age', $opt{'time'} ) : 0;
+  my $newest = $self->option_age_from('age_newest', $opt{'time'} );
+
+  my $pkgclass = $self->option('pkgclass') || {};
 
-  #XXX test
-  my $hashref = $self->option('pkgclass') || {};
-  ! grep { $hashref->{ $_->part_pkg->classnum } && $_->get('cancel') > $age }
+  ! grep { $pkgclass->{ $_->part_pkg->classnum } && ($_->get('cancel') > $oldest) && ($_->get('cancel') <= $newest) }
     $cust_main->cancelled_pkgs;
 }
 
index b4ff6c3..42845cb 100644 (file)
@@ -18,8 +18,15 @@ sub option_fields {
                       'type'     => 'select-part_pkg',
                       'multiple' => 1,
                     },
-    'age'        => { 'label'      => 'Cancellation in last',
+    'age_newest' => { 'label'      => 'Cancelled more than',
                       'type'       => 'freq',
+                      'post_text'  => ' ago (blank for no limit)',
+                      'allow_blank' => 1,
+                    },
+    'age'        => { 'label'      => 'Cancelled less than',
+                      'type'       => 'freq',
+                      'post_text'  => ' ago (blank for no limit)',
+                      'allow_blank' => 1,
                     },
   );
 }
@@ -29,10 +36,12 @@ sub condition {
 
   my $cust_main = $self->cust_main($object);
 
-  my $age = $self->option_age_from('age', $opt{'time'} );
+  my $oldest = length($self->option('age')) ? $self->option_age_from('age', $opt{'time'} ) : 0;
+  my $newest = $self->option_age_from('age_newest', $opt{'time'} );
 
   my $if_pkgpart = $self->option('if_pkgpart') || {};
-  ! grep { $if_pkgpart->{ $_->pkgpart } && $_->get('cancel') > $age }
+
+  ! grep { $if_pkgpart->{ $_->pkgpart } && ($_->get('cancel') > $oldest) && ($_->get('cancel') <= $newest) }
     $cust_main->cancelled_pkgs;
 
 }
index bac6924..0293af8 100644 (file)
@@ -39,8 +39,8 @@
                                                  split(/\0/, $value)
                                            };
                                 } elsif ( $info->{'type'} eq 'freq' ) {
-                                  $value = '0' if !length($value);
-                                  $value .= $params->{$cgi_field.'_units'};
+                                  $value = '0' if !length($value) and !$info->{'allow_blank'};
+                                  $value .= $params->{$cgi_field.'_units'} if length($value);
                                 }
 
                                 #warn "value of $cgi_field is $value\n";
index cb58bf6..795684c 100644 (file)
@@ -15,7 +15,7 @@
                 <% $freq eq $units ? 'SELECTED' : '' %>
         ><% $freq{$freq} %>
 %     }
-    </SELECT>
+    </SELECT><% $opt{'post_text'} || '' %>
 
   </TD>