source: WAeUP_SRP/trunk/Accommodation.py @ 1403

Last change on this file since 1403 was 1393, checked in by joachim, 18 years ago

new method book_reserved_bed to book a reserved bed for a student

  • Property svn:keywords set to Id
File size: 4.7 KB
Line 
1#-*- mode: python; mode: fold -*-
2from Globals import InitializeClass
3from AccessControl import ClassSecurityInfo
4
5from Products.CMFCore.utils import UniqueObject, getToolByName
6from Products.CMFCore.permissions import View
7from Products.CMFCore.permissions import ModifyPortalContent
8from Products.CPSCore.CPSBase import CPSBase_adder, CPSBaseFolder
9#from Products.CPSCore.CPSBase import CPSBaseDocument as BaseDocument
10from Products.CPSDocument.CPSDocument import CPSDocument
11from Products.CPSCore.CPSBase import CPSBaseBTreeFolder as BaseBTreeFolder
12from Products.WAeUP_SRP.WAeUPTables import AccommodationTable
13import Globals
14import DateTime
15import re
16p_home = Globals.package_home(globals())
17i_home = Globals.INSTANCE_HOME
18
19class AccoFolder(CPSDocument): ###(
20    """
21    WAeUP AccoFolder containing Accommodation halls
22    """
23    meta_type = 'AccoFolder'
24    portal_type = meta_type
25    security = ClassSecurityInfo()
26
27    security.declareProtected(View,"Title")
28    def Title(self):
29        """compose title"""
30        return "Accommodation Section"
31
32    security.declareProtected(ModifyPortalContent,"generateFreeBedsList") ###(
33    def generateFreeBedsList(self):
34        """
35        generate the free Bedslist.
36        """
37        freelist = self.portal_accommodation
38        l = self.portal_catalog({'meta_type': "AccoHall"})
39        halls = []
40        generated = []
41        generated.append('"Bed","BedType","Student"' % vars())
42        beds_generated = []
43        for h in l:
44            halls.append(h.getObject())
45        for hall in halls:
46            #import pdb;pdb.set_trace()
47            h = hall.getContent()
48            hall_gen = {}
49            hall_gen['name'] = hall.Title
50            count = 0
51            reserved = [(r.split('/')[0],int(r.split('/')[1])) for r in re.split(',|\.| ',h.reserved_rooms)
52                                     if r]
53            #for block in range(1,int(h.nr_of_blocks)+1):
54            for block in 'ABCDEFGHIJ'[:int(h.nr_of_blocks)]:
55                sex = 'male'
56                if block in h.blocks_for_female:
57                    sex = 'female'
58                for floor in range(1,int(h.nr_of_floors)+1):
59                    for room in range(1,int(h.rooms_per_floor)+1):
60                        for bed in 'ABCDEFGH'[:int(h.beds_per_room)]:
61                            room_nr = floor*100 + room
62                            bt = 're'
63                            if (block,room_nr) in reserved:
64                                bt = "reserved"
65                            elif not h.special_handling.startswith("no"):
66                                bt = h.special_handling
67                            elif bed in h.beds_for_fresh:
68                                bt = 'fr'
69                            #elif bed in h.beds_for_returning:
70                            #    bt = 're'
71                            elif bed in h.beds_for_final:
72                                bt = 'fi'
73                            if h.special_handling.startswith("no_"):
74                                bt += "_" + h.special_handling[3:]
75                            bt = "%(sex)s_%(bt)s" % vars()
76                            uid = '%s_%s_%d_%s' % (hall.getId(),block,room_nr,bed)
77                            try:
78                                freelist.addRecord(bed = uid, bed_type = bt,hall = hall.getId())
79                                count +=1
80                                generated.append('"%(uid)s","%(bt)s"' % vars())
81                            except ValueError:
82                                #freelist.modifyRecord(bed = uid, bed_type = bt,hall =hall.getId())
83                                pass
84            hall_gen['count']= count
85            beds_generated.append(hall_gen)
86        current = DateTime.DateTime().strftime("%d-%m-%y_%H_%M_%S")
87        open("%s/import/bedlist_%s.csv" % (i_home,current),"w+").write('\n'.join(generated))
88        return self.accommodation.acco_folder_view(beds_generated=beds_generated)
89
90###)
91
92InitializeClass(AccoFolder)
93
94def addAccoFolder(container, id, REQUEST=None, **kw):
95    """Add a AccoFolder."""
96    ob = AccoFolder(id, **kw)
97    return CPSBase_adder(container, ob, REQUEST=REQUEST)
98###)
99
100class AccoHall(CPSDocument): ###(
101    """
102    WAeUP AccoHall containing Departments
103    """
104    meta_type = 'AccoHall'
105    portal_type = meta_type
106    security = ClassSecurityInfo()
107
108    security.declareProtected(View,"Title") ###(
109    def Title(self):
110        """compose title"""
111        content = self.getContent()
112        heading = getattr(content,'heading',None)
113        if heading is None:
114            return self.title
115        return heading
116    ###)
117
118InitializeClass(AccoHall)
119
120   
121def addAccoHall(container, id, REQUEST=None, **kw):
122    """Add a AccoHall."""
123    ob = AccoHall(id, **kw)
124    return CPSBase_adder(container, ob, REQUEST=REQUEST)
125###)
Note: See TracBrowser for help on using the repository browser.