source: WAeUP_SRP/trunk/skins/waeup_accommodation/change_bed.py @ 2145

Last change on this file since 2145 was 2000, checked in by Henrik Bettermann, 17 years ago

ticket #245

  • Property svn:keywords set to Id
File size: 4.1 KB
RevLine 
[1164]1## Script (Python) "change_bed"
[1104]2##bind container=container
3##bind context=context
4##bind namespace=
5##bind script=script
6##bind subpath=traverse_subpath
7##parameters=
8##title=
9##
10# $Id: change_bed.py 2000 2007-07-09 07:04:27Z henrik $
11"""
[1135]12relocate to a new bed if allocated bed is wrong
[1104]13"""
14import logging
[1566]15logger = logging.getLogger('Skins.change_bed')
[1104]16
17request = context.REQUEST
[1135]18redirect = request.RESPONSE.redirect
[1104]19mtool = context.portal_membership
20wf = context.portal_workflow
21member = mtool.getAuthenticatedMember()
22member_id = str(member)
23path_info = request.get('PATH_INFO').split('/')
24
25if mtool.isAnonymousUser():
26    return None
[1135]27students = context.portal_url.getPortalObject().campus.students
[1104]28beds = context.portal_accommodation
29studs = context.students_catalog
[1135]30student_id = context.getStudentId()
31
32if student_id is not None:
[1566]33    logger.info('%s requests bed change for %s' % (member_id,student_id))
[1135]34    info = context.getAccommodationInfo(student_id)
35    res = beds(student=student_id)
36    if len(res) == 0:
[1566]37        logger.info('No bed found for %s' % (student_id))
38        return redirect("%s/%s" % (students.absolute_url(),student_id))
[1135]39    allocated_bed = res[0]
40    status = info['student_status']
41    student = student_id
42    if allocated_bed.bed_type == status:
[1566]43        logger.info('Status %s of %s has not changed' % (status,student_id))
44        return redirect("%s/%s/%s" % (students.absolute_url(),student,info['acco_id']))
45    logger.info('Bed status %s of %s has changed to %s' % (allocated_bed.bed_type,student_id,status))
[1135]46    beds.modifyRecord(bed=allocated_bed.bed,student='')
[1566]47    logger.info('Bed %s released' % (allocated_bed.bed))
[1135]48    code,bed = beds.searchAndReserveBed(student_id,status)
49    if code > 0:
50        #from Products.zdb import set_trace; set_trace()
51        d = {}
52        d['bed'] = bed
53        d['student_status'] = status
[2000]54        acco_info = context.waeup_tool.getHallInfo(bed)
[1135]55        d['acco_maint_code'] = acco_info.get('maintenance_code')
56        d['acco_maint_fee'] = acco_info.get('maintenance_fee')
57        acco_doc = info['acco_doc']
58        acco_doc.edit(mapping=d)
[1566]59        logger.info('Bed %s allocated to %s' % (bed,student_id))
[1206]60        return redirect("%s/%s/%s" % (students.absolute_url(),student,info['acco_id']))
[1449]61    student_obj = getattr(students,student_id)
62    acco_id = "accommodation_%s" % context.getSessionId()
63    if acco_id in student_obj.objectIds():
64        acco_doc = getattr(student_obj, acco_id).getContent()
65        if acco_doc.bed == bed:
[1566]66            acco_doc.edit(mapping={'bed':"-- cancelled by officer due to failed bed change request --"})
67    logger.info('New bed allocation for %s failed, code = %s' % (student_id,code))
68    logger.info('%s cancelled booking of bed %s by %s' % (member,bed,student_id))
[1135]69    redirect("%s/%s/%s" % (students.absolute_url(),student,info['acco_id']))
[1164]70
[1135]71info = {}
[1104]72records = [r for r in beds() if  r.student]
73list = []
74to_modify = []
75for r in records:
76    info = context.getAccommodationInfo(r.student)
[1206]77    sbt = info.get('student_status',None)
78    if sbt is None:
79        continue
80    elif r.bed_type == sbt:
[1104]81        list.append("Student %s bed_type %s ok" % (r.student,r.bed_type))
82        continue
83    list.append("Student %s bed_type %s != %s" % (r.student,
84                                                  r.bed_type,
85                                                  info['student_status']))
[1117]86    to_modify.append((r.bed,r.student,info['student_status'],info['acco_doc']))
87for former_bed, student, status,acco_doc in to_modify:
[1104]88    beds.modifyRecord(bed=former_bed,student='')
89    code,bed = beds.searchAndReserveBed(student,status)
90    if code > 0:
[1117]91        #from Products.zdb import set_trace; set_trace()
[1104]92        d = {}
93        d['bed'] = bed
94        d['student_status'] = status
[2000]95        acco_info = context.waeup_tool.getHallInfo(bed)
[1104]96        d['acco_maint_code'] = acco_info.get('maintenance_code')
97        d['acco_maint_fee'] = acco_info.get('maintenance_fee')
[1117]98        acco_doc.edit(mapping=d)
[1566]99        list.append("New bed %s allocated to %s, code = %s" % (bed,
100                                                              student,
[1104]101                                                              code))
102return "\r".join(list)
Note: See TracBrowser for help on using the repository browser.