Index: WAeUP_SRP/trunk/skins/waeup_futminna/accommodation_record_slip.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_futminna/accommodation_record_slip.pt	(revision 5781)
+++ WAeUP_SRP/trunk/skins/waeup_futminna/accommodation_record_slip.pt	(revision 5781)
@@ -0,0 +1,100 @@
+<metal:body use-macro="here/slip_template/macros/master">
+    <metal:main fill-slot="main"
+                tal:define="
+                            info_acco options/info|nothing;
+                            info_app context/getApplicationInfo;
+                            ">
+      <span tal:condition="python: not info_acco">
+            <span tal:content="here/illegal_view" />
+      </span>   
+      <span tal:condition="python: info_acco">                   
+          <h3>Hostel Allocation Slip (including Maintenance Receipt)</h3>
+
+          <br />
+           
+        <span tal:omit-tag=""
+              tal:content="structure python: info_app['app_doc'].render(proxy=info_app['app_doc'],
+              layout_mode='view_info', 
+              layout_id='student_application')" 
+              />     
+          
+       <table width="" cellpadding="2" cellspacing="0" summary="Form layout">
+
+         <tr>
+             <td width="180px" valign="top">
+              <span class="dlabel">Booking Session</span>:
+             </td>
+             <td> 
+                <span tal:content="python:context.portal_vocabularies.sessions.get(info_acco['Booking Session'])"></span>
+             </td>
+         </tr>
+         <tr>
+             <td width="180px" valign="top">
+              <span class="dlabel">Bed</span>:
+             </td>
+             <td> 
+                <span tal:content="python:context.getFormattedBed(info_acco['Bed'])"></span>
+             </td>
+         </tr>
+         <tr>
+             <td width="180px" valign="top">
+              <span class="dlabel">Bed Type</span>:
+             </td>
+             <td> 
+                <span tal:content="python:info_acco['Bed Type']"></span>
+             </td>
+         </tr>                  
+         <tr>
+             <td width="180px" valign="top">
+              <span class="dlabel">Hostel Application Date</span>:
+             </td>
+             <td> 
+                <span tal:content="python:context.getDateStr(fmt='%d/%m/%Y', dt=info_acco['Hostel Application Date'])"></span>
+             </td>
+         </tr>    
+
+         <tr>
+             <td width="180px" valign="top">
+              <span class="dlabel">Maintenance Payment Code</span>:
+             </td>
+             <td> 
+                <span tal:content="python:info_acco['Maintenance Payment Code']"></span>
+             </td>
+         </tr> 
+         <tr>
+             <td width="180px" valign="top">
+              <span class="dlabel">Maintenance Fee</span>:
+             </td>
+             <td> 
+                <span tal:content="python:info_acco['Maintenance Fee']"></span>
+             </td>
+         </tr>                     
+            
+         <tr>
+             <td width="180px" valign="top">
+              <span class="dlabel">Online Payment Id</span>:
+             </td>
+             <td> 
+                <span tal:content="python:info_acco['Online Payment Id']"></span>
+             </td>
+         </tr>            
+         <tr>
+             <td width="180px" valign="top">
+              <span class="dlabel">Maintenance Payment Date</span>:
+             </td>
+             <td> 
+                <span tal:content="python:context.getDateStr(fmt='%d/%m/%Y', dt=info_acco['Maintenance Payment Date'])"></span>
+             </td>
+         </tr>                                              
+         <tr>
+             <td width="180px" valign="top">
+              <span class="dlabel">Booking Status</span>:
+             </td>
+             <td> 
+                <span tal:content="python:info_acco['Booking Status']"></span>
+             </td>
+         </tr>
+       </table>
+      </span>      
+    </metal:main>
+</metal:body>
Index: WAeUP_SRP/trunk/skins/waeup_futminna/getAccommodationStatus.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_futminna/getAccommodationStatus.py	(revision 5781)
+++ WAeUP_SRP/trunk/skins/waeup_futminna/getAccommodationStatus.py	(revision 5781)
@@ -0,0 +1,136 @@
+## Script (Python) "getAccommodationStatus"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=student_id=None
+##title=
+##
+# $Id$
+"""
+return Info about the current Student
+"""
+try:
+    from Products.zdb import set_trace
+except:
+    def set_trace():
+        pass
+
+import logging
+logger = logging.getLogger('Skins.getAccommodationStatus')
+import DateTime
+
+pprops = context.portal_properties
+booking_disabled = not pprops.enable_acco_booking
+
+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
+
+# do not change these settings!
+
+booking_allowed = False
+info['booking_disabled'] = 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 ('cleared_and_validated','school_fee_paid','courses_registered', 'courses_validated',) and student_record.session == session[0]:
+    info['booking_allowed'] = True
+    info['online_payment'] = True
+# returning student can also book without having paid the school fee (see ticket #29)
+#elif review_state == 'returning' and int(student_record.session)+1 == int(session[0]):
+#    info['booking_allowed'] = True
+#    info['online_payment'] = True
+else:
+    info['acco'] = None
+    info['booking_allowed'] = False
+    info['student_status'] = ''
+    logger.info('%s: not eligible' % (student_id)) 
+    return info
+
+d = {}
+d['sex'] = 'male'
+#d['bt'] = 'all'
+if student_record.sex:
+    d['sex'] = 'female'
+    
+if level == 100:
+    bt = 'fr'
+else:
+    bt = 're'    
+if student_record.faculty in ('SSE'):
+    bt += "_sse"    
+d['bt'] = bt    
+
+info['sex']=d['sex']
+student_status = "%(sex)s_%(bt)s" % d
+info['student_status'] = student_status
+
+# customize end
+
+acco_id = student_id + '|' + session[0]
+info['acco_id'] = acco_id
+
+if booking_disabled:
+  info['booking_disabled'] = True
+  #logger.info('%s: %s eligible but booking disabled' % (student_id,student_status))  
+
+accommodation_record = context.accommodation_catalog.getRecordByKey(acco_id)
+if accommodation_record is None:
+    return info
+  
+info['booking_allowed'] = False
+info['acco_res_date'] = accommodation_record.acco_res_date
+info['acco_res_sc_pin'] = accommodation_record.acco_res_sc_pin
+info['acco_maint_fee'] = accommodation_record.acco_maint_fee
+info['acco_maint_code'] = accommodation_record.acco_maint_code
+info['student_status'] = accommodation_record.student_status
+info['bed'] = accommodation_record.bed
+info['session'] = accommodation_record.session
+info['maintenance_paid'] = accommodation_record.reservation_status == 'maintenance_fee_paid'
+
+return info
