Ignore:
Timestamp:
7 Nov 2011, 13:03:42 (13 years ago)
Author:
Henrik Bettermann
Message:

Implement download page for pdf payment receipts (ExportPDFPaymentSlipPage) including student base data.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.sirp/trunk/src/waeup/sirp/students/utils.py

    r7004 r7019  
    33from grok import getSite
    44from random import SystemRandom as r
     5from datetime import date, datetime
     6from reportlab.pdfgen import canvas
     7from reportlab.lib.units import cm
     8from reportlab.lib.pagesizes import A4
     9from reportlab.lib.styles import getSampleStyleSheet
     10from reportlab.platypus import (Frame, Paragraph, Image,
     11    Table, Spacer)
     12from reportlab.platypus.tables import TableStyle
     13from zope.formlib.form import setUpEditWidgets
    514from waeup.sirp.interfaces import academic_sessions_vocab
     15
     16SLIP_STYLE = TableStyle(
     17    [('VALIGN',(0,0),(-1,-1),'TOP')]
     18    )
    619
    720def generate_student_id(students,letter):
     
    8598def selectBed(available_beds):
    8699    return available_beds[0]
     100
     101def setUpWidgets(view, ignore_request=False):
     102    view.adapters = {}
     103    view.widgets = setUpEditWidgets(
     104        view.form_fields, view.prefix, view.context, view.request,
     105        adapters=view.adapters, for_display=True,
     106        ignore_request=ignore_request
     107        )
     108
     109def renderStudentData(student, studentview):
     110    setUpWidgets(studentview, ignore_request=True)
     111    data = []
     112    style = getSampleStyleSheet()
     113    for widget in studentview.widgets:
     114        if widget.name == 'form.adm_code':
     115            continue
     116        f_label = '<font size=12>%s</font>:' % widget.label.strip()
     117        f_label = Paragraph(f_label, style["Normal"])
     118        f_text = '<font size=12>%s</font>' % widget()
     119        f_text = Paragraph(f_text, style["Normal"])
     120        data.append([f_label,f_text])
     121    table = Table(data,style=SLIP_STYLE)
     122    return table
     123
     124# To be specified in customization packages, see also view which
     125# calls the function.
     126def renderPDF(view, subject='', filename='slip.pdf', student=None, studentview=None):
     127    # (0,0),(-1,-1) = whole table
     128    # (0,0),(0,-1) = first column
     129    # (-1,0),(-1,-1) = last column
     130    # (0,0),(-1,0) = first row
     131    # (0,-1),(-1,-1) = last row
     132
     133    pdf = canvas.Canvas(filename,pagesize=A4)
     134    pdf.setTitle(view.label)
     135    pdf.setSubject(subject)
     136    pdf.setAuthor('%s (%s)' % (view.request.principal.title,
     137        view.request.principal.id))
     138    pdf.setCreator('WAeUP SIRP')
     139    width, height = A4
     140    style = getSampleStyleSheet()
     141    pdf.line(1*cm,height-(1.8*cm),width-(1*cm),height-(1.8*cm))
     142
     143    story = []
     144    frame_header = Frame(1*cm,1*cm,width-(1.7*cm),height-(1.7*cm))
     145    header_title = getattr(getSite(), 'name', u'Sample University')
     146    story.append(Paragraph(header_title, style["Heading1"]))
     147    frame_header.addFromList(story,pdf)
     148
     149    story = []
     150    frame_body = Frame(1*cm,1*cm,width-(2*cm),height-(3.5*cm))
     151    story.append(Paragraph(view.label, style["Heading2"]))
     152    #story.append(HRFlowable())
     153    if student:
     154        story.append(Spacer(1, 18))
     155        studenttable = renderStudentData(student, studentview)
     156        story.append(studenttable)
     157    story.append(Spacer(1, 18))
     158    setUpWidgets(view)
     159    data = []
     160    for widget in view.widgets:
     161        f_label = '<font size=12>%s</font>:' % widget.label.strip()
     162        f_label = Paragraph(f_label, style["Normal"])
     163        f_text = '<font size=12>%s</font>' % widget()
     164        f_text = Paragraph(f_text, style["Normal"])
     165        data.append([f_label,f_text])
     166    table = Table(data,style=SLIP_STYLE)
     167    story.append(table)
     168    frame_body.addFromList(story,pdf)
     169
     170    story = []
     171    frame_footer = Frame(1*cm,0,width-(2*cm),1*cm)
     172    timestamp = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
     173    f_text = '<font size=10>%s</font>' % timestamp
     174    story.append(Paragraph(f_text, style["Normal"]))
     175    frame_footer.addFromList(story,pdf)
     176
     177    view.response.setHeader(
     178        'Content-Type', 'application/pdf')
     179    return pdf.getpdfdata()
Note: See TracChangeset for help on using the changeset viewer.