RT# 81692 Update use of deprecated callback element in RT
[freeside.git] / rt / lib / RT / Ticket_Vendor.pm
index 9fa24a2..4a78838 100644 (file)
@@ -13,6 +13,37 @@ sub SetPriority {
   $Ticket->SUPER::SetPriority($value);
 }
 
+=head2 Touch
+
+Creates a Touch transaction (a null transaction).  Like Comment and 
+Correspond but without any content.
+
+=cut
+
+sub Touch {
+    my $self = shift;
+    my %args = (
+        TimeTaken => 0,
+        ActivateScrips => 1,
+        CommitScrips => 1,
+        CustomFields => {},
+        @_
+    );
+    unless ( $self->CurrentUserHasRight('ModifyTicket')
+              or $self->CurrentUserHasRight('CommentOnTicket')
+              or $self->CurrentUserHasRight('ReplyToTicket')) {
+        return ( 0, $self->loc("Permission Denied"));
+    }
+    $self->_NewTransaction(
+        Type => 'Touch',
+        TimeTaken => $args{'TimeTaken'},
+        ActivateScrips => $args{'ActivateScrips'},
+        CommitScrips => $args{'CommitScrips'},
+        CustomFields => $args{'CustomFields'},
+    );
+}
+
+
 =head2 MissingRequiredFields {
 
 Return all custom fields with the Required flag set for which this object
@@ -61,5 +92,28 @@ sub WillResolveAsString {
   return $self->WillResolveObj->AsString();
 }
 
+=head2 IsUnreplied
+
+Returns true if there's a Correspond or Create transaction more recent than
+the Told date of this ticket (or the ticket has no Told date) and the ticket
+is not rejected or resolved.
+
+=cut
+
+sub IsUnreplied {
+  my $self = shift;
+  return 0 if $self->Status eq 'resolved'
+           or $self->Status eq 'rejected';
+
+  my $Told = $self->Told || '1970-01-01';
+  my $Txns = $self->Transactions;
+  $Txns->Limit(FIELD => 'Type',
+               OPERATOR => 'IN',
+               VALUE => [ 'Correspond', 'Create' ]);
+  $Txns->Limit(FIELD => 'Created',
+               OPERATOR => '>',
+               VALUE => $Told);
+  $Txns->Count ? 1 : 0;
+}
 
 1;