use timezone setting in reservation pages
[plstackapi.git] / planetstack / core / admin.py
index 656ca42..bc49b8a 100644 (file)
@@ -9,7 +9,8 @@ from django.utils.safestring import mark_safe
 from django.contrib.auth.admin import UserAdmin
 from django.contrib.admin.widgets import FilteredSelectMultiple
 from django.contrib.auth.forms import ReadOnlyPasswordHashField
-from django.contrib.auth.signals import user_logged_in 
+from django.contrib.auth.signals import user_logged_in
+from django.utils import timezone
 
 
 class ReadonlyTabularInline(admin.TabularInline):
@@ -424,7 +425,7 @@ class UserAdmin(UserAdmin, OSModelAdmin):
     list_filter = ('site',)
     inlines = [SitePrivilegeInline, SliceMembershipInline]
     fieldsets = (
-        (None, {'fields': ('email', 'password', 'site', 'is_admin')}),
+        (None, {'fields': ('email', 'password', 'site', 'is_admin', 'timezone')}),
         ('Personal info', {'fields': ('firstname','lastname','phone', 'key')}),
         #('Important dates', {'fields': ('last_login',)}),
     )
@@ -498,10 +499,16 @@ class ReservationAddRefreshForm(ReservationAddForm):
         redrawn.
     """
 
-    """ don't validate anything """
+    """ don't validate anything other than slice """
+    dont_validate_fields = ("startTime", "duration")
+
     def full_clean(self):
         result = super(ReservationAddForm, self).full_clean()
-        self._errors = forms.util.ErrorDict()
+
+        for fieldname in self.dont_validate_fields:
+            if fieldname in self._errors:
+                del self._errors[fieldname]
+
         return result
 
     """ don't save anything """
@@ -514,12 +521,18 @@ class ReservationAdmin(admin.ModelAdmin):
     form = ReservationAddForm
 
     def add_view(self, request, form_url='', extra_context=None):
+        timezone.activate(request.user.timezone)
         request._refresh = False
         request._slice = None
         if request.method == 'POST':
+            # "refresh" will be set to "1" if the form was submitted due to
+            # a change in the Slice dropdown.
             if request.POST.get("refresh","1") == "1":
                 request._refresh = True
                 request.POST["refresh"] = "0"
+
+            # Keep track of the slice that was selected, so the
+            # reservedResource inline can filter items for the slice.
             request._slice = request.POST.get("slice",None)
             if (request._slice is not None):
                 request._slice = Slice.objects.get(id=request._slice)
@@ -527,9 +540,15 @@ class ReservationAdmin(admin.ModelAdmin):
         result =  super(ReservationAdmin, self).add_view(request, form_url, extra_context)
         return result
 
+    def changelist_view(self, request, extra_context = None):
+        timezone.activate(request.user.timezone)
+        return super(ReservationAdmin, self).changelist_view(request, extra_context)
+
     def get_form(self, request, obj=None, **kwargs):
         request._obj_ = obj\r
         if obj is not None:\r
+            # For changes, set request._slice to the slice already set in the\r
+            # object.\r
             request._slice = obj.slice\r
             self.form = ReservationChangeForm\r
         else:\r