#41670, backporting fix
[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 correspondence
10 from a requestor (or ticket creation) is more recent than the last
11 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   my $txn_alias = $TicketsObj->JoinTransactions;
44   $TicketsObj->RT::SearchBuilder::Limit(
45     ALIAS => $txn_alias,
46     FIELD => 'Created',
47     OPERATOR => '>',
48     VALUE => 'COALESCE(main.Told,\'1970-01-01\')',
49     QUOTEVALUE => 0,
50   );
51   $TicketsObj->RT::SearchBuilder::Limit(
52     ALIAS => $txn_alias,
53     FIELD => 'Type',
54     OPERATOR => '=',
55     VALUE => 'Correspond',
56     SUBCLAUSE => 'transactiontype',
57     ENTRYAGGREGATOR => 'OR',
58   );
59   $TicketsObj->RT::SearchBuilder::Limit(
60     ALIAS => $txn_alias,
61     FIELD => 'Type',
62     OPERATOR => '=',
63     VALUE => 'Create',
64     SUBCLAUSE => 'transactiontype',
65     ENTRYAGGREGATOR => 'OR',
66   );
67
68   return(1);
69 }
70
71 RT::Base->_ImportOverlays();
72
73 1;