[1566] | 1 | ## Script (Python) "reallocate_bed"
|
---|
| 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: reallocateBed.py 1206 2007-01-05 18:24:56Z joachim $
|
---|
| 11 | """
|
---|
| 12 | reallocate beds
|
---|
| 13 | """
|
---|
| 14 | import logging
|
---|
| 15 | logger = logging.getLogger('Skins.reallocate_bed')
|
---|
| 16 |
|
---|
| 17 | request = context.REQUEST
|
---|
| 18 | redirect = request.RESPONSE.redirect
|
---|
| 19 | mtool = context.portal_membership
|
---|
| 20 | wf = context.portal_workflow
|
---|
| 21 | member = mtool.getAuthenticatedMember()
|
---|
| 22 | member_id = str(member)
|
---|
| 23 | path_info = request.get('PATH_INFO').split('/')
|
---|
| 24 |
|
---|
| 25 | if mtool.isAnonymousUser():
|
---|
| 26 | return None
|
---|
| 27 | students = context.portal_url.getPortalObject().campus.students
|
---|
| 28 | beds = context.portal_accommodation
|
---|
| 29 | studs = context.students_catalog
|
---|
| 30 | student_id = context.getStudentId()
|
---|
| 31 |
|
---|
| 32 | if student_id is not None:
|
---|
| 33 | logger.info('%s requests bed_change for %s' % (member_id,student_id))
|
---|
| 34 | info = context.getAccommodationInfo(student_id)
|
---|
| 35 | res = beds(student=student_id)
|
---|
| 36 | if len(res) == 0:
|
---|
| 37 | logger.info('No bed found for %s' % (student_id))
|
---|
| 38 | redirect("%s/%s" % (students.absolute_url(),student_id))
|
---|
| 39 | allocated_bed = res[0]
|
---|
| 40 | status = info['student_status']
|
---|
| 41 | student = student_id
|
---|
| 42 | bedtype = context.getBedStatusFromHall(allocated_bed.bed)
|
---|
| 43 | if not bedtype.endswith("reserved"):
|
---|
| 44 | logger.info('%s is NOT a reserved bed' % (bedtype))
|
---|
| 45 | return redirect("%s/%s/%s" % (students.absolute_url(),student,info['acco_id']))
|
---|
| 46 | logger.info('%s reallocate reserved bed %s/%s' % (student_id,bedtype,status))
|
---|
| 47 | beds.modifyRecord(bed=allocated_bed.bed,
|
---|
| 48 | student='',
|
---|
| 49 | bed_type=bedtype)
|
---|
| 50 | code,bed = beds.searchAndReserveBed(student_id,status)
|
---|
| 51 | if code > 0:
|
---|
| 52 | #from Products.zdb import set_trace; set_trace()
|
---|
| 53 | d = {}
|
---|
| 54 | d['bed'] = bed
|
---|
| 55 | d['student_status'] = status
|
---|
| 56 | acco_info = context.waeup_tool.getAccommodationInfo(bed)
|
---|
| 57 | d['acco_maint_code'] = acco_info.get('maintenance_code')
|
---|
| 58 | d['acco_maint_fee'] = acco_info.get('maintenance_fee')
|
---|
| 59 | acco_doc = info['acco_doc']
|
---|
| 60 | acco_doc.edit(mapping=d)
|
---|
| 61 | return redirect("%s/%s/%s" % (students.absolute_url(),student,info['acco_id']))
|
---|
| 62 | logger.info('%s new bed allocation failed, code = %s' % (student_id,code))
|
---|
| 63 | return redirect("%s/%s/%s" % (students.absolute_url(),student,info['acco_id']))
|
---|
| 64 |
|
---|
| 65 | info = {}
|
---|
| 66 | #records = [r for r in beds() if r.student]
|
---|
| 67 | records = beds.uniqueValuesFor('bed')
|
---|
| 68 | list = []
|
---|
| 69 | to_modify = []
|
---|
| 70 | for b in records:
|
---|
| 71 | r = beds(bed=b)[0]
|
---|
| 72 | bedtype = context.getBedStatusFromHall(r.bed)
|
---|
| 73 | if not bedtype.endswith("reserved"):
|
---|
| 74 | #logger.info('"%s", "allocated bed is NOT reserved","%s"' % (student_id,bedtype))
|
---|
| 75 | #list.append("Student %s bed_type %s ok" % (r.student,bedtype))
|
---|
| 76 | continue
|
---|
| 77 | if not r.student:
|
---|
| 78 | beds.modifyRecord(bed=b,
|
---|
| 79 | bed_type=bedtype)
|
---|
| 80 | list.append("Empty bed %s set to %s" % (r.bed,bedtype))
|
---|
| 81 | continue
|
---|
| 82 | info = context.getAccommodationInfo(r.student)
|
---|
| 83 | sbt = info.get('student_status',None)
|
---|
| 84 | if sbt is None:
|
---|
| 85 | continue
|
---|
| 86 | list.append("Student %s bed_type %s != %s" % (r.student,
|
---|
| 87 | r.bed_type,
|
---|
| 88 | bedtype))
|
---|
| 89 | to_modify.append((r.bed,r.student,info['student_status'],info['acco_doc'],bedtype))
|
---|
| 90 | for former_bed, student, status,acco_doc,bedtype in to_modify:
|
---|
| 91 | beds.modifyRecord(bed=former_bed,
|
---|
| 92 | student='',
|
---|
| 93 | bed_type=bedtype)
|
---|
| 94 | code,bed = beds.searchAndReserveBed(student,status)
|
---|
| 95 | if code > 0:
|
---|
| 96 | #from Products.zdb import set_trace; set_trace()
|
---|
| 97 | d = {}
|
---|
| 98 | d['bed'] = bed
|
---|
| 99 | d['student_status'] = status
|
---|
| 100 | acco_info = context.waeup_tool.getAccommodationInfo(bed)
|
---|
| 101 | d['acco_maint_code'] = acco_info.get('maintenance_code')
|
---|
| 102 | d['acco_maint_fee'] = acco_info.get('maintenance_fee')
|
---|
| 103 | acco_doc.edit(mapping=d)
|
---|
| 104 | list.append("Student %s got bed %s, code = %s" % (student,
|
---|
| 105 | bed,
|
---|
| 106 | code))
|
---|
| 107 | return "\r".join(list) |
---|