Index: /main/waeup.uniben/trunk/src/waeup/uniben/applicants/browser.py
===================================================================
--- /main/waeup.uniben/trunk/src/waeup/uniben/applicants/browser.py	(revision 14146)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/applicants/browser.py	(revision 14147)
@@ -31,5 +31,7 @@
     ApplicationFeePaymentAddPage,
     OnlinePaymentApprovePage,
-    ExportPDFPageApplicationSlip)
+    ExportPDFPageApplicationSlip,
+    ApplicantBaseDisplayFormPage)
+from waeup.kofa.students.interfaces import IStudentsUtils
 from waeup.kofa.applicants.interfaces import (
     ISpecialApplicant, IApplicantsUtils)
@@ -609,2 +611,46 @@
         return '%s - %s %s' % (container_title,
             ar_translation, self.context.application_number)
+
+class ExportScreeningInvitationSlip(UtilityView, grok.View):
+    """Deliver a PDF slip of the context.
+    """
+    grok.context(ICustomApplicant)
+    grok.name('screening_invitation_slip.pdf')
+    grok.require('waeup.viewApplication')
+    form_fields = None
+    label = u'Invitation Letter for Screening'
+
+
+    @property
+    def note(self):
+        if self.context.screening_date:
+            return """
+<br /><br /><br /><br /><font size='12'>
+Dear %s,
+<br /><br /><br />
+You are invited for your Uniben Admission Screening Exercise on:
+<br /><br />
+<strong>%s</strong>.
+<br /><br />
+Please bring along this letter of invitation to the University Main Auditorium
+<br /><br />
+on your screening date.
+<br /><br /><br />
+Signed,
+<br /><br />
+The Registrar<br />
+</font>
+
+""" % (self.context.display_fullname, self.context.screening_date)
+        return
+
+    def update(self):
+        if not self.context.screening_date:
+            self.flash(_('Forbidden'), type="warning")
+            self.redirect(self.url(self.context))
+
+    def render(self):
+        applicantview = ApplicantBaseDisplayFormPage(self.context, self.request)
+        students_utils = getUtility(IStudentsUtils)
+        return students_utils.renderPDF(self,'screening_invitation_slip.pdf',
+            self.context, applicantview, note=self.note)
Index: /main/waeup.uniben/trunk/src/waeup/uniben/applicants/tests/test_browser.py
===================================================================
--- /main/waeup.uniben/trunk/src/waeup/uniben/applicants/tests/test_browser.py	(revision 14146)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/applicants/tests/test_browser.py	(revision 14147)
@@ -168,5 +168,5 @@
         return
 
-    def test_application_slip(self):
+    def test_application_slips(self):
 
         self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
@@ -185,4 +185,19 @@
         open(path, 'wb').write(self.browser.contents)
         print "Sample application_slip.pdf written to %s" % path
+        # Screening invitation letter is not yet available
+        self.browser.open(self.view_path)
+        self.assertFalse('invitation slip' in self.browser.contents)
+        self.browser.open(self.view_path + '/screening_invitation_slip.pdf')
+        self.assertTrue('Forbidden' in self.browser.contents)
+        self.applicant.screening_date = u'any date'
+        # The invitation letter can be printed
+        self.browser.open(self.view_path)
+        self.browser.getLink("invitation").click()
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertEqual(self.browser.headers['Content-Type'],
+                         'application/pdf')
+        path = os.path.join(samples_dir(), 'screening_invitation_slip.pdf')
+        open(path, 'wb').write(self.browser.contents)
+        print "Sample screening_invitation_slip.pdf written to %s" % path
 
     def test_akoka_application_slip(self):
Index: /main/waeup.uniben/trunk/src/waeup/uniben/applicants/viewlets.py
===================================================================
--- /main/waeup.uniben/trunk/src/waeup/uniben/applicants/viewlets.py	(revision 14146)
+++ /main/waeup.uniben/trunk/src/waeup/uniben/applicants/viewlets.py	(revision 14147)
@@ -17,5 +17,9 @@
 ##
 
+import grok
+from waeup.kofa.browser.viewlets import ManageActionButton
 from waeup.kofa.applicants.viewlets import PDFActionButton
+from waeup.uniben.applicants.interfaces import ICustomApplicant
+from waeup.uniben.interfaces import MessageFactory as _
 
 class CustomPDFActionButton(PDFActionButton):
@@ -32,2 +36,16 @@
             return
         return self.view.url(self.view.context, self.target)
+
+class ScreeningInvitationSlipActionButton(ManageActionButton):
+    grok.order(4)
+    grok.context(ICustomApplicant)
+    grok.require('waeup.viewApplication')
+    icon = 'actionicon_pdf.png'
+    text = _('Download screening invitation slip')
+    target = 'screening_invitation_slip.pdf'
+
+    @property
+    def target_url(self):
+        if self.context.screening_date:
+            return self.view.url(self.view.context, self.target)
+        return False
