Changeset 1d85006


Ignore:
Timestamp:
Jul 31, 2011, 4:21:48 AM (14 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master, space-access, stable, stage, test-hooks
Children:
ee679c6
Parents:
3ffb210
git-author:
Alex Dehnert <adehnert@…> (07/31/11 04:08:48)
git-committer:
Alex Dehnert <adehnert@…> (07/31/11 04:21:48)
Message:

Add support for officers

Location:
asadb/groups
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • asadb/groups/admin.py

    r54c467a r1d85006  
    1919    search_fields = [ 'id', 'name', 'abbreviation', 'officer_email', 'athena_locker', ]
    2020
     21class OfficerRoleAdmin(VersionAdmin):
     22    list_display = (
     23        'id',
     24        'display_name',
     25        'slug',
     26        'max_count',
     27    )
     28    list_display_links = ('id', 'display_name', 'slug', )
     29    prepopulated_fields = {"slug": ("display_name",)}
     30
     31class OfficeHolderAdmin(VersionAdmin):
     32    list_display = (
     33        'id',
     34        'person',
     35        'role',
     36        'group',
     37        'start_time', 'end_time',
     38    )
     39    list_display_links = (
     40        'id',
     41        'person',
     42        'role',
     43        'group',
     44        'start_time', 'end_time',
     45    )
     46    search_fields = (
     47        'id',
     48        'person',
     49        'role__display_name', 'role__slug',
     50        'group__name', 'group__abbreviation',
     51        'start_time', 'end_time',
     52    )
     53
    2154class ActivityCategoryAdmin(admin.ModelAdmin):
    2255    list_display = (
     
    2861admin.site.register(groups.models.Group, GroupAdmin)
    2962admin.site.register(groups.models.ActivityCategory, ActivityCategoryAdmin)
     63admin.site.register(groups.models.OfficerRole, OfficerRoleAdmin)
     64admin.site.register(groups.models.OfficeHolder, OfficeHolderAdmin)
  • asadb/groups/models.py

    r2a6907a r1d85006  
    11from django.db import models
     2
     3import datetime
    24
    35# Create your models here.
     
    2426    updater = models.CharField(max_length=30) # match Django username field
    2527
     28    def officers(self, role=None, person=None, as_of="now",):
     29        """Get the set of people holding some office.
     30
     31        If None is passed for role, person, or as_of, that field will not
     32        be constrained. If as_of is "now" (default) the status will be
     33        required to be current. If any of the three parameters are set
     34        to another value, the corresponding filter will be applied.
     35        """
     36        office_holders = OfficeHolder.objects.filter(group=self,)
     37        if role:
     38            if isinstance(role, str):
     39                office_holders = office_holders.filter(role__slug=role)
     40            else:
     41                office_holders = office_holders.filter(role=role)
     42        if person:
     43            office_holders = office_holders.filter(person=person)
     44        if as_of:
     45            if as_of == "now": as_of = datetime.datetime.now()
     46            office_holders = office_holders.filter(start_time__lte=as_of, end_time__gte=as_of)
     47        return office_holders
     48
    2649    def __str__(self, ):
    2750        return self.name
     
    2952    class Meta:
    3053        ordering = ('name', )
     54
     55
     56class OfficerRole(models.Model):
     57    UNLIMITED = 10000
     58
     59    display_name = models.CharField(max_length=50)
     60    slug = models.SlugField()
     61    description = models.TextField()
     62    max_count = models.IntegerField(default=UNLIMITED, help_text='Maximum number of holders of this role. Use %d for no limit.' % UNLIMITED)
     63
     64    def __str__(self, ):
     65        return self.display_name
     66
     67    @classmethod
     68    def retrieve(cls, slug, ):
     69        return cls.objects.get(slug=slug)
     70
     71
     72class OfficeHolder(models.Model):
     73    person = models.CharField(max_length=30)
     74    role = models.ForeignKey('OfficerRole')
     75    group = models.ForeignKey('Group')
     76    start_time = models.DateTimeField(default=datetime.datetime.now)
     77    end_time = models.DateTimeField(default=datetime.datetime.max)
     78
     79    def __str__(self, ):
     80        return "<OfficeHolder: person=%s, role=%s, group=%s, start_time=%s, end_time=%s>" % (
     81            self.person, self.role, self.group, self.start_time, self.end_time, )
     82
     83    def __repr__(self, ):
     84        return str(self)
     85
    3186
    3287class ActivityCategory(models.Model):
Note: See TracChangeset for help on using the changeset viewer.