summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2016-08-03 23:04:05 -0500
committerJonathan Prykop <jonathan@freeside.biz>2016-08-29 16:37:19 -0500
commitb941e602f1362b232845cd21279600f3b9793dc0 (patch)
tree5edeb3b537918ae528acede19311841d33211fa5
parentae72b17b3bea122afd5058577dce7d3237b9561a (diff)
RT#42043: Check for cancelled packages with a cancellation date age option [age_newest options]
-rw-r--r--FS/FS/part_event/Condition.pm2
-rw-r--r--FS/FS/part_event/Condition/hasnt_pkg_class_cancelled.pm22
-rw-r--r--FS/FS/part_event/Condition/hasnt_pkgpart_cancelled.pm15
-rw-r--r--httemplate/edit/process/part_event.html4
-rw-r--r--httemplate/elements/tr-freq.html2
5 files changed, 31 insertions, 14 deletions
diff --git a/FS/FS/part_event/Condition.pm b/FS/FS/part_event/Condition.pm
index 36fbe9a0d..d1d519683 100644
--- a/FS/FS/part_event/Condition.pm
+++ b/FS/FS/part_event/Condition.pm
@@ -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";
}
diff --git a/FS/FS/part_event/Condition/hasnt_pkg_class_cancelled.pm b/FS/FS/part_event/Condition/hasnt_pkg_class_cancelled.pm
index 353e6469f..d54fb88fa 100644
--- a/FS/FS/part_event/Condition/hasnt_pkg_class_cancelled.pm
+++ b/FS/FS/part_event/Condition/hasnt_pkg_class_cancelled.pm
@@ -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;
}
diff --git a/FS/FS/part_event/Condition/hasnt_pkgpart_cancelled.pm b/FS/FS/part_event/Condition/hasnt_pkgpart_cancelled.pm
index b4ff6c32b..42845cb8a 100644
--- a/FS/FS/part_event/Condition/hasnt_pkgpart_cancelled.pm
+++ b/FS/FS/part_event/Condition/hasnt_pkgpart_cancelled.pm
@@ -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;
}
diff --git a/httemplate/edit/process/part_event.html b/httemplate/edit/process/part_event.html
index bac69241c..0293af886 100644
--- a/httemplate/edit/process/part_event.html
+++ b/httemplate/edit/process/part_event.html
@@ -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";
diff --git a/httemplate/elements/tr-freq.html b/httemplate/elements/tr-freq.html
index cb58bf6b5..795684cf7 100644
--- a/httemplate/elements/tr-freq.html
+++ b/httemplate/elements/tr-freq.html
@@ -15,7 +15,7 @@
<% $freq eq $units ? 'SELECTED' : '' %>
><% $freq{$freq} %>
% }
- </SELECT>
+ </SELECT><% $opt{'post_text'} || '' %>
</TD>