[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 2056 2007-07-25 21:50:37Z henrik $ |
---|
[723] | 11 | """ |
---|
| 12 | return Info about the Studylevel |
---|
| 13 | """ |
---|
[1783] | 14 | |
---|
| 15 | wf = context.portal_workflow |
---|
| 16 | mtool = context.portal_membership |
---|
| 17 | if mtool.isAnonymousUser(): |
---|
| 18 | return None |
---|
| 19 | |
---|
[1494] | 20 | try: |
---|
| 21 | from Products.zdb import set_trace |
---|
| 22 | except: |
---|
| 23 | def set_trace(): |
---|
| 24 | pass |
---|
[1866] | 25 | |
---|
| 26 | |
---|
[1380] | 27 | from Products.AdvancedQuery import Eq, Between, Le,In |
---|
[1845] | 28 | try: |
---|
| 29 | aq_portal = context.portal_catalog.evalAdvancedQuery |
---|
| 30 | except: |
---|
| 31 | aq_portal = context.portal_catalog_real.evalAdvancedQuery |
---|
[1380] | 32 | request = context.REQUEST |
---|
[1822] | 33 | #session = request.SESSION |
---|
[1380] | 34 | response = request.RESPONSE |
---|
| 35 | |
---|
[723] | 36 | def 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] | 53 | def 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] | 62 | student_id = context.getStudentId() |
---|
| 63 | |
---|
[723] | 64 | info = {} |
---|
[1515] | 65 | info['is_so'] = is_so = context.isSectionOfficer() |
---|
| 66 | info['is_student'] = is_student = context.isStudent() |
---|
| 67 | info['is_ca'] = is_ca = context.isCourseAdviser() |
---|
[1380] | 68 | info['student'] = student = context.students_catalog(id=student_id)[0] |
---|
[1513] | 69 | info['review_state'] = review_state = context.getStudentReviewState() |
---|
[1515] | 70 | info['view_only'] = review_state != "school_fee_paid" |
---|
[1586] | 71 | info['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] | 74 | info['choosen_ids'] = request.get('ids',[]) |
---|
[1513] | 75 | info['status_info'] = "" |
---|
| 76 | if 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" |
---|
| 81 | elif 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] | 86 | info['doc'] = context.getContent() |
---|
[1380] | 87 | ##study_course = context.aq_parent.getContent() |
---|
| 88 | ##cert_id = study_course.study_course |
---|
| 89 | cert_id = student.course |
---|
[723] | 90 | info['cert_id'] = cert_id |
---|
[1380] | 91 | normal = [] |
---|
| 92 | carry_overs = [] |
---|
[1482] | 93 | credits_total = 0 |
---|
[1380] | 94 | for 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 |
---|
[2033] | 114 | coe = getattr(obj.getContent(),'core_or_elective',True) |
---|
[1380] | 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] | 123 | info['credits_total'] = credits_total |
---|
[2011] | 124 | info['credits_exceeded'] = credits_total > 51 |
---|
[2056] | 125 | current_session = student.session |
---|
| 126 | info['submission_allowed']= not info['credits_exceeded'] and current_session == context.getSessionId()[-2:] |
---|
[1641] | 127 | carry_overs.sort(cmp_semester_id) |
---|
[1380] | 128 | info['carry_overs'] = carry_overs |
---|
[1641] | 129 | normal.sort(cmp_semester_id) |
---|
[1380] | 130 | info['normal'] = normal |
---|
[1575] | 131 | |
---|
| 132 | students_object = context.portal_url.getPortalObject().campus.students |
---|
| 133 | student = getattr(students_object, student_id) |
---|
| 134 | info['app'] = student.application |
---|
| 135 | info['app_doc'] = student.application.getContent() |
---|
| 136 | |
---|
[723] | 137 | return info |
---|
[1896] | 138 | |
---|