source: WAeUP_SRP/base/skins/waeup_student/getStudyLevelInfo.py @ 2288

Last change on this file since 2288 was 2286, checked in by Henrik Bettermann, 17 years ago

Application object must be fetched to display the required information on the course registration slip. This can be removed if we moved all passport pictures to the file system.

  • Property svn:keywords set to Id
File size: 4.1 KB
RevLine 
[1513]1## Script (Python) "getStudyLevelInfo"
[723]2##bind container=container
3##bind context=context
4##bind namespace=
5##bind script=script
6##bind subpath=traverse_subpath
7##parameters=student=None
8##title=
9##
[805]10# $Id: getStudyLevelInfo.py 2286 2007-09-28 06:11:20Z henrik $
[723]11"""
12return Info about the Studylevel
13"""
[1783]14
15wf = context.portal_workflow
16mtool = context.portal_membership
17if mtool.isAnonymousUser():
18    return None
19
[1494]20try:
21    from Products.zdb import set_trace
22except:
23    def set_trace():
24        pass
[1866]25
26
[1380]27from Products.AdvancedQuery import Eq, Between, Le,In
[1845]28try:
29    aq_portal = context.portal_catalog.evalAdvancedQuery
30except:
31    aq_portal = context.portal_catalog_real.evalAdvancedQuery
[1380]32request = context.REQUEST
[1822]33#session = request.SESSION
[1380]34response = request.RESPONSE
35
[723]36def calculateGPA():
37    """calculate the gpa"""
38    sum = 0
39    course_count = 0
40    for sc in context.objectValues():
41        result = sc.getContent()
42        if not result.grade:
43            continue
44        res = context.portal_catalog({'meta_type': 'Course',
45                                      'id': sc.aq_parent.id})
46        if len(res) < 1:
47            continue
48        course = res[0].getObject().getContent()
49    if course_count:
50        return sum/course_count
51    return 0.0
52
[1641]53def cmp_semester_id(a,b):
54    s1 = "%(semester)s%(id)s" % a
55    s2 = "%(semester)s%(id)s" % b
56    if s1 == s2:
[1380]57        return 0
[1641]58    if s1 > s2:
[1380]59        return 1
60    return -1
[723]61
[1380]62student_id = context.getStudentId()
63
[723]64info = {}
[1515]65info['is_so'] = is_so = context.isSectionOfficer()
66info['is_student'] = is_student = context.isStudent()
67info['is_ca'] = is_ca = context.isCourseAdviser()
[1380]68info['student'] = student = context.students_catalog(id=student_id)[0]
[1513]69info['review_state'] = review_state = context.getStudentReviewState()
[1515]70info['view_only'] =  review_state != "school_fee_paid"
[1586]71info['show_check_boxes'] =  (is_ca and review_state in ('school_fee_paid',)) or\
[1515]72                            (is_student and context.getStudentReviewState() == "school_fee_paid") or\
73                            (is_so)
[723]74info['choosen_ids'] = request.get('ids',[])
[1513]75info['status_info'] = ""
76if is_student:
[1515]77    if review_state == 'courses_registered':
[1513]78        info['status_info'] = "Request for Course Validation pending"
[1515]79    elif review_state == 'courses_validated':
[1513]80        info['status_info'] = "Courses validated"
81elif is_ca:
[1515]82    if review_state == 'courses_registered':
[1513]83        info['status_info'] = "Please validate these Courses"
[1515]84    elif review_state == 'courses_validated':
[1513]85        info['status_info'] = "Courses validated"
[723]86info['doc'] = context.getContent()
[2132]87##study_course = context.aq_parent.getContent()
88##cert_id = study_course.study_course
[1380]89cert_id = student.course
[723]90info['cert_id'] = cert_id
[2132]91normal = []
92carry_overs = []
93credits_total = 0
94for id,obj in context.objectItems():
95    #try:
96    #    credit = int(obj.getContent().credits)
97    #except ValueError:
98    #    credit = 3
99    #credits_total += credit
100    if not id:
101        continue
102    if id.endswith('_co'):
103        d = context.getCourseInfo(id[:-3])
104        try:
105            credits_total += int(d['credits'])
106        except ValueError:
107            credits_total += 0
108        d['id'] = id
109        d['grade'] = obj.getContent().grade
110        carry_overs.append(d)
111    else:
112        d = context.getCourseInfo(id)
113        d['id'] = id
114        coe = getattr(obj.getContent(),'core_or_elective',True)
115        d['coe'] = 'Core'
116        try:
117            credits_total += int(d['credits'])
118        except ValueError:
119            credits_total += 0
120        if not coe:
121            d['coe'] = 'Elective'
122        normal.append(d)
[1482]123info['credits_total'] = credits_total
[2279]124max_credits = 50
125if context.getId() == student.end_level:
126    max_credits = 51
127info['max_credits'] = max_credits
128info['credits_exceeded'] = credits_total > max_credits
[2056]129current_session = student.session
130info['submission_allowed']= not info['credits_exceeded'] and current_session == context.getSessionId()[-2:]
[2132]131carry_overs.sort(cmp_semester_id)
[1380]132info['carry_overs'] = carry_overs
[2132]133normal.sort(cmp_semester_id)
[1380]134info['normal'] = normal
[1575]135
[2286]136students_object = context.portal_url.getPortalObject().campus.students
137student = getattr(students_object, student_id)
138info['app'] = student.application
139info['app_doc'] = student.application.getContent()
[1575]140
[723]141return info
[1896]142
Note: See TracBrowser for help on using the repository browser.