source: WAeUP_SRP/trunk/skins/waeup_student/getStudyLevelInfo.py @ 2031

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

enable registering courses for session 05

only drawback: level object for session 05 is not closed after submission (register_courses)

please check

  • Property svn:keywords set to Id
File size: 4.0 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 2031 2007-07-18 07:51:47Z 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()
[1380]87##study_course = context.aq_parent.getContent()
88##cert_id = study_course.study_course
89cert_id = student.course
[723]90info['cert_id'] = cert_id
[1380]91normal = []
92carry_overs = []
[1482]93credits_total = 0
[1380]94for id,obj in context.objectItems():
[1866]95    #try:
96    #    credit = int(obj.getContent().credits)
97    #except ValueError:
98    #    credit = 3
99    #credits_total += credit
[1974]100    if not id:
101        continue
[1380]102    if id.endswith('_co'):
103        d = context.getCourseInfo(id[:-3])
[1896]104        try:
105            credits_total += int(d['credits'])
106        except ValueError:
107            credits_total += 0
[1494]108        d['id'] = id
[1380]109        d['grade'] = obj.getContent().grade
110        carry_overs.append(d)
111    else:
112        d = context.getCourseInfo(id)
[1494]113        d['id'] = id
[1380]114        coe = obj.getContent().core_or_elective
115        d['coe'] = 'Core'
[1866]116        try:
117            credits_total += int(d['credits'])
118        except ValueError:
119            credits_total += 0
[1380]120        if not coe:
121            d['coe'] = 'Elective'
122        normal.append(d)
[1482]123info['credits_total'] = credits_total
[2011]124info['credits_exceeded'] = credits_total > 51
[2031]125session_of_level = context.getContent().session
126info['submission_allowed']= not info['credits_exceeded'] and session_of_level == context.getSessionId()[-2:]
[1641]127carry_overs.sort(cmp_semester_id)
[1380]128info['carry_overs'] = carry_overs
[1641]129normal.sort(cmp_semester_id)
[1380]130info['normal'] = normal
[1575]131
132students_object = context.portal_url.getPortalObject().campus.students
133student = getattr(students_object, student_id)
134info['app'] = student.application
135info['app_doc'] = student.application.getContent()
136
[723]137return info
[1896]138
Note: See TracBrowser for help on using the repository browser.