source: WAeUP_SRP/trunk/WAeUPTool.py @ 1171

Last change on this file since 1171 was 1171, checked in by Henrik Bettermann, 18 years ago

made login after createReturningStudent work
session_result_view is not yet ready

  • Property svn:keywords set to Id
File size: 10.8 KB
Line 
1#-*- mode: python; mode: fold -*-
2# (C) Copyright 2005 The WAeUP group  <http://www.waeup.org>
3# Author: Joachim Schmitz (js@aixtraware.de)
4#
5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License version 2 as published
7# by the Free Software Foundation.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program; if not, write to the Free Software
16# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17# 02111-1307, USA.
18#
19# $Id: WAeUPTool.py 1171 2007-01-01 22:54:52Z henrik $
20"""The WAeUPTool.
21
22$Id: WAeUPTool.py 1171 2007-01-01 22:54:52Z henrik $
23"""
24
25from AccessControl import ClassSecurityInfo
26from Acquisition import aq_inner
27from Acquisition import aq_parent
28from Globals import DTMLFile
29from Globals import InitializeClass
30from OFS.SimpleItem import SimpleItem
31
32from Products.CMFCore.ActionProviderBase import ActionProviderBase
33from Products.CMFCore.permissions import View
34from Products.ZCatalog.ZCatalog import ZCatalog
35from Products.CMFCore.permissions import ModifyPortalContent
36from Products.CMFCore.utils import UniqueObject
37from Students import makeCertificateCode
38import logging
39import transaction
40
41
42
43
44class WAeUPTool(UniqueObject, SimpleItem, ActionProviderBase):
45    """WAeUP tool"""
46
47    id = 'waeup_tool'
48    meta_type = 'WAeUP Tool'
49    _actions = ()
50
51    security = ClassSecurityInfo()
52    security.declareObjectProtected(View)
53
54    manage_options = ( ActionProviderBase.manage_options
55                     + SimpleItem.manage_options
56                     )
57                     
58                     
59
60    def generateStudentId(self,letter): ###(
61        import random
62        r = random
63        if letter not in ('ABCDEFGIHKLMNOPQRSTUVWXY'):
64            letter= r.choice('ABCDEFGHKLMNPQRSTUVWXY')
65        students = self.portal_url.getPortalObject().campus.students
66        sid = "%c%d" % (letter,r.randint(99999,1000000))
67        while hasattr(students, sid):
68            sid = "%c%d" % (letter,r.randint(99999,1000000))
69        return sid
70    ###)
71
72    security.declareProtected(ModifyPortalContent,'createOne') ###(
73    def createOne(self,student_brain,commit=False):
74        students_folder = self.portal_url.getPortalObject().campus.students
75        sid = self.waeup_tool.generateStudentId('?')
76        students_folder.invokeFactory('Student', sid)
77        student = getattr(students_folder,sid)
78        self.portal_workflow.doActionFor(student,'return')
79        student.manage_setLocalRoles(sid, ['Owner',])
80        matric_no = student_brain.matric_no
81        jamb_reg_no = student_brain.Entryregno
82        self.students_catalog.addRecord(id = sid,
83                                           matric_no = matric_no,
84                                           jamb_reg_no = jamb_reg_no,
85                                           sex = student_brain.Sex == "F",
86                                           name = "%s %s %s" % (student_brain.Firstname,
87                                                                student_brain.Middlename,
88                                                                student_brain.Lastname)
89                                        )
90        if commit:
91            transaction.commit()
92        return sid,jamb_reg_no
93    ###)
94
95    security.declarePublic('getCertificateBrain') ###(
96    def getCertificateBrain(self,cert_id):
97        "do it"
98        res = ZCatalog.searchResults(self.portal_catalog,
99                                {'portal_type':"Certificate",
100                                      'id': cert_id})
101        if res:
102            return res[0]
103        return None
104    ###)
105
106    security.declarePublic('findStudentByMatricelNo') ###(
107    def findStudentByMatricelNo(self,matric_no):
108        "do it"
109        res = ZCatalog.searchResults(self.portal_catalog,
110                                {'portal_type':"StudentClearance",
111                                 'SearchableText': matric_no})
112        if res:
113            return res[0]
114        return None
115    ###)
116
117    security.declarePublic('makeStudentMember') ###(
118    def makeStudentMember(self,sid,password='uNsEt'):
119        """make the student a member"""
120        membership = self.portal_membership
121        membership.addMember(sid,
122                             password ,
123                             roles=('Member',
124                                     'Student',
125                                     ),
126                             domains='',
127                             properties = {'memberareaCreationFlag': False,
128                                           'homeless': True},)
129        member = membership.getMemberById(sid)
130        self.portal_registration.afterAdd(member, sid, password, None)
131        self.manage_setLocalRoles(sid, ['Owner',])
132    ###)
133
134    security.declarePublic('makeStudentData') ###(
135    def makeStudentData(self,student_id,email=None,phone_nr=None):
136        "create Datastructure for a returning Student"
137        #import pdb;pdb.set_trace()
138        logger = logging.getLogger('Student.CreateData')
139        students_folder = self.portal_url.getPortalObject().campus.students
140        res = self.students_catalog(id=student_id)
141        if res:
142            st = res[0]
143        res = self.returning_import(matric_no = st.matric_no)
144        if res:
145            student = res[0]
146        logger.info('"%s", "creating Datastructure"' % student_id)
147
148        #student should not be allowed to perform this transition
149        #wftool = self.portal_workflow   
150        #wftool.doActionFor(student,'return')     
151
152        certcode_org = student.Coursemajorcode
153        certcode = makeCertificateCode(certcode_org)
154        certificate_brain = self.getCertificateBrain(certcode)
155        if not certificate_brain:
156            em = 'Certificate %s org-code %s not found\n' % (certcode, certcode_org)
157            logger.info(em)
158        level = student.Level
159        try:
160            int(level)
161        except:
162            em = '"%(matric_no)s","invalid Level","%(Level)s"' % student
163            logger.info(em)
164        matric_no = student.matric_no
165        sid = student_id
166        student_obj = getattr(students_folder,sid)
167        student_obj.invokeFactory('StudentApplication','application')
168        application = student_obj.application
169        self.portal_workflow.doActionFor(application,'open',dest_container=application)
170        da = {'Title': 'Application Data'}
171        student_obj.invokeFactory('StudentPersonal','personal')
172        da['jamb_reg_no'] = student.Entryregno
173        da['entry_mode'] = student.Mode_of_Entry
174        personal = student_obj.personal
175        self.portal_workflow.doActionFor(personal,'open',dest_container=personal)
176        dp = {'Title': 'Personal Data'}
177        student_obj.invokeFactory('StudentClearance','clearance')
178        clearance = student_obj.clearance
179        self.portal_workflow.doActionFor(clearance,'open',dest_container=clearance)
180        dc = {'Title': 'Clearance/Eligibility Record'}
181        dc['matric_no'] = matric_no
182        state = student.State
183        lga = student.LGA
184        if state and lga:
185            lga =  state + ' / ' + lga
186        else:
187            lga = "None"
188        dc['lga'] = lga
189        dp['email'] = email
190        dp['phone'] = phone_nr
191        dp['firstname'] = student.Firstname
192        dp['middlename'] = student.Middlename
193        dp['lastname'] = student.Lastname
194        dp['sex'] = student.Sex == 'F'
195        dp['perm_address'] = student.Permanent_Address
196        application.getContent().edit(mapping=da)
197        self.portal_workflow.doActionFor(application,'close',dest_container=application)
198        personal.getContent().edit(mapping=dp)
199        clearance.getContent().edit(mapping=dc)
200        self.portal_workflow.doActionFor(clearance,'close',dest_container=clearance)
201        catd = {}
202        catd['id'] = sid
203        catd['entry_mode']= da['entry_mode']
204        catd['matric_no'] = matric_no
205        catd['jamb_reg_no'] = da['jamb_reg_no']
206        catd['name'] = "%(firstname)s %(middlename)s %(lastname)s" % dp
207        catd['sex'] = dp['sex']
208        catd['level'] = level
209        if certificate_brain:
210            cpath = certificate_brain.getPath().split('/')
211            catd['faculty'] = cpath[-4]
212            catd['department'] = cpath[-3]
213            catd['course'] = certcode
214        self.students_catalog.modifyRecord(**catd)
215        #
216        # Study Course
217        #
218        student_obj.invokeFactory('StudentStudyCourse','study_course')
219        studycourse = student_obj.study_course
220        self.portal_workflow.doActionFor(studycourse,'open',dest_container=studycourse)
221        dsc = {}
222        dsc['study_course'] = certcode
223        studycourse.getContent().edit(mapping=dsc)
224        #
225        # Level
226        #
227##        l = getattr(studycourse,level,None)
228##        if l is None:
229##            studycourse.invokeFactory('StudentStudyLevel', level)
230##            l = getattr(studycourse, level)
231##            self.portal_workflow.doActionFor(l,'open',dest_container=l)
232##            l.getContent().edit(mapping={'Title': "Level %s" % level})
233
234    security.declarePublic('getAccommodationInfo') ###(
235    def getAccommodationInfo(self,bed):
236        """return Accommodation Info"""
237        info = {}
238        hall,block,room,letter = bed.split('_')
239        res = ZCatalog.searchResults(self.portal_catalog,portal_type="AccoHall",id=hall)
240        if res and len(res) == 1:
241            hall_brain = res[0]
242            hall_doc = hall_brain.getObject().getContent()
243        else:
244            return info
245        info['hall_title'] = hall_brain.Title
246        info['maintenance_code'] = hall_doc.maintenance_code
247        res = ZCatalog.searchResults(self.portal_catalog,portal_type="ScratchCardBatch")
248        batch_doc = None
249        for brain in res:
250            if brain.id.startswith(info['maintenance_code']):
251                batch_doc = brain.getObject().getContent()
252                break
253        if batch_doc is None:
254            info['maintenance_fee'] = None
255        else:
256            info['maintenance_fee'] = batch_doc.cost
257        return info
258    ###)
259
260    security.declareProtected(ModifyPortalContent,'deleteAllCourses') ###(
261    def deleteAllCourses(self,department="All"):
262        ''' delete the courses'''
263        pm = self.portal_membership
264        member = pm.getAuthenticatedMember()
265
266        if str(member) not in ("henrik","joachim"):
267            return "not possible"
268        if department == "All":
269            res = self.portal_catalog({'meta_type': 'Department'})
270        if len(res) < 1:
271            return "No Departments found"
272
273        deleted = []
274        for dep in res:
275            cf = dep.getObject().courses
276            if cf:
277                cf.manage_delObjects(ids=cf.objectIds())
278                deleted.append("deleted Courses in %s" % dep.getId)
279        return "\r".join(deleted)
280    ###)
281
282
283InitializeClass(WAeUPTool)
Note: See TracBrowser for help on using the repository browser.