RT future ticket resolve, #13853
[freeside.git] / rt / lib / RT / Action / ScheduledResolve.pm
diff --git a/rt/lib/RT/Action/ScheduledResolve.pm b/rt/lib/RT/Action/ScheduledResolve.pm
new file mode 100644 (file)
index 0000000..6b323cb
--- /dev/null
@@ -0,0 +1,37 @@
+package RT::Action::ScheduledResolve;
+
+use strict;
+use warnings;
+
+use base qw(RT::Action);
+
+=head1 DESCRIPTION
+
+If the ticket's WillResolve date is in the past, set its status to resolved.
+
+=cut
+
+sub Prepare {
+    my $self = shift;
+
+    return undef if grep { $self->TicketObj->Status eq $_ } (
+      'resolved',
+      'rejected',
+      'deleted'
+    ); # don't resolve from any of these states.
+    my $time = $self->TicketObj->WillResolveObj->Unix;
+    return ( $time > 0 and $time < time() );
+}
+
+sub Commit {
+    my $self = shift;
+
+    my $never = RT::Date->new($self->CurrentUser);
+    $never->Unix(-1);
+    $self->TicketObj->SetWillResolve($never->ISO);
+    $self->TicketObj->SetStatus('resolved');
+}
+
+RT::Base->_ImportOverlays();
+
+1;