Changeset 9738


Ignore:
Timestamp:
29 Nov 2012, 15:52:31 (12 years ago)
Author:
Henrik Bettermann
Message:

Add views to filter students in departments, certificates and courses. So far there is no link to these views. Also tests are missing and a restricted view for course advisers.

Location:
main/waeup.kofa/trunk/src/waeup/kofa/browser
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py

    r9707 r9738  
    5656    ILocalRolesAssignable, DuplicationError, IConfigurationContainer,
    5757    ISessionConfiguration, ISessionConfigurationAdd, IJobManager,
    58     IPasswordValidator, IContactForm, IKofaUtils, ICSVExporter,)
     58    IPasswordValidator, IContactForm, IKofaUtils, ICSVExporter,
     59    academic_sessions_vocab)
    5960from waeup.kofa.permissions import (
    6061    get_users_with_local_roles, get_all_roles, get_all_users,
     
    18801881            yield(dict(url=url, name=key, container=val))
    18811882
    1882 class ShowStudentsInDepartmentPage(KofaPage):
     1883class FilterStudentsInDepartmentPage(KofaPage):
     1884    """Page that filters and lists students.
     1885    """
     1886    grok.context(IDepartment)
     1887    grok.require('waeup.showStudents')
     1888    grok.name('students')
     1889    grok.template('filterstudentspage')
     1890    pnav = 1
     1891    session_label = _('in session')
     1892    level_label = _('at level')
     1893
     1894    def label(self):
     1895        return 'Students in %s ...' % self.context.longtitle()
     1896
     1897    def _set_session_values(self):
     1898        vocab_terms = academic_sessions_vocab.by_value.values()
     1899        self.sessions = sorted(
     1900            [(x.title, x.token) for x in vocab_terms], reverse=True)
     1901        self.sessions += [('All Sessions', 'all')]
     1902        return
     1903
     1904    def _set_level_values(self):
     1905        vocab_terms = course_levels.by_value.values()
     1906        self.levels = sorted(
     1907            [(x.title, x.token) for x in vocab_terms])
     1908        self.levels += [('All Levels', 'all')]
     1909        return
     1910
     1911    def _searchCatalog(self, session, level):
     1912        if level not in (10, 999, None):
     1913            start_level = 100 * (level // 100)
     1914            end_level = start_level + 90
     1915        else:
     1916            start_level = end_level = level
     1917        cat = queryUtility(ICatalog, name='students_catalog')
     1918        students = cat.searchResults(
     1919            current_session=(session, session),
     1920            current_level=(start_level, end_level),
     1921            depcode=(self.context.code, self.context.code)
     1922            )
     1923        hitlist = []
     1924        for student in students:
     1925            hitlist.append(StudentQueryResultItem(student, view=self))
     1926        return hitlist
     1927
     1928    def update(self, SHOW=None, session=None, level=None):
     1929        datatable.need()
     1930        self.parent_url = self.url(self.context.__parent__)
     1931        self._set_session_values()
     1932        self._set_level_values()
     1933        self.hitlist = []
     1934        self.session_default = session
     1935        self.level_default = level
     1936        if SHOW is not None:
     1937            if session != 'all':
     1938                self.session = int(session)
     1939                self.session_string = '%s %s/%s' % (
     1940                    self.session_label, self.session, self.session+1)
     1941            else:
     1942                self.session = None
     1943                self.session_string = _('in any session')
     1944            if level != 'all':
     1945                self.level = int(level)
     1946                self.level_string = '%s %s' % (self.level_label, self.level)
     1947            else:
     1948                self.level = None
     1949                self.level_string = _('at any level')
     1950            self.hitlist = self._searchCatalog(self.session, self.level)
     1951            if not self.hitlist:
     1952                self.flash(_('No student found.'))
     1953        return
     1954
     1955class FilterStudentsInCertificatePage(FilterStudentsInDepartmentPage):
     1956    """Page that filters and lists students.
     1957    """
     1958    grok.context(ICertificate)
     1959
     1960    def label(self):
     1961        return 'Students studying %s ...' % self.context.longtitle()
     1962
     1963    def _searchCatalog(self, session, level):
     1964        if level not in (10, 999, None):
     1965            start_level = 100 * (level // 100)
     1966            end_level = start_level + 90
     1967        else:
     1968            start_level = end_level = level
     1969        cat = queryUtility(ICatalog, name='students_catalog')
     1970        students = cat.searchResults(
     1971            current_session=(session, session),
     1972            current_level=(start_level, end_level),
     1973            certcode=(self.context.code, self.context.code)
     1974            )
     1975        hitlist = []
     1976        for student in students:
     1977            hitlist.append(StudentQueryResultItem(student, view=self))
     1978        return hitlist
     1979
     1980class FilterStudentsInCoursePage(FilterStudentsInDepartmentPage):
     1981    """Page that filters and lists students.
     1982    """
     1983    grok.context(ICourse)
     1984
     1985    def label(self):
     1986        return 'Students registered for %s ...' % self.context.longtitle()
     1987
     1988    def _searchCatalog(self, session, level):
     1989        if level not in (10, 999, None):
     1990            start_level = 100 * (level // 100)
     1991            end_level = start_level + 90
     1992        else:
     1993            start_level = end_level = level
     1994        cat = queryUtility(ICatalog, name='coursetickets_catalog')
     1995        coursetickets = cat.searchResults(
     1996            session=(session, session),
     1997            level=(start_level, end_level),
     1998            code=(self.context.code, self.context.code)
     1999            )
     2000        hitlist = []
     2001        for ticket in coursetickets:
     2002            hitlist.append(StudentQueryResultItem(ticket.student, view=self))
     2003        return hitlist
     2004
     2005class ShowStudentsInDepartmentPage(FilterStudentsInDepartmentPage):
    18832006    """Page that lists all students in the department.
    18842007    """
Note: See TracChangeset for help on using the changeset viewer.