Changeset 10557


Ignore:
Timestamp:
29 Aug 2013, 09:52:11 (11 years ago)
Author:
Henrik Bettermann
Message:

Continue with level report processing. A proper pdf stream is now created.

Location:
main/waeup.kofa/trunk/src/waeup/kofa/students/reports
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.kofa/trunk/src/waeup/kofa/students/reports/level_report.py

    r10553 r10557  
    6565        table.append(line)
    6666    return table
     67
     68from reportlab.lib import colors
     69from reportlab.lib.styles import getSampleStyleSheet
     70from reportlab.lib.units import cm
     71from reportlab.platypus import Paragraph, Table, Spacer
     72from reportlab.lib.pagesizes import A4, landscape
     73from waeup.kofa.reports import IReport, IReportGenerator
     74from waeup.kofa.reports import Report
     75from waeup.kofa.browser.interfaces import IPDFCreator
     76from waeup.kofa.university.vocabularies import course_levels
     77
     78STYLE = getSampleStyleSheet()
     79
     80def tbl_data_to_table(data):
     81    result = []
     82    new_col_names = ('Student Id', _('Matric No.'), _('Name') ,
     83                     _('Total Credits'), _('Total Credits Passed'),
     84                     _('GPA'), _('Courses Failed'))
     85    table = [new_col_names]
     86    for line in data:
     87        table.append(line)
     88    return table
     89
     90TABLE_STYLE = [
     91    ('FONT', (0,0), (-1,-1), 'Helvetica', 8),
     92    ('FONT', (0,0), (0,-1), 'Helvetica-Bold', 8),
     93    ('FONT', (0,0), (-1,0), 'Helvetica-Bold', 8),
     94    ('FONT', (0,-1), (-1,-1), 'Helvetica-Bold', 8),
     95    ('FONT', (-1,0), (-1,-1), 'Helvetica-Bold', 8),
     96    ('ALIGN', (1,1), (-1,-1), 'RIGHT'),
     97    ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
     98    ('LINEBELOW', (0,-1), (-1,-1), 0.25, colors.black),
     99    ('LINEAFTER', (-1,0), (-1,-1), 0.25, colors.black),
     100    ('LINEBEFORE', (-1,0), (-1,-1), 1.0, colors.black),
     101    #('LINEABOVE', (0,-1), (-1,-1), 1.0, colors.black),
     102    #('LINEABOVE', (0,0), (-1,0), 0.25, colors.black),
     103    ('BOX', (0,0), (-1,-1), 1, colors.black),
     104    ]
     105
     106@implementer(ILevelReport)
     107class LevelReport(Report):
     108    data = None
     109    session = None
     110    level = None
     111    faccode = None
     112    depcode = None
     113
     114    def __init__(self, faccode, depcode, session, level, author='System'):
     115        super(LevelReport, self).__init__(
     116            args=[faccode, depcode, session, level], kwargs={'author':author})
     117        site = grok.getSite()
     118        self.session = academic_sessions_vocab.getTerm(session).title
     119        self.level = course_levels.getTerm(level).title
     120        self.levelcode = level
     121        self.sessioncode = session
     122        self.faccode = faccode
     123        self.depcode = depcode
     124        self.factitle = site['faculties'][faccode].longtitle()
     125        self.deptitle = site['faculties'][faccode][depcode].longtitle()
     126        self.author = author
     127        self.creation_dt_string = self.creation_dt.astimezone(
     128            getUtility(IKofaUtils).tzinfo).strftime("%Y-%m-%d %H:%M:%S %Z")
     129        self.data = get_students_by(faccode, depcode, session, level)
     130
     131    def create_pdf(self):
     132        creator = getUtility(IPDFCreator)
     133        table_data = tbl_data_to_table(self.data)
     134        #col_widths = [3.5*cm] * len(self.data[0])
     135        pdf_data = [Paragraph('<b>%s</b>' % self.creation_dt_string,
     136                              STYLE["Normal"]),
     137                    Spacer(1, 12),]
     138        pdf_data += [Paragraph('%s<br />%s<br />Level: %s<br />Session: %s' % (
     139                    self.factitle, self.deptitle, self.level, self.session),
     140                    STYLE["Normal"]),
     141                    Spacer(1, 12),]
     142        pdf_data += [
     143            Table(table_data, style=TABLE_STYLE)]   #, colWidths=col_widths)]
     144        doc_title = 'Level Report'
     145        pdf = creator.create_pdf(
     146            pdf_data, None, doc_title, self.author,
     147            'Level Report %s/%s/%s/%s' % (
     148            self.faccode, self.depcode, self.levelcode, self.sessioncode),
     149            pagesize=landscape(A4))
     150        return pdf
  • main/waeup.kofa/trunk/src/waeup/kofa/students/reports/tests/test_level_report.py

    r10553 r10557  
    55from waeup.kofa.interfaces import IJobManager
    66from waeup.kofa.students.reports.level_report import (
    7     get_students_by)
     7    get_students_by, LevelReport)
    88from waeup.kofa.students.tests.test_catalog import CatalogTestSetup
    99from waeup.kofa.students.tests.test_browser import StudentsFullSetup
    1010from waeup.kofa.testing import FunctionalLayer
    1111from waeup.kofa.tests.test_async import FunctionalAsyncTestCase
     12from waeup.kofa.browser.tests.test_pdf import samples_dir
    1213
    1314class LevelReportTests(CatalogTestSetup):
     
    2122            [(u'K1000000', u'1234', u'Bob Tester', 30, 30, 5.0, [])])
    2223        return
     24
     25    def test_create_pdf(self):
     26        report = LevelReport('fac1', 'dep1', 2010, 100)
     27        result = report.create_pdf()
     28        self.assertTrue(result.startswith('%PDF-'))
     29        path = os.path.join(samples_dir(), 'level_report.pdf')
     30        open(path, 'wb').write(result)
     31        print "Sample level_report.pdf written to %s" % path
     32        return
Note: See TracChangeset for help on using the changeset viewer.