From: Matthijs Kooijman Date: Fri, 16 Jan 2009 21:27:55 +0000 (+0100) Subject: Merge branch 'production' X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fprojects%2Fxerxes.git;a=commitdiff_plain;h=31b568b8f923b0d146c6090527f0c41fa4b6c7b9;hp=-c Merge branch 'production' * production: Allow Influence.todo to be blank. --- 31b568b8f923b0d146c6090527f0c41fa4b6c7b9 diff --combined influences/models.py index 2c62626,6464e68..8f243f5 --- a/influences/models.py +++ b/influences/models.py @@@ -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): @@@ -13,18 -12,11 +13,18 @@@ ('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")) @@@ -94,31 -85,6 +94,31 @@@ 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")