7870d424379589b2a2ef1c351bc3a5e272d436e6
[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   # if SystemUser does this search (as in QueueSummaryByLifecycle), they
34   # should get all tickets regardless of ownership
35   if ($TicketsObj->CurrentUser->id != RT->SystemUser->id) {
36     $TicketsObj->Limit(
37       FIELD => 'Owner',
38       VALUE => $TicketsObj->CurrentUser->id
39     );
40   }
41   $TicketsObj->Limit(
42     FIELD => 'Status',
43     OPERATOR => '!=',
44     ENTRYAGGREGATOR => 'AND',
45     VALUE => 'resolved'
46   );
47   $TicketsObj->Limit(
48     FIELD => 'Status',
49     OPERATOR => '!=',
50     ENTRYAGGREGATOR => 'AND',
51     VALUE => 'rejected',
52   );
53   my $txn_alias = $TicketsObj->JoinTransactions;
54   $TicketsObj->Limit(
55     ALIAS => $txn_alias,
56     FIELD => 'Created',
57     OPERATOR => '>',
58     VALUE => 'COALESCE(main.Told,\'1970-01-01\')',
59     QUOTEVALUE => 0,
60   );
61   $TicketsObj->Limit(
62     ALIAS => $txn_alias,
63     FIELD => 'Type',
64     OPERATOR => 'IN',
65     VALUE => [ 'Correspond', 'Create' ],
66   );
67
68   return(1);
69 }
70
71 RT::Base->_ImportOverlays();
72
73 1;