Add ticket dependency so you can't resolve a ticket until it's dependents are resolved. Addresses GH-43

This commit is contained in:
Ross Poulton
2011-05-10 19:27:11 +10:00
parent 50e1e1ea23
commit 8b6fbd8965
9 changed files with 375 additions and 7 deletions

View File

@@ -413,6 +413,16 @@ class Ticket(models.Model):
)
staff_url = property(_get_staff_url)
def _can_be_resolved(self):
"""
Returns a boolean.
True = any dependencies are resolved
False = There are non-resolved dependencies
"""
OPEN_STATUSES = (Ticket.OPEN_STATUS, Ticket.REOPENED_STATUS)
return TicketDependency.objects.filter(ticket=self).filter(depends_on__status__in=OPEN_STATUSES).count() == 0
can_be_resolved = property(_can_be_resolved)
if HAS_TAG_SUPPORT:
tags = TagField(blank=True)
@@ -1209,3 +1219,28 @@ class TicketCustomFieldValue(models.Model):
class Meta:
unique_together = ('ticket', 'field'),
class TicketDependency(models.Model):
"""
The ticket identified by `ticket` cannot be resolved until the ticket in `depends_on` has been resolved.
To help enforce this, a helper function `can_be_resolved` on each Ticket instance checks that
these have all been resolved.
"""
ticket = models.ForeignKey(
Ticket,
verbose_name=_('Ticket'),
related_name='ticketdependency',
)
depends_on = models.ForeignKey(
Ticket,
verbose_name=_('Depends On Ticket'),
related_name='depends_on',
)
def __unicode__(self):
return '%s / %s' % (self.ticket, self.depends_on)
class Meta:
unique_together = ('ticket', 'depends_on')