- Timestamp:
- 23 Apr 2025, 06:31:59 (10 hours ago)
- Location:
- main/waeup.uniben/trunk/src/waeup/uniben
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.uniben/trunk/src/waeup/uniben/browser/viewlets.py
r16588 r18064 19 19 import grok 20 20 from waeup.kofa.interfaces import IKofaObject, academic_sessions_vocab 21 from waeup.kofa.university.interfaces import ICourse 22 from waeup.kofa.browser.pages import CoursePage 21 23 from waeup.kofa.browser.viewlets import ( 22 24 PrimaryNavTab, ManageActionButton, UpdateScoresActionButton, … … 46 48 return 47 49 50 class DownloadMarkSheetActionButton(ManageActionButton): 51 """ 'Download mark sheet' button for courses. 52 """ 53 grok.context(ICourse) 54 grok.view(CoursePage) 55 grok.name('marksheet') 56 grok.require('waeup.showStudents') 57 icon = 'actionicon_pdf.png' 58 text = _('Download mark sheet') 59 target = 'marksheet.pdf' 60 grok.order(7) -
main/waeup.uniben/trunk/src/waeup/uniben/locales/en/LC_MESSAGES/waeup.kofa.po
r18061 r18064 99 99 msgid "Download attendance sheet" 100 100 msgstr "Download attendance register" 101 102 msgid "Download course tickets overvie"103 msgstr "Download mark sheet"104 101 105 102 msgid "Attendance Sheet" -
main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py
r18008 r18064 26 26 from zope.formlib.textwidgets import BytesDisplayWidget 27 27 from zope.component import getUtility, queryUtility 28 from zope.catalog.interfaces import ICatalog 28 29 from hurry.workflow.interfaces import IWorkflowInfo 29 30 from waeup.kofa.interfaces import ( … … 31 32 from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget 32 33 from waeup.kofa.browser.layout import action, KofaEditFormPage, UtilityView, KofaPage 34 from waeup.kofa.browser.pages import LocalRoleAssignmentUtilityView 35 from waeup.kofa.university.interfaces import ICourse 33 36 from waeup.kofa.students.browser import ( 34 37 StudentBaseEditFormPage, … … 875 878 form_fields['email'].field.required = True 876 879 880 class 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 877 953 878 954 -
main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py
r18047 r18064 1348 1348 open(path, 'wb').write(self.browser.contents) 1349 1349 print "Sample PDF affidavit_good_conduct.pdf written to %s" % path 1350 1351 def test_download_mark_sheet(self): 1352 # A course ticket slip can be downloaded 1353 self.course.title = (u'Lorem ipsum dolor sit amet, consectetur adipisici, ' 1354 u'sed eiusmod tempor incidunt ut labore et dolore') 1355 self.student.firstname = u'Emmanuella Woyengifigha Mercy Onosemudiana' 1356 self.student.lastname = u'OYAKEMIEGBEGHA' 1357 self.student.matric_number = u'hdk7gd62i872z27zt27ge' 1358 self.app['configuration'].current_academic_session = 2004 1359 course_url = ( 1360 'http://localhost/app/faculties/fac1/dep1/courses/COURSE1') 1361 self.browser.addHeader('Authorization', 'Basic mgr:mgrpw') 1362 pdf_url = '%s/marksheet.pdf' % course_url 1363 self.browser.open(pdf_url) 1364 self.assertEqual(self.browser.headers['Status'], '200 Ok') 1365 self.assertEqual( 1366 self.browser.headers['Content-Type'], 'application/pdf') 1367 path = os.path.join(samples_dir(), 'marksheet.pdf') 1368 open(path, 'wb').write(self.browser.contents) 1369 print "Sample PDF marksheet.pdf written to %s" % path
Note: See TracChangeset for help on using the changeset viewer.