Changeset 1608:bb54faf30816 in peach3-core


Ignore:
Timestamp:
01/24/2012 03:48:38 PM (4 months ago)
Author:
eriks
Branch:
core-split
Message:

Changed Cluster to use TimeRanges? the same way Period does

Location:
src/peach3
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • src/peach3/admin/cluster.py

    r1606 r1608  
    77from django.forms.formsets import DELETION_FIELD_NAME 
    88from django.forms.models import BaseInlineFormSet 
    9 from django.utils.translation import ugettext_lazy as _ 
     9from django.utils.translation import ugettext_lazy, ugettext as _ 
    1010 
    1111from peach3.admin.course import CourseEditionListFilter 
    1212from peach3.admin.forms import AdminImmutableUserModelForm, BaseInlineFormSetWithParentInstance, I18NModelForm 
     13from peach3.admin.forms.widgets import AdminTimeRange 
    1314from peach3.admin.news import NewsItemInline 
    1415from peach3.admin.realm import CourseEditionRealmsListFilter 
     16 
     17from peach3.forms import TimeRangeField 
    1518 
    1619from peach3.models.cluster import * #@UnusedWildImport 
     
    7578    # TODO: Figure out a way to completely hide the realms field for admin clusters 
    7679 
     80    active_range = TimeRangeField(widget=AdminTimeRange, label=ugettext_lazy("Active")) 
     81    joinable_range = TimeRangeField(widget=AdminTimeRange, label=ugettext_lazy("Joinable")) 
     82 
    7783    def __init__(self, *arg, **kwargs): 
    7884        super(ClusterAdminModelForm, self).__init__(*arg, **kwargs) 
    7985        self.fields['realms'].required = not self.instance.admin_cluster 
     86        self.fields['active_range'].initial = self.instance.active_range 
     87        self.fields['joinable_range'].initial = self.instance.joinable_range 
     88 
     89    def _post_clean(self): 
     90        if 'active_range' in self.cleaned_data: 
     91            self.instance.active_range = self.cleaned_data['active_range'] 
     92        if 'joinable_range' in self.cleaned_data: 
     93            self.instance.joinable_range = self.cleaned_data['joinable_range'] 
     94        super(ClusterAdminModelForm, self)._post_clean() 
    8095 
    8196    def clean_realms(self): 
     
    91106class ClusterAdmin(admin.ModelAdmin): 
    92107    form = ClusterAdminModelForm 
    93     fieldsets = ( 
    94         (None, { 
    95             'fields' : ('courseedition', 'i18n_names', 'admin_cluster', 
    96                         'realms',) 
    97         }), 
    98         (_("Availability"), { 
    99             'classes' : ('collapse',), 
    100             'fields' : ( 'order', 
    101                         'joinable', 'joinable_from', 'joinable_until', 
    102                         'active', 'active_from', 'active_until',) 
    103         }) 
    104  
    105     ) 
    106108    readonly_fields = 'admin_cluster', 'courseedition', 
     109    fields = ('courseedition', 'i18n_names', 'admin_cluster', 
     110              'realms', 'order', 'joinable_range', 'active_range',) 
    107111    filter_horizontal = 'realms', 
    108     inlines = ClusterMembersInline, ClusterStaffInline, NewsItemInline, 
     112    inlines = ClusterMembersInline, ClusterStaffInline#, NewsItemInline, 
    109113 
    110114    list_display = 'courseedition', 'default_name', 'admin_cluster', 'order', 
  • src/peach3/models/cluster.py

    r1600 r1608  
    2525    courseedition = models.ForeignKey("CourseEdition") 
    2626 
    27     joinable = models.NullBooleanField(default=False, 
    28                                        help_text=ugettext_lazy("Unknown means to use the from and until fields")) 
    29     joinable_from = models.DateTimeField(null=True, blank=True) 
    30     joinable_until = models.DateTimeField(null=True, blank=True) 
    31  
    32     active = models.NullBooleanField(default=False, 
    33                                        help_text=ugettext_lazy("Unknown means to use the from and until fields")) 
    34     active_from = models.DateTimeField(null=True, blank=True) 
    35     active_until = models.DateTimeField(null=True, blank=True) 
     27    _joinable_from = models.DateTimeField(null=True, blank=True, db_column='joinable_from') 
     28    _joinable_until = models.DateTimeField(null=True, blank=True, db_column='joinable_until') 
     29 
     30    _active_from = models.DateTimeField(null=True, blank=True, db_column='active_from') 
     31    _active_until = models.DateTimeField(null=True, blank=True, db_column='active_until') 
    3632 
    3733    realms = models.ManyToManyField(Realm, null=True, blank=True) 
     
    108104    ### Model methods 
    109105    def set_joinable_range(self, range=None): #@ReservedAssignment 
    110         if range is None or range.is_closed(): 
    111             self.joinable = False 
    112             self.joinable_from = None 
    113             self.joinable_until = None 
    114         elif range.is_open(): 
    115             self.joinable = True 
    116             self.joinable_from = None 
    117             self.joinable_until = None 
    118         else: 
    119             self.joinable = None 
    120             self.joinable_from = range.begin if range.has_begin() else None 
    121             self.joinable_until = range.end if range.has_end() else None 
     106        self._joinable_from = range.begin 
     107        self._joinable_until = range.end 
    122108 
    123109    def get_joinable_range(self): 
    124         return TimeRange(open=self.joinable is not None and self.joinable, 
    125                          closed=self.joinable is not None and not self.joinable, 
    126                          begin=self.joinable_from, 
    127                          end=self.joinable_until) 
     110        return TimeRange(begin=self._joinable_from, end=self._joinable_until) 
    128111 
    129112    joinable_range = property(get_joinable_range, set_joinable_range, set_joinable_range) 
     
    133116 
    134117    def set_active_range(self, range=None): #@ReservedAssignment 
    135         if range is None or range.is_closed(): 
    136             self.active = False 
    137             self.active_from = None 
    138             self.active_until = None 
    139         elif range.is_open(): 
    140             self.active = True 
    141             self.active_from = None 
    142             self.active_until = None 
    143         else: 
    144             self.active = None 
    145             self.active_from = range.begin if range.has_begin() else None 
    146             self.active_until = range.end if range.has_end() else None 
    147  
     118        self._active_from = range.begin 
     119        self._active_until = range.end 
    148120        self._active_updated = True 
    149121 
    150122    def get_active_range(self): 
    151         return TimeRange(open=self.active is not None and self.active, 
    152                          closed=self.active is not None and not self.active, 
    153                          begin=self.active_from, 
    154                          end=self.active_until) 
     123        return TimeRange(begin=self._active_from, end=self._active_until) 
    155124 
    156125    active_range = property(get_active_range, set_active_range, set_active_range) 
Note: See TracChangeset for help on using the changeset viewer.