Index: /WAeUP_SRP/trunk/Academics.py
===================================================================
--- /WAeUP_SRP/trunk/Academics.py	(revision 1145)
+++ /WAeUP_SRP/trunk/Academics.py	(revision 1146)
@@ -187,4 +187,5 @@
         """install Universityspecific Courses from CSV values"""
         #return
+        not_allowed =re.compile('[^A-Z0-9]')
         wf = self.portal_workflow
         name = 'Courses'
@@ -208,7 +209,10 @@
             logger.error('Error reading %s.csv' % name)
             return
-        no_import = open("%s/import/%s_not_imported.csv" % (i_home,name),"w")
+        imported = []
+        not_imported = []
         heading = ','.join(['"%s"' % fn for fn in fields])
-        no_import.write('%s\n' % heading)
+        imported.append(heading)
+        not_imported.append(heading)
+        #no_import.write('%s\n' % heading)
         l = self.portal_catalog({'meta_type': "Faculty"})
         facs = {}
@@ -222,33 +226,63 @@
         course_list = [ c.id for c in cl]
         for course in courses:
-            processing = "processing %s" % format
-            logger.info(processing % course)
+            #processing = "processing %s" % format
+            #logger.info(processing % course)
+            course_id = course.get('code')
+            if not_allowed.search(course_id):
+                msg = ',"Invalid Course Code"'
+                #logger.info(msg)
+                #not_imported.append('"%s",' % msg)
+                not_imported.append(format % course + msg)
+                continue
             depid = course.get('department_code').upper()
             if depid in deps.keys():
                 dept= deps.get(depid)
             else:
-                msg = "Department %(department_code)s for Course %(code)s not found" % course
-                logger.info(msg)
-                no_import.write('"%s",' % msg)
-                no_import.write(format % course + "\n")
+                msg = ',"Department not found"'
+                #logger.info(msg)
+                #not_imported.append('"%s",' % msg)
+                not_imported.append(format % course + msg)
                 continue
-            course_id = course.get('code')
             if course_id in course_list:
-                msg = "Multiple Course Code"
-                logger.info(msg)
-                no_import.write('"%s",' % msg)
-                no_import.write(format % course + "\n")
+                msg = ',"Multiple Course Code"'
+                #logger.info(msg)
+                #not_imported.append('"%s",' % msg)
+                not_imported.append(format % course + msg)
                 continue
+            level = "%c00" % course_id[-3]
+            course['level'] = level
             cf = dept.courses
             c = getattr(cf,course_id,None)
+            cd_fields = (('code','code'),
+                         ('faculty','faculty_code'),
+                         ('department','department_code'),
+                         ('title','title'),
+                         ('credits','credits'),
+                         ('level','level'),
+                         ('semester','semester'),
+                         )
+            cd = {}
+            for t,f in cd_fields:
+                cd[t] = course[f]
+            #import pdb;pdb.set_trace()
             if c is None:
                 logger.info('Creating Course %(code)s  %(title)s in Department %(department_code)s' % course)
                 cf.invokeFactory('Course', course_id)
                 course_list.append(course_id)
+                imported.append(format % course)
                 c = getattr(cf,course_id)
+                self.courses_catalog.addRecord(**cd)
+            else:
+                self.courses_catalog.modifyRecord(**cd)
             c.getContent().edit(mapping=course)
             review_state = course.get('review_state')
             if review_state == "checked" and wf.getInfoFor(c,'review_state',None) != 'checked':
                 self.portal_workflow.doActionFor(c,'approve')
+        current = DateTime.DateTime().strftime("%d-%m-%y_%H_%M_%S")
+        if len(not_imported) > 1:
+            open("%s/import/%s_%s_not_imported.csv" % (i_home,name,current),"w")\
+                .write('\n'.join(not_imported))
+        open("%s/import/%s_%s_imported.csv" % (i_home,name,current),"w")\
+                .write('\n'.join(imported))
         return self.REQUEST.RESPONSE.redirect("%s" % self.REQUEST.get('URL1'))
     ###)
Index: /WAeUP_SRP/trunk/Students.py
===================================================================
--- /WAeUP_SRP/trunk/Students.py	(revision 1145)
+++ /WAeUP_SRP/trunk/Students.py	(revision 1146)
@@ -809,4 +809,186 @@
     ###)
 
+    security.declareProtected(ModifyPortalContent,"importRegisteredStudents")###(
+    def importRegisteredStudents(self):
+        """load Registered Studentdata from CSV values"""
+        import transaction
+        import random
+        #from pdb import set_trace
+        wftool = self.portal_workflow
+        current = DateTime.DateTime().strftime("%d-%m-%y_%H_%M_%S")
+        students_folder = self.portal_catalog({'meta_type': 'StudentsFolder'})[-1].getObject()
+        tr_count = 1
+        total = 0
+        #name = 'pume_results'
+        name = 'Registered'
+        table = self.registered_import
+        no_import = []
+        imported = []
+        logger = logging.getLogger('Import.%s' % name)
+        try:
+            registered = csv.DictReader(open("%s/import/%s.csv" % (i_home,name),"rb"))
+        except:
+            logger.error('Error reading %s.csv' % name)
+            return
+        l = self.portal_catalog({'meta_type': "Certificate"})
+        certs = {}
+        cert_docs = {}
+        for f in l:
+            certs[f.getId] = f.getObject().getContent()
+        start = True
+        res = table()
+        regs = []
+        if len(res) > 0:
+            regs = [s.matric_no for s in res]
+        for student in registered:
+            if start:
+                start = False
+                logger.info('start loading from %s.csv' % name)
+                s = ','.join(['"(%s)"' % fn for fn in student.keys()])
+                imported.append(s)
+                no_import.append('%s,"Error"' % s)
+                format = ','.join(['"%%(%s)s"' % fn for fn in student.keys()])
+                format_error = format + ',"%(Error)s"'
+                no_certificate = "no certificate %s" % format
+            if student.get('matric_no') == '':
+                student['Error'] = "Empty matric_no"  
+                no_import.append( format_error % student)
+                continue
+            if student.get('matric_no') in regs:
+                student['Error'] = "Duplicate"  
+                no_import.append( format_error % student)
+                continue
+            cert_id = makeCertificateCode(student.get('Coursemajorcode'))
+            if cert_id not in certs.keys():
+                student['Error'] = "No Certificate %s" % cert_id
+                no_import.append( format_error % student)
+                continue
+            try:
+                table.addRecord(**student)
+            except ValueError:
+                import pdb;pdb.set_trace()
+                student['Error'] = "Duplicate"  
+                no_import.append( format_error % student)
+                continue
+            regs.append(student.get('matric_no'))
+            imported.append(format % student)
+            tr_count += 1
+            if tr_count > 1000:
+                if len(no_import) > 0:
+                    open("%s/import/%s_not_imported%s.csv" % (i_home,name,current),"a").write(
+                             '\n'.join(no_import))
+                    no_import = []
+                    imported = []
+                open("%s/import/%simported%s.csv" % (i_home,name,current),"a").write(
+                                            '\n'.join(no_import))
+                em = '%d transactions commited total %s\n' % (tr_count,total)
+                transaction.commit()
+                logger.info(em)
+                total += tr_count
+                tr_count = 0
+        open("%s/import/%simported%s.csv" % (i_home,name,current),"a").write(
+                                            '\n'.join(no_import))
+        open("%s/import/%s_not_imported%s.csv" % (i_home,name,current),"a").write(
+                                                '\n'.join(no_import))
+        return self.REQUEST.RESPONSE.redirect("%s" % self.REQUEST.get('URL1'))
+    ###)
+
+    security.declareProtected(ModifyPortalContent,"importResults")###(
+    def importResults(self):
+        """load Registered Studentdata from CSV values"""
+        import transaction
+        import random
+        #from pdb import set_trace
+        wftool = self.portal_workflow
+        current = DateTime.DateTime().strftime("%d-%m-%y_%H_%M_%S")
+        students_folder = self.portal_catalog({'meta_type': 'StudentsFolder'})[-1].getObject()
+        tr_count = 1
+        total = 0
+        #name = 'pume_results'
+        name = 'Results'
+        table = self.results_import
+        no_import = []
+        imported = []
+        logger = logging.getLogger('Import.%s' % name)
+        try:
+            results = csv.DictReader(open("%s/import/%s.csv" % (i_home,name),"rb"))
+        except:
+            logger.error('Error reading %s.csv' % name)
+            return
+        l = self.portal_catalog({'meta_type': "Course"})
+        courses = [f.getId for f in l]
+        start = True
+        res = table()
+        regs = []
+        if len(res) > 0:
+            regs = [s.key for s in res]
+        no_course = []
+        no_course_list = []
+        course_count = 0
+        for result in results:
+            if start:
+                start = False
+                logger.info('start loading from %s.csv' % name)
+                s = ','.join(['"(%s)"' % fn for fn in result.keys()])
+                imported.append(s)
+                no_import.append('%s,"Error"' % s)
+                format = ','.join(['"%%(%s)s"' % fn for fn in result.keys()])
+                format_error = format + ',"%(Error)s"'
+                no_certificate = "no certificate %s" % format
+            course_id = result.get('CosCode')
+            key = result.get('matric_no')+course_id
+            if key == '':
+                result['Error'] = "Empty matric_no"  
+                no_import.append( format_error % result)
+                continue
+            if key in regs:
+                result['Error'] = "Duplicate"  
+                no_import.append( format_error % result)
+                continue
+            if course_id not in courses:
+                if course_id not in no_course:
+                    course_count +=1
+                    no_course.append(course_id)
+                    no_course_list.append('"%s"' % course_id)
+                    #result['Error'] = "No Course"
+                    #logger.info(format_error % result)
+            result['key'] = key
+            try:
+                table.addRecord(**result)
+            except ValueError:
+                import pdb;pdb.set_trace()
+                result['Error'] = "Duplicate"  
+                no_import.append( format_error % result)
+                continue
+            regs.append(key)
+            imported.append(format % result)
+            tr_count += 1
+            if tr_count > 1000:
+                if len(no_import) > 0:
+                    open("%s/import/%s_not_imported%s.csv" % (i_home,name,current),"a").write(
+                             '\n'.join(no_import))
+                    no_import = []
+                open("%s/import/%simported%s.csv" % (i_home,name,current),"a").write(
+                                            '\n'.join(imported))
+                imported = []
+                if no_course_list:
+                    open("%s/import/%sno_courses%s.csv" % (i_home,name,current),"a").write(
+                                            '\n'.join(no_course_list))
+                    no_course_list = []
+                em = '%d transactions commited total %s\n courses not found %s' % (tr_count,total,course_count)
+                transaction.commit()
+                logger.info(em)
+                total += tr_count
+                tr_count = 0
+        open("%s/import/%simported%s.csv" % (i_home,name,current),"a").write(
+                                            '\n'.join(imported))
+        open("%s/import/%s_not_imported%s.csv" % (i_home,name,current),"a").write(
+                                                '\n'.join(no_import))
+        if no_course_list:
+            open("%s/import/%sno_courses%s.csv" % (i_home,name,current),"a").write(
+                                    '\n'.join(no_course_list))
+        return self.REQUEST.RESPONSE.redirect("%s" % self.REQUEST.get('URL1'))
+    ###)
+
     security.declareProtected(ModifyPortalContent,"updateStudyCourse")###(
     def updateStudyCourse(self):
@@ -1085,5 +1267,5 @@
             no_import = open("%s/import/%s_not_imported.csv" % (i_home,name),"w")
             no_import.write('"Matnumber","CosCode","Ansbook","CosStuatus","Session","Mat_Cos","Score","CarryLevel","Grade","Weight","Semster","Verdict","Level","id","GPA"\n')
-        logger = logging.getLogger('Ímport.%s' % name)
+        logger = logging.getLogger('import.%s' % name)
         logger.info('Start loading from %s.csv' % name)
         students_folder = self.portal_catalog({'meta_type': 'StudentsFolder'})[-1].getObject()
Index: /WAeUP_SRP/trunk/WAeUPTables.py
===================================================================
--- /WAeUP_SRP/trunk/WAeUPTables.py	(revision 1145)
+++ /WAeUP_SRP/trunk/WAeUPTables.py	(revision 1146)
@@ -44,5 +44,5 @@
 
 
-class WAeUPTable(ZCatalog):
+class WAeUPTable(ZCatalog): ###(
 
     implements(IWAeUPTable)
@@ -121,6 +121,7 @@
         open("%s/import/%s-%s.csv" % (i_home,self.getId(),current),"w+").write('\n'.join(csv))
 
-
-class AccommodationTable(WAeUPTable):
+###)
+
+class AccommodationTable(WAeUPTable): ###(
 
     meta_type = 'WAeUP Accommodation Tool'
@@ -148,5 +149,7 @@
 InitializeClass(AccommodationTable)
 
-class PinTable(WAeUPTable):
+###)
+
+class PinTable(WAeUPTable): ###(
     from ZODB.POSException import ConflictError
     meta_type = 'WAeUP Pin Tool'
@@ -191,5 +194,7 @@
 InitializeClass(PinTable)
 
-class PumeResultsTable(WAeUPTable):
+###)
+
+class PumeResultsTable(WAeUPTable): ###(
 
     meta_type = 'WAeUP PumeResults Tool'
@@ -202,5 +207,7 @@
 InitializeClass(PumeResultsTable)
 
-class StudentsCatalog(WAeUPTable):
+###)
+
+class StudentsCatalog(WAeUPTable): ###(
 
     meta_type = 'WAeUP Students Catalog'
@@ -213,4 +220,54 @@
 InitializeClass(StudentsCatalog)
 
+###)
+
+class CoursesCatalog(WAeUPTable): ###(
+
+    meta_type = 'WAeUP Courses Catalog'
+    name = "students_catalog"
+    key = "code"
+    def __init__(self):
+        WAeUPTable.__init__(self, 'courses_catalog')
+
+
+InitializeClass(CoursesCatalog)
+
+class RegisteredImport(WAeUPTable): ###(
+
+    meta_type = 'Registered Import Table'
+    name = "registered_import"
+    key = "matric_no"
+    def __init__(self):
+        WAeUPTable.__init__(self, 'registered_import')
+
+
+InitializeClass(RegisteredImport)
+
+class ResultsImport(WAeUPTable): ###(
+
+    meta_type = 'Results Import Table'
+    name = "results_import"
+    key = "key"
+    def __init__(self):
+        WAeUPTable.__init__(self, 'results_import')
+
+
+InitializeClass(ResultsImport)
+
+###)
+
+class PaymentsCatalog(WAeUPTable): ###(
+
+    meta_type = 'WAeUP Payments Catalog'
+    name = "students_catalog"
+    key = "id"
+    def __init__(self):
+        WAeUPTable.__init__(self, 'payments_catalog')
+
+
+InitializeClass(PaymentsCatalog)
+
+###)
+
 # BBB:
 AccomodationTable = AccommodationTable
Index: /WAeUP_SRP/trunk/Widgets.py
===================================================================
--- /WAeUP_SRP/trunk/Widgets.py	(revision 1145)
+++ /WAeUP_SRP/trunk/Widgets.py	(revision 1146)
@@ -354,4 +354,140 @@
 ###)
 
+class MatricNoWidget(CPSStringWidget): ###(
+    """ MatricNo Widget"""
+    meta_type = "MatricNo Widget"
+    def validate(self, datastructure, **kw):
+        """Validate datastructure and update datamodel."""
+        valid = CPSStringWidget.validate(self, datastructure, **kw)
+        #import pdb;pdb.set_trace()
+        registered = self.registered_import
+        results = self.results_import
+        err = 0
+        if not valid:
+            err = 'Invalid MatricNo %s.' % (value)
+        else:
+            widget_id = self.getWidgetId()
+            value = datastructure[widget_id].upper()
+            #s = getStudentByRegNo(self,value)
+            while not err:
+                res = registered(matric_no = value)
+                if len(res) < 1:
+                    err = 'No Student with MatricNo %s.' % (value)
+                    continue
+                datastructure['student'] = res[0]
+                res = results(matric_no = value)
+                if len(res) < 1:
+                    err = 'No Results with MatricNo %s.' % (value)
+                    continue
+                datastructure['results'] = res
+                break
+            if err:
+                datastructure.setError(widget_id, err)
+            else:
+                datamodel = datastructure.getDataModel()
+                datamodel[self.fields[0]] = value
+            return not err
+
+InitializeClass(MatricNoWidget)
+
+widgetRegistry.register(MatricNoWidget)
+###)
+
+class WAeUPMultilineResultsWidget(CPSStringWidget): ###(
+    """ WAeUPMultilineResults Widget"""
+    meta_type = "WAeUp Multiline Results Widget"
+    _properties = CPSWidget._properties + (
+        {'id': 'nr_of_lines', 'type': 'int', 'mode': 'w',
+         'label': 'Nr of Lines'},
+         )
+    nr_of_lines = 5
+    def prepare(self, datastructure, **kw): ###(
+        """Prepare datastructure from datamodel."""
+        datamodel = datastructure.getDataModel()
+        #import pdb;pdb.set_trace()
+        widget_id = self.getWidgetId()
+        v = datamodel[self.fields[0]]
+        if type(v) is ListType and v:
+            nr_results = len(v)
+        else:
+            v = []
+            nr_results = 0
+        count = 1
+        for s,g in v:
+            wid = "%s%02d"% (widget_id,count)
+            datastructure[wid+'_s'] = s
+            datastructure[wid+'_g'] = g
+            count += 1
+        if nr_results < self.nr_of_lines:
+            for line in range(nr_results,self.nr_of_lines):
+                v.append(('',''))
+                wid = "%s%02d"% (widget_id,line)
+                datastructure[wid+'_s'] = ''
+                datastructure[wid+'_g'] = ''
+        datastructure[widget_id] = v
+        datastructure[widget_id+'_s'] = ''
+        datastructure[widget_id+'_g'] = ''
+    ###)
+
+    def validate(self, datastructure, **kw): ###(
+        """Validate datastructure and update datamodel."""
+        #import pdb;pdb.set_trace()
+        widget_id = self.getWidgetId()
+        err = 0
+        lines = []
+        for line in range(1,30):
+            wid = "%s%02d"% (widget_id,line)
+            if not datastructure.has_key(wid+'_s'):
+                break
+            lines.append((datastructure[wid+'_s'].strip(),
+                         datastructure[wid+'_g'].strip()))
+        
+        s = datastructure[widget_id+'_s'].strip()
+        g = datastructure[widget_id+'_g'].strip()
+        if s and g:
+            lines.append((s,g))
+        active = []
+        for s,g in lines:
+            if g != "":
+                active.append((s,g))
+        if err:
+            datastructure.setError(widget_id, err)
+        else:
+            datamodel = datastructure.getDataModel()
+            datamodel[self.fields[0]] = active
+        return not err
+    ###)
+
+    def render(self, mode, datastructure, **kw): ###(
+        """Render in mode from datastructure."""
+        render_method = 'widget_waeup_multiline_result_render'
+        meth = getattr(self, render_method, None)
+        if meth is None:
+            raise RuntimeError("Unknown Render Method %s for widget type %s"
+                               % (render_method, self.getId()))
+        #import pdb;pdb.set_trace()
+        datamodel = datastructure.getDataModel()
+        widget_id = self.getWidgetId()
+        lines = datamodel[self.fields[0]]
+        if len(lines) < self.nr_of_lines:
+            for line in range(len(lines),self.nr_of_lines + 1):
+                lines.append(('',''))
+        datastructure[widget_id] = lines
+        datastructure[widget_id+'_s'] = ''
+        datastructure[widget_id+'_g'] = ''
+##        count = 1
+##        for s,g in v:
+##            wid = "%s%02d"% (widget_id,count)
+##            count += 1
+        return meth(mode=mode,
+                    datastructure=datastructure,
+                    )
+    ###)
+
+
+InitializeClass(WAeUPMultilineResultsWidget)
+widgetRegistry.register(WAeUPMultilineResultsWidget)
+###)
+
 class WAeUPResultsWidget(CPSStringWidget): ###(
     """ WAeUPResults Widget"""
@@ -417,6 +553,4 @@
         datamodel = datastructure.getDataModel()
         widget_id = self.getWidgetId()
-        v = datamodel[self.fields[0]]
-        datastructure[widget_id] = v
         datastructure[widget_id+'_s'] = ''
         datastructure[widget_id+'_g'] = ''
@@ -446,4 +580,7 @@
     def __str__(self):
         return "%s-%s-%s" % (self.p,self.b,self.n)
+
+    def __repr__(self):
+        return "%s%s%s" % (self.p,self.b,self.n)
 ###)
 
Index: /WAeUP_SRP/trunk/exportimport.py
===================================================================
--- /WAeUP_SRP/trunk/exportimport.py	(revision 1145)
+++ /WAeUP_SRP/trunk/exportimport.py	(revision 1146)
@@ -98,6 +98,10 @@
 ##                                           ],'SectionReader')
     importWAeUPTable(site.portal_accommodation, '', context,'accommodation')
+    importWAeUPTable(site.courses_catalog, '', context,'courses_catalog')
+    importWAeUPTable(site.payments_catalog, '', context,'payments_catalog')
     importWAeUPTable(site.portal_pins, '', context,'pins')
     importWAeUPTable(site.portal_pumeresults, '', context,'pumeresults')
+    importWAeUPTable(site.registered_import, '', context,'registered_import')
+    importWAeUPTable(site.results_import, '', context,'results_import')
     importWAeUPTable(site.students_catalog, '', context,'students_catalog')
 
Index: /WAeUP_SRP/trunk/profiles/default/courses_catalog.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/courses_catalog.xml	(revision 1146)
+++ /WAeUP_SRP/trunk/profiles/default/courses_catalog.xml	(revision 1146)
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<object name="portal_catalog" meta_type="CMF Catalog">
+ <column value="code"/>
+ <column value="faculty"/>
+ <column value="department"/>
+ <column value="title"/>
+ <column value="level"/>
+ <column value="credits"/>
+ <column value="semester"/>
+ <index name="code" meta_type="FieldIndex">
+  <indexed_attr value="code"/>
+ </index>
+ <index name="faculty" meta_type="FieldIndex">
+  <indexed_attr value="faculty"/>
+ </index>
+ <index name="department" meta_type="FieldIndex">
+  <indexed_attr value="department"/>
+ </index>
+ <index name="level" meta_type="KeywordIndex">
+  <indexed_attr value="level"/>
+ </index>
+</object>
Index: /WAeUP_SRP/trunk/profiles/default/layouts.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/layouts.xml	(revision 1145)
+++ /WAeUP_SRP/trunk/profiles/default/layouts.xml	(revision 1146)
@@ -20,4 +20,5 @@
  <object name="student_application_fe" meta_type="CPS Layout"/>
  <object name="student_application_search" meta_type="CPS Layout"/>
+ <object name="student_session_results_search" meta_type="CPS Layout"/>
  <object name="student_clearance" meta_type="CPS Layout"/>
  <object name="student_clearance_fe" meta_type="CPS Layout"/>
Index: /WAeUP_SRP/trunk/profiles/default/layouts/student_accommodation.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/layouts/student_accommodation.xml	(revision 1145)
+++ /WAeUP_SRP/trunk/profiles/default/layouts/student_accommodation.xml	(revision 1146)
@@ -169,3 +169,2 @@
  </table>
 </object>
-
Index: /WAeUP_SRP/trunk/profiles/default/layouts/student_accommodation_fe.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/layouts/student_accommodation_fe.xml	(revision 1145)
+++ /WAeUP_SRP/trunk/profiles/default/layouts/student_accommodation_fe.xml	(revision 1146)
@@ -121,7 +121,4 @@
   </row>
   <row>
-   <cell name="student_status"/>
-  </row>
-  <row>
    <cell name="acco_res_sc_pin"/>
   </row>
Index: /WAeUP_SRP/trunk/profiles/default/layouts/student_session_results_search.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/layouts/student_session_results_search.xml	(revision 1146)
+++ /WAeUP_SRP/trunk/profiles/default/layouts/student_session_results_search.xml	(revision 1146)
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<object name="student_session_result_search" meta_type="CPS Layout">
+ <property name="layout_create_method"></property>
+ <property name="layout_edit_method"></property>
+ <property name="layout_view_method"></property>
+ <property name="style_prefix">layout_search_session_</property>
+ <property name="flexible_widgets"/>
+ <property name="validate_values_expr"></property>
+ <widget name="matric_no" meta_type="MatricNo Widget">
+  <property name="title">JAMB Registration Number</property>
+  <property name="fields">
+   <element value="matric_no"/>
+  </property>
+  <property name="label">Matricel Number</property>
+  <property name="label_edit">Matricel Number</property>
+  <property name="readonly_layout_modes">
+   <element value="edit"/>
+  </property>
+  <property name="hidden_layout_modes"/>
+  <property name="hidden_readonly_layout_modes"/>
+  <property name="display_width">10</property>
+  <property name="size_max">10</property>
+ </widget>
+ <table>
+  <row>
+   <cell name="matric_no" ncols="3"/>
+  </row>
+ </table>
+</object>
Index: /WAeUP_SRP/trunk/profiles/default/registered_import.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/registered_import.xml	(revision 1146)
+++ /WAeUP_SRP/trunk/profiles/default/registered_import.xml	(revision 1146)
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<object name="portal_catalog" meta_type="CMF Catalog">
+ <column value="matric_no"/>
+ <column value="Entryregno"/>
+ <column value="Faculty"/>
+ <column value="Department"/>
+ <column value="Coursemajor"/>
+ <column value="Coursemajorcode"/>
+ <column value="Fullname"/>
+ <column value="Firstname"/>
+ <column value="Middlename"/>
+ <column value="Lastname"/>
+ <column value="Mode_of_Entry"/>
+ <column value="Sex"/>
+ <column value="State"/>
+ <column value="LGA"/>
+ <column value="Level"/>
+ <column value="Permanent"/>
+ <column value="Address"/>
+ <column value="f1"/>
+ <column value="f2"/>
+ <column value="f3"/>
+ <column value="f4"/>
+ <index name="matric_no" meta_type="FieldIndex">
+  <indexed_attr value="matric_no"/>
+ </index>
+</object>
Index: /WAeUP_SRP/trunk/profiles/default/results_import.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/results_import.xml	(revision 1146)
+++ /WAeUP_SRP/trunk/profiles/default/results_import.xml	(revision 1146)
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<object name="portal_catalog" meta_type="CMF Catalog">
+ <column value="key"/>
+ <column value="matric_no"/>
+ <column value="CosCode"/>
+ <column value="AnsBook"/>
+ <column value="CosStuatus"/>
+ <column value="Session"/>
+ <column value="Mat_Cos"/>
+ <column value="Score"/>
+ <column value="CarryLevel"/>
+ <column value="GRADE"/>
+ <column value="WEIGHT"/>
+ <column value="Semester"/>
+ <column value="Verdict"/>
+ <column value="Level"/>
+ <column value="id" />
+ <index name="matric_no" meta_type="FieldIndex">
+  <indexed_attr value="matric_no"/>
+ </index>
+ <index name="key" meta_type="FieldIndex">
+  <indexed_attr value="key"/>
+ </index>
+</object>
Index: /WAeUP_SRP/trunk/profiles/default/schemas.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/schemas.xml	(revision 1145)
+++ /WAeUP_SRP/trunk/profiles/default/schemas.xml	(revision 1146)
@@ -9,4 +9,5 @@
  <object name="course" meta_type="CPS Schema"/>
  <object name="department" meta_type="CPS Schema"/>
+ <object name="epayment" meta_type="CPS Schema"/>
  <object name="faculty" meta_type="CPS Schema"/>
  <object name="members" meta_type="CPS Schema"/>
Index: /WAeUP_SRP/trunk/profiles/default/schemas/course.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/schemas/course.xml	(revision 1145)
+++ /WAeUP_SRP/trunk/profiles/default/schemas/course.xml	(revision 1146)
@@ -12,4 +12,5 @@
  </field>
  <field name="semester" meta_type="CPS Int Field"/>
+ <field name="level" meta_type="CPS String Field"/>
  <field name="session" meta_type="CPS String Field"/>
 </object>
Index: /WAeUP_SRP/trunk/profiles/default/skins.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/skins.xml	(revision 1145)
+++ /WAeUP_SRP/trunk/profiles/default/skins.xml	(revision 1146)
@@ -9,4 +9,6 @@
  <object name="waeup_directory" meta_type="Filesystem Directory View"
     directory="WAeUP_SRP/skins/waeup_directory"/>
+ <object name="waeup_epayment" meta_type="Filesystem Directory View"
+    directory="WAeUP_SRP/skins/waeup_epayment"/>
  <object name="waeup_academics" meta_type="Filesystem Directory View"
     directory="WAeUP_SRP/skins/waeup_academics"/>
@@ -21,4 +23,5 @@
   <layer name="waeup_default" insert-after="waeup_custom"/>
   <layer name="waeup_directory" insert-after="waeup_custom"/>
+  <layer name="waeup_epayment" insert-after="waeup_custom"/>
   <layer name="waeup_pins" insert-after="waeup_custom"/>
   <layer name="waeup_student" insert-after="waeup_custom"/>
@@ -30,4 +33,5 @@
   <layer name="waeup_default" insert-after="waeup_custom"/>
   <layer name="waeup_directory" insert-after="waeup_custom"/>
+  <layer name="waeup_epayment" insert-after="waeup_custom"/>
   <layer name="waeup_pins" insert-after="waeup_custom"/>
   <layer name="waeup_student" insert-after="waeup_custom"/>
Index: /WAeUP_SRP/trunk/profiles/default/students_catalog.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/students_catalog.xml	(revision 1145)
+++ /WAeUP_SRP/trunk/profiles/default/students_catalog.xml	(revision 1146)
@@ -10,4 +10,5 @@
  <column value="email"/>
  <column value="level"/>
+ <column value="entry_mode"/>
  <index name="id" meta_type="FieldIndex">
   <indexed_attr value="id"/>
Index: /WAeUP_SRP/trunk/profiles/default/toolset.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/toolset.xml	(revision 1145)
+++ /WAeUP_SRP/trunk/profiles/default/toolset.xml	(revision 1146)
@@ -3,8 +3,16 @@
  <required tool_id="portal_accommodation"
            class="Products.WAeUP_SRP.WAeUPTables.AccommodationTable"/>
+ <required tool_id="courses_catalog"
+           class="Products.WAeUP_SRP.WAeUPTables.CoursesCatalog"/>
+ <required tool_id="payments_catalog"
+           class="Products.WAeUP_SRP.WAeUPTables.PaymentsCatalog"/>
  <required tool_id="portal_pins"
            class="Products.WAeUP_SRP.WAeUPTables.PinTable"/>
  <required tool_id="portal_pumeresults"
            class="Products.WAeUP_SRP.WAeUPTables.PumeResultsTable"/>
+ <required tool_id="registered_import"
+           class="Products.WAeUP_SRP.WAeUPTables.RegisteredImport"/>
+ <required tool_id="results_import"
+           class="Products.WAeUP_SRP.WAeUPTables.ResultsImport"/>
  <required tool_id="students_catalog"
            class="Products.WAeUP_SRP.WAeUPTables.StudentsCatalog"/>
Index: /WAeUP_SRP/trunk/profiles/default/types/StudentStudyLevel.xml
===================================================================
--- /WAeUP_SRP/trunk/profiles/default/types/StudentStudyLevel.xml	(revision 1145)
+++ /WAeUP_SRP/trunk/profiles/default/types/StudentStudyLevel.xml	(revision 1146)
@@ -16,5 +16,5 @@
  <property name="allow_discussion">False</property>
  <property name="cps_is_searchable">False</property>
- <property name="cps_proxy_type">folder</property>
+ <property name="cps_proxy_type">btreefolder</property>
  <property name="cps_display_as_document_in_listing">True</property>
  <property name="schemas">
Index: eUP_SRP/trunk/skins/waeup_default/callback.pt
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_default/callback.pt	(revision 1145)
+++ 	(revision )
@@ -1,11 +1,0 @@
-<metal:html>
-  <metal:body use-macro="here/main_template/macros/master">
-    <metal:main fill-slot="main">
-      x_RespCode: <span tal:replace="request/x_RespCode|nothing" /><br />
-      x_RespDesc: <span tal:replace="request/x_RespDesc|nothing" /><br />
-      x_RespPayRef: <span tal:replace="request/x_RespPayRef|nothing" /><br />
-      x_CardNum: <span tal:replace="request/x_CardNum|nothing" /><br />
-      x_ApprAmt: <span tal:replace="request/x_ApprAmt|nothing" /><br />
-    </metal:main>
-  </metal:body>
-</metal:html>
Index: eUP_SRP/trunk/skins/waeup_default/online_payment.pt
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_default/online_payment.pt	(revision 1145)
+++ 	(revision )
@@ -1,155 +1,0 @@
-<metal:html>
-  <metal:body use-macro="here/main_template/macros/master">
-    <metal:main fill-slot="main">
-      <form name="Form1" method="post" 
-            action="http://www.wemaonlinepayments.biz/payment.aspx" 
-            id="Form1">
-          <table>
-            <tr>
-            <td >Site ID</td>
-            <td >Code that represents the portal within the payment gateway.&nbsp; This is assigned to the portal by Wema Bank</td>
-            <td><input name="x_SiteID" 
-                       type="text" 
-                       id="x_SiteID" 
-                       size="33" 
-                       value="8000" />
-            </td>
-          </tr>
-          <tr>
-            <td >Payment Item Code</td>
-            <td >
-              e.g&nbsp;Code that represents what the student is paying for: eg. 001, 078
-            </td>
-            <td>
-              <input name="x_PaymentCode" 
-                     type="text" 
-                     id="x_PaymentCode" 
-                     value="001" />
-            </td>
-          </tr>
-          <tr>
-            <td >Payment Desc</td>
-            <td >A description of what the student is paying for.&nbsp; Eg 
-            School Fees</td>
-            <td>
-              <input name="x_PayDesc" 
-                     type="text" 
-                     id="x_PayDesc"
-                     value="School Fees for 2006/2007 Session" 
-                     />
-            </td>
-          </tr>
-          <tr>
-            <td>Bill To</td>
-            <td>
-              &nbsp;Address of the payer.&nbsp; Required for e-commerce application. Student name can be here for school payment 
-            purposes
-            </td>
-            <td>
-              <input name="x_Billto" 
-                     type="text" 
-                     id="x_Billto" 
-                     value="John Pedro" />
-            </td>
-          </tr>
-          <tr>
-            <td >Ship To</td>
-            <td >Address where goods will be shipped to.&nbsp; Required for 
-              e-commerce application. School Name&nbsp;can be here for school payment 
-            purposes</td>
-            <td>
-              <input name="x_Shipto" type="text" 
-                     id="x_Shipto" 
-                     value="Recipient Address" 
-                     />
-            </td>
-          </tr>
-          <tr>
-            <td >Payers ID</td>
-            <td >&nbsp;eg. Matric number of the student</td>
-            <td>
-              <input name="x_PayerID" 
-                     type="text" 
-                     id="x_PayerID" 
-                     value="CS960307087 " 
-                     />
-            </td>
-          </tr>
-          <tr>
-            <td >Payers Name</td>
-            <td >&nbsp;name of the student</td>
-            <td><input name="x_PayerNames" 
-                       type="text" 
-                       id="x_PayerNames" 
-                       value="John Pedro" 
-                       />
-            </td>
-          </tr>
-          <tr>
-            <td >Payer e-mail</td>
-            <td >&nbsp;email address of the student</td>
-            <td>
-              <input name="x_PayerEmail" 
-                     type="text" id="x_PayerEmail" 
-                     value="abc@yahoo.co.uk" /></td>
-          </tr>
-          <tr>
-            <td >Order ID</td>
-            <td >&nbsp;this is a unique number for the transaction.&nbsp; 
-            Typically, this can be INVOICE NUMBER, and must be unique per payment</td>
-            <td><input name="x_OrderID" 
-                       type="text" 
-                       id="x_OrderID" 
-                       value="85741253" />
-            </td>
-          </tr>
-          <tr>
-            <td >Amount
-            </td>
-            <td >&nbsp;Amount to be paid.&nbsp; Must NOT be formatted with 
-            comma</td>
-            <td><input name="x_amt" 
-                       type="text" 
-                       id="x_amt" 
-                       value="7500" 
-                       />
-            </td>
-          </tr>
-          <tr>
-            <td >Currency Code</td>
-            <td >&nbsp;only Nigeria Naira is supported now.&nbsp; use 566 
-            as the currency code</td>
-            <td>
-              <input name="x_CurrencyID" 
-                     type="text" 
-                     id="x_CurrencyID" 
-                     value="566" 
-                     />
-            </td>
-          </tr>
-          <tr>
-            <td >Site Redirect Url</td>
-            <td >&nbsp;URL within your portal where response will be 
-            directed to</td>
-            <td>
-              <input name="x_Redirect_url" 
-                     type="text" 
-                     id="x_Redirect_url" 
-                     value="http://uniben.waeup.org/callback" 
-                     />
-            </td>
-          </tr>
-          <tr>
-            <td ></td>
-            <td ></td>
-            <td>
-              <input type="submit" name="btnPostPopup" 
-                     value="Submit" 
-                     />
-            </td>
-          </tr>
-        </table>
-      </form>
-    </metal:main>
-  </metal:body>
-</metal:html>
Index: /WAeUP_SRP/trunk/skins/waeup_epayment/callback.pt
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_epayment/callback.pt	(revision 1146)
+++ /WAeUP_SRP/trunk/skins/waeup_epayment/callback.pt	(revision 1146)
@@ -0,0 +1,11 @@
+<metal:html>
+  <metal:body use-macro="here/main_template/macros/master">
+    <metal:main fill-slot="main">
+      x_RespCode: <span tal:replace="request/x_RespCode|nothing" /><br />
+      x_RespDesc: <span tal:replace="request/x_RespDesc|nothing" /><br />
+      x_RespPayRef: <span tal:replace="request/x_RespPayRef|nothing" /><br />
+      x_CardNum: <span tal:replace="request/x_CardNum|nothing" /><br />
+      x_ApprAmt: <span tal:replace="request/x_ApprAmt|nothing" /><br />
+    </metal:main>
+  </metal:body>
+</metal:html>
Index: /WAeUP_SRP/trunk/skins/waeup_epayment/online_payment.pt
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_epayment/online_payment.pt	(revision 1146)
+++ /WAeUP_SRP/trunk/skins/waeup_epayment/online_payment.pt	(revision 1146)
@@ -0,0 +1,156 @@
+<metal:html>
+  <metal:body use-macro="here/main_template/macros/master">
+    <metal:main fill-slot="main">
+      <form name="Form1" method="post" 
+            action="http://www.wemaonlinepayments.biz/payment.aspx" 
+            id="Form1">
+          <table>
+            <tr>
+            <td >Site ID</td>
+            <td >Code that represents the portal within the payment gateway.&nbsp; This is assigned to the portal by Wema Bank</td>
+            <td><input name="x_SiteID" 
+                       type="text" 
+                       id="x_SiteID" 
+                       size="33" 
+                       value="8000" />
+            </td>
+          </tr>
+          <tr>
+            <td >Payment Item Code</td>
+            <td >
+              e.g&nbsp;Code that represents what the student is paying for: eg. 001, 078
+            </td>
+            <td>
+              <input name="x_PaymentCode" 
+                     type="text" 
+                     id="x_PaymentCode" 
+                     value="001" />
+            </td>
+          </tr>
+          <tr>
+            <td >Payment Desc</td>
+            <td >A description of what the student is paying for.&nbsp; Eg 
+            School Fees</td>
+            <td>
+              <input name="x_PayDesc" 
+                     type="text" 
+                     id="x_PayDesc"
+                     value="School Fees for 2006/2007 Session" 
+                     />
+            </td>
+          </tr>
+          <tr>
+            <td>Bill To</td>
+            <td>
+              &nbsp;Address of the payer.&nbsp; Required for e-commerce application. 
+              Student name can be here for school payment 
+            purposes
+            </td>
+            <td>
+              <input name="x_Billto" 
+                     type="text" 
+                     id="x_Billto" 
+                     value="John Pedro" />
+            </td>
+          </tr>
+          <tr>
+            <td >Ship To</td>
+            <td >Address where goods will be shipped to.&nbsp; Required for 
+              e-commerce application. School Name&nbsp;can be here for school payment 
+            purposes</td>
+            <td>
+              <input name="x_Shipto" type="text" 
+                     id="x_Shipto" 
+                     value="Recipient Address" 
+                     />
+            </td>
+          </tr>
+          <tr>
+            <td >Payers ID</td>
+            <td >&nbsp;eg. Matric number of the student</td>
+            <td>
+              <input name="x_PayerID" 
+                     type="text" 
+                     id="x_PayerID" 
+                     value="CS960307087 " 
+                     />
+            </td>
+          </tr>
+          <tr>
+            <td >Payers Name</td>
+            <td >&nbsp;name of the student</td>
+            <td><input name="x_PayerNames" 
+                       type="text" 
+                       id="x_PayerNames" 
+                       value="John Pedro" 
+                       />
+            </td>
+          </tr>
+          <tr>
+            <td >Payer e-mail</td>
+            <td >&nbsp;email address of the student</td>
+            <td>
+              <input name="x_PayerEmail" 
+                     type="text" id="x_PayerEmail" 
+                     value="abc@yahoo.co.uk" /></td>
+          </tr>
+          <tr>
+            <td >Order ID</td>
+            <td >&nbsp;this is a unique number for the transaction.&nbsp; 
+            Typically, this can be INVOICE NUMBER, and must be unique per payment</td>
+            <td><input name="x_OrderID" 
+                       type="text" 
+                       id="x_OrderID" 
+                       value="85741253" />
+            </td>
+          </tr>
+          <tr>
+            <td >Amount
+            </td>
+            <td >&nbsp;Amount to be paid.&nbsp; Must NOT be formatted with 
+            comma</td>
+            <td><input name="x_amt" 
+                       type="text" 
+                       id="x_amt" 
+                       value="7500" 
+                       />
+            </td>
+          </tr>
+          <tr>
+            <td >Currency Code</td>
+            <td >&nbsp;only Nigeria Naira is supported now.&nbsp; use 566 
+            as the currency code</td>
+            <td>
+              <input name="x_CurrencyID" 
+                     type="text" 
+                     id="x_CurrencyID" 
+                     value="566" 
+                     />
+            </td>
+          </tr>
+          <tr>
+            <td >Site Redirect Url</td>
+            <td >&nbsp;URL within your portal where response will be 
+            directed to</td>
+            <td>
+              <input name="x_Redirect_url" 
+                     type="text" 
+                     id="x_Redirect_url" 
+                     value="http://uniben.waeup.org/callback" 
+                     />
+            </td>
+          </tr>
+          <tr>
+            <td ></td>
+            <td ></td>
+            <td>
+              <input type="submit" name="btnPostPopup" 
+                     value="Submit" 
+                     />
+            </td>
+          </tr>
+        </table>
+      </form>
+    </metal:main>
+  </metal:body>
+</metal:html>
Index: /WAeUP_SRP/trunk/skins/waeup_student/display_session_results.py
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_student/display_session_results.py	(revision 1146)
+++ /WAeUP_SRP/trunk/skins/waeup_student/display_session_results.py	(revision 1146)
@@ -0,0 +1,44 @@
+##parameters=REQUEST
+# $Id$
+"""
+process the Application Form
+return html renderer + psm
+"""
+import DateTime
+current = DateTime.DateTime()
+pr = context.portal_registration
+
+validate = REQUEST.has_key("cpsdocument_create_button")
+
+lt = context.portal_layouts
+#pr = context.portal_registration
+
+res,psm,ds = lt.renderLayout(layout_id= 'student_session_results_search',
+                      schema_id= 'student_clearance',
+                      context=context,
+                      mapping=validate and REQUEST,
+                      ob={},
+                      layout_mode='create',
+                      formaction = "display_session_results",
+                      button = "Search",
+                      commit=False,
+                      )
+if psm == 'invalid':
+    return context.display_session_results_form(rendered = res,
+                                 psm = "Please correct your input!",
+                                 #psm = "%s, %s" % (psm,ds),
+                                 firstlayout = True,
+                                 lastlayout = True,
+                                 ds = ds,
+                                 )
+elif psm == '':
+    return context.display_session_results_form(rendered = res,
+                                 psm = None,
+                                 firstlayout = True,
+                                 lastlayout = True,
+                                 ds = ds,
+                                 )
+elif psm == 'valid':
+    return context.session_results_anon_view(student=ds.get('student'),
+                                           results=ds.get('results'))
+
Index: /WAeUP_SRP/trunk/skins/waeup_student/display_session_results_form.pt
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_student/display_session_results_form.pt	(revision 1146)
+++ /WAeUP_SRP/trunk/skins/waeup_student/display_session_results_form.pt	(revision 1146)
@@ -0,0 +1,23 @@
+<tal:block define="rendered_main options/rendered;
+                   portal_status_message options/psm;
+                   data_storage options/ds;
+                   edition python:1;"
+                   >
+<metal:block define-macro="edit_form">
+  <metal:block use-macro="here/content_lib_master/macros/master">
+  <metal:block fill-slot="header"
+    tal:define="creation creation|nothing;
+                edition edition|nothing;
+                metadata metadata|nothing"
+                >
+    </metal:block>
+      <metal:block fill-slot="main">
+        <h3>Display Your 2005/2006 Session Results! </h3>
+        <br />
+        <div tal:replace="structure rendered_main" />
+      </metal:block>
+      <metal:block fill-slot="sub">
+      </metal:block>
+    </metal:block>
+  </metal:block>
+</tal:block>
Index: /WAeUP_SRP/trunk/skins/waeup_student/layout_search_session_create.pt
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_student/layout_search_session_create.pt	(revision 1146)
+++ /WAeUP_SRP/trunk/skins/waeup_student/layout_search_session_create.pt	(revision 1146)
@@ -0,0 +1,91 @@
+<tal:block define="global creation python:1;
+                   global formaction string:display_pume_result" />
+<!-- a layout_lib macro -->
+<!-- $Id$ -->
+
+<metal:block define-macro="default_edit"
+  tal:define="layout options/layout;
+  ds options/datastructure;
+  dm ds/getDataModel;
+  formaction options/formaction;
+  creation creation|nothing;
+  metadata metadata|nothing;
+  type_name request/type_name|nothing;
+  ti python:type_name and getattr(here.portal_types,type_name,None) or getattr(here.portal_types,here.portal_type,None);
+  cpsmcat nocall:here/translation_service;
+  apply request/apply_button|nothing;
+  ">
+  <form action="" id="editForm" method="post" 
+        enctype="multipart/form-data" class="workflow"
+        tal:attributes="action formaction"
+        >
+  <table class="layoutDefault" summary="Form layout"
+         tal:condition="layout/rows">
+    <span tal:repeat="row python: layout['rows']" valign="top" >
+      <span tal:repeat="cell row">
+        <tr tal:define="widget cell/widget;
+              wid widget/getWidgetId;
+              err python:ds.getError(wid);
+              err_mapping python:ds.getErrorMapping(wid);
+              is_required python: widget.is_required and creation and ('create' not in widget.readonly_layout_modes);
+              tooltip_id python:wid + '_help';
+              widget_css_class cell/widget_css_class|nothing;
+              css_class python:test(err, 'row error','row')"
+              tal:condition="python: wid != 'passport'"
+              >
+          <div tal:attributes="class widget_css_class;
+          id python:widget.getHtmlWidgetId()+'_widget';"
+          >
+            <td>
+            <div class="label" tal:condition="widget/label_edit"
+                 tal:attributes="class python:test(is_required, 'label required','label')">
+              <label tal:content="widget/label_edit"
+                     tal:attributes="for cell/widget_input_area_id|nothing;">label</label>:
+            </div>
+            <button type="button" class="tooltipControl"
+                    tal:condition="widget/help"
+                    tal:attributes="onclick python:'toggleElementVisibility(\'%s\')' % tooltip_id;"> ? </button>
+            </td>
+            <td>
+            <span class="field">
+              <div tal:replace="structure cell/widget_rendered"/>
+            </span>
+            <div class="tooltipArea" style="visibility: hidden;"
+                 tal:condition="widget/help"
+                 tal:attributes="id tooltip_id;
+                 onclick python:'showElement(false, \'%s\')' % tooltip_id;"
+                 >
+              <tal:block tal:content="widget/help">This is the help for this field
+              </tal:block>
+            </div>
+            <tal:block condition="err">
+              <tal:block define="msg python:cpsmcat(err, mapping=err_mapping)">
+                <br /><em style="color: red"
+                          tal:content="msg">err</em>
+              </tal:block>
+            </tal:block>
+            </td>
+          </div>
+        </tr>
+      </span>
+    </span>
+  </table>
+  <br />
+  <input type="submit" class="standalone" name="cpsdocument_edit_button"
+         value="Save" 
+         id="cpsdocument_edit_button"
+         tal:condition="not:creation" />
+  <input type="submit" class="standalone" name="apply_admission"
+         value="apply for admission"
+         id="cpsdocument_edit_and_view_button"
+         tal:condition="apply" 
+         tal:attributes="value apply"/>
+  <input type="submit" 
+         class="standalone" 
+         name="cpsdocument_create_button"
+         value="apply"
+         tal:attributes="value options/button"
+         tal:condition="creation" />
+
+</form>
+</metal:block>
Index: /WAeUP_SRP/trunk/skins/waeup_student/session_results_anon_view.pt
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_student/session_results_anon_view.pt	(revision 1146)
+++ /WAeUP_SRP/trunk/skins/waeup_student/session_results_anon_view.pt	(revision 1146)
@@ -0,0 +1,46 @@
+<metal:html tal:define="student options/student;
+            results options/results"
+            >
+  <metal:body use-macro="here/main_template/macros/master">
+    <metal:main fill-slot="main">
+      <div style="text-align: right">
+        <a href="" target="slip" tal:attributes="href string:session_results_anon_slip?nr=${student/matric_no}"
+           onclick="javascript:window.open('','slip','width=600, height=700, directories=no, toolbar=no, location=no, menubar=yes, scrollbars=yes, status=no, resizable=no, dependent=no')">
+          <img tal:attributes="src string:${here/portal_url}/actionicon_print.png" />
+          Session Result Slip
+        </a>
+      </div>
+      <h3>Session Results of <span tal:content="student/Firstname" />
+        <span tal:content="student/Middlename" />
+        <span tal:content="student/Lastname" />
+      </h3>
+      <table>
+        <tr>
+          <th>MatricelNo</th><td tal:content="student/matric_no" />                     
+        </tr>
+        <tr>
+          <th>Sex</th><td tal:content="student/Sex" />                     
+        </tr>
+        <tr>
+          <th>Course of Study</th><td tal:content="student/Coursemajor" />                     
+        </tr>
+        <tr>
+          <th>Level</th><td tal:content="student/Level" />                     
+        </tr>
+      </table>
+       <br />              
+                     
+       <table>
+        <span tal:repeat="result results">
+          <tr tal:condition="repeat/result/start">
+            <td tal:content="result/Verdict" /> <td tal:content="result/Session" /> 
+          </tr>        
+          <tr tal:condition="repeat/result/start"><th>Course</th><th>Grade</th><th>Weight</th></tr>
+          <tr><td tal:content="result/CosCode" />
+            <td tal:content="result/GRADE" /><td tal:content="result/WEIGHT" />
+          </tr>
+        </span>
+      </table>
+    </metal:main>
+  </metal:body>
+</metal:html>
Index: /WAeUP_SRP/trunk/skins/waeup_student/widget_waeup_multiline_result_render.pt
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_student/widget_waeup_multiline_result_render.pt	(revision 1146)
+++ /WAeUP_SRP/trunk/skins/waeup_student/widget_waeup_multiline_result_render.pt	(revision 1146)
@@ -0,0 +1,80 @@
+<tal:block define="mode options/mode;
+                   id here/getWidgetId;
+                   id_s string:${id}_s;
+                   id_g string:${id}_g;
+                   results options/datastructure/?id;
+                   subject options/datastructure/?id_s;
+                   grade options/datastructure/?id_g;
+                   grade_voc context/portal_vocabularies/exam_grades;   
+                   subjects_voc context/portal_vocabularies/exam_subjects;   
+">
+<tal:block condition="python: mode == 'view'">
+    <div tal:repeat="res results">
+      <span tal:content="python:subjects_voc.get(res[0])" />: <span tal:content="python:grade_voc.get(res[1])" />
+    </div>
+</tal:block>
+<tal:block define="name here/getHtmlWidgetId;"
+           condition="python: mode == 'edit'">
+  <table border=0 cellpadding=0 cellspacing=0>
+    <tr><th>Subject</th><th>Grade</th>
+      <tr tal:repeat="res results">
+        <span tal:define="wnr python:'%02d' % (repeat['res'].number())">
+          <td><select size="1"
+                      tal:attributes="name string:${name}${wnr}_s;
+                      id string:${name}_s;"
+                      >
+              <option tal:repeat="sub subjects_voc/items"
+                      tal:attributes="value python:sub[0];
+                      selected python: res[0] == sub[0];"
+                      tal:content="python: sub[1]">
+              </option>
+            </select>
+          </td>
+          <td> 
+            <select size="1"
+                    tal:attributes="name string:${name}${wnr}_g;
+                    id string:${name}_g;"
+                    >
+              <option tal:repeat="sub grade_voc/items"
+                      tal:attributes="value python:sub[0];
+                      selected python: res[1] == sub[0]"
+                      tal:content="python: sub[1]">
+              </option>
+            </select>
+          </td>
+        </span>
+      </tr>
+      <tr>
+        <td colspan="2">
+          <hr />
+        </td>
+      </tr>
+    <tr>
+      <td><select size="1"
+                  tal:attributes="name string:${name}_s;
+                  id string:${name}_s;">
+              <option tal:repeat="sub subjects_voc/items"
+                      tal:attributes="value python:sub[0]"
+                      tal:content="python: sub[1]">
+              </option>
+            </select>
+      </td>
+      <td> 
+          <select size="1"
+                  tal:attributes="name string:${name}_g;
+                  id string:${name}_g;">
+                  <option tal:repeat="sub grade_voc/items"
+                          tal:attributes="value python:sub[0]"
+                          tal:content="python: sub[1]">
+          </option>
+        </select>
+      </td>
+      <td> 
+        <input type="submit" class="standalone" name="cpsdocument_edit_button"
+         value="Add/Modify" 
+         id="cpsdocument_edit_button" />
+      </td>
+    </tr>
+  </table>
+</tal:block>
+</tal:block>
