Ignore:
Timestamp:
16 Dec 2009, 10:46:08 (15 years ago)
Author:
uli
Message:

Add components to handle CertificateCourse? objects.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • waeup/branches/ulif-rewrite/src/waeup/university/certificate.py

    r4516 r4562  
    99from waeup.interfaces import (ICertificate, ICertificateContainer,
    1010                              ICertificateCourse, ICourse, IDepartment)
    11 from waeup.viewlets import FormWrapMixin, Index, Manage, MainArea
     11from waeup.viewlets import (FormWrapMixin, Index, Manage, MainArea,
     12                            AddCertificateCourse)
    1213from waeup.utils.helpers import getName
    1314
     
    5253        code = "%s_%s" % (course.code, level)
    5354        self[code] = CertificateCourse(course, level, core_or_elective)
    54 
    55     def delCourseRef(self, code):
     55        self[code].__parent__ = self
     56        self[code].__name__ = code
     57        self._p_changed = True
     58
     59    def delCourseRef(self, code, level=None):
    5660        """Delete a course denoted by its code.
    5761        """
     
    5963            if self[key].getCourseCode() != code:
    6064                continue
     65            if level is not None and str(self[key].level) != str(level):
     66                # found a course with correct key but wrong level...
     67                continue
    6168            del self[key]
    6269            self._p_changed = True
     
    113120    grok.order(2)
    114121
     122    def getURLAndName(self, context):
     123        url = self.view.url(context)
     124        name = getName(context)
     125        return (url, name)
     126   
    115127    def render(self):
    116         return '''<h5>%s</h5><h4>%s</h4><h3>%s</h3>''' % (
    117             getName(self.context.__parent__.__parent__.__parent__),
    118             getName(self.context.__parent__.__parent__),
    119             self.context.title)
     128        url1, name1 = self.getURLAndName(
     129            self.context.__parent__.__parent__.__parent__)
     130        url2, name2 = self.getURLAndName(
     131            self.context.__parent__.__parent__)
     132        url3 = self.view.url(self.context)
     133        name3 = self.context.title
     134        return '''<h5><a href="%s">%s</a></h5>
     135                  <h4><a href="%s">%s</a></h4>
     136                  <h3><a href="%s">%s</a></h3>''' % (
     137            url1, name1, url2, name2, url3, name3)
    120138
    121139class DisplayForm(grok.DisplayForm):
     
    178196    grok.order(2)
    179197
    180     def render(self):
    181         result = '<h3>Courses</h4>\n'
     198    def update(self):
     199        if 'delcourse' in self.request.form:
     200            code = self.request.form['code']
     201            level = self.request.form['level']
     202            self.context.delCourseRef(code, level=level)
     203        return
     204       
     205    def getCourseList(self):
     206        def cmpCourses(a, b):
     207            if a['level'] < b['level']:
     208                return -1
     209            if a['level'] > b['level']:
     210                return 1
     211            if a['mandatory'] != b['mandatory']:
     212                if a['mandatory'] == False and b['mandatory'] == True:
     213                    return -1
     214                return 1
     215            if a['code'] < b['code']:
     216                return -1
     217            if a['code'] > b['code']:
     218                return 1
     219            return 0
     220
     221        entries = []
     222        levels = dict()
    182223        for key, course in self.context.items():
    183224            certcourse = self.context[key]
    184225            course = certcourse.course
    185             result += '<div><a href="%s">%s</a>%s (%s / %s)</div>' % (
    186                 self.view.url(course), course.code, course.title,
    187                 certcourse.level, certcourse.core_or_elective)
    188         return result
     226            level = certcourse.level
     227            mandatory = certcourse.core_or_elective
     228            title = course.title
     229            code = course.code
     230            course_url = self.view.url(self.context[key])
     231            semester = course.semester
     232
     233            new_entry = dict(
     234                level=level, mandatory=mandatory, url=course_url,
     235                title=title, code=code, semester=semester)
     236            if str(level) not in levels.keys():
     237                levels[str(level)] = dict()
     238            if str(semester) not in levels[str(level)].keys():
     239                levels[str(level)][str(semester)] = []
     240            levels[str(level)][str(semester)].append(new_entry)
     241        return levels
     242
     243
     244class AddCertificateCourseForm(grok.AddForm):
     245    grok.context(Certificate)
     246   
     247    form_fields = grok.AutoFields(ICertificateCourse)
     248    label = 'Add a course'
     249
     250    @grok.action('Add course')
     251    def addCertcourse(self, **data):
     252        try:
     253            self.context.addCourseRef(**data)
     254        except DuplicationError:
     255            self.status = Invalid('The chosen course is already part of'
     256                                  'this certificate')
     257            return
     258        self.redirect(self.url(self.context))
     259
     260    @grok.action('Cancel')
     261    def cancel(self, **data):
     262        self.redirect(self.url(self.context))
     263        return
     264
     265class AddCertificateCourse(FormWrapMixin, grok.Viewlet):
     266    """A viewlet that wraps the `AddCertificateCourseForm`.
     267    """
     268    grok.viewletmanager(MainArea)
     269    grok.context(ICertificate)
     270    grok.view(AddCertificateCourse)
     271    grok.require('waeup.manageUniversity')
     272
     273    formview_name = 'addcertificatecourseform' # The name of the formview we
     274                                               # want to be rendered in this
     275                                               # viewlet.
     276
     277class DisplayCertCourseForm(grok.DisplayForm):
     278    grok.context(ICertificateCourse)
     279    form_fields = grok.AutoFields(ICertificateCourse)
     280
     281class CertCourseContent(FormWrapMixin, grok.Viewlet):
     282    """A viewlet that wraps the `DisplayForm`.
     283    """
     284    grok.viewletmanager(MainArea)
     285    grok.context(ICertificateCourse)
     286    grok.view(Index)
     287    grok.order(2)
     288    formview_name = 'displaycertcourseform' # The name of the formview we want
     289                                            # to be rendered in this viewlet.
     290
     291class ManageCertCourseForm(grok.EditForm):
     292    """Manage the basic properties of a `CertificateCourse` instance.
     293    """
     294    grok.context(ICertificateCourse)
     295    form_fields = grok.AutoFields(ICertificateCourse)
     296
     297    @property
     298    def label(self):
     299        # Set certificate name as form label
     300        return 'Edit certificate course %s' % self.context.course.code
     301        return self.form_fields['title'].field.get(self.context)
     302   
     303    @grok.action('Save and return')
     304    def saveAndReturn(self, **data):
     305        parent = self.context.__parent__
     306        if self.context.level == data['level']:
     307            self.applyData(self.context, **data)
     308        else:
     309            # The level changed. We have to create a new certcourse as
     310            # the key of the entry will change as well...
     311            old_level = self.context.level
     312            parent.addCourseRef(**data)
     313            parent.delCourseRef(data['course'].code, level=old_level)
     314        self.redirect(self.url(parent))
     315        return
     316
     317    @grok.action('Cancel')
     318    def cancel(self, **data):
     319        self.redirect(self.url(self.context))
     320        return
     321
     322class ManageCertificateCourse(FormWrapMixin, grok.Viewlet):
     323    """A viewlet that renders the `ManageCertCourseForm`.
     324    """
     325    grok.viewletmanager(MainArea)
     326    grok.context(ICertificateCourse)
     327    grok.view(Manage)
     328    grok.name('manage')
     329    #grok.require('waeup.manageUniversity')
     330   
     331    formview_name = 'managecertcourseform' # The name of the formview
     332                                           # we want to be rendered
     333                                           # in this viewlet.
     334
    189335   
    190336@grok.subscribe(ICourse, grok.IObjectRemovedEvent)
Note: See TracChangeset for help on using the changeset viewer.