Added Site.end_term attribute, for modelling multi-term course offerings.
authorgfawcett <gfawcett@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Fri, 6 Aug 2010 02:25:44 +0000 (02:25 +0000)
committergfawcett <gfawcett@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Fri, 6 Aug 2010 02:25:44 +0000 (02:25 +0000)
Replaced 'term' with ('start_term', 'end_term'); 'term' is now a read-only
alias for 'start_term'.

Most sites will have the same value for their start- and end-terms.

git-svn-id: svn://svn.open-ils.org/ILS-Contrib/servres/trunk@950 6d9bc8c9-1ec2-4278-b937-99fde70a366f

conifer/syrup/models.py
conifer/templates/edit_site.xhtml

index 07dbffa..afa4cc6 100644 (file)
@@ -195,7 +195,8 @@ class Config(m.Model):
 class Site(BaseModel):
     """A a list of materials for one (or more) course offering(s)."""
     course       = m.ForeignKey(Course)
-    term         = m.ForeignKey(Term)
+    start_term   = m.ForeignKey(Term, related_name='start_term')
+    end_term     = m.ForeignKey(Term, related_name='end_term')
     owner        = m.ForeignKey(User)
     service_desk = m.ForeignKey(ServiceDesk)
 
@@ -207,11 +208,25 @@ class Site(BaseModel):
             ('MEMBR', _('Accessible to course-site members')),
             ('CLOSE', _('Accessible only to course-site owners'))])
 
+    @property
+    def term(self):
+        """
+        Returns the start term (typically the term thought of as 'the' term of
+        the site).
+        
+        Whenever possible, use the explicit 'start_term' attribute rather than
+        the 'term' property.
+        """
+        return self.start_term
+
     class Meta:
-        unique_together = (('course', 'term', 'owner'))
-        ordering = ['-term__start', 'course__code', 'owner__last_name']
+        unique_together = (('course', 'start_term', 'owner'))
+        ordering = ['-start_term__start', 'course__code', 'owner__last_name']
 
     def save(self, *args, **kwargs):
+        # Assert that the term-order is logical.
+        assert self.start_term.start <= self.end_term.start, \
+            'The end-term cannot begin before the start-term.'
         # Ensure there is always an internal Group.
         super(Site, self).save(*args, **kwargs)
         internal, just_created = Group.objects.get_or_create(
index ba75178..829741b 100644 (file)
@@ -34,7 +34,8 @@ else:
     </tr>
     <table class="metadata_table">
     ${field_row(form.owner)}
-    ${field_row(form.term)}
+    ${field_row(form.start_term)}
+    ${field_row(form.end_term)}
     ${field_row(form.course)}
     ${field_row(form.service_desk)}