RT# 75322 Add ticket action Quiet Resolve
[freeside.git] / rt / lib / RT / Condition / StatusChangeQuietResolve.pm
diff --git a/rt/lib/RT/Condition/StatusChangeQuietResolve.pm b/rt/lib/RT/Condition/StatusChangeQuietResolve.pm
new file mode 100644 (file)
index 0000000..8426141
--- /dev/null
@@ -0,0 +1,48 @@
+package RT::Condition::StatusChangeQuietResolve;
+use base 'RT::Condition';
+use strict;
+use warnings;
+
+=head2 DESCRIPTION
+
+This condition allows for muting of resolution notifications when
+combined with the ticket status 'resolved_quiet'
+
+If status has been updated as 'resolved_quiet', this condition
+will block notification, and update ticket status to 'resolved'
+
+If status has been updated as 'resolved', this condition
+will block notification only if the previous ticket status
+had been 'resolved_quiet'
+
+=cut
+
+sub IsApplicable {
+  my $self = shift;
+  my $txn = $self->TransactionObj;
+  my ($type, $field) = ($txn->Type, $txn->Field);
+
+  return 0
+    unless $type eq 'Status'
+    || ($type eq 'Set' && $field eq 'Status');
+
+  return 0
+    unless $txn->NewValue eq 'resolved'
+    || $txn->NewValue eq 'resolved_quiet';
+
+  my $ticket = $self->TicketObj;
+
+  if ($txn->NewValue eq 'resolved_quiet') {
+    $ticket->SetStatus('resolved');
+    return 0;
+  }
+  elsif ($txn->NewValue eq 'resolved' && $txn->OldValue eq 'resolved_quiet') {
+    return 0;
+  }
+
+  return 1;
+}
+
+RT::Base->_ImportOverlays();
+
+1;