[Rt-commit] r4791 - in rtir/branches/1.9-EXPERIMENTAL: lib/RT/Action

ruz at bestpractical.com ruz at bestpractical.com
Wed Mar 22 09:58:20 EST 2006


Author: ruz
Date: Wed Mar 22 09:58:19 2006
New Revision: 4791

Modified:
   rtir/branches/1.9-EXPERIMENTAL/   (props changed)
   rtir/branches/1.9-EXPERIMENTAL/lib/RT/Action/RTIR_ResolveChildren.pm

Log:
 r982 at cubic-pc:  cubic | 2006-03-22 06:15:16 +0300
 * If a IR is linked to several Incidents, this IR should be resolved
 when all the Incidents are resolved, this IR shouldn't be resolved
 meanwhile there are open Incidents.
 ** Add comment in such situation


Modified: rtir/branches/1.9-EXPERIMENTAL/lib/RT/Action/RTIR_ResolveChildren.pm
==============================================================================
--- rtir/branches/1.9-EXPERIMENTAL/lib/RT/Action/RTIR_ResolveChildren.pm	(original)
+++ rtir/branches/1.9-EXPERIMENTAL/lib/RT/Action/RTIR_ResolveChildren.pm	Wed Mar 22 09:58:19 2006
@@ -74,24 +74,48 @@
 
 sub Commit {
     my $self = shift;
+    my $id = $self->TicketObj->Id;
 
     my $query =  "(Queue = 'Incident Reports'"
                 ." OR Queue = 'Investigations'"
                 ." OR Queue = 'Blocks'"
-                .") AND MemberOf = " . $self->TicketObj->Id
+                .") AND MemberOf = " . $id
                 ." AND ("
+                # TODO: move to per queue statuses lists
                 . join(" AND ", map "Status != '$_'", RT->Config->Get('InactiveStatus') )
                 .")";
 
     my $members = new RT::Tickets( $self->TransactionObj->CurrentUser );
     $members->FromSQL( $query );
     while ( my $member = $members->Next ) {
+        if ( $self->HasOtherUnresolvedParents( $member ) ) {
+            $member->Comment(Content => <<END);
+
+Linked Incident \#$id was resolved, but ticket still has unresolved linked Incidents.
+
+END
+            next;
+        }
         my ($res, $msg) = $member->Resolve;
         $RT::Logger->info( "Couldn't resolve ticket: $msg" ) unless $res;
     }
     return 1;
 }
 
+sub HasOtherUnresolvedParents {
+    my $self = shift;
+    my $child = shift;
+
+    my $query =  "Queue = 'Incidents'"
+                ." AND id != ". $self->TicketObj->Id
+                ." AND HasMember = ". $child->id
+                ." AND ( ". join(" OR ", map "Status = '$_'", RT->Config->Get('ActiveStatus') ) ." ) ";
+
+    my $tickets = new RT::Tickets( $self->TransactionObj->CurrentUser );
+    $tickets->FromSQL( $query );
+    return $tickets->Count;
+}
+
 # }}}
 
 eval "require RT::Action::RTIR_ResolveChildren_Vendor";


More information about the Rt-commit mailing list