source: WAeUP_SRP/trunk/skins/waeup_student/create_level.py @ 16981

Last change on this file since 16981 was 5496, checked in by Henrik Bettermann, 14 years ago

create_level.py: reduce logging
logged_in.py: find pictures with PIN as filename

  • Property svn:keywords set to Id
File size: 6.4 KB
Line 
1##parameters=
2# $Id: create_level.py 5496 2010-08-25 16:10:37Z henrik $
3"""
4process the Application Form
5return html renderer + psm
6"""
7request = context.REQUEST
8import DateTime,logging
9try:
10    from Products.zdb import set_trace
11except:
12    def set_trace():
13        pass
14from Products.AdvancedQuery import Eq, Between, Le,In
15try:
16    aq_portal = context.portal_catalog.evalAdvancedQuery
17except:
18    aq_portal = context.portal_catalog_real.evalAdvancedQuery
19aq_courses = context.courses_catalog.evalAdvancedQuery
20aq_results = context.course_results.evalAdvancedQuery
21
22current = DateTime.DateTime()
23request = context.REQUEST
24response = request.RESPONSE
25redirect = response.redirect
26logger = logging.getLogger('Skins.create_level')
27info = context.waeup_tool.getAccessInfo(context)
28student_id = info['student_id']
29if student_id is None:
30    return None
31
32student = context.students_catalog.getRecordByKey(student_id)
33cert_id = student.course
34current_level = student.level
35current_session = student.session
36in_progress =  request.get('in_progress','not started')
37if aq_results(Eq('student_id',student_id) & Eq('level_id',current_level)):
38    logger.info('%s tried to create already existing level %s' % (student.id,current_level))
39    return
40
41if context.hasObject(current_level):
42    return response.redirect("%s/%s" % (context.absolute_url(),current_level))
43else:
44    context.invokeFactory('StudentStudyLevel',"%s" % current_level)
45    level = getattr(context,"%s" % current_level)
46    context.portal_workflow.doActionFor(level,'open')
47    level.getContent().edit(mapping={'session': current_session})
48level_id = level.getId()
49session_id = context.getLevelSession(level.getContent(),student_id,level_id)
50results = []
51records = []
52if student.matric_no:
53    results = context.results_import(matric_no = student.matric_no)
54l = []
55
56res = context.portal_catalog(portal_type="Certificate", id = cert_id)
57if res:
58    cert = res[0]
59    path = cert.getPath()
60    if int(current_level) > 0:
61        academics_level = 100 * (int(current_level)/100)
62    else:
63        academics_level = '000'
64    query = Eq("path","%s/%s" % (path,academics_level)) &\
65            Eq('portal_type','CertificateCourse')
66    courses = aq_portal(query)
67    for c in courses:
68        course_id = "%s" % c.getId
69        if course_id in l:
70            # don't add twice
71            continue
72        l += course_id,
73        d = context.getCourseInfo(c.getId)
74        d['carry_over'] = False
75        d['core_or_elective'] = getattr(c.getObject().getContent(),'core_or_elective')
76        d['course_id'] = course_id
77        d['student_id'] = student_id = context.getStudentId()
78        d['level_id'] = level_id
79        d['session_id'] = session_id
80        records.append(d)
81# fetch carry_over courses from results_import
82if student.session in ('6', '06') and results:
83    carry_overs = results
84    for co in carry_overs:
85        course_id = co.CosCode
86        if course_id in l:
87            # don't add twice
88            continue
89        # if level.hasObject(course_id):    #already created
90        #     continue
91        carry_over = False
92        query = Eq('code',co.CosCode)
93        c_res = aq_courses(query)
94        if not c_res:
95            #logger.info('%s", course %s not found in courses_catalog' % (student.id,co.CosCode))
96            continue
97        course_cat_entry = c_res[0]
98        passmark = getattr(course_cat_entry,'passmark',None)
99        if not passmark or not co.Score:
100            carry_over = co.GRADE in ('D','E','F')
101        else:
102            try:
103                score = int(co.Score)
104            except:
105                # logger.info('%s, course %s has invalid score %s"' % (student.id,
106                #                                                     course_id,
107                #                                                     co.Score))
108                continue
109            if int(c_res[0].passmark) <= score:
110                continue
111            carry_over = True
112        if not carry_over:
113            continue
114        l += course_id,
115        d = context.getCourseInfo(co.CosCode)
116        d['course_id'] = course_id
117        d['carry_over'] = carry_over
118        d['code'] = course_id
119        d['student_id'] = student_id
120        d['level_id'] = level_id
121        d['session_id'] = session_id
122        records.append(d)
123# fetch carry_over courses from the course_results catalog
124else:
125    res = aq_results(Eq('student_id',student_id),
126                             sortSpecs=('level_id',))
127    for result in res:
128        course_id = result.code
129        if course_id in l:
130            continue
131        query = Eq('code',course_id)
132        c_res = aq_courses(query)
133        if not c_res:
134            #logger.info('%s", course %s not found in courses_catalog' % (student.id,result.CosCode))
135            continue
136        course_cat_entry = c_res[0]
137        #passmark = getattr(course_cat_entry,'passmark',None)
138        try:
139            score = int(result.score)
140        except:
141            #logger.info('%s, course_result %s has invalid score"' % (student.id,
142            #                                                     course_id,
143            #                                                     result.score))
144            continue
145        try:
146            passmark = int(c_res[0].passmark)
147        except:
148            logger.info('%s, course %s has invalid passmark %s"' % (student.id,
149                                                                 course_id,
150                                                                 c_res[0].passmark))
151            continue           
152        if int(c_res[0].passmark) <= score:
153            continue
154        l += course_id,
155        d = context.getCourseInfo(course_id)
156        d['course_id'] = course_id
157        d['carry_over'] = True
158        d['code'] = course_id
159        d['student_id'] = student_id
160        d['level_id'] = level_id
161        d['session_id'] = session_id
162        records.append(d)
163
164if records:
165    existing_uids = context.course_results.addMultipleRecords(records)
166    if existing_uids:
167        logger.info('%s level %s %s existing keys' % (student.id,
168                                                      current_level,
169                                                     ",".join(existing_uids)))
170
171logger.info('%s created level %s' % (student.id,current_level))
172
173return response.redirect("%s/%s" % (context.absolute_url(),current_level))
Note: See TracBrowser for help on using the repository browser.