source: WAeUP_SRP/trunk/Students.py @ 487

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

admission renamed, now application

  • Property svn:keywords set to Id
File size: 27.0 KB
Line 
1#-*- mode: python; mode: fold -*-
2# $Id: Students.py 472 2006-09-02 14:51:14Z henrik $
3from Globals import InitializeClass
4from AccessControl import ClassSecurityInfo
5from AccessControl.SecurityManagement import newSecurityManager
6from zExceptions import BadRequest
7from Products.CMFCore.utils import UniqueObject, getToolByName
8from Products.CMFCore.permissions import View
9from Products.CMFCore.permissions import ModifyPortalContent
10from Products.CPSCore.CPSBase import CPSBase_adder, CPSBaseFolder
11#from Products.CPSCore.CPSBase import CPSBaseDocument as BaseDocument
12from Products.CPSDocument.CPSDocument import CPSDocument
13from Products.CPSCore.CPSBase import CPSBaseBTreeFolder as BaseBTreeFolder
14from Products.CPSCore.CPSMembershipTool import CPSUnrestrictedUser
15from Products.WAeUP_SRP.Academics import makeCertificateCode
16import logging
17import csv,re
18import Globals
19p_home = Globals.package_home(globals())
20i_home = Globals.INSTANCE_HOME
21MAX_TRANS = 1000
22
23def generateStudentId():
24    import random
25    r = random
26    return "%c%d" % (r.choice('ABCDEFGHKLMNPQRSTUVWXY'),r.randint(99999,1000000))
27
28class StudentsFolder(CPSDocument): ###(
29    """
30    WAeUP container for the various WAeUP containers data
31    """
32    meta_type = 'StudentsFolder'
33    portal_type = meta_type
34    security = ClassSecurityInfo()
35
36    security.declareProtected(ModifyPortalContent,"loadFullTimeStudentsFromCSV")###(
37    def loadFullTimeStudentsFromCSV(self):
38        """load Fulltime Studentdata from CSV values"""
39        #return
40        import transaction
41        tr_count = 0
42        name = 'short_full_time'
43        no_import = False
44        if not no_import:
45            no_import = open("%s/import/%s_not_imported.csv" % (i_home,name),"w")
46            no_import.write('"MatricNo","EntryRegNo","CurrentSession","StudentLevel","fullname","FirstName","MiddleName","Lastname","FormerSurname","Sex","Nationality","State","LGA","PermanentAddress","PermanentAddressCity","CampusAddress","PhoneNumber","Emailaddress","Mode","CourseMajor","Faculty","Dept"\n')
47        logger = logging.getLogger('%s_import' % name)
48        logger.info('Start loading from %s.csv' % name)
49        students_folder = self.portal_catalog({'meta_type': 'StudentsFolder'})[-1].getObject()
50        try:
51            students = csv.DictReader(open("%s/import/%s.csv" % (i_home,name),"rb"))
52        except:
53            logger.error('Error reading %s.csv' % name)
54            return
55        l = self.portal_catalog({'meta_type': "StudentClearance",})
56        matrics = []
57        for s in l:
58            matrics.append(s.getObject().getContent().matric_no)
59        print matrics
60        l = self.portal_catalog({'meta_type': "Certificate"})
61        certs = {}
62        for c in l:
63            certs[c.id] = c.getObject()
64        for student in students:
65            logger.info('processing "%(MatricNo)s","%(EntryRegNo)s","%(CurrentSession)s","%(StudentLevel)s","%(fullname)s","%(FirstName)s","%(MiddleName)s","%(Lastname)s","%(FormerSurname)s","%(Sex)s","%(Nationality)s","%(State)s","%(LGA)s","%(PermanentAddress)s","%(PermanentAddressCity)s","%(CampusAddress)s","%(PhoneNumber)s","%(Emailaddress)s","%(Mode)s","%(CourseMajor)s","%(Faculty)s","%(Dept)s"\n' % student)
66            sid = student.get('MatricNo')
67            if sid == "":
68                em = 'Empty MatricNo\n'
69                logger.info(em)
70                no_import.write(em)
71                no_import.write('"%(MatricNo)s","%(EntryRegNo)s","%(CurrentSession)s","%(StudentLevel)s","%(fullname)s","%(FirstName)s","%(MiddleName)s","%(Lastname)s","%(FormerSurname)s","%(Sex)s","%(Nationality)s","%(State)s","%(LGA)s","%(PermanentAddress)s","%(PermanentAddressCity)s","%(CampusAddress)s","%(PhoneNumber)s","%(Emailaddress)s","%(Mode)s","%(CourseMajor)s","%(Faculty)s","%(Dept)s"\n' % student)
72                continue
73            certcode = makeCertificateCode(student.get('CourseMajor'))
74            if certcode not in certs.keys():
75                em = 'Certificate with ID %s %s not found\n' % (certcode, student.get('CourseMajor'))
76                logger.info(em)
77                no_import.write(em)
78                no_import.write('"%(MatricNo)s","%(EntryRegNo)s","%(CurrentSession)s","%(StudentLevel)s","%(fullname)s","%(FirstName)s","%(MiddleName)s","%(Lastname)s","%(FormerSurname)s","%(Sex)s","%(Nationality)s","%(State)s","%(LGA)s","%(PermanentAddress)s","%(PermanentAddressCity)s","%(CampusAddress)s","%(PhoneNumber)s","%(Emailaddress)s","%(Mode)s","%(CourseMajor)s","%(Faculty)s","%(Dept)s"\n' % student)
79                continue
80            level = student.get('StudentLevel')
81            try:
82                int(level)
83            except:
84                em = 'Student with ID %(MatricNo)s StudentLevel is empty\n' % student
85                logger.info(em)
86                no_import.write(em)
87                no_import.write('"%(MatricNo)s","%(EntryRegNo)s","%(CurrentSession)s","%(StudentLevel)s","%(fullname)s","%(FirstName)s","%(MiddleName)s","%(Lastname)s","%(FormerSurname)s","%(Sex)s","%(Nationality)s","%(State)s","%(LGA)s","%(PermanentAddress)s","%(PermanentAddressCity)s","%(CampusAddress)s","%(PhoneNumber)s","%(Emailaddress)s","%(Mode)s","%(CourseMajor)s","%(Faculty)s","%(Dept)s"\n' % student)
88                continue
89            matric_no = student.get('MatricNo')
90            if matric_no not in matrics:
91                matrics.append(matric_no)
92                sid = generateStudentId()
93                #self.log('Creating Faculty %(id)s = %(Title)s' % faculty)
94                logger.info('%(tr_count)s: Creating Student with ID %(sid)s Matric_no %(matric_no)s ' % vars())
95                not_created = True
96                while not_created:
97                    try:
98                        students_folder.invokeFactory('Student', sid)
99                        not_created = False
100                    except BadRequest:
101                        sid = generateStudentId()
102                logger.info('%(tr_count)s: Creating Student with ID %(sid)s Matric_no %(matric_no)s ' % vars())
103                s = getattr(self,sid)
104                s.invokeFactory('StudentApplication','application')
105                da = {'Title': 'Application Data'}
106                s.invokeFactory('StudentPersonal','personal')
107                da['jamb_reg_no'] = student.get('EntryRegNo')
108                sp = s.personal
109                d = {'Title': 'Personal Data'}
110                s.invokeFactory('StudentClearance','clearance')
111                sc = s.clearance
112                dc = {'Title': 'Clearance Data'}
113                dc['matric_no'] = matric_no
114                lga = student.get('State') + ' / ' + student.get('LGA')
115                dc['lga'] = lga
116                dc['nationality'] = student.get('Nationality')
117                dc['email'] = student.get('Emailaddress')
118                d['firstname'] = student.get('FirstName')
119                d['middlename'] = student.get('MiddleName')
120                d['lastname'] = student.get('Lastname')
121                d['former_surname'] = student.get('FormerSurname')
122                d['sex'] = student.get('Sex') == 'F'
123                d['perm_address'] = student.get('PermanentAddress')
124                d['perm_city'] = student.get('PermanentAddressCity')
125                d['campus_address'] = student.get('CampusAddress')
126                d['phone'] = student.get('PhoneNumber')
127                s.application.getContent().edit(mapping=da)
128                sp.getContent().edit(mapping=d)
129                sc.getContent().edit(mapping=dc)
130                #
131                # Study Course
132                #
133                s.invokeFactory('StudentStudyCourse','study_course')
134                sc = s.study_course
135                d = {}
136                #d['matricel_no'] = student.get('MatricNo')
137                #d['entry_reg_no'] = student.get('EntryRegNo')
138                #d['faculty'] = student.get('Faculty')
139                #d['department'] = student.get('Dept')
140                d['study_course'] = certcode
141                css = student.get('CurrentSession') or '2004-2005'
142                cs = int(css.split('-')[0]) - 2000
143                cl = int(student.get('StudentLevel'))/100
144                d['entry_session'] = "200%s" % (cs - cl)
145                sc.getContent().edit(mapping=d)
146                #
147                # Level
148                #
149                l = getattr(sc,level,None)
150                if l is None:
151                    #self.log('Creating Department %(DeptCode)s = %(Description)s' % dep)
152                    logger.info('Creating Level %(StudentLevel)s for %(fullname)s' % student)
153                    sc.invokeFactory('StudentStudyLevel', level)
154                    l = getattr(sc, level)
155                    certificate = certs[certcode]
156                    cert_level = getattr(certificate,level,None)
157                    if cert_level is None:
158                        logger.info('Level %(level)s not in %(certcode)s' % vars())
159                    l.getContent().edit(mapping={'Title': "Level %s" % level})
160                    l.invokeFactory('StudentSemester','first')
161                    l.invokeFactory('StudentSemester','second')
162                    first_s = getattr(l,'first')
163                    first_s.getContent().edit(mapping={'Title': 'First Semester'})
164                    second_s = getattr(l,'second')
165                    second_s.getContent().edit(mapping={'Title': 'Second Semester'})
166            else:
167                em = 'Student with ID %(MatricNo)s %(fullname)s already exists\n' % student
168                logger.info(em)
169                no_import.write(em)
170                no_import.write('"%(MatricNo)s","%(EntryRegNo)s","%(CurrentSession)s","%(StudentLevel)s","%(fullname)s","%(FirstName)s","%(MiddleName)s","%(Lastname)s","%(FormerSurname)s","%(Sex)s","%(Nationality)s","%(State)s","%(LGA)s","%(PermanentAddress)s","%(PermanentAddressCity)s","%(CampusAddress)s","%(PhoneNumber)s","%(Emailaddress)s","%(Mode)s","%(CourseMajor)s","%(Faculty)s","%(Dept)s"\n' % student)
171            if tr_count > MAX_TRANS:
172                transaction.commit()
173                em = 'Transaction commited\n' % student
174                logger.info(em)
175                tr_count = 0
176            tr_count += 1
177        return self.REQUEST.RESPONSE.redirect("%s" % self.REQUEST.get('URL1'))
178        return self.students.academics_contents()
179    ###)
180
181    security.declareProtected(ModifyPortalContent,"loadFullTimeStudentsResultsFromCSV") ###(
182    def loadFullTimeStudentsResultsFromCSV(self):
183        """load Fulltime Studentdata from CSV values"""
184        #return
185        import transaction
186        tr_count = 0
187        name = 'short_full_time_results_2004_2005'
188        no_import = False
189        if not no_import:
190            no_import = open("%s/import/%s_not_imported.csv" % (i_home,name),"w")
191            no_import.write('"Matnumber","CosCode","Ansbook","CosStuatus","Session","Mat_Cos","Score","CarryLevel","Grade","Weight","Semster","Verdict","Level","id","GPA"\n')
192        logger = logging.getLogger('%s_import' % name)
193        logger.info('Start loading from %s.csv' % name)
194        students_folder = self.portal_catalog({'meta_type': 'StudentsFolder'})[-1].getObject()
195        try:
196            results = csv.DictReader(open("%s/import/%s.csv" % (i_home,name),"rb"))
197        except:
198            logger.error('Error reading %s.csv' % name)
199            return
200        l = self.portal_catalog({'meta_type': "Course"})
201        courses = {}
202        for c in l:
203            courses[c.id] = c.getObject()
204        for result in results:
205            sid = result.get('Matnumber')
206            res = self.portal_catalog({'meta_type': "StudentClearance",
207                                     'matric_no': sid })
208            if not res:
209                em = 'Student with ID %(Matnumber)s not found\n' % result
210                logger.info(em)
211                no_import.write(em)
212                no_import.write('"%(Matnumber)s","%(CosCode)s","%(Ansbook)s","%(CosStuatus)s","%(Session)s","%(Mat_Cos)s","%(Score)s","%(CarryLevel)s","%(Grade)s","%(Weight)s","%(Semster)s","%(Verdict)s","%(Level)s","%(id)s","%(GPA)s"\n' % result)
213                continue
214            sf = res[0].getObject().aq_parent
215            result['StudentId'] = sf.getId()
216            course = result.get('CosCode')
217            if course not in courses.keys():
218                em = 'Course with ID %(CosCode)s not found\n' % result
219                logger.info(em)
220                no_import.write(em)
221                no_import.write('"%(Matnumber)s","%(CosCode)s","%(Ansbook)s","%(CosStuatus)s","%(Session)s","%(Mat_Cos)s","%(Score)s","%(CarryLevel)s","%(Grade)s","%(Weight)s","%(Semster)s","%(Verdict)s","%(Level)s","%(id)s","%(GPA)s"\n' % result)
222                continue
223            level = result.get('Level')
224            try:
225                int(level)
226            except:
227                em = 'Result for result with ID %(Matnumber)s Course %(CosCode)s Level is empty\n' % result
228                logger.info(em)
229                no_import.write(em)
230                no_import.write('"%(Matnumber)s","%(CosCode)s","%(Ansbook)s","%(CosStuatus)s","%(Session)s","%(Mat_Cos)s","%(Score)s","%(CarryLevel)s","%(Grade)s","%(Weight)s","%(Semster)s","%(Verdict)s","%(Level)s","%(id)s","%(GPA)s"\n' % result)
231                continue
232            sc = getattr(sf,'study_course')
233            l = getattr(sc,level,None)
234            if l is None:
235                #self.log('Creating Department %(DeptCode)s = %(Description)s' % dep)
236                logger.info('Creating Level %(Level)s for %(StudentId)s %(Matnumber)s' % result)
237                sc.invokeFactory('StudentStudyLevel', level)
238                l = getattr(sc, level)
239                l.invokeFactory('StudentSemester','first')
240                l.invokeFactory('StudentSemester','second')
241                first_s = getattr(l,'first')
242                first_s.getContent().edit(mapping={'Title': 'First Semester'})
243                second_s = getattr(l,'second')
244                second_s.getContent().edit(mapping={'Title': 'Second Semester'})
245            snr = result.get('Semster')
246            semester = getattr(l,'first')
247            if snr == "2":
248                semester = getattr(l,'second')
249            logger.info('Creating StudentCourseResult %(CosCode)s in Level %(Level)s for %(StudentId)s %(Matnumber)s' % result)
250            semester.invokeFactory('StudentCourseResult',course)
251            ct = getattr(semester,course)
252            d = {}
253            dlev = {}
254            d['ansbook'] = result.get('Ansbook')
255            d['status'] = result.get('CosStuatus')
256            d['score'] = result.get('Score')
257            dlev['session'] = result.get('Session')
258            dlev['carry_level'] = result.get('CarryLevel')
259            d['grade'] = result.get('Grade')
260            #d['weight'] = result.get('Weight')
261            dlev['verdict'] = result.get('Verdict')
262            #d['import_id'] = result.get('id')
263            #gpa = result.get('GPA').replace(',','.')
264            #d['gpa'] = float(gpa)
265            ct.getContent().edit(mapping = d)
266            l.getContent().edit(mapping = dlev)
267            if tr_count > MAX_TRANS:
268                transaction.commit()
269                tr_count = 0
270            tr_count += 1
271        return self.students.academics_contents()
272
273###)
274
275    security.declareProtected(ModifyPortalContent,"loadJAMBFromCSV")###(
276    def loadJAMBFromCSV(self):
277        """load JAMB data from CSV values"""
278        #return
279        students_folder = self.portal_catalog({'meta_type': 'StudentsFolder'})[-1].getObject()
280        import transaction
281        tr_count = 0
282        name = 'SampleJAMBDataII'
283        no_import = False
284        if not no_import:
285            no_import = open("%s/import/%s_not_imported.csv" % (i_home,name),"w")
286            no_import.write('REG-NO,NAME,SEX,STATE,LGA,ENG-SCORE,SUBJ1,SUBJ1-SCORE,SUBJ2,SUBJ2-SCORE,SUBJ3,SUBJ3-SCORE,AGGREGATE,UNIV1,FACULTY1,COURSE1,UNIV2,FACULTY2,COURSE2')
287        logger = logging.getLogger('%s_import' % name)
288        logger.info('Start loading from %s.csv' % name)
289        try:
290            result = csv.DictReader(open("%s/import/%s.csv" % (i_home,name),"rb"))
291        except:
292            logger.error('Error reading %s.csv' % name)
293            return
294        for jamb in result:
295            logger.info('processing %(REG-NO)s,%(NAME)s,%(SEX)s,%(STATE)s,%(LGA)s,%(ENG-SCORE)s,%(SUBJ1)s,%(SUBJ1-SCORE)s,%(SUBJ2)s,%(SUBJ2-SCORE)s,%(SUBJ3)s,%(SUBJ3-SCORE)s,%(AGGREGATE)s,%(UNIV1)s,%(FACULTY1)s,%(COURSE1)s,%(UNIV2)s,%(FACULTY2)s,%(COURSE2)s\n' % jamb)
296            jamb_reg_no = jamb.get('REG-NO')
297            res = self.portal_catalog({'meta_type': "StudentApplication",
298                                     'jamb_reg_no': jamb_reg_no })
299            if res:
300                em = 'Student with REG-NO %(REG-NO)s already exists\n' % jamb
301                logger.info(em)
302                no_import.write(em)
303                no_import.write('%(REG-NO)s,%(NAME)s,%(SEX)s,%(STATE)s,%(LGA)s,%(ENG-SCORE)s,%(SUBJ1)s,%(SUBJ1-SCORE)s,%(SUBJ2)s,%(SUBJ2-SCORE)s,%(SUBJ3)s,%(SUBJ3-SCORE)s,%(AGGREGATE)s,%(UNIV1)s,%(FACULTY1)s,%(COURSE1)s,%(UNIV2)s,%(FACULTY2)s,%(COURSE2)s\n' % jamb)
304                continue
305            sid = generateStudentId()
306            #self.log('Creating Faculty %(id)s = %(Title)s' % faculty)
307            not_created = True
308            while not_created:
309                try:
310                    students_folder.invokeFactory('Student', sid)
311                    not_created = False
312                except BadRequest:
313                    sid = generateStudentId()
314            logger.info('%(tr_count)s: Creating Student with ID %(sid)s REG-NO %(jamb_reg_no)s ' % vars())
315            s = getattr(self,sid)
316            s.invokeFactory('StudentApplication','application')
317            da = {'Title': 'Application Data'}
318##            s.invokeFactory('StudentPersonal','personal')
319##            sp = s.personal
320##            d = {'Title': 'Personal Data'}
321##            s.invokeFactory('StudentClearance','clearance')
322##            sc = s.clearance
323##            dc = {'Title': 'Clearance Data'}
324            da["jamb_reg_no"] = jamb.get("REG-NO")
325            da["jamb_lastname"] = jamb.get("NAME")
326##            d["lastname"] = jamb.get("NAME")
327            da["jamb_sex"] = jamb.get("SEX")
328            da["jamb_state"] = jamb.get("STATE")
329            da["jamb_lga"] = jamb.get("LGA")
330            da["jamb_score"] = jamb.get("AGGREGATE")
331            da["jamb_first_cos"] = jamb.get("COURSE1")
332            da["jamb_second_cos"] = jamb.get("COURSE2")
333            da["jamb_first_uni"] = jamb.get("UNIV1")
334            da["jamb_second_uni"] = jamb.get("UNIV2")
335##            s.personal.getContent().edit(mapping=d)
336            s.application.getContent().edit(mapping=da)
337        return self.REQUEST.RESPONSE.redirect("%s" % self.REQUEST.get('URL1'))
338    ###)
339
340
341
342    security.declareProtected(View,"Title")
343    def Title(self):
344        """compose title"""
345        return "Student Section"
346
347InitializeClass(StudentsFolder)
348
349def addStudentsFolder(container, id, REQUEST=None, **kw):
350    """Add a Student."""
351    ob = StudentsFolder(id, **kw)
352    return CPSBase_adder(container, ob, REQUEST=REQUEST)
353###)
354
355class Student(CPSDocument): ###(
356    """
357    WAeUP Student container for the various student data
358    """
359    meta_type = 'Student'
360    portal_type = meta_type
361    security = ClassSecurityInfo()
362
363    security.declareProtected(View,"Title")
364    def Title(self):
365        """compose title"""
366        reg_nr = self.getId()[1:]
367        data = getattr(self,'personal',None)
368        if data:
369            content = data.getContent()
370            return "%s %s" % (content.firstname,content.lastname)
371        data = getattr(self,'application',None)
372        if data:
373            content = data.getContent()
374            return "%s" % (content.jamb_lastname)
375        return self.title
376
377InitializeClass(Student)
378
379def addStudent(container, id, REQUEST=None, **kw):
380    """Add a Student."""
381    ob = Student(id, **kw)
382    return CPSBase_adder(container, ob, REQUEST=REQUEST)
383
384###)
385
386class StudentPersonal(CPSDocument): ###(
387    """
388    WAeUP Student container for the various student data
389    """
390    meta_type = 'StudentPersonal'
391    portal_type = meta_type
392    security = ClassSecurityInfo()
393
394    security.declareProtected(View,"Title")
395    def Title(self):
396        """compose title"""
397        content = self.getContent()
398        #return "Personal Data for %s %s" % (content.firstname,content.lastname)
399        return "Personal Data"
400
401
402InitializeClass(StudentPersonal)
403
404def addStudentPersonal(container, id, REQUEST=None, **kw):
405    """Add a Students personal data."""
406    ob = StudentPersonal(id, **kw)
407    return CPSBase_adder(container, ob, REQUEST=REQUEST)
408
409###)
410
411class StudentClearance(CPSDocument): ###(
412    """
413    WAeUP Student container for the various student data
414    """
415    meta_type = 'StudentClearance'
416    portal_type = meta_type
417    security = ClassSecurityInfo()
418
419    security.declareProtected(View,"Title")
420    def Title(self):
421        """compose title"""
422        content = self.getContent()
423        #return "Clearance Data for %s %s" % (content.firstname,content.lastname)
424        return "Clearance Data"
425
426
427InitializeClass(StudentClearance)
428
429def addStudentClearance(container, id, REQUEST=None, **kw):
430    """Add a Students personal data."""
431    ob = StudentClearance(id, **kw)
432    return CPSBase_adder(container, ob, REQUEST=REQUEST)
433
434###)
435
436class StudyLevel(CPSDocument): ###(
437    """
438    WAeUP StudyLevel containing the courses and students
439    """
440    meta_type = 'StudyLevel'
441    portal_type = meta_type
442    security = ClassSecurityInfo()
443
444    security.declareProtected(View,"Title")
445    def Title(self):
446        """compose title"""
447        return "Level %s" % self.aq_parent.getId()
448
449
450InitializeClass(StudyLevel)
451
452def addStudyLevel(container, id, REQUEST=None, **kw):
453    """Add a StudyLevel."""
454    ob = StudyLevel(id, **kw)
455    return CPSBase_adder(container, ob, REQUEST=REQUEST)
456
457###)
458
459class StudentStudyLevel(CPSDocument): ###(
460    """
461    WAeUP Student container for the various student data
462    """
463    meta_type = 'StudentStudyLevel'
464    portal_type = meta_type
465    security = ClassSecurityInfo()
466
467    security.declareProtected(View,"Title")
468    def Title(self):
469        """compose title"""
470        return "Level %s" % self.aq_parent.getId()
471
472    security.declareProtected(View,"gpa")
473    def gpa(self):
474        """calculate the gpa"""
475        sum = 0
476        course_count = 0
477        for semester in ('first','second'):
478            sf=getattr(self,semester)
479            for sc in sf.objectValues():
480                result = sc.getContent()
481                res = self.portal_catalog({'meta_type': 'Course',
482                                              'id': sc.aq_parent.id})
483                if len(res) != 1:
484                    continue
485                course = res[0].getObject().getContent()
486                sum += course.credits * ['F','E','D','C','B','A'].index(result.grade)
487                course_count += 1
488        if course_count:
489            return sum/course_count
490        return 0.0
491
492InitializeClass(StudentStudyLevel)
493
494def addStudentStudyLevel(container, id, REQUEST=None, **kw):
495    """Add a Students personal data."""
496    ob = StudentStudyLevel(id, **kw)
497    return CPSBase_adder(container, ob, REQUEST=REQUEST)
498
499###)
500
501class StudentStudyCourse(CPSDocument): ###(
502    """
503    WAeUP Student container for the various student data
504    """
505    meta_type = 'StudentStudyCourse'
506    portal_type = meta_type
507    security = ClassSecurityInfo()
508
509    security.declareProtected(View,"Title")
510    def Title(self):
511        """compose title"""
512        content = self.getContent()
513        return "Study Course"
514
515
516InitializeClass(StudentStudyCourse)
517
518def addStudentStudyCourse(container, id, REQUEST=None, **kw):
519    """Add a Students personal data."""
520    ob = StudentStudyCourse(id, **kw)
521    return CPSBase_adder(container, ob, REQUEST=REQUEST)
522
523###)
524
525class StudentApplication(CPSDocument): ###(
526    """
527    WAeUP Student container for the various student data
528    """
529    meta_type = 'StudentApplication'
530    portal_type = meta_type
531    security = ClassSecurityInfo()
532
533    security.declareProtected(View,"Title")
534    def Title(self):
535        """compose title"""
536        return "Application Data"
537
538
539InitializeClass(StudentApplication)
540
541def addStudentApplication(container, id, REQUEST=None, **kw):
542    """Add a Students eligibility data."""
543    ob = StudentApplication(id, **kw)
544    return CPSBase_adder(container, ob, REQUEST=REQUEST)
545
546###)
547
548class StudentSemester(CPSDocument): ###(
549    """
550    WAeUP StudentSemester containing the courses and students
551    """
552    meta_type = 'StudentSemester'
553    portal_type = meta_type
554    security = ClassSecurityInfo()
555
556InitializeClass(StudentSemester)
557
558def addStudentSemester(container, id, REQUEST=None, **kw):
559    """Add a StudentSemester."""
560    ob = StudentSemester(id, **kw)
561    return CPSBase_adder(container, ob, REQUEST=REQUEST)
562
563###)
564
565class Semester(CPSDocument): ###(
566    """
567    WAeUP Semester containing the courses and students
568    """
569    meta_type = 'Semester'
570    portal_type = meta_type
571    security = ClassSecurityInfo()
572
573InitializeClass(Semester)
574
575def addSemester(container, id, REQUEST=None, **kw):
576    """Add a Semester."""
577    ob = Semester(id, **kw)
578    return CPSBase_adder(container, ob, REQUEST=REQUEST)
579
580###)
581
582class StudentCourseResult(CPSDocument): ###(
583    """
584    WAeUP StudentCourseResult
585    """
586    meta_type = 'StudentCourseResult'
587    portal_type = meta_type
588    security = ClassSecurityInfo()
589
590    def getCourseEntry(self,cid):
591        res = self.portal_catalog({'meta_type': "StudentCourse",
592                                           'id': cid})
593        if res:
594            return res[-1]
595        else:
596            return None
597
598    security.declareProtected(View,"Title")
599    def Title(self):
600        """compose title"""
601        cid = self.getId()
602        ce = self.getCourseEntry(cid)
603        if ce:
604            return "%s" % ce.Title
605        return "No course with id %s" % cid
606
607InitializeClass(StudentCourseResult)
608
609def addStudentCourseResult(container, id, REQUEST=None, **kw):
610    """Add a StudentCourseResult."""
611    ob = StudentCourseResult(id, **kw)
612    return CPSBase_adder(container, ob, REQUEST=REQUEST)
613###)
614
615class ScratchCardBatchesFolder(CPSDocument): ###(
616    """
617    WAeUP Student container for the various student data
618    """
619    meta_type = 'ScratchCardBatchesFolder'
620    portal_type = meta_type
621    security = ClassSecurityInfo()
622
623    security.declareProtected(View,"Title")
624    def Title(self):
625        """compose title"""
626        return "Pin Batches"
627
628
629InitializeClass(ScratchCardBatchesFolder)
630
631def addScratchCardBatchesFolder(container, id, REQUEST=None, **kw):
632    """Add a Students personal data."""
633    ob = ScratchCardBatchesFolder(id, **kw)
634    return CPSBase_adder(container, ob, REQUEST=REQUEST)
635
636###)
637
638from Products.WAeUP_SRP.WAeUPTables import PinTable
639
640class ScratchCardBatch(CPSDocument): ###(
641    """
642    WAeUP Student container for the various student data
643    """
644    meta_type = 'ScratchCardBatch'
645    portal_type = meta_type
646    security = ClassSecurityInfo()
647
648    security.declareProtected(View,"Title")
649    def Title(self):
650        """compose title"""
651        doc = self.getContent()
652        return "Pin Batch %s BatchNo %d" % (doc.prefix, doc.batch_no)
653
654
655InitializeClass(ScratchCardBatch)
656
657def addScratchCardBatch(container, id, REQUEST=None, **kw):
658    """Add a Students personal data."""
659    ob = ScratchCardBatch(id, **kw)
660    return CPSBase_adder(container, ob, REQUEST=REQUEST)
661
662###)
Note: See TracBrowser for help on using the repository browser.