Ignore:
Timestamp:
23 Apr 2025, 06:31:59 (3 months ago)
Author:
Henrik Bettermann
Message:

Ad mark sheet slip.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py

    r18008 r18064  
    2626from zope.formlib.textwidgets import BytesDisplayWidget
    2727from zope.component import getUtility, queryUtility
     28from zope.catalog.interfaces import ICatalog
    2829from hurry.workflow.interfaces import IWorkflowInfo
    2930from waeup.kofa.interfaces import (
     
    3132from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
    3233from waeup.kofa.browser.layout import action, KofaEditFormPage, UtilityView, KofaPage
     34from waeup.kofa.browser.pages import LocalRoleAssignmentUtilityView
     35from waeup.kofa.university.interfaces import ICourse
    3336from waeup.kofa.students.browser import (
    3437    StudentBaseEditFormPage,
     
    875878    form_fields['email'].field.required = True
    876879
     880class ExportMarkSheetSlip(UtilityView, grok.View,
     881    LocalRoleAssignmentUtilityView):
     882    """Deliver a PDF slip of course tickets in attendance sheet format.
     883    """
     884    grok.context(ICourse)
     885    grok.name('marksheet.pdf')
     886    grok.require('waeup.showStudents')
     887
     888    def update(self):
     889        self.current_academic_session = grok.getSite()[
     890            'configuration'].current_academic_session
     891        if not self.current_academic_session:
     892            self.flash(_('Current academic session not set.'), type="danger")
     893            self.redirect(self.url(self.context))
     894            return
     895
     896    @property
     897    def note(self):
     898        return
     899
     900    def data(self, session):
     901        cat = queryUtility(ICatalog, name='coursetickets_catalog')
     902        # Attention: Also tickets of previous studycourses are found
     903        coursetickets = cat.searchResults(
     904            session=(session, session),
     905            code=(self.context.code, self.context.code)
     906            )
     907        header = [[_('S/N'),
     908                   _('Matric No.'),
     909                   _('Name'),
     910                   _('Level'),
     911                   _('Course of\nStudies'),
     912                   _('CA'),
     913                   _('Exam'),
     914                   _('Total'),
     915                   ],]
     916        tickets = []
     917        sn = 1
     918        ctlist = sorted(list(coursetickets),
     919                        key=lambda value: str(value.student.faccode) +
     920                                          str(value.student.depcode) +
     921                                          str(value.student.certcode) +
     922                                          str(value.student.matric_number))
     923        # In AAUE only editable appear on the attendance sheet. Hopefully
     924        # this holds for other universities too.
     925        editable_tickets = [ticket for ticket in ctlist
     926            if ticket.editable_by_lecturer]
     927        for ticket in editable_tickets:
     928            name = textwrap.fill(ticket.student.display_fullname, 20)
     929            row = [sn,
     930                  ticket.student.matric_number,
     931                  name,
     932                  ticket.level,
     933                  ticket.student.certcode,
     934                  20 * ' ',
     935                  20 * ' ',
     936                  20 * ' ',
     937                  ]
     938            tickets.append(row)
     939            sn += 1
     940        return header + tickets, None
     941
     942    def render(self):
     943        lecturers = [i['user_title'] for i in self.getUsersWithLocalRoles()
     944                     if i['local_role'] == 'waeup.local.Lecturer']
     945        lecturers =  ', '.join(lecturers)
     946        students_utils = getUtility(IStudentsUtils)
     947        return students_utils.renderPDFCourseticketsOverview(
     948            self, 'marksheet', self.current_academic_session,
     949            self.data(self.current_academic_session),
     950            lecturers, '', 65, self.note)
     951
     952
    877953
    878954
Note: See TracChangeset for help on using the changeset viewer.