Index: main/waeup.kofa/trunk/CHANGES.txt
===================================================================
--- main/waeup.kofa/trunk/CHANGES.txt	(revision 16231)
+++ main/waeup.kofa/trunk/CHANGES.txt	(revision 16234)
@@ -4,4 +4,7 @@
 1.6.1.dev0 (unreleased)
 =======================
+
+* Show submitted transcript application records on
+  `TranscriptOfficerLandingPage` (not used in base package).
 
 * Implement `ContactApplicantFormPage`.
Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 16231)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 16234)
@@ -78,4 +78,5 @@
 
 from waeup.kofa.applicants.interfaces import IApplicantsUtils
+from waeup.kofa.applicants.workflow import SUBMITTED
 
 from waeup.kofa.students.catalog import StudentQueryResultItem
@@ -1083,10 +1084,13 @@
     label =_('My ToDoList')
 
+    def update(self):
+            self.local_roles = get_user_account(self.request).getLocalRoles()
+            return
+
     @property
     def getStudents(self):
         students = ([],[])
         cat = queryUtility(ICatalog, name='students_catalog')
-        local_roles = get_user_account(self.request).getLocalRoles()
-        for item in local_roles.get('waeup.local.TranscriptOfficer', []):
+        for item in self.local_roles.get('waeup.local.TranscriptOfficer', []):
             if isinstance(item, Faculty):
                 faccode = item.code
@@ -1101,4 +1105,30 @@
         return students
 
+    @property
+    def getApplicants(self):
+        applicants = []
+        cat = getUtility(ICatalog, name='applicants_catalog')
+        results = cat.searchResults(
+            container_code=('tsca0', 'tscz9'),
+            state=(SUBMITTED, SUBMITTED))
+        local_roles = self.local_roles.get('waeup.local.TranscriptOfficer', [])
+        if not local_roles:
+            return results
+        for item in local_roles:
+            if isinstance(item, Faculty):
+                faccode = item.code
+            else:
+                continue
+            for applicant in results:
+                course = getattr(applicant, 'course_studied', None)
+                if not course:
+                    continue
+                try:
+                    if course.__parent__.__parent__.__parent__.code == faccode:
+                        applicants.append(applicant)
+                except AttributeError:
+                    continue
+        return applicants
+
 class TranscriptSigneeLandingPage(KofaPage):
     """Display students with validated transcript requests, when
@@ -1110,4 +1140,5 @@
     grok.template('mytranscriptrequests')
     label =_('My ToDoList')
+
 
     @property
@@ -1124,4 +1155,8 @@
                     students[1].append(StudentQueryResultItem(result, self))
         return students
+
+    @property
+    def getApplicants(self):
+        return None
 
 #
Index: main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/mytranscriptrequests.pt
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/mytranscriptrequests.pt	(revision 16231)
+++ main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/mytranscriptrequests.pt	(revision 16234)
@@ -1,2 +1,23 @@
+<h3 i18n:domain="waeup.kofa" i18n:translate="" tal:condition="view/getApplicants">
+  Open Transcript Applications
+</h3>
+
+<table class="kofa-data-table dataTable" tal:condition="view/getApplicants">
+  <thead>
+  <tr>
+    <th i18n:translate="">Applicant Id</th>
+    <th i18n:translate="">Full Name</th>
+  </tr>
+  </thead>
+  <tbody>
+  <tr tal:repeat="item view/getApplicants">
+    <td> <a tal:attributes="href python:view.url(item)">
+      <span tal:content="item/applicant_id">XXXX_1234</span></a>
+    </td>
+    <td tal:content="item/display_fullname">Bob</td>
+  </tr>
+  </tbody>
+</table>
+
 <h3 i18n:domain="waeup.kofa" i18n:translate="" tal:condition="python:view.getStudents[0]">
   Transcripts to be validated
Index: main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py
===================================================================
--- main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 16231)
+++ main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 16234)
@@ -52,4 +52,5 @@
 from waeup.kofa.authentication import LocalRoleSetEvent
 from waeup.kofa.hostels.hostel import Hostel, Bed, NOT_OCCUPIED
+from waeup.kofa.applicants.container import ApplicantsContainer
 from waeup.kofa.tests.test_async import FunctionalAsyncTestCase
 from waeup.kofa.browser.tests.test_pdf import samples_dir
@@ -2398,4 +2399,36 @@
         self.assertEqual(self.student['studycourse'].transcript_signees, None)
 
+    def createTranscriptApplications(self):
+        # We create transcript application containers tscs1 and tscf2019
+        applicantscontainer1 = ApplicantsContainer()
+        applicantscontainer1.code = u'tscs1'
+        applicantscontainer1.prefix = u'app'
+        applicantscontainer1.year = 2020
+        applicantscontainer1.title = u'This is the TSC container'
+        applicantscontainer1.application_category = 'no'
+        applicantscontainer1.mode = 'create'
+        self.app['applicants']['tscs1'] = applicantscontainer1
+        applicantscontainer2 = ApplicantsContainer()
+        applicantscontainer2.code = u'tscf2020'
+        applicantscontainer2.prefix = u'app'
+        applicantscontainer2.year = 2020
+        applicantscontainer2.title = u'This is the TSC container'
+        applicantscontainer2.application_category = 'no'
+        applicantscontainer2.mode = 'create'
+        self.app['applicants']['tscf2020'] = applicantscontainer2
+        # Add applicants
+        self.applicant1 = createObject('waeup.Applicant')
+        self.applicant1.firstname = u'Joanne'
+        self.applicant1.lastname = u'Abba'
+        self.applicant1.course_studied = self.certificate
+        IWorkflowState(self.applicant1).setState('submitted')
+        self.app['applicants']['tscs1'].addApplicant(self.applicant1)
+        self.applicant2 = createObject('waeup.Applicant')
+        self.applicant2.firstname = u'Josef'
+        self.applicant2.lastname = u'Abba'
+        self.applicant2.course_studied = self.certificate
+        IWorkflowState(self.applicant2).setState('submitted')
+        self.app['applicants']['tscf2020'].addApplicant(self.applicant2)
+
     def test_landingpage_transcript_officer(self):
         IWorkflowState(self.student).setState('transcript requested')
@@ -2412,4 +2445,5 @@
         notify(LocalRoleSetEvent(
             fac, 'waeup.local.TranscriptOfficer', 'mrtranscript', granted=True))
+        self.createTranscriptApplications()
         # Login as transcript officer
         self.browser.open(self.login_path)
@@ -2418,4 +2452,9 @@
         self.browser.getControl("Login").click()
         self.assertMatches('...You logged in...', self.browser.contents)
+        # Officers do see the transcript applicants
+        self.assertTrue(
+            '<td>Josef Abba</td>' in self.browser.contents)
+        self.assertTrue(
+            '<td>Joanne Abba</td>' in self.browser.contents)
         # Officer is on landing page and does see the transcript link
         self.assertTrue(
