Index: WAeUP_SRP/trunk/CHANGES.txt
===================================================================
--- WAeUP_SRP/trunk/CHANGES.txt	(revision 3706)
+++ WAeUP_SRP/trunk/CHANGES.txt	(revision 3707)
@@ -66,2 +66,6 @@
 -----------------
 - add total_score to applicants_catalog   
+
+1.11 (2008-10-04)
+-----------------
+- OIS customizations according to Issoufou's wish list of Oct 2 (2, 4, 5, 6, 7, 8)   
Index: WAeUP_SRP/trunk/WAeUPTables.py
===================================================================
--- WAeUP_SRP/trunk/WAeUPTables.py	(revision 3706)
+++ WAeUP_SRP/trunk/WAeUPTables.py	(revision 3707)
@@ -1557,6 +1557,7 @@
 
             for field in self.schema():
-                d[field] = getattr(brain,field,'')
-
+                d[field] = getattr(brain,field,None)
+                if repr(d[field]) == 'Missing.Value':
+                    d[field] = ''
             d['weight'] = ''
             d['grade'] = ''
@@ -1569,5 +1570,5 @@
                 if score and str(score).isdigit() and int(score) > 0:
                     score = int(score)
-                    grade,weight = self.getGradesFromScore(score)
+                    grade,weight = self.getGradesFromScore(score,'')
                     gpa += weight * credits
                     d['weight'] = weight
@@ -1575,8 +1576,16 @@
                     d['score'] = score
 
-            if str(brain.ca1).isdigit() and str(brain.ca2).isdigit() and str(brain.exam).isdigit():
-                d['score_calc'] = int(brain.ca1) + int(brain.ca2) + int(brain.exam)
-            else:
+            #if str(brain.ca1).isdigit() and str(brain.ca2).isdigit() and str(brain.exam).isdigit():
+            #    d['score_calc'] = int(brain.ca1) + int(brain.ca2) + int(brain.exam)
+            #else:
+            #    d['score_calc'] = ''
+            try:
+                d['score_calc'] = float(brain.ca1) + float(brain.ca2) + float(brain.exam)
+            except:
                 d['score_calc'] = ''
+
+            if d['score_calc']:
+                grade = self.getGradesFromScore(d['score_calc'],level_id)
+                d['grade'] = grade
 
             d['coe'] = ''
Index: WAeUP_SRP/trunk/profiles/ois/actions.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/ois/actions.xml	(revision 3706)
+++ WAeUP_SRP/trunk/profiles/ois/actions.xml	(revision 3707)
@@ -156,5 +156,5 @@
   <action title="My Accommodation" action_id="reserve_accommodation"
      category="student_navigation" condition_expr="member"
-     url_expr="string:${portal_url}/campus/students/${member}/reserve_accommodation" visible="True"/>
+     url_expr="string:${portal_url}/campus/students/${member}/reserve_accommodation" visible="False"/>
   <action title="My Payments" action_id="payments"
      category="student_navigation" condition_expr="member"
Index: WAeUP_SRP/trunk/profiles/ois/layouts/student_course_result.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/ois/layouts/student_course_result.xml	(revision 3706)
+++ WAeUP_SRP/trunk/profiles/ois/layouts/student_course_result.xml	(revision 3707)
@@ -7,5 +7,35 @@
  <property name="flexible_widgets"/>
  <property name="validate_values_expr"></property>
-
+ <property name="label"></property>
+ <property name="label_edit"></property>
+ <property name="is_i18n">False</property>
+ <widget name="ca1" meta_type="Float Widget">
+  <property name="title">CA 1 Marks</property>
+  <property name="fields">
+   <element value="ca1"/>
+  </property>
+  <property name="label">CA 1 Marks</property>
+  <property name="label_edit">CA 1 Marks</property>
+  <property name="readonly_layout_modes"/>
+  <property name="hidden_layout_modes"/>
+  <property name="hidden_readonly_layout_modes"/>
+  <property name="is_limited">True</property>
+  <property name="max_value">20.0</property>
+  <property name="decimals_number">1</property>
+ </widget>
+ <widget name="ca2" meta_type="Float Widget">
+  <property name="title">CA 2 Marks</property>
+  <property name="fields">
+   <element value="ca2"/>
+  </property>
+  <property name="label">CA 2 Marks</property>
+  <property name="label_edit">CA 2 Marks</property>
+  <property name="readonly_layout_modes"/>
+  <property name="hidden_layout_modes"/>
+  <property name="hidden_readonly_layout_modes"/>
+  <property name="is_limited">True</property>
+  <property name="max_value">20.0</property>
+  <property name="decimals_number">1</property>
+ </widget>
  <widget name="code" meta_type="CertificateCourseId Widget">
   <property name="title">Course Code</property>
@@ -53,4 +83,18 @@
   <property name="hidden_readonly_layout_modes"/>
  </widget>
+ <widget name="exam" meta_type="Float Widget">
+  <property name="title">Exam Marks</property>
+  <property name="fields">
+   <element value="exam"/>
+  </property>
+  <property name="label">Exam Marks</property>
+  <property name="label_edit">Exam Marks</property>
+  <property name="readonly_layout_modes"/>
+  <property name="hidden_layout_modes"/>
+  <property name="hidden_readonly_layout_modes"/>
+  <property name="is_limited">True</property>
+  <property name="max_value">60.0</property>
+  <property name="decimals_number">1</property>
+ </widget>
  <widget name="passmark" meta_type="Int Widget">
   <property name="title">Passmark</property>
@@ -76,47 +120,8 @@
   <property name="label">Score</property>
   <property name="label_edit">Score</property>
-  <property name="readonly_layout_modes">
-  </property>
+  <property name="readonly_layout_modes"/>
   <property name="hidden_layout_modes"/>
   <property name="hidden_readonly_layout_modes"/>
  </widget>
-
- <widget name="exam" meta_type="Int Widget">
-  <property name="title">Exam Marks</property>
-  <property name="fields">
-   <element value="exam"/>
-  </property>
-  <property name="label">Exam Marks</property>
-  <property name="label_edit">Exam Marks</property>
-  <property name="readonly_layout_modes">
-  </property>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="ca1" meta_type="Int Widget">
-  <property name="title">CA 1 Marks</property>
-  <property name="fields">
-   <element value="ca1"/>
-  </property>
-  <property name="label">CA 1 Marks</property>
-  <property name="label_edit">CA 1 Marks</property>
-  <property name="readonly_layout_modes">
-  </property>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="ca2" meta_type="Int Widget">
-  <property name="title">CA 2 Marks</property>
-  <property name="fields">
-   <element value="ca2"/>
-  </property>
-  <property name="label">CA 2 Marks</property>
-  <property name="label_edit">CA 2 Marks</property>
-  <property name="readonly_layout_modes">
-  </property>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
-
  <widget name="title" meta_type="String Widget">
   <property name="title">Original Course Title</property>
@@ -155,2 +160,3 @@
 </object>
 
+
Index: WAeUP_SRP/trunk/skins/waeup_ois/apply_admission_manage_form.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/apply_admission_manage_form.pt	(revision 3706)
+++ 	(revision )
@@ -1,94 +1,0 @@
-<tal:block define="rendered_main options/rendered|nothing;
-           portal_status_message options/psm|nothing;
-           reg_no options/reg_no|nothing;
-           ds options/ds|nothing;
-           "
-           >	
-  <metal:block define-macro="edit_form">
-    <metal:block use-macro="here/main_template/macros/master">
-      <metal:block fill-slot="main">
-
-        <form action="" id="editForm" method="post" 
-              enctype="multipart/form-data" class="workflow"
-              tal:attributes="action string:${context/absolute_url}/apply_admission_manage"
-              >
-
-          <span tal:condition="not: rendered_main">
-            <h3>Application Process</h3>
-            <br />
-            
-            <table tal:define="info_applicants context/getApplicantsStatistics">
-            <tr> 
-              <td>PCE Applicants (status submitted):</td> 
-              <td><span tal:replace="info_applicants/submitted_pce" /></td>  
-            </tr>
-            <tr> 
-              <td>Pre-NCE Applicants (status submitted):</td> 
-              <td><span tal:replace="info_applicants/submitted_prence" /></td>
-            </tr>
-            <tr> 
-              <td>All Applicants (status admitted):</td> 
-              <td><span tal:replace="info_applicants/admitted" /></td>  
-            </tr>
-            <tr> 
-              <td>All Applicants (status student record created):</td> 
-              <td><span tal:replace="info_applicants/created" /></td>
-            </tr>            
-            <tr> 
-              <td>All Applicants (status not admitted):</td> 
-              <td><span tal:replace="info_applicants/not_admitted" /></td>  
-            </tr>    
-            </table>            
-            
-            <br/>
-            
-            <div class="label">Registration No:</div>
-            <input type="text" name="reg_no" size="15"
-                   />
-            <input type="submit" class="standalone" 
-                   name="search"
-                   value="Search" 
-                   />
-          </span>
-
-          <span tal:condition="rendered_main">
-            <h3>Application Record <span tal:replace="reg_no"/></h3>
-            <br />
-            <div tal:replace="structure rendered_main" />
-                        
-            <input type="hidden" name="reg_no"
-                   tal:attributes="value reg_no|nothing"
-                   />
-            <input type="submit" class="standalone" 
-                   name="reset"
-                   value="Reset" 
-                   tal:condition="python: ds['status'] and 'submitted' in ds['status']"
-                   />
-                   
-                   
-            <input type="submit" class="standalone" 
-                   name="edit"
-                   value="Save" 
-                   />                   
-                   
-            <br /><br />
-            
-
-            <div class="label">Registration No:</div>
-            <input type="text" name="new_reg_no" size="15"
-                   /> &nbsp;
-            <input type="submit" class="standalone" 
-                   name="search"
-                   value="Search next" 
-                   />
-          </span>
-        </form>
-        
-        <br/>
-        
-      
-        
-      </metal:block>
-    </metal:block>
-  </metal:block>
-</tal:block>
Index: WAeUP_SRP/trunk/skins/waeup_ois/getAccommodationInfo.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/getAccommodationInfo.py	(revision 3706)
+++ 	(revision )
@@ -1,108 +1,0 @@
-## Script (Python) "getAccommodationInfo"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=student_id=None
-##title=
-##
-# $Id: getAccommodationInfo.py 1726 2007-05-02 06:21:50Z henrik $
-"""
-return Info about the current Student
-"""
-import logging
-logger = logging.getLogger('Skins.getAccommodationInfo')
-import DateTime
-
-request = context.REQUEST
-mtool = context.portal_membership
-wf = context.portal_workflow
-member = mtool.getAuthenticatedMember()
-member_id = str(member)
-path_info = request.get('PATH_INFO').split('/')
-
-if mtool.isAnonymousUser():
-    return None
-info = {}
-if student_id is None:
-    requested_id = context.getStudentId()
-    if requested_id and not context.isStaff() and member_id != requested_id:
-        logger.info('%s tried to access %s' % (member_id,requested_id))
-        return None
-    elif context.isStaff():
-        student_id = requested_id
-    else:
-        student_id = member_id
-student_record = context.students_catalog.getRecordByKey(student_id)
-if student_record is None:
-    logger.info('%s not found in students_catalog' % student_id)
-    return None
-
-info['error'] = None
-info['matric_no']=student_record.matric_no
-info['jamb_reg_no']=student_record.jamb_reg_no
-info['name']=student_record.name
-info['email']=student_record.email
-info['level']=student_record.level
-info['verdict']=getattr(student_record,'verdict','')
-review_state = info['review_state'] = student_record.review_state
-info['session'] = session = context.getSessionId()
-students_object = context.portal_url.getPortalObject().campus.students
-student = getattr(students_object, student_id)
-info['student_id'] = student_id
-info['student'] = student
-
-booking_allowed = False
-
-# customize from here
-
-try:
-    level = int(student_record.level)
-except:
-    logger.info('%s has invalid level %s' % (student_id,student_record.level))
-    info['acco'] = None
-    info['booking_allowed'] = False
-    info['student_status'] = ''
-    return info    
-
-if review_state in ('school_fee_paid','courses_registered', 'courses_validated',) and student_record.session == session[0]:
-    info['booking_allowed'] = True
-    info['online_payment'] = True
-else:
-    info['acco'] = None
-    info['booking_allowed'] = False
-    info['student_status'] = ''
-    return info
-
-acco_id = 'accommodation_' + session[0]
-acco = getattr(student,acco_id,None)
-info['acco'] = acco
-info['acco_id'] = acco_id
-
-info['maintenance_paid'] = False
-if acco is not None:
-    info['acco_doc'] = acco.getContent()
-    info['acco_review_state'] = wf.getInfoFor(acco,'review_state',None)
-    info['maintenance_paid'] = info['acco_review_state'] == "maintenance_fee_paid"
-d = {}
-if level >= 300:
-   bt = 'fi'
-if level == 100:
-    bt = 'fr'
-elif level < 100:
-    bt = 'pr'    
-elif level < 300:
-    bt = 're'
-
-d['sex'] = 'male'
-if student_record.sex:
-    d['sex'] = 'female'
-
-
-info['sex']=d['sex']
-d['bt'] = bt
-student_status = "%(sex)s_%(bt)s" % d
-info['student_status'] = student_status
-return info
-
Index: WAeUP_SRP/trunk/skins/waeup_ois/getApplicantsStatistics.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/getApplicantsStatistics.py	(revision 3706)
+++ 	(revision )
@@ -1,39 +1,0 @@
-## Script (Python) "getApplicantsStatistics"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=
-##title=
-##
-# $Id: getApplicantsStatistics.py 1277 2007-01-11 21:11:37Z joachim $
-"""
-return Student Statistics
-"""
-
-import logging
-logger = logging.getLogger('Skins.getApplicantsStatistics')
-
-logger.info('%s invoked statistics' % context.portal_membership.getAuthenticatedMember())
-if not context.isStaff():
-    return 'Not allowed'
-
-
-info = {}
-res_submitted_pce = context.applicants_catalog(status = 'submitted', screening_type = 'pce')
-res_not_admitted = context.applicants_catalog(status = 'not admitted')
-res_submitted_prence = context.applicants_catalog(status = 'submitted', screening_type = 'prence')
-res_admitted = context.applicants_catalog(status = 'admitted')
-res_created = context.applicants_catalog(status = 'created')
-
-info['submitted_pce'] = len(res_submitted_pce)
-info['admitted'] = len(res_admitted)
-info['not_admitted'] = len(res_not_admitted)
-info['submitted_prence'] = len(res_submitted_prence)
-info['created'] = len(res_created)
-
-return info
-
-
-
Index: WAeUP_SRP/trunk/skins/waeup_ois/getCosCombinedVoc.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/getCosCombinedVoc.py	(revision 3706)
+++ 	(revision )
@@ -1,17 +1,0 @@
-##parameters=key=None
-# $Id: getCosCombinedVoc.py 2814 2007-11-28 12:26:51Z henrik $
-"""
-Return the combined courses as an vocabulary
-
-"""
-if key is None:
-    l = []
-    for k,v in context.portal_vocabularies.cos.items():
-        l += (k,v),
-    return l
-for voc in (context.portal_vocabularies.cos,):
-    title = voc.get(key,None)
-    if title is not None:
-        return title
-    else:
-        raise KeyError
Index: WAeUP_SRP/trunk/skins/waeup_ois/getInterswitchParams.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/getInterswitchParams.py	(revision 3706)
+++ 	(revision )
@@ -1,40 +1,0 @@
-## Script (Python) "getInterswitchParams"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=paytype,student,payment_id,student_record
-##title=
-##
-# $Id: getInterswitchParams.py 3627 2008-08-17 08:07:44Z henrik $
-
-test = ""
-d = {}
-d['payment_possible'] = True
-d['pay_ship_to'] = "Federal College Okene"
-
-d['site_id'] = '83'
-d['site_name'] = "fceokene.waeup.org"
-d['currency_id'] = '566'
-d['type'] = 'online'
-d['status'] = 'started'
-d['surcharge'] = '150'
-if test == 'simulate':
-    d['action'] = "%s/payments/%s/simulate_callback" % (student.absolute_url(),payment_id) #do not use simulate_callback
-elif test == 'test':
-    d['action'] = "https://webpay.interswitchng.com/test_paydirect/webpay/pay.aspx"
-else:
-    d['action'] = "https://webpay.interswitchng.com/paydirect/webpay/pay.aspx"
-if paytype in ("HOM",):
-    d['callback_function'] = 'interswitch_cb'
-    d['pay_item_id'] = '8300'
-    d['type_description'] = 'Hostel Maintenance Fee'
-    d['pay_item_name'] = "FCE Okene %(type_description)s" % d
-    d['amount'] = '4000'
-    d['category'] = 'hostel_maintenance'
-    d['item'] = paytype
-    #d['payment_params'] = 'switch_college_split'
-    d['payment_params'] = '0'
-
-return d
Index: WAeUP_SRP/trunk/skins/waeup_ois/getNextInfo.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/getNextInfo.py	(revision 3706)
+++ 	(revision )
@@ -1,62 +1,0 @@
-## Script (Python) "getNextInfo"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=student_brain
-##title=
-##
-# $Id: getNextInfo.py 2678 2007-11-16 13:41:44Z henrik $
-"""
-return the students next info
-"""
-try:
-    from Products.zdb import set_trace
-except:
-    def set_trace():
-        pass
-
-info = {}
-
-reasons = ''
-
-session_id = student_brain.session
-level_id = student_brain.level
-review_state = student_brain.review_state
-verdict = student_brain.verdict
-
-has_verdict = verdict and verdict != 'N/A'
-has_session = session_id and session_id != 'N/A'
-has_level = level_id and level_id != 'N/A'
-
-info['next_transition'] = None
-info['next_session_id'] = next_session_id = session_id
-info['next_level_id'] = next_level_id = level_id
-info['next_verdict'] = verdict
-info['next_previous_verdict'] = ''
-verdicts_voc = context.portal_vocabularies.verdicts
-if review_state == 'cleared_and_validated':
-    info['next_transition'] = "pay_school_fee"
-    info['next_verdict'] = ''
-elif review_state == 'returning' and has_verdict and has_level and has_session:
-    info['next_session_id'] = next_session_id = "%02d" % (int(session_id)+1)
-    if int(session_id) > 4:
-        info['next_transition'] = "pay_school_fee"
-        info['next_verdict'] = ''
-        info['next_previous_verdict'] = verdict
-        if verdict in ('A','B','G','C','Z',):                                     #customized
-            info['next_level_id'] = "%s" % (int(level_id) + 100)
-        #elif verdict == 'C':
-        #    info['next_level_id'] = "%s" % (int(level_id) + 10)
-        else:
-            info['next_level_id'] = level_id
-    else:
-        info['next_level_id'] = "%s" % (int(level_id) + 100)
-elif review_state == 'returning' and not (has_session and has_level and has_verdict):
-    reasons = "Your data record is incomplete. School fee payment has been disabled, please contact your faculty!"
-
-info['reasons'] = reasons
-info['next_session_str'] = context.getSessionsVoc(next_session_id)
-
-return info
Index: WAeUP_SRP/trunk/skins/waeup_ois/getPaymentsFolderInfo.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/getPaymentsFolderInfo.py	(revision 3706)
+++ 	(revision )
@@ -1,131 +1,0 @@
-## Script (Python) "getPaymentsFolderInfo"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=
-##title=
-##
-# $Id: getPaymentsFolderInfo.py 2480 2007-10-30 15:23:25Z joachim $
-"""
-Info for the PaymentsFolder
-"""
-from Products.AdvancedQuery import Eq, Between, Le,In
-
-mtool = context.portal_membership
-wftool = context.portal_workflow
-member = mtool.getAuthenticatedMember()
-payments_catalog = context.payments_catalog
-aq_payments = payments_catalog.evalAdvancedQuery
-if mtool.isAnonymousUser():
-    return None
-try:
-    from Products.zdb import set_trace
-except:
-    def set_trace():
-        pass
-
-def cmp_id(a,b):
-    s1 = "%(id)s" % a
-    s2 = "%(id)s" % b
-    if s1 == s2:
-        return 0
-    if s1 > s2:
-        return 1
-    return -1
-
-import DateTime
-request = context.REQUEST
-#students = context.portal_url.getPortalObject().campus.students
-student_id = context.getStudentId()
-if student_id is None:
-    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
-#student = getattr(students,student_id)
-student_record = context.students_catalog.getRecordByKey(student_id)
-
-
-info = {}
-is_so = info['is_so'] = context.isSectionOfficer()
-is_student = info['is_student'] = context.isStudent()
-info['student_name'] = student_record.name
-info['query_url'] = "https://webpay.interswitchng.com/paydirect/services/TransactionQueryURL.aspx"
-review_state = info['review_state'] = student_record.review_state
-parttime = student_record.mode and student_record.mode.endswith('_pt')
-fulltime = student_record.mode and student_record.mode.endswith('_ft')
-
-
-session = student_record.session
-next_info = context.getNextInfo(student_record)
-info['next_session'] = next_info['next_session_id']
-info['next_session_str'] = next_info['next_session_str']
-info['payment_method'] = ""
-info['reasons'] = next_info['reasons']
-
-# begin customization
-
-if review_state == 'cleared_and_validated':
-    info['payment_method'] = "online_payment"
-#elif review_state == 'cleared_and_validated' and session == '07':
-#    info['payment_method'] = "sc_payment"
-elif review_state == 'returning' and info['next_session'] != session:
-    info['payment_method'] = "online_payment"
-info['prod_id'] = '105'
-
-# end customization
-
-info['student_name'] = student_record.name
-payments_path = "%s/campus/students/%s/payments" % (context.portal_url(),student_id)
-payments = []
-payment_records = aq_payments(Eq('student_id',student_id)) # & Eq('session_id',student_record.session))
-vocabularies = context.portal_vocabularies
-paid_fees = []
-for payment in payment_records:
-    if payment.status == "paid":
-        paid_fees += "%s_%s" % (payment.category,payment.session_id),
-#info['pf'] = paid_fees
-for payment in payment_records:
-    row = {}
-    row['id'] = payment.key
-    if payment.status == 'invalid':
-        row['title'] = "Invalid Payment, Naira %s, %s" % (payment.amount,
-                                                          payment.date.strftime("%d/%m/%y %H:%M:%S"))
-    else:
-        row['title'] = "%s for Session %s, Naira %s, %s" % (vocabularies.payment_categories.get(payment.category),
-                                                            vocabularies.sessions.get(payment.session_id),
-                                                            payment.amount,
-                                                            payment.date.strftime("%d/%m/%y %H:%M:%S"))
-    oid = payment.order_id
-    onr = oid.rfind('-')+1
-    if onr > 0:
-        start_pos = onr
-    else:
-        start_pos = 6
-    url = row['url'] = "%s/p%s" % (payments_path,oid[start_pos:])
-    row['is_requeryable'] = "%s_%s" % (payment.category,payment.session_id) not in paid_fees and not payment.resp_desc and payment.type == 'online'# or str(member) in ('admin',)  # customized too
-    row['is_approvable'] = is_so and row['is_requeryable'] and payment.category == 'schoolfee' # does not make sense for maintenance
-    row['resp_desc'] = payment.resp_desc or 'Payment Process Interrupted'
-    row['trans_ref'] = payment.order_id
-    if row['is_requeryable']:
-        row['callback_url'] = "%(url)s/interswitch_cb" % row
-#        if payment.category == 'schoolfee':
-#            row['callback_url'] = "%(url)s/interswitch_cb" % row
-#        elif payment.category == 'hostel_maintenance':
-#            row['callback_url'] = "%(url)s/interswitch_acco_cb" % row
-#        else:
-        href = '%(query_url)s' % info
-        href += '?transRef=%(trans_ref)s' % row
-        href += '&prodID=%(prod_id)s' % info
-        href += '&redirectURL=%(callback_url)s' % row
-        row['href'] = href
-    if payment.status == 'paid':
-        row['confirmed'] = 'active'
-    else:
-        row['confirmed'] = 'unsuccessful'
-    row['is_editable'] = is_so and (row['confirmed'] == 'active')
-    payments.append(row)
-
-payments.sort(cmp_id)
-info['payments'] = payments
-return info
-
Index: WAeUP_SRP/trunk/skins/waeup_ois/getSchoolFee.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/getSchoolFee.py	(revision 3706)
+++ 	(revision )
@@ -1,54 +1,0 @@
-## Script (Python) "getSchoolFee"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=brain=None
-##title=
-##
-# $Id: getSchoolFee.py 2534 2007-11-05 06:37:12Z henrik $
-"""
-return SchoolFee
-"""
-
-
-d = {}
-
-if brain.mode == 'ug_sw':  
-    if str(brain.level) == '100':    # both 100 fresh and 100 returning who register for 200
-        d['all'] = 35000
-    else:
-        d['all'] = 30000
-elif brain.mode == 'pg_sw':  
-    d['all'] = 35000
-elif brain.mode == 'dp_pt':  
-    if str(brain.level) == '100' and brain.review_state == 'cleared_and_validated':    # only 100 fresh 
-        d['all'] = 40000
-    else:
-        d['all'] = 35000
-elif brain.mode == 'ug_pt':  
-    if str(brain.level) == '100' and brain.review_state == 'cleared_and_validated':    # only 100 fresh 
-        d['all'] = 50000
-    else:
-        d['all'] = 45000
-elif brain.mode == 'pg_pt':  
-    if str(brain.level) == '600' and brain.review_state == 'cleared_and_validated':    # only 600 fresh 
-        d['all'] = 60000
-    elif str(brain.level) == '600' and brain.verdict == 'C':                           # 600 repeaters
-        d['all'] = 55000
-    elif str(brain.level) == '600':                                                    # going to register for 700
-        d['all'] = 75000        
-    else:
-        d['all'] = 65000
-else:
-    d['all'] = 0
-
-
-next_info = context.getNextInfo(brain)
-next_session_str = next_info['next_session_str']
-d['next_session_id'] = next_info['next_session_id']
-d['description'] = "School Fee for Session %s" % next_session_str
-
-return d
-
Index: WAeUP_SRP/trunk/skins/waeup_ois/getSimpleStudentStatistics.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/getSimpleStudentStatistics.py	(revision 3706)
+++ 	(revision )
@@ -1,137 +1,0 @@
-## Script (Python) "getRetStudentStatistics"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=
-##title=
-##
-# $Id: getStudentStatistics.py 1277 2007-01-11 21:11:37Z joachim $
-"""
-return Student Statistics
-"""
-
-import logging
-logger = logging.getLogger('Skins.getSimpleStudentStatistics')
-
-logger.info('%s invoked statistics' % context.portal_membership.getAuthenticatedMember())
-if not context.isStaff():
-    return
-
-
-catA =      (      'school_fee_paid',
-                   'courses_registered',
-                   'courses_validated',
-                   )
-
-catB =      (      'courses_registered',
-                   'courses_validated',
-                   )
-
-catC =      (      'student_created',
-                   'returning',
-                   'admitted',
-                   'clearance_pin_entered',
-                   'objection_raised',
-                   'clearance_requested',
-                   'cleared_and_validated',
-                   )
-
-current_session = context.getSessionId()[0]
-
-
-returning =  ('110','120','200','210','220','300','310','320','400','410','420','500','510', '520','500','510','520','610','620','700','710','720','800','810','820',)
-new =        ('100','600')
-
-
-faculties = context.portal_catalog(portal_type="Faculty")
-
-l = []
-
-fac_res = {}
-
-dict = {}
-dict['id'] = 'All Faculties'
-dict['title'] = 'All Faculties'
-
-
-res_ft = context.students_catalog(level = returning)
-dict['total_ft'] = len(res_ft)
-
-res_pt = context.students_catalog(level = new)
-dict['total_pt'] = len(res_pt)
-
-res_Aft = context.students_catalog(review_state = catA, level = returning, session = current_session)
-dict['total_Aft'] = len(res_Aft)
-
-res_Apt = context.students_catalog(review_state = catA, level = new, session = current_session)
-dict['total_Apt'] = len(res_Apt)
-
-
-
-res_Bft = context.students_catalog(review_state = catB, level = returning, session = current_session)
-dict['total_Bft'] = len(res_Bft)
-
-res_Bpt = context.students_catalog(review_state = catB, level = new, session = current_session)
-dict['total_Bpt'] = len(res_Bpt)
-
-
-
-res_Cft = context.students_catalog(review_state = catC, level = returning, session = current_session)
-dict['total_Cft'] = len(res_Cft)
-
-res_Cpt = context.students_catalog(review_state = catC, level = new, session = current_session)
-dict['total_Cpt'] = len(res_Cpt)
-
-
-
-
-res_total = context.students_catalog()
-dict['total_in_catalog'] = len(res_total)
-dict['not_categorized'] = dict['total_in_catalog'] - dict['total_ft'] - dict['total_pt']
-
-l.append(dict)
-
-
-for f in faculties:
-    dict = {}
-    dict['id'] = f.getId
-    dict['title'] = f.Title
-
-    res_ft = context.students_catalog(faculty = f.getId, level = returning)
-    dict['total_ft'] = len(res_ft)
-
-    res_pt = context.students_catalog(faculty = f.getId, level = new)
-    dict['total_pt'] = len(res_pt)
-
-
-    res_Aft = context.students_catalog(faculty = f.getId, review_state = catA, level = returning, session = current_session)
-    dict['total_Aft'] = len(res_Aft)
-
-    res_Apt = context.students_catalog(faculty = f.getId, review_state = catA, level = new, session = current_session)
-    dict['total_Apt'] = len(res_Apt)
-
-
-
-    res_Bft = context.students_catalog(faculty = f.getId, review_state = catB, level = returning, session = current_session)
-    dict['total_Bft'] = len(res_Bft)
-
-    res_Bpt = context.students_catalog(faculty = f.getId, review_state = catB, level = new, session = current_session)
-    dict['total_Bpt'] = len(res_Bpt)
-
-
-
-    res_Cft = context.students_catalog(faculty = f.getId, review_state = catC, level = returning, session = current_session)
-    dict['total_Cft'] = len(res_Cft)
-
-    res_Cpt = context.students_catalog(faculty = f.getId, review_state = catC, level = new, session = current_session)
-    dict['total_Cpt'] = len(res_Cpt)
-
-
-
-
-    l.append(dict)
-
-return l
-
Index: WAeUP_SRP/trunk/skins/waeup_ois/getTranscriptInfo.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/getTranscriptInfo.py	(revision 3706)
+++ 	(revision )
@@ -1,88 +1,0 @@
-## Script (Python) "getTranscriptInfo"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=student=None
-##title=
-##
-# $Id: getStudyLevelInfo.py 2760 2007-11-26 07:39:15Z henrik $
-"""
-return Info about the Studylevel
-try:
-    from Products.zdb import set_trace
-except:
-    def set_trace():
-        pass
-"""
-
-request = context.REQUEST
-response = request.RESPONSE
-import logging
-logger = logging.getLogger('Skins.getTranscriptInfo')
-info = context.waeup_tool.getAccessInfo(context)
-student_id = info['student_id']
-if student_id is None:
-    return None
-
-mtool = context.portal_membership
-if mtool.isAnonymousUser(): # or not context.isSectionOfficer():
-    return None
-
-mtool = context.portal_membership
-member = mtool.getAuthenticatedMember()
-member_id = str(member)
-
-course_results = context.course_results
-
-
-student_record = context.students_catalog.getRecordByKey(student_id)
-info['student_record'] = context.getFormattedStudentEntry(student_record)
-
-
-year_courses = [[],[],[],[],[],[],[],[],[]]
-year_details = [{'year':0},{'year':1},{'year':2},{'year':3},{'year':4},{'year':5},{'year':6},{'year':7},{'year':8}]
-
-courses = course_results.getAllCourses(student_id)
-
-for course in courses:
-    year = divmod(int(course['level_id']),100)[0]
-    year_courses[year].append(course)
-    if not getattr(year_details[year],'session',None):
-        year_details[year]['session'] = context.portal_vocabularies.sessions.get(course['session_id'])
-
-year_counter = 0
-cgpa = 0
-c_total_credits = 0
-for year in year_courses:
-    gpa = 0
-    total_credits = 0
-    for course in year:
-        if course['weight'] and course['credits']:
-            gpa += int(course['weight']) * int(course['credits'])
-            total_credits += int(course['credits'])
-    cgpa += gpa
-    c_total_credits += total_credits
-    if gpa and total_credits:
-        year_details[year_counter]['total_credits'] = total_credits
-        year_details[year_counter]['gpa'] = "%4.2f" % (float(gpa)/int(total_credits))
-    else:
-        year_details[year_counter]['total_credits'] = 0
-        year_details[year_counter]['gpa'] = 0
-
-    if cgpa and c_total_credits:
-        year_details[year_counter]['c_total_credits'] = c_total_credits
-        year_details[year_counter]['cgpa'] = "%4.2f" % (float(cgpa)/int(c_total_credits))
-    else:
-        year_details[year_counter]['c_total_credits'] = 0
-        year_details[year_counter]['cgpa'] = 0
-
-    year.sort(cmp=lambda x,y: cmp("%(semester)s%(code)s" % x,
-                                         "%(semester)s%(code)s" % y))
-    year_counter += 1
-
-info['year_details'] = year_details
-info['year_courses'] = year_courses
-
-return info
Index: WAeUP_SRP/trunk/skins/waeup_ois/goto_interswitch_form.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/goto_interswitch_form.pt	(revision 3706)
+++ 	(revision )
@@ -1,52 +1,0 @@
-<metal:body use-macro="here/main_template/macros/master">
-    <metal:main fill-slot="main"
-                tal:define="info options/info">
-                
-        <h3>Authorize Online Payment! </h3>
-        <br />
-                
-      <form method="post" action="pay_online"
-            tal:attributes="action info/action ">
-      <span tal:repeat="arg python:info['args'].items()"
-            tal:omit-tag="">
-          <input type="hidden" tal:attributes="name python:arg[0];value python:arg[1]" />
-      </span>          
-      
-      <span tal:replace = "structure info/xml_data" /> 
-      
-        <table>
-          <tr>
-            <td width="100px">
-            Payment:</td>
-            <td tal:content="info/type_description"></td>
-          </tr>
-          <tr>
-            <td>
-            Name:
-            </td>
-            <td tal:content="info/pay_bill_to" />
-          </tr>
-          <tr>
-            <td >
-            Amount:
-            </td>
-            <td> Naira <span tal:content="info/amount" /></td>
-          </tr>
-          <tr>
-            <td >
-            Surcharge:
-            </td>
-            <td> Naira <span tal:content="info/surcharge" /></td>
-          </tr>          
-      
-        </table>
-        <br />
-        <input type="submit" 
-               class="standalone" 
-               name="goto_bank" 
-               value="Proceed to Interswitch Payment Gateway" 
-               />
-      </form>
-    </metal:main>
-</metal:body>
-
Index: WAeUP_SRP/trunk/skins/waeup_ois/interswitch_form.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/interswitch_form.pt	(revision 3706)
+++ 	(revision )
@@ -1,46 +1,0 @@
-<metal:body use-macro="here/main_template/macros/master">
-  <metal:main fill-slot="main"
-              tal:define="info options/info">
-    <h3>Confirm Your Payment Data! </h3>
-    <br />
-    <span tal:condition="not: info/payment_possible">
-      No payment information for your course available.
-    </span>
-    <span tal:condition="info/payment_possible">
-      <form method="post" action="pay_interswitch">
-        <table>
-          <tr>
-            <td width="100px">
-            Payment:</td>
-            <td tal:content="info/type_description"></td>
-          </tr>
-          <tr>
-            <td>
-            Name:
-            </td>
-            <td tal:content="info/pay_bill_to" />
-          </tr>
-          <tr>
-            <td >
-            Amount:
-            </td>
-            <td> Naira <span tal:content="info/amount" /></td>
-          </tr>
-          <tr>
-            <td >
-            Surcharge:
-            </td>
-            <td> Naira <span tal:content="info/surcharge" /></td>
-          </tr>                  
-        </table>
-        <br />
-        <input type="submit" 
-               class="standalone" 
-               name="goto_bank" 
-               value="Confirm" 
-               />
-      </form>
-    </span>
-    </metal:main>
-</metal:body>
-
Index: WAeUP_SRP/trunk/skins/waeup_ois/layout_application_view_info.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/layout_application_view_info.pt	(revision 3707)
+++ WAeUP_SRP/trunk/skins/waeup_ois/layout_application_view_info.pt	(revision 3707)
@@ -0,0 +1,77 @@
+<metal:block define-macro="default_view"
+  tal:define="layout options/layout;
+              dm options/datastructure/getDataModel;
+              widgets python:context.getRenderedWidgets(layout);
+              info context/getStudentBaseInfo;"
+              >
+  
+      <tal:block define="cell widgets/passport;
+                         widget cell/widget">
+          <img src="img" tal:replace="structure cell/widget_rendered" />
+      </tal:block>
+      
+      <br /><br />
+
+      <table width="" cellpadding="2" cellspacing="0" summary="Form layout">
+        <tr>
+          <td valign="top" width="180px"><span class="dlabel">Name</span>:
+          </td>
+          <td> 
+            <span tal:content="info/student/name" />
+          </td>      
+        </tr>
+        <tr>
+          <td valign="top" width="180px"><span class="dlabel">Sex</span>:
+          </td>
+          <td> 
+            <span tal:content="info/student/sex" />
+          </td>      
+        </tr>          
+        <tr valign="top">
+          <td><span class="dlabel">Student ID</span>:
+          </td>
+          <td> 
+            <span tal:content="info/id" />
+          </td>      
+        </tr>
+        <tr valign="top">
+          <td><span class="dlabel">Registration No</span>:
+          </td>
+          <td> 
+            <span tal:content="info/student/matric_no" />
+          </td>      
+        </tr>        
+
+        <tr valign="top">
+          <td><span class="dlabel">Email</span>:
+          </td>
+          <td> 
+            <span tal:content="info/student/email" />
+          </td>      
+        </tr>         
+        <tr valign="top">
+          <td><span class="dlabel">Phone</span>:
+          </td>
+          <td> 
+            <span tal:content="info/student/phone" />
+          </td>      
+        </tr>         
+        <tr valign="top">
+          <td><span class="dlabel">Current Session</span>:
+          </td>
+          <td> 
+            <span tal:content="python:context.portal_vocabularies.sessions.get(info['student']['session'])" />  
+          </td>      
+        </tr>           
+        <tr valign="top">
+          <td><span class="dlabel">Current Level</span>:
+          </td>
+          <td> 
+            <span tal:content="python:context.portal_vocabularies.student_levels.get(info['student']['level'])" />  
+          </td>      
+        </tr>             
+      </table>
+        
+        
+
+</metal:block>
Index: WAeUP_SRP/trunk/skins/waeup_ois/layout_student_acco_view_slip.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/layout_student_acco_view_slip.pt	(revision 3706)
+++ 	(revision )
@@ -1,34 +1,0 @@
-<!-- a layout_lib macro -->
-<!-- $Id: layout_student_acco_view_slip.pt 1316 2007-01-17 18:05:49Z henrik $ -->
-<metal:block define-macro="default_view"
-  tal:define="layout options/layout;
-              dm options/datastructure/getDataModel;
-              widgets python:context.getRenderedWidgets(layout);
-              fields python:('bed',
-                              'acco_res_date',
-                                 'acco_maint_pay_id', 
-                                 'acco_maint_fee',
-                                 'acco_maint_date',
-                                 )"
-                                 >
-  <table width="" cellpadding="2" cellspacing="0" summary="Form layout">
-    <tr tal:repeat="field fields">
-      <tal:block tal:define="cell python: widgets[field]">
-        <tal:block define="widget cell/widget">
-          <div tal:attributes="class cell/widget_css_class|string:label;
-            id python:widget.getHtmlWidgetId()+'_widget';">
-            <td width="180px" valign="top">
-             <span class="dlabel"
-                    tal:condition="widget/label"
-                    tal:content="widget/label">label</span>:
-            </td>
-            <td> 
-               <span tal:condition="cell" tal:content="structure cell/widget_rendered"></span>
-               <span tal:condition="not:cell/widget_rendered"> none </span>
-            </td>
-          </div>
-        </tal:block>
-      </tal:block>
-    </tr>
-  </table>
-</metal:block>
Index: WAeUP_SRP/trunk/skins/waeup_ois/main_template.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/main_template.pt	(revision 3706)
+++ WAeUP_SRP/trunk/skins/waeup_ois/main_template.pt	(revision 3707)
@@ -87,5 +87,6 @@
             <td style="width: 20px;"></td>
             <td style="width: 170px; text-align: center; padding-top: 0.5em;">
-              <img tal:attributes="src string:${static_base_url}logo_left.jpg"  alt="Logo" />
+            <img tal:attributes="src string:${static_base_url}logo_left.jpg"  alt="Logo"
+                     height="100"  />
             </td>
             <td padding=0.5em><h1>Olashore International School <br /> Iloko-Ijesa, Nigeria</h1></td>
Index: WAeUP_SRP/trunk/skins/waeup_ois/no_booking_allowed.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/no_booking_allowed.pt	(revision 3706)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<metal:body use-macro="here/main_template/macros/master">
-  <metal:main fill-slot="main">
-
-    <h3>You are not eligible to book accommodation!</h3>
-
-  </metal:main>
-</metal:body>
-
Index: WAeUP_SRP/trunk/skins/waeup_ois/pay_interswitch.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/pay_interswitch.py	(revision 3706)
+++ 	(revision )
@@ -1,167 +1,0 @@
-## Script (Python) "pay_online"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=
-##title=
-##
-# $Id: pay_interswitch.py 2619 2007-11-10 17:39:36Z henrik $
-"""
-pay online
-"""
-from urllib import urlencode
-import logging
-logger = logging.getLogger('Skins.pay_interswitch')
-import DateTime
-
-if context.portal_membership.isAnonymousUser():
-    return None
-
-try:
-    from Products.zdb import set_trace
-except:
-    def set_trace():
-        pass
-request = context.REQUEST
-wftool = context.portal_workflow
-students = context.portal_url.getPortalObject().campus.students
-
-
-student_id = context.getStudentId()
-student = getattr(students,student_id)
-
-student_record = context.students_catalog.getRecordByKey(student_id)
-#amount,description = context.getSchoolFee(student_record.faculty,student_record.session,student_record.course)
-info = {}
-info['student'] = student_record
-info['payment_possible'] = False
-info['amount'] = '0'
-info['bank'] = ''
-info['type_description'] = ''
-info['pay_bill_to'] = ''
-fee_dict = context.getSchoolFee(student_record)
-fulltime = student_record.mode.endswith('_ft')
-
-if not fee_dict:
-    return context.interswitch_form(info=info)
-
-info['site_id'] = '105'
-info['currency_id'] = '566'
-pay_item_id = "10500"
-
-#info['type_code'] = sbrain.course  #type_code is redundant and will be removed soon
-info['bank'] = ''
-info['payment_possible'] = True
-info['type_description'] = fee_dict['description']
-info['pay_bill_to'] = student_record.name
-info['student_id'] = student_id
-info['student_name'] = student_record.name
-info['type'] = 'online'
-info['status'] = 'started'
-info['session_id'] = fee_dict['next_session_id']
-info['item'] = student_record.course
-info['category'] = 'schoolfee'
-info['student_email'] = student_record.email
-now = DateTime.DateTime()
-info['date'] = now
-info['pay_ship_to'] = "Adekunle Ajasin University"
-timestamp = "%d" % int(now.timeTime()*1000)
-info['order_id'] = "%s%s" % (student_id[1:],timestamp)
-p_id = "p%s" % timestamp
-
-
-info['surcharge'] = interswitch_amount = '150'
-info['amount'] = amount = fee_dict['all']
-total_amount = 100*int(amount) + 100*int(interswitch_amount)
-
-
-if student_id is None:
-    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
-
-if True:
-    info['action'] = "https://webpay.interswitchng.com/paydirect/webpay/pay.aspx"
-else:
-    #pass
-    #return None
-    info['action'] = "%s/payments/%s/simulate_callback" % (student.absolute_url(),p_id)
-
-
-if "payments" not in student.objectIds():
-    student.invokeFactory('PaymentsFolder','payments')
-    payments = getattr(student,'payments')
-    d = {}
-    d['Title'] = 'Payments'
-    payments.getContent().edit(mapping=d)
-    wftool.doActionFor(payments,'open')
-else:
-    payments = getattr(student,'payments')
-if request.has_key('epayment'):
-    return context.interswitch_form(info=info)
-
-
-payments.invokeFactory('Payment', p_id)
-payment = getattr(payments,p_id)
-wftool.doActionFor(payment,'open')
-d = {}
-d.update(info)
-payment.getContent().edit(mapping=d)
-
-
-info['callback_url'] = "%s/payments/%s/interswitch_cb?echo=%s" % (student.absolute_url(),
-                                                                  p_id,
-                                                                  p_id)
-
-logger.info('%(student_id)s initiated online school fee payment with order_id %(order_id)s and callback url %(callback_url)s' % info)
-payment_fields = (('product_id','site_id'),
-                  ('site_redirect_url','callback_url'),
-                  ('Currency','currency_id'),
-                  ('cust_id','student_id'),
-                  ('cust_id_desc','type_description'),
-                  ('cust_name','student_name'),
-                  ('txn_ref','order_id'),
-                  ('Amount','amount'),
-                  )
-args = {}
-for arg,field in payment_fields:
-    args[arg] = info[field]
-
-bt_amount = 4000
-
-aaua_amount = amount - bt_amount
-xmldict = {}
-xmldict['detail_ref'] = args['txn_ref']
-xmldict['department'] = student_record.department
-xmldict['faculty'] = student_record.faculty
-xmldict['aaua_amount'] = "%d" % int(100*aaua_amount)
-xmldict['bt_amount'] = "%d" % int(100*bt_amount)
-if student_record.mode.endswith('_pt'):
-    xmldict['aaua_acct'] = "0321100000000046"
-elif student_record.mode.endswith('_sw'):
-    xmldict['aaua_acct'] = "0321100000000056"
-else:
-    xmldict['aaua_acct'] = "0000000000000000"
-
-
-xmltext = """<payment_item_detail>
-<item_details detail_ref="%(detail_ref)s" college="AAUA" department="%(department)s" faculty="%(faculty)s">
-<item_detail item_id="1" item_name="AAUA" item_amt="%(aaua_amount)s" bank_id="89" acct_num="%(aaua_acct)s" />
-<item_detail item_id="2" item_name="BT" item_amt="%(bt_amount)s" bank_id="117" acct_num="6012015294" />
-</item_details>
-</payment_item_detail>""" % xmldict
-
-info['xml_data'] = """<input type="hidden" name="xml_data" value='%s'  />""" % xmltext
-
-args['Amount'] = "%d" % (total_amount)
-args['site_name'] = "aaua.waeup.org"
-args['cust_name_desc'] = "Student Name"
-args['pay_item_id'] = pay_item_id
-args['pay_item_name'] = "AAUA Tuition Payments"
-args['payment_params'] = 'college_split'
-#args['xml_data'] = ''
-#args['xml_data'] = xmltext   # info['xml_data']can be used instead
-info['args'] = args
-
-return context.goto_interswitch_form(info=info)
-
Index: WAeUP_SRP/trunk/skins/waeup_ois/search_students_form.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/search_students_form.pt	(revision 3706)
+++ 	(revision )
@@ -1,128 +1,0 @@
-<metal:body use-macro="here/main_template/macros/master">
-  <metal:main fill-slot="main"
-              tal:define="rendered options/rendered;
-              portal_status_message options/psm;
-              students options/students;
-              info options/info|nothing;
-              is_so context/isSectionOfficer;
-              allowed options/allowed|nothing;"
-              >
-    <span tal:condition="not: allowed">
-      <span tal:content="here/illegal_view" />
-    </span>
-    <span tal:condition="allowed" tal:omit-tag="">
-      <strong>
-        <nobr><a href="statistics_simple_view">Basic Student Statistics</a>
-        &nbsp;&nbsp;&nbsp;&nbsp;</nobr>      
-        <span tal:condition="is_so">
-          <nobr><a href="apply_admission_manage">Application Process</a>
-          &nbsp;&nbsp;&nbsp;&nbsp;</nobr>      
-          <nobr><a href="view_logs">View Log Files</a>
-          &nbsp;&nbsp;&nbsp;&nbsp;</nobr>
-          <nobr><a href="add_student">Add Student Record</a>        
-          &nbsp;&nbsp;&nbsp;&nbsp;</nobr>
-          <nobr><a href="deactivate_students">Deactivate Student Record(s)</a></nobr>
-        </span>
-      </strong>
-      <h3> Search Student Section</h3><br />
-      You are logged in as member <span tal:replace="info/member|nothing" /> 
-      <span tal:condition="info/faculties|nothing" tal:omit-tag="">
-        who is ClearanceOfficer for Faculty 
-        <span tal:repeat="faculty info/faculties" tal:content="faculty" />
-      </span>
-      <span tal:condition="info/departments|nothing" tal:omit-tag="">
-        and <span tal:repeat="department info/departments|nothing" tal:content="department"/></span>.
-      <br /><br />
-      <span tal:replace="structure rendered" />
-      <metal:block use-macro="here/generic_lib_portal_message/macros/portal_message" />
-      <span tal:condition="students">
-        <span tal:define="items students;
-        columns python:3;
-        items_per_page python:40;
-        max_items python:300;
-        zoom python:0;
-        batches_all python:here.getBatchList(items,columns, items_per_page,zoom,max_items=400);
-        batches python:batches_all[0];
-        batch_info python:batches_all[1];
-        zoomed python:batches_all[2];
-        mq nocall:modules/ZTUtils/make_query;"
-        tal:omit-tag="">
-          <tal:block tal:condition="python: items and batch_info and batch_info['nb_pages'] > 1">
-            <div class="batchLayout" i18n:translate="">
-              Objects:<strong><tal:block replace="batch_info/start"
-                                         i18n:name="batch_start" /> - <tal:block replace="batch_info/limit"
-                                                                                 i18n:name="batch_limit" />
-              </strong> of <tal:block replace="batch_info/length" i18n:name="batch_length" />
-            </div>
-            <br />
-          </tal:block>
-          <table class="contentListing" width="100%">
-            <span tal:repeat="rows batches" tal:omit-tag="">
-              <span tal:repeat="student rows">
-                <tr tal:condition="student" 
-                    tal:attributes="class python:test(repeat['student'].even(), 'even ajaxtd', 'odd ajaxtd')">
-                  <td><a href="id" tal:attributes="href string:${context/portal_url}/campus/students/${student/id}"
-                         tal:content="student/id"></a></td>    
-                  <td>
-                    <span tal:replace="student/name" />
-                  </td>    
-                  <td><span tal:replace="student/matric_no" /></td>   
-                  <td><span tal:replace="student/jamb_reg_no" /></td>
-                  <td tal:condition="options/co_view|nothing">
-                    <a href="id" 
-                       tal:attributes="href string:${context/portal_url}/campus/students/${student/id}/clearance/external_clearance_edit_form"
-                       target="edit"
-                       onclick="javascript:window.open('','edit','width=600, height=700, directories=no, toolbar=no, location=no, menubar=no, scrollbars=yes, status=no, resizable=no, dependent=no')"
-                       >[view and change state]</a></td>
-                  <td tal:condition="options/ca_view|nothing">
-                    <a href="id" 
-                       tal:attributes="href string:${context/portal_url}/campus/students/${student/id}/study_course/${student/level}/external_study_level_view"
-                       target="edit"
-                       onclick="javascript:window.open('','edit','width=600, height=700, directories=no, toolbar=no, location=no, menubar=no, scrollbars=yes, status=no, resizable=no, dependent=no')"
-                       >[view and validate course list]</a></td>
-                </tr>
-              </span>
-            </span>
-          </table>
-          <tal:block condition="python:batch_info and batch_info['nb_pages'] > 1">
-            <div class="pageNavigationLayout">
-              <a tal:define="previous batch_info/previous"
-                 tal:condition="python:previous is not None"
-                 tal:attributes="href python:'%s?%s'%(request['URL'],
-                 mq(request.form, b_start=0))"
-                 >
-              (&lt;&lt;)</a>
-              <a tal:define="previous batch_info/previous"
-                 tal:condition="python:previous is not None"
-                 tal:attributes="href python:'%s?%s'%(request['URL'],
-                 mq(request.form, b_start=previous))"
-                 i18n:translate="batch_previous">Previous</a>
-              <tal:block repeat="page batch_info/pages">
-                <tal:block condition="python:page != batch_info['start'] - 1">
-                  <a tal:attributes="href python:'%s?%s'%(request['URL'],
-                  mq(request.form, b_start=page))"
-                  tal:content="repeat/page/number">1</a>&nbsp;
-                </tal:block>
-                <tal:block condition="python:page == batch_info['start'] - 1">
-                  <span tal:content="string:${repeat/page/number}" />&nbsp;
-                </tal:block>
-              </tal:block>
-              <a tal:define="next batch_info/next"
-                 tal:condition="python:next is not None"
-                 tal:attributes="href python:'%s?%s'%(request['URL'],
-                 mq(request.form, b_start=next))"
-                 i18n:translate="batch_next">Next</a>
-              <a tal:define="next batch_info/next;
-              last_page python:batch_info['pages'][-1]"
-              tal:condition="python:next is not None"
-              tal:attributes="href python:'%s?%s'%(request['URL'],
-              mq(request.form, b_start=last_page))"
-              >
-              (&gt;&gt;)</a>
-            </div>
-          </tal:block>
-        </span>
-      </span>
-    </span>
-  </metal:main>
-</metal:body>
Index: WAeUP_SRP/trunk/skins/waeup_ois/statistics_simple_view.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/statistics_simple_view.pt	(revision 3706)
+++ 	(revision )
@@ -1,125 +1,0 @@
-<metal:body use-macro="here/main_template/macros/master">
-  <metal:main fill-slot="main">
-  <metal:block tal:define="faculties context/getSimpleStudentStatistics;
-                        mtool here/portal_membership;
-                        member mtool/getAuthenticatedMember;
-                        session_str python:context.getSessionId()[1]">       
-
-      <span tal:condition="not: faculties">
-        <span tal:content="here/illegal_view" />
-      </span>
-      <span tal:condition="faculties">
-  
-      <strong>
-      <nobr><a href="search_students">Search Students</a>
-      &nbsp;&nbsp;&nbsp;&nbsp;</nobr>        
-   
-      </strong>     
-
-      <h3>Basic Student Statistics <span tal:content="session_str" /></h3>
-      <br />      
-      <span tal:condition="not:isAnon">
-      Student records imported: <span tal:content="python: faculties[0]['total_in_catalog']" />
-      <br />  <br />  
-        <table >  
-
-          <tr>
-            <th>&nbsp;</th>
-            
-            <th style="border-style:solid; border-width:1px; border-color:black" align="center" colspan="2">All Students</th>
-            
-            <th style="border-style:solid; border-width:1px; border-color:black" align="center" colspan="2">Category A</th>
-
-            <th style="border-style:solid; border-width:1px; border-color:black" align="center" colspan="2">Category B</th>
-
-            <th style="border-style:solid; border-width:1px; border-color:black" align="center" colspan="2">Category C</th>
-
-
-          </tr>
-
-          <tr class="odd ajaxtd">
-            <th >Faculty</th>
-            <th align="right">Returning</th>
-            <th align="right">New</th>
-
-            <th align="right">Returning</th>
-            <th align="right">New</th>
-
-            <th align="right">Returning</th>
-            <th align="right">New</th>
-
-            <th align="right">Returning</th>
-            <th align="right">New</th>
-
-
-          </tr>
-          <tr tal:repeat="d faculties"
-              tal:attributes="class python:test(repeat['d'].even(), 'even ajaxtd', 'odd ajaxtd')">
-              <td width="80px"> <span tal:content="d/id" /> </td>
-
-              <td width="60px" align="right"> 
-                <span tal:content="d/total_ft" />
-              </td>              
-
-              <td width="60px" align="right"> 
-                <span tal:content="d/total_pt" />
-              </td>              
-
-
-              <td width="60px" align="right"> 
-                <span tal:content="d/total_Aft" />
-              </td>              
-
-              <td width="60px" align="right"> 
-                <span tal:content="d/total_Apt" />
-              </td>              
-
-     
-
-              <td width="60px" align="right"> 
-                <span tal:content="d/total_Bft" />
-              </td>              
-
-              <td width="60px" align="right"> 
-                <span tal:content="d/total_Bpt" />
-              </td>              
-              
-   
-              
-              <td width="60px" align="right"> 
-                <span tal:content="d/total_Cft" />
-              </td>      
-              
-              <td width="60px" align="right"> 
-                <span tal:content="d/total_Cpt" />
-              </td>      
-              
-                                        
-
-                                       
-
-          </tr>
-        </table>
-
-        <br />
-        <table   border=0>
-
-        <tr><td>Category A: </td> <td>students who paid their school fee in <span tal:content="session_str" /></td></tr>
-        <tr><td>Category B: </td> <td>students who registered their courses online (A contains B) in <span tal:content="session_str" /></td></tr>
-        <tr><td>Category C: </td> <td>students who 'arrived' in <span tal:content="session_str" /> but have not yet paid their school fee</td></tr>
-        <tr><td>New: </td> <td>students in level 100 or 600</td></tr>
-        <tr><td>&nbsp;</td><td>&nbsp;</td></tr>
-        <tr><td colspan="2"><strong>Remark:</strong> <span tal:content="python: faculties[0]['not_categorized']" /> returning students are not categorized.
-             </td>
-        </tr>
-          
-        </table>
-        
-        
-        
-      </span>
-      </span>
-  </metal:block>      
-  </metal:main>
-</metal:body>
-      
Index: WAeUP_SRP/trunk/skins/waeup_ois/student_view.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/student_view.pt	(revision 3706)
+++ WAeUP_SRP/trunk/skins/waeup_ois/student_view.pt	(revision 3707)
@@ -23,9 +23,5 @@
         <table>
           <tr>
-            <td width="220px">Registration Number:</td> 
-            <td><span tal:content="baseinfo/jamb_reg_no" /></td>
-          </tr>
-          <tr>
-            <td>Matriculation Number:</td> 
+            <td>Registration Number:</td> 
             <td><span tal:content="baseinfo/matric_no" /></td>
           </tr>      
Index: WAeUP_SRP/trunk/skins/waeup_ois/transcript_view.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_ois/transcript_view.pt	(revision 3706)
+++ 	(revision )
@@ -1,106 +1,0 @@
-<metal:body use-macro="here/main_template/macros/master">
-  <metal:main fill-slot="main"
-          tal:define="info context/getTranscriptInfo;">
-  <metal:block define-macro="edit_form">   
-              
-    <span tal:condition="not: info">
-      <span tal:content="here/illegal_view" />
-    </span>
-    
-    <span tal:condition="info">
-    <span tal:define= "is_so context/isSectionOfficer;
-                       is_ca context/isCourseAdviser;
-                       is_student info/is_student;
-                       with_score not: info/without_score|nothing;
-                       ">       
-          
-    <a href=""
-       tal:attributes="href string:${here/academicsParent}">
-      <img tal:attributes="src string:${here/portal_url}/arrow_up.gif"/>
-      Up one level
-    </a>
-
-    <h3> 
-      <span tal:condition="python: is_so or is_ca">
-        <span tal:content="info/student_record/name" />:
-      </span>
-      <span tal:condition="is_student">My </span> Transcript     
-      <br />
-    </h3>
-             
-      <span tal:repeat="details info/year_details">
-      <span tal:define="year_courses info/year_courses;
-                        year python:year_courses[details['year']]"
-            tal:condition="python:len(year)">
-      
-      <br />
-      
-      <h3> Year <span tal:replace="details/year" />  (Session <span tal:replace="details/session" />)</h3>
-      
-     
-      
-     
-      <br />
-      
-      <table  class="contentListing" width="100%" id="folder_content">
-        <tr>
-        <th align='center'></th> 
-        <th align='center'>session</th>
-        <th align='center'>level</th>
-        <th align='center'>semester</th>
-        <th align='center'>credits</th>
-        <th tal:condition="with_score" align='center'>score</th>
-        <th align='center'>grade</th>
-        <th align='center'>weight</th>
-        <th align='center'></th>       
-        </tr>  
-                      
-        <tr tal:repeat="row year"
-            tal:attributes="class python:test(repeat['row'].even(), 'even ajaxtd', 'odd ajaxtd')">
-          <td align="center" tal:content="row/code"></td>
-          <td align='center' tal:content="row/session_id"></td>
-          <td align='center' tal:content="row/level_id"></td>                    
-          <td align="center"><span tal:content="row/semester" /></td>
-          <td align="center" tal:content="row/credits"></td>
-          <td tal:condition="with_score" align="center"  tal:content="row/score"></td>
-          <td align="center" tal:content="row/grade"></td>
-          <td align="center" tal:content="row/weight"></td>
-          <td align="center" tal:content="row/coe|nothing"></td>
-        </tr>
-      </table>
-
-        <br />
-        <table>
-          <tr tal:condition="details/total_credits" >
-            <th width='200pt'>Total Credits:</th>
-            <td tal:content="details/total_credits" />
-          </tr>
-          <tr tal:condition="details/gpa">
-            <th>GPA:</th> 
-            <td><span tal:content="details/gpa" /></td>
-          </tr>
-          <tr>
-            <th>Cumulative Total Credits:</th>
-            <td tal:content="details/c_total_credits" />
-          </tr>
-          <tr tal:condition="details/cgpa">
-            <th>CGPA:</th> 
-            <td><span tal:content="details/cgpa" /></td>
-          </tr>          
-        </table>      
-
-      </span>
-      </span>
-
-      
- 
-               
-
-    <br />
-  </span>
-  </span>        
-  </metal:block>    
-  </metal:main>
-
-</metal:body>
-
Index: WAeUP_SRP/trunk/skins/waeup_student/academic_report_slip.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/academic_report_slip.pt	(revision 3706)
+++ WAeUP_SRP/trunk/skins/waeup_student/academic_report_slip.pt	(revision 3707)
@@ -19,17 +19,13 @@
         <br /> 
         <span tal:condition="not:info/data_missing" tal:omit-tag="">
-            <table class="contentListing" id="folder_content">
+            <table class="contentListing" id="folder_content" width="100%">
                 <span tal:repeat="sem python:(('1','Term One','normal1'),('2','Term Two','normal2'),('3','Term Three','normal3'))">
                     <tr tal:condition="python:info[sem[2]]">
-                        <th align='center'>
-                        </th>
-                        <th align='center'>ca1
-                        </th>
-                        <th align='center'>ca2
-                        </th>
-                        <th align='center'>em
-                        </th>
-                        <th align='center'>om
-                        </th>
+                        <th tal:content="python:sem[1]" />
+                        <th align='center'>CA 1 <br />Marks</th>
+                        <th align='center'>CA 2 <br />Marks</th>    
+                        <th align='center'>Exam <br />Marks</th>              
+                        <th align='center'>Overall <br />Marks</th>
+                        <th align='center'>Grade</th>
                         <th tal:condition="is_so" align='center'>
                         </th>
@@ -38,9 +34,9 @@
                         tal:attributes="class python:test(repeat['row'].even(), 'even ajaxtd', 'odd ajaxtd')"> 
                         <td tal:content="row/title"></td> 
-                        <td align="center" width="10%" tal:content="row/code"></td>
                         <td align="center" tal:content="row/ca1"></td> 
                         <td align="center" tal:content="row/ca2"></td> 
                         <td align="center" tal:content="row/exam"></td> 
                         <td align="center" tal:content="row/score_calc"></td>
+                        <td align="center" tal:content="row/grade"></td>
                     </tr>
                     <tr><td>&nbsp;</td>
@@ -49,19 +45,6 @@
             </table>
         </span>
-        <table>
-            <tr>
-                <th>ca1/2:
-                </th> <td>CA 1/2 Marks</td>
-            </tr>
-            <tr>
-                <th>em:
-                </th> <td>Exam Marks</td>
-            </tr>
-            <tr>
-                <th>om:
-                </th> <td>Overall Marks</td>
-            </tr>
-        </table> 
-        <span tal:condition="is_ca">      <br /><br />
+
+        <span tal:condition="python:False">      <br /><br />
             <table width=100%>
                 <tr > 
Index: WAeUP_SRP/trunk/skins/waeup_student/academic_report_view.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/academic_report_view.pt	(revision 3706)
+++ WAeUP_SRP/trunk/skins/waeup_student/academic_report_view.pt	(revision 3707)
@@ -1,81 +1,283 @@
-<metal:body use-macro="here/slip_template/macros/master">
-<metal:main fill-slot="main"    tal:define="info context/getStudyLevelInfo;"    > 
-<span tal:condition="not: info"> 
-    <span tal:content="here/illegal_view" />
-</span> 
-<span tal:condition="info" tal:omit-tag=""> 
-    <span tal:omit-tag=""   tal:define="is_so info/is_so;   
-                                       is_ca info/is_ca;   
-                                       show_check_boxes 
-                                       info/show_check_boxes;   
-                                       is_student info/is_student;   
-                                       validated info/validated;   ">  
-        <h3> <span tal:content="info/session" /> Academic Report (<span tal:content="info/student/course" /> 
-                                                                  <span tal:content="info/level_str" />)
-            </h3>  <br /> 
-        <span tal:omit-tag=""       tal:content="structure python: info['app_doc'].render(proxy=info['app_doc'],       
-                                                 layout_mode='view_info',       
-                                                 layout_id='student_application')"       />
-        <br /> 
-        <span tal:condition="not:info/data_missing" tal:omit-tag="">
-            <table class="contentListing" id="folder_content">
-                <span tal:repeat="sem python:(('1','Term One','normal1'),('2','Term Two','normal2'),('3','Term Three','normal3'))">
-                    <tr tal:condition="python:info[sem[2]]">
-            <th colspan=2 
+<metal:body use-macro="here/main_template/macros/master">
+  <metal:main fill-slot="main"
+          tal:define="info context/getStudyLevelInfo;
+                      contact_student_form string:contact_student_form;
+                      study_level_view string:study_level_view;">
+  <metal:block define-macro="edit_form">   
+              
+    <span tal:condition="not: info">
+      <span tal:content="here/illegal_view" />
+    </span>
+    <span tal:condition="info">
+    <span tal:define= "is_so context/isSectionOfficer;
+    is_ca info/is_ca;
+    show_check_boxes info/show_check_boxes;
+    has_verdict info/has_verdict;
+    submission_allowed info/submission_allowed;
+    rejection_allowed info/rejection_allowed;
+    is_current_level info/is_current_level;
+    is_student info/is_student;
+    with_score not: info/without_score|nothing;
+    with_cascore not: info/without_cascore|nothing;
+    ">     
+    
+
+    <span tal:condition="python:True">  
+    <div style="text-align: right" 
+         tal:condition="python:True">
+    <a href="" target="slip" tal:attributes="href string:academic_report_slip"
+        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" />
+        Academic Report Slip
+    </a>
+    </div>
+    </span>
+          
+    <a href=""
+       tal:attributes="href string:${here/academicsParent}">
+      <img tal:attributes="src string:${here/portal_url}/arrow_up.gif"/>
+      Up one level
+    </a>
+
+    <h3> 
+      <span tal:condition="python: is_so or is_ca">
+        <span tal:content="info/student/name" />:
+      </span>
+      <span tal:condition="is_student">My </span>
+      
+      Subject Registration Form for <span tal:content="info/level_str" />
+    </h3>
+    
+        <br />
+           
+        <table>
+           <tr>
+            <th valign='top'>Pastoral Reports:</th> 
+            <td>
+              <span tal:repeat="item python:info['items']">
+                <a href="view" 
+                   tal:attributes="href item/id"
+                   tal:content="item/title"/><br />
+              </span>
+            </td>
+          </tr>
+          <tr>
+            <th>Session:</th> 
+            <td><span tal:content="info/session" /></td>
+          </tr>
+          <tr tal:condition="has_verdict">
+            <th>Verdict:</th> 
+            <td><span tal:content="info/verdict" /></td>
+          </tr>      
+        </table>           
+   
+             
+    <form action="." method="post" class="group" onsubmit="return submit_once()">
+
+      <div class="" tal:condition="python: info['data_missing'] and not info['spillover']">
+        <font color="red">Your faculty has not yet provided the list of subjects for your certificate. Please contact your faculty!</font>
+        <br /><br />
+      </div>
+       
+      <span tal:condition="not:info/data_missing" tal:omit-tag=""> 
+
+      <table class="contentListing"  id="folder_content" width="100%">
+        
+        <span tal:repeat="sem python:(('1','Term One','normal1'),('2','Term Two','normal2'),('3','Term Three','normal3'))">       
+                    
+        <tr tal:condition="python:info[sem[2]]">
+        <th tal:attributes="colspan python: test(show_check_boxes,'2','1')" 
             tal:content="python:sem[1]" />
-                        <th align='center'>ca1
-                        </th>
-                        <th align='center'>ca2
-                        </th>
-                        <th align='center'>em
-                        </th>
-                        <th align='center'>om
-                        </th>
-                        <th tal:condition="is_so" align='center'>
-                        </th>
-                    </tr>
-                    <tr tal:repeat="row python:info[sem[2]]"       
-                        tal:attributes="class python:test(repeat['row'].even(), 'even ajaxtd', 'odd ajaxtd')"> 
-                        <td tal:content="row/title"></td> 
-                        <td align="center" width="10%" tal:content="row/code"></td>
-                        <td align="center" tal:content="row/ca1"></td> 
-                        <td align="center" tal:content="row/ca2"></td> 
-                        <td align="center" tal:content="row/exam"></td> 
-                        <td align="center" tal:content="row/score_calc"></td>
-                    </tr>
-                    <tr><td>&nbsp;</td>
-                    </tr>
-                </span>
-            </table>
-        </span>
-        <table>
-            <tr>
-                <th>ca1/2:
-                </th> <td>CA 1/2 Marks</td>
-            </tr>
-            <tr>
-                <th>em:
-                </th> <td>Exam Marks</td>
-            </tr>
-            <tr>
-                <th>om:
-                </th> <td>Overall Marks</td>
-            </tr>
-        </table> 
-        <span tal:condition="is_ca">      <br /><br />
-            <table width=100%>
-                <tr > 
-                    <td width=50%>Date:</td><td>Date:</td>
-                </tr>
-            </table>    <br /><br /><br /><br />
-            <table width=100%>
-                <tr > 
-                    <td width=50% style="border-top-style:solid; border-top-width:1px; border-top-color:black"> Student</td> 
-                    <td width=50% style="border-top-style:solid; border-top-width:1px; border-top-color:black">Course Adviser</td>
-                </tr>
-            </table>
-        </span>
-    </span>
-</span>
-</metal:main>
+        <th align='center'>CA 1 <br />Marks</th>
+        <th align='center'>CA 2 <br />Marks</th>    
+        <th align='center'>Exam <br />Marks</th>              
+        <th align='center'>Overall <br />Marks</th>
+        <th align='center'>Grade</th>
+        <th tal:condition="submission_allowed" align='center'></th>   
+        <th tal:condition="is_so" align='center'></th> 
+            
+        </tr>                
+        <tr tal:repeat="row python:info[sem[2]]"
+            tal:attributes="class python:test(repeat['row'].even(), 'even ajaxtd', 'odd ajaxtd')">
+          <td align="left" valign="middle" style="width: 5%;"
+             tal:condition="show_check_boxes">
+            <input type="checkbox" name="ids:list" value="" id="" class="noborder"
+                   tal:define="id row/id"
+                   tal:attributes="value id;
+                   id python:'cb_' + id;
+                   checked python:id in info['choosen_ids'];" 
+                   />
+          </td>
+          <td tal:content="row/title"></td>
+          <td align="center" tal:content="row/ca1"></td>
+          <td align="center" tal:content="row/ca2"></td>
+          <td align="center" tal:content="row/exam"></td>
+          <td align="center" tal:content="row/score_calc"></td>
+          <td align="center" tal:content="row/grade"></td>
+          
+          <td tal:condition="python:submission_allowed and is_student" align="center">
+            <a href="edit" tal:attributes="href string:course_edit/${row/code}"
+            target="edit_course_result"
+            onclick="javascript:window.open('','edit_course_result','width=600, height=350, directories=no, toolbar=no, location=no, menubar=no, scrollbars=yes, status=no, resizable=no, dependent=no')">
+            [edit]
+            </a> 
+          </td>       
+          <td tal:condition="is_so" align="center">
+            <a href="edit" tal:attributes="href string:lecturer_course_edit/${row/code}"
+            target="edit_course_result"
+            onclick="javascript:window.open('','edit_course_result','width=600, height=500, directories=no, toolbar=no, location=no, menubar=no, scrollbars=yes, status=no, resizable=no, dependent=no')">
+            [edit]
+            </a> 
+          </td>                   
+        </tr>
+        <tr><td>&nbsp;</td></tr>
+        </span>        
+        
+      </table>
+      </span>
+      
+ 
+          
+      <br />
+      
+      <table tal:condition="python: is_student and show_check_boxes" width="100%" cellspacing="0" cellpadding="2"
+             class="folderButtons">
+        <tr>
+          <td align="left" valign="top" rowspan="3"></td>
+          <td align="left" valign="top">
+              <input type="submit" name="delete_course_result:method" value="Delete selected"
+                     class="destructive" i18n:attributes="value"
+                     tal:attributes="onclick python:'return window.confirm(\'%s\')' %
+                     ('Do you really want to delete selected subjects?', )" 
+                     />
+              <input tal:condition="python: 1" type="submit" name="refresh_level:method"
+                     class="context" value="Update" 
+                     />
+                    
+                     
+              <br /><br />
+              <input tal:condition="not: info/credits_exceeded" 
+                     type="submit" name="register_courses:method"
+                     class="context" value="Submit to Academic Tutor" 
+                     tal:attributes="onclick python:'return window.confirm(\'%s\')' %
+                     ('Do you really want to submit the list? You will not be able to edit your data after submission.', )" />
+              <span tal:condition="info/credits_exceeded">
+                  <font color="red"> <strong>Your total credits exceed <span tal:replace="info/max_credits" />!</strong></font>
+              </span>
+                     
+              <input type="hidden" name="action_after_validate" type="text" id="action_after_validate"
+                     tal:attributes="value study_level_view"/>  
+                     
+              <br /><br />
+              
+              <span tal:condition="python: 1">
+              <strong>Note:</strong> 'Update' checks for all subjects in your certificate and will add them to your subject list irrespective of
+              prior deletion, i.e. already deleted subjectss will show up again. 
+              Please use this function only if you are sure that your faculty has added subjects which are not yet on your subject list.                                
+              </span>
+              <span tal:condition="python: 0">
+              <strong>Note:</strong> The 'Update' function has been temporarily disabled.                                 
+              </span>              
+                     
+          </td>
+        </tr>
+      </table>
+      <table tal:condition="python: is_so and show_check_boxes" width="100%" cellspacing="0" cellpadding="2"
+             class="folderButtons">
+        <tr>
+          <td align="left" valign="top" rowspan="3"></td>
+          <td align="left" valign="top">
+              <input type="button" value="Select all" class="context"
+                     onclick="someJavaScriptFunctionThatWillBeReplaced"
+                     i18n:attributes="value"
+                     tal:attributes="onclick python:'toggleSelect(this, \'%s\', \'%s\')'
+                     % (cpsmcat('button_select_all'), cpsmcat('button_deselect_all'))"
+                     />
+              <input type="submit" name="delete_course_result:method" value="Delete selected"
+                     class="destructive" i18n:attributes="value"
+                     tal:attributes="onclick python:'return window.confirm(\'%s\')' %
+                     ('Do you really want to delete the subjects selected?', )" 
+                     />
+              <input 
+                     type="submit" name="refresh_level:method"
+                     class="context" value="Update" 
+                     />
+              <input tal:condition="submission_allowed" type="submit" name="register_courses:method"
+                     class="context" value="Submit" />  
+              <input tal:condition="info/validation_allowed" type="submit" name="validate_courses:method"
+                     class="context" value="Validate" />
+              <input tal:condition="info/rejection_allowed" type="submit" name="reject_courses:method"
+                     class="context" value="Reject" />
+                     
+              <input type="hidden" name="action_after_validate" type="text" id="action_after_validate"
+                     tal:attributes="value study_level_view"/>                         
+              <input type="hidden" name="action_after_reject" type="text" id="action_after_reject"
+                     tal:attributes="value contact_student_form"/>                         
+
+          </td>
+        </tr>
+      </table>
+      <table tal:condition="python:is_ca and is_current_level and not has_verdict" width="100%" cellspacing="0" cellpadding="2"
+             class="folderButtons">
+        <tr>
+          <td align="left" valign="top" rowspan="3"></td>
+          <td align="left" valign="top">
+              <input tal:condition="show_check_boxes"
+                     type="button" value="Select all" class="context"
+                     onclick="someJavaScriptFunctionThatWillBeReplaced"
+                     i18n:attributes="value"
+                     tal:attributes="onclick python:'toggleSelect(this, \'%s\', \'%s\')'
+                     % (cpsmcat('button_select_all'), cpsmcat('button_deselect_all'))"
+                     />
+              <input tal:condition="show_check_boxes"
+                     type="submit" name="delete_course_result:method" value="Delete selected"
+                     class="destructive" i18n:attributes="value"
+                     tal:attributes="onclick python:'return window.confirm(\'%s\')' %
+                     ('Do you really want to delete the subjects selected?', )" 
+                     />
+              <input tal:condition="show_check_boxes"
+                     type="submit" name="refresh_level:method"
+                     class="context" value="Update" 
+                     />
+              <input tal:condition="submission_allowed" type="submit" name="register_courses:method"
+                     class="context" value="Submit" />  
+              <input tal:condition="info/validation_allowed" type="submit" name="validate_courses:method"
+                     class="context" value="Validate" />
+              <input tal:condition="info/rejection_allowed" type="submit" name="reject_courses:method"
+                     class="context" value="Reject" />
+                     
+              <input type="hidden" name="action_after_validate" type="text" id="action_after_validate"
+                     tal:attributes="value study_level_view"/>                         
+              <input type="hidden" name="action_after_reject" type="text" id="action_after_reject"
+                     tal:attributes="value contact_student_form"/>    
+                                           
+
+          </td>
+        </tr>
+      </table>
+
+    </form>
+    <br />
+      <form action="add_course_result" method="post" class="group" onsubmit="return submit_once()"
+          tal:condition="show_check_boxes">
+      <table>
+        <tr>
+          <th>Subject Id</th>
+          <td><input type="text" name="course_id" 
+                     tal:attributes="value request/course_id|nothing"/></td>
+          <td colspan="2">
+            <input type="submit" name="add"
+                   class="context" value="Add Subject" 
+                   />
+            <input type="hidden" name="action_after_validate" type="text" id="action_after_validate"
+                     tal:attributes="value study_level_view"/>                       
+          </td>                
+      </table>
+      </form>   
+  </span>
+  </span>        
+  </metal:block>    
+  </metal:main>
+
 </metal:body>
+
Index: WAeUP_SRP/trunk/skins/waeup_student/getGradesFromScore.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/getGradesFromScore.py	(revision 3706)
+++ WAeUP_SRP/trunk/skins/waeup_student/getGradesFromScore.py	(revision 3707)
@@ -5,21 +5,49 @@
 ##bind script=script
 ##bind subpath=traverse_subpath
-##parameters=score=None
+##parameters=score=None,level_id=None
 ##title=
 ##
 # $Id$
 
-if score is None:
-    return None,None
-score = int(score)
-if score >= 70:
-    return ('A',5)
-if score >= 60:
-    return ('B',4)
-if score >= 50:
-    return ('C',3)
-if score >= 45:
-    return ('D',2)
-if score >= 40:
-    return ('E',1)
-return ('F',0)
+if level_id:
+    if level_id in ('100', '200', '300'):
+        if score >= 80:
+            return ('A')
+        if score >= 60:
+            return ('C')
+        if score >= 55:
+            return ('P')
+        if score >= 0:
+            return ('F')                                
+    elif level_id in ('400', '500', '600'):
+        if score >= 80:
+            return ('A1')
+        if score >= 75:
+            return ('B2')
+        if score >= 70:
+            return ('B3')
+        if score >= 65:
+            return ('C4')
+        if score >= 60:
+            return ('C5')
+        if score >= 55:
+            return ('C6')
+        if score >= 0:
+            return ('F9')
+    else:
+        return('X')
+else:
+    if score is None:
+        return None,None
+    score = int(score)
+    if score >= 70:
+        return ('A',5)
+    if score >= 60:
+        return ('B',4)
+    if score >= 50:
+        return ('C',3)
+    if score >= 45:
+        return ('D',2)
+    if score >= 40:
+        return ('E',1)
+    return ('F',0)
Index: WAeUP_SRP/trunk/skins/waeup_student/lecturer_course_edit.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/lecturer_course_edit.py	(revision 3706)
+++ WAeUP_SRP/trunk/skins/waeup_student/lecturer_course_edit.py	(revision 3707)
@@ -50,5 +50,8 @@
 course = course_results[0]
 for field in context.course_results.schema():
-    object[field] = getattr(course,field)
+    object[field] = getattr(course,field,None)
+    if repr(object[field]) == 'Missing.Value':
+        object[field] = None
+#set_trace()     
 lt = context.portal_layouts
 res,psm, ds = lt.renderLayout(schema_id = 'student_course_result',
@@ -77,5 +80,4 @@
         psm = 'psm_content_changed'
         break
-
 return context.lecturer_course_edit_form(rendered = res,
                                 psm = psm,
Index: WAeUP_SRP/trunk/skins/waeup_student/pastoral_report_slip.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/pastoral_report_slip.pt	(revision 3706)
+++ WAeUP_SRP/trunk/skins/waeup_student/pastoral_report_slip.pt	(revision 3707)
@@ -18,4 +18,17 @@
             tal:content="structure python: info['doc'].render(layout_mode='view')" />
     </span>      
+        <span tal:condition="python:True">      <br /><br />
+            <table width=100%>
+                <tr > 
+                    <td width=50%>Date:</td><td></td>
+                </tr>
+            </table>    <br /><br /><br /><br />
+            <table width=100%>
+                <tr > 
+                    <td width=50% style="border-top-style:solid; border-top-width:1px; border-top-color:black">Name of House Staff</td> 
+                    <td width=50% style="border-top-style:solid; border-top-width:1px; border-top-color:black">Signature</td>
+                </tr>
+            </table>
+        </span>    
   </metal:main> 
 </metal:body>
