hide unreplied status for Rejected tickets, #41670
[freeside.git] / rt / lib / RT / Search / UnrepliedTickets.pm
1 =head1 NAME
2
3   RT::Search::UnrepliedTickets
4
5 =head1 SYNOPSIS
6
7 =head1 DESCRIPTION
8
9 Find all unresolved tickets owned by the current user where the last
10 correspondence from a requestor (or ticket creation) is more recent than the
11 last correspondence from a non-requestor (if there is any).
12
13 =head1 METHODS
14
15 =cut
16
17 package RT::Search::UnrepliedTickets;
18
19 use strict;
20 use warnings;
21 use base qw(RT::Search);
22
23
24 sub Describe  {
25   my $self = shift;
26   return ($self->loc("Tickets awaiting a reply"));
27 }
28
29 sub Prepare  {
30   my $self = shift;
31
32   my $TicketsObj = $self->TicketsObj;
33   # bypass the pre-RT-4.2 TicketRestrictions stuff and just use SearchBuilder
34   $TicketsObj->RT::SearchBuilder::Limit(
35     FIELD => 'Owner',
36     VALUE => $TicketsObj->CurrentUser->id
37   );
38   $TicketsObj->RT::SearchBuilder::Limit(
39     FIELD => 'Status',
40     OPERATOR => '!=',
41     VALUE => 'resolved'
42   );
43   $TicketsObj->Limit(
44     FIELD => 'Status',
45     OPERATOR => '!=',
46     VALUE => 'rejected',
47   );
48   my $txn_alias = $TicketsObj->JoinTransactions;
49   $TicketsObj->RT::SearchBuilder::Limit(
50     ALIAS => $txn_alias,
51     FIELD => 'Created',
52     OPERATOR => '>',
53     VALUE => 'COALESCE(main.Told,\'1970-01-01\')',
54     QUOTEVALUE => 0,
55   );
56   $TicketsObj->RT::SearchBuilder::Limit(
57     ALIAS => $txn_alias,
58     FIELD => 'Type',
59     OPERATOR => '=',
60     VALUE => 'Correspond',
61     SUBCLAUSE => 'transactiontype',
62     ENTRYAGGREGATOR => 'OR',
63   );
64   $TicketsObj->RT::SearchBuilder::Limit(
65     ALIAS => $txn_alias,
66     FIELD => 'Type',
67     OPERATOR => '=',
68     VALUE => 'Create',
69     SUBCLAUSE => 'transactiontype',
70     ENTRYAGGREGATOR => 'OR',
71   );
72
73   return(1);
74 }
75
76 RT::Base->_ImportOverlays();
77
78 1;