from django.db import models from django.utils.translation import ugettext as _ from locpick.field import LocationField from musicians.models import Musician class Event ( models.Model ): EVENT_TYPES = ( ( 'Reh', _('Rehearsal') ), ( 'Conc', _('Concert') ), ( 'GenReh', _('General Rehearsal') ), ) title = models.CharField( max_length=40, verbose_name = _("title") ) type = models.CharField( max_length=6, choices=EVENT_TYPES, default='Reh', verbose_name= _("type") ) date = models.DateField( verbose_name= _("date") ) time = models.TimeField( null=True, blank=True, verbose_name = _("time") ) participants = models.ManyToManyField( Musician, through='EventParticipation', verbose_name=_("participants") ) desc = models.TextField( blank=True, verbose_name=_("description")) location = LocationField( verbose_name=_("location") ) def __unicode__(self): return self.title + " ( " + self.get_type_display() + " ) " def save(self, *args, **kwargs): # Call the "real" save() method super(Event, self).save(*args, **kwargs) # Create a "Don't Know" participation for each Musician for m in Musician.objects.all(): if not m in self.participants.all(): EventParticipation.objects.create( event=self, musician = m, status='?', comment = '' ) class EventParticipation( models.Model ): OPTIONS = ( ('?' , _('?' )), ('Yes', _('Yes')), ('No' , _('No' )) ) event = models.ForeignKey( Event, verbose_name=_("event") ) musician = models.ForeignKey( Musician, verbose_name=_("musician") ) status = models.CharField ( max_length=3, choices = OPTIONS, default='?', verbose_name=_("status") ) comment = models.CharField ( max_length=64, blank=True, verbose_name=_("comment") ) def get_musician_username(self): return self.musician.user.username class Meta: unique_together = ("event", "musician")