Index: WAeUP_SRP/trunk/skins/waeup_accommodation/book_reserved_bed.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_accommodation/book_reserved_bed.py	(revision 1411)
+++ WAeUP_SRP/trunk/skins/waeup_accommodation/book_reserved_bed.py	(revision 1412)
@@ -16,7 +16,8 @@
 
 mode = 'create'
-validate = REQUEST.has_key("cpsdocument_edit_button")
+validate = REQUEST.has_key("cpsdocument_edit_button") and\
+           REQUEST.get("cpsdocument_edit_button").startswith('reserve')
 d = {}
-res,psm,ds = lt.renderLayout(layout_id= 'acco_bed_booking',
+rendered,psm,ds = lt.renderLayout(layout_id= 'acco_bed_booking',
                       schema_id= 'acco_bed_booking',
                       context=context,
@@ -28,5 +29,5 @@
 if psm == 'invalid':
     psm = "Please correct your input."
-    return context.book_reserved_bed_form(rendered = res,
+    return context.book_reserved_bed_form(rendered = rendered,
                                  psm = psm,
                                  #psm = "%s, %s" % (psm,ds),
@@ -37,5 +38,5 @@
                                  )
 elif psm == '':
-    return context.book_reserved_bed_form(rendered = res,
+    return context.book_reserved_bed_form(rendered = rendered,
                                  psm = psm,
                                  mode = mode,
@@ -46,4 +47,5 @@
 elif psm == 'valid':
     pass
+#from Products.zdb import set_trace;set_trace()
 hall_id = context.getId()
 doc = context.getContent()
@@ -61,4 +63,8 @@
         break
     bed_brain = res[0]
+    already = acco_cat(student=sid) 
+    if already:
+        psm = "Student %s already reserved bed %s" % (sid, already[0].bed)
+        break
     if not bed_brain.bed_type.endswith("reserved"):
         psm = "Not a reserved bed %s" % bid
@@ -72,5 +78,5 @@
     break
 if psm != '':
-    return context.book_reserved_bed_form(rendered = res,
+    return context.book_reserved_bed_form(rendered = rendered,
                                  psm = psm,
                                  mode = mode,
@@ -80,10 +86,10 @@
                                  )
 acco_cat.modifyRecord(bed = bid, student = sid)
-logger.info('"%s","booked reserved bed %s for","%s"' % (member,bed,sid))
-return context.book_reserved_bed_form(rendered = res,
+logger.info('"%s","booked reserved bed %s for","%s"' % (member,bid,sid))
+return context.book_reserved_bed_form(rendered = "",
                                  psm = "Bed reserved for %s %s" % (sid,student.name),
                                  mode = mode,
                                  formaction = "book_reserved_bed",
-                                 button = "reserve bed",
+                                 button = "next reservation",
                                  ds = ds,
                                  )
Index: WAeUP_SRP/trunk/skins/waeup_accommodation/reserve_accommodation.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_accommodation/reserve_accommodation.py	(revision 1412)
+++ WAeUP_SRP/trunk/skins/waeup_accommodation/reserve_accommodation.py	(revision 1412)
@@ -0,0 +1,116 @@
+##parameters=REQUEST
+# $Id$
+"""
+process the the accommodation reservation
+"""
+import DateTime
+current = DateTime.DateTime()
+pr = context.portal_registration
+wftool = context.portal_workflow
+lt = context.portal_layouts
+info = context.getAccommodationInfo()
+
+import logging
+logger = logging.getLogger('Student.Accommodation.Reserve')
+
+#if info is None:
+#    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
+
+if info is None:
+    member_id = str(context.portal_membership.getAuthenticatedMember())
+    logger.info('"%s","tried to reserve accommodation"' % (member_id))
+    return context.REQUEST.RESPONSE.redirect("%s/srp_invalid_access" % context.portal_url())
+
+mode = 'create'
+if not info['booking_allowed']:
+    return context.REQUEST.RESPONSE.redirect("%s/no_booking_allowed" % info['student'].absolute_url())
+student = info['student']
+acco_id = info['acco_id']
+session = acco_id[-4:]
+validate = REQUEST.has_key("cpsdocument_create_button")
+if info.has_key('acco') and info['acco']:
+    validate = REQUEST.has_key("cpsdocument_edit_button")
+    if info['acco_review_state'] == "maintenance_fee_paid":
+        return context.REQUEST.RESPONSE.redirect("%s/accommodation_view" % info['acco'].absolute_url())
+    else:
+        mode = 'edit'
+d = {}
+button = "Book"
+if mode == 'edit':
+    d['acco_res_date'] = info['acco_doc'].acco_res_date
+    d['acco_res_sc_pin'] = info['acco_doc'].acco_res_sc_pin
+    d['student_status'] = info['acco_doc'].student_status
+    d['bed'] = info['acco_doc'].bed
+    d['session'] = info['acco_doc'].session
+    button = "Pay Maintainance Fee"
+res,psm,ds = lt.renderLayout(layout_id= 'student_accommodation_fe',
+                      schema_id= 'student_accommodation',
+                      context=context,
+                      mapping=validate and REQUEST,
+                      ob=d,
+                      layout_mode=mode,
+                      formaction = "reserve_accommodation",
+                      button = button
+                      )
+if psm == 'invalid' or info['error'] is not None:
+    member_id = str(context.portal_membership.getAuthenticatedMember())
+    logger.info('"%s", %s' % (member_id,info['error'] ))
+    if psm == 'invalid':
+        psm = "Please correct your input."
+    else:
+        psm = "Error in data, unable to reserve bed."
+    return context.accommodation_pin_edit_form(rendered = res,
+                                 psm = psm,
+                                 #psm = "%s, %s" % (psm,ds),
+                                 mode = mode,
+                                 ds = ds,
+                                 )
+elif psm == '':
+    return context.accommodation_pin_edit_form(rendered = res,
+                                 psm = None,
+                                 mode = mode,
+                                 ds = ds,
+                                 )
+elif psm == 'valid':
+    s_id = ds.get('s_id')
+    if mode == 'create':
+        pin = str(ds.get('acco_res_sc_pin'))
+        pa = context.portal_accommodation
+        already = pa(student=s_id)
+        if not already:
+            code,bed = pa.searchAndReserveBed(s_id,"%s" % (info['student_status']))
+            #code,bed = pa.searchAndReserveBed(s_id,"%s_%s" % (info['sex'],ds.get('student_status')))
+            if code == -1:
+                return context.accommodation_pin_edit_form(rendered = res,
+                                     psm = "%s" % bed,
+                                     mode = mode,
+                                     ds = ds,
+                                     )
+            elif code == -2:
+                return context.accommodation_pin_edit_form(rendered = res,
+                                     psm = "No bed available. Your category is already fully booked.",
+                                     mode = mode,
+                                     ds = ds,
+                                     )
+        else:
+            bed = already[0].bed 
+        student.invokeFactory('StudentAccommodation',acco_id)
+        acco = getattr(student,acco_id)
+        acco_info = context.waeup_tool.getAccommodationInfo(bed)
+        ds.set('acco_maint_code', acco_info.get('maintenance_code'))
+        ds.set('acco_maint_fee', acco_info.get('maintenance_fee'))
+        ds.set('acco_res_date', current)
+        ds.set('bed', bed)
+        ds.set('session', session)
+        ds.set('student_status',info['student_status'])
+        acco.getContent().edit(mapping=ds)
+        #wftool.doActionFor(acco,'pay_maintenance_fee',dest_container=acco)
+        return context.REQUEST.RESPONSE.redirect("%s/reserve_accommodation" % student.absolute_url())
+pin = str(ds.get('acco_main_sc_pin'))
+pp = context.portal_pins
+acco = getattr(student,acco_id)
+ds.set('acco_maint_date', current)
+acco.getContent().edit(mapping=ds)
+wftool.doActionFor(acco,'pay_maintenance_fee',dest_container=acco)
+return context.REQUEST.RESPONSE.redirect("%s/accommodation_view" % student.absolute_url())
+
Index: WAeUP_SRP/trunk/skins/waeup_student/reserve_accommodation.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/reserve_accommodation.py	(revision 1411)
+++ 	(revision )
@@ -1,112 +1,0 @@
-##parameters=REQUEST
-# $Id$
-"""
-process the the accommodation reservation
-"""
-import DateTime
-current = DateTime.DateTime()
-pr = context.portal_registration
-wftool = context.portal_workflow
-lt = context.portal_layouts
-info = context.getAccommodationInfo()
-
-import logging
-logger = logging.getLogger('Student.Accommodation.Reserve')
-
-#if info is None:
-#    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
-
-if info is None:
-    member_id = str(context.portal_membership.getAuthenticatedMember())
-    logger.info('"%s","tried to reserve accommodation"' % (member_id))
-    return context.REQUEST.RESPONSE.redirect("%s/srp_invalid_access" % context.portal_url())
-
-mode = 'create'
-if not info['booking_allowed']:
-    return context.REQUEST.RESPONSE.redirect("%s/no_booking_allowed" % info['student'].absolute_url())
-student = info['student']
-acco_id = info['acco_id']
-session = acco_id[-4:]
-validate = REQUEST.has_key("cpsdocument_create_button")
-if info.has_key('acco') and info['acco']:
-    validate = REQUEST.has_key("cpsdocument_edit_button")
-    if info['acco_review_state'] == "maintenance_fee_paid":
-        return context.REQUEST.RESPONSE.redirect("%s/accommodation_view" % info['acco'].absolute_url())
-    else:
-        mode = 'edit'
-d = {}
-button = "Book"
-if mode == 'edit':
-    d['acco_res_date'] = info['acco_doc'].acco_res_date
-    d['acco_res_sc_pin'] = info['acco_doc'].acco_res_sc_pin
-    d['student_status'] = info['acco_doc'].student_status
-    d['bed'] = info['acco_doc'].bed
-    d['session'] = info['acco_doc'].session
-    button = "Pay Maintainance Fee"
-res,psm,ds = lt.renderLayout(layout_id= 'student_accommodation_fe',
-                      schema_id= 'student_accommodation',
-                      context=context,
-                      mapping=validate and REQUEST,
-                      ob=d,
-                      layout_mode=mode,
-                      formaction = "reserve_accommodation",
-                      button = button
-                      )
-if psm == 'invalid' or info['error'] is not None:
-    member_id = str(context.portal_membership.getAuthenticatedMember())
-    logger.info('"%s", %s' % (member_id,info['error'] ))
-    if psm == 'invalid':
-        psm = "Please correct your input."
-    else:
-        psm = "Error in data, unable to reserve bed."
-    return context.accommodation_pin_edit_form(rendered = res,
-                                 psm = psm,
-                                 #psm = "%s, %s" % (psm,ds),
-                                 mode = mode,
-                                 ds = ds,
-                                 )
-elif psm == '':
-    return context.accommodation_pin_edit_form(rendered = res,
-                                 psm = None,
-                                 mode = mode,
-                                 ds = ds,
-                                 )
-elif psm == 'valid':
-    s_id = ds.get('s_id')
-    if mode == 'create':
-        pin = str(ds.get('acco_res_sc_pin'))
-        pa = context.portal_accommodation
-        code,bed = pa.searchAndReserveBed(s_id,"%s" % (info['student_status']))
-        #code,bed = pa.searchAndReserveBed(s_id,"%s_%s" % (info['sex'],ds.get('student_status')))
-        if code == -1:
-            return context.accommodation_pin_edit_form(rendered = res,
-                                 psm = "%s" % bed,
-                                 mode = mode,
-                                 ds = ds,
-                                 )
-        elif code == -2:
-            return context.accommodation_pin_edit_form(rendered = res,
-                                 psm = "No bed available. Your category is already fully booked.",
-                                 mode = mode,
-                                 ds = ds,
-                                 )
-        student.invokeFactory('StudentAccommodation',acco_id)
-        acco = getattr(student,acco_id)
-        acco_info = context.waeup_tool.getAccommodationInfo(bed)
-        ds.set('acco_maint_code', acco_info.get('maintenance_code'))
-        ds.set('acco_maint_fee', acco_info.get('maintenance_fee'))
-        ds.set('acco_res_date', current)
-        ds.set('bed', bed)
-        ds.set('session', session)
-        ds.set('student_status',info['student_status'])
-        acco.getContent().edit(mapping=ds)
-        #wftool.doActionFor(acco,'pay_maintenance_fee',dest_container=acco)
-        return context.REQUEST.RESPONSE.redirect("%s/reserve_accommodation" % student.absolute_url())
-pin = str(ds.get('acco_main_sc_pin'))
-pp = context.portal_pins
-acco = getattr(student,acco_id)
-ds.set('acco_maint_date', current)
-acco.getContent().edit(mapping=ds)
-wftool.doActionFor(acco,'pay_maintenance_fee',dest_container=acco)
-return context.REQUEST.RESPONSE.redirect("%s/accommodation_view" % student.absolute_url())
-
