Merge branch 'production'
authorMatthijs Kooijman <matthijs@stdin.nl>
Fri, 16 Jan 2009 21:27:55 +0000 (22:27 +0100)
committerMatthijs Kooijman <matthijs@stdin.nl>
Fri, 16 Jan 2009 21:27:55 +0000 (22:27 +0100)
* production:
  Allow Influence.todo to be blank.

1  2 
influences/models.py

diff --combined influences/models.py
index 2c626266fde1312aa9b6445bd66ac647c6e4b112,6464e683deb20a1277c4cdf2537a4be5661640b8..8f243f5b49de90f250e0949b7a2e98f958f513ff
@@@ -5,7 -5,6 +5,7 @@@ from django.utils.text import normalize
  from django.utils.translation import ugettext_lazy as _
  from threadedcomments.models import ThreadedComment
  from xerxes.tools.text import rewrap
 +from string import strip
  
  # Create your models here.
  class Character(models.Model):
          ('N', _('New')),
          ('A', _('Approved')),
      )
 +    TYPE_CHOICES = (
 +        ('P', _('Player')),
 +        ('N', _('NPC')),
 +        ('C', _('Contact')),
 +    )
      created     = models.DateField(auto_now_add=1, verbose_name = _("Creation time"))
      modified    = models.DateField(auto_now=1, verbose_name = _("Modification time"))
      name        = models.CharField(max_length=255, verbose_name = _("Name"))
      status      = models.CharField(max_length=2, choices=STATUS_CHOICES, default='N', verbose_name = _("Status"))
      player      = models.ForeignKey(User, verbose_name = _("Player"))
 +    contacts    = models.ManyToManyField('self')
 +    type        = models.CharField(max_length=2, choices=TYPE_CHOICES, verbose_name=_("Type"))
  
      def __unicode__(self):
          return self.name
@@@ -46,12 -38,11 +46,12 @@@ class Influence(models.Model)
      created     = models.DateField(auto_now_add=1, verbose_name = _("Creation time"))
      modified    = models.DateField(auto_now=1, verbose_name = _("Modification time"))
      
 -    character   = models.ForeignKey(Character, verbose_name = _("Character"))
 -    contact     = models.CharField(max_length=255, verbose_name = _("Contact Name"))
 +    initiator   = models.ForeignKey(Character, verbose_name = _("Initiator"), related_name='initiated_influences')
 +    other_contacts = models.CharField(max_length=255, blank = True, verbose_name = _("Other Contacts"))
 +    other_characters = models.ManyToManyField(Character, blank = True, verbose_name = _("Involved characters"), related_name='influences_involved_in')
      summary     = models.CharField(max_length=255, verbose_name = _("Summary"))
      description = models.TextField(verbose_name = _("Description"))
-     todo        = models.TextField(verbose_name = _("Todo"))
+     todo        = models.TextField(blank=True, verbose_name = _("Todo"))
      status      = models.CharField(max_length=1, choices=STATUS_CHOICES, default='N', verbose_name = _("Status"))
      longterm    = models.BooleanField(default=False, verbose_name = _("Long term"))
  
                                             prefix=prefix)
          return comments
  
 +    @property 
 +    def involved(self):
 +        """ Returns the Characters and contacts (strings) involved """
 +        chars = list(self.other_characters.all())
 +        if (self.other_contacts):
 +            chars.extend(map(strip,self.other_contacts.split(',')))
 +        return chars
 +    
 +    @property
 +    def related_players(self):
 +        """ Returns all players to this Influence (ie, the players of the
 +            initiator or involved characters). Returns a dict where the
 +            players (User objects) are keys and a list of Character objects
 +            for which this player is related is the value.
 +        """
 +        players = {self.initiator.player : [self.initiator]}
 +        for char in self.other_characters.all():
 +            # Add this character to the player's list of characters for
 +            # this Influence, creating a new list if this is the first
 +            # character.
 +            chars = players.get(char.player, [])
 +            chars.append(char)
 +            players[char.player] = chars
 +        return players
 +
      class Meta:
          verbose_name = _("Influence")
          verbose_name_plural = _("Influences")