## Script (Python) "getTranscriptInfo"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=student=None
##title=
##
# $Id: getStudyLevelInfo.py 2760 2007-11-26 07:39:15Z henrik $
"""
return Info about the Studylevel
try:
    from Products.zdb import set_trace
except:
    def set_trace():
        pass
"""

request = context.REQUEST
response = request.RESPONSE
import logging
logger = logging.getLogger('Skins.getTranscriptInfo')
info = context.waeup_tool.getAccessInfo(context)
student_id = info['student_id']
if student_id is None:
    return None

mtool = context.portal_membership
if mtool.isAnonymousUser(): # or not context.isSectionOfficer():
    return None

mtool = context.portal_membership
member = mtool.getAuthenticatedMember()
member_id = str(member)

course_results = context.course_results


student_record = context.students_catalog.getRecordByKey(student_id)
info['student_record'] = context.getFormattedStudentEntry(student_record)


year_courses = [[],[],[],[],[],[],[],[],[]]
year_details = [{'year':0},{'year':1},{'year':2},{'year':3},{'year':4},{'year':5},{'year':6},{'year':7},{'year':8}]

courses = course_results.getAllCourses(student_id)

for course in courses:
    year = divmod(int(course['level_id']),100)[0]
    year_courses[year].append(course)
    if not getattr(year_details[year],'session',None):
        year_details[year]['session'] = context.portal_vocabularies.sessions.get(course['session_id'])

year_counter = 0
cgpa = 0
c_total_credits = 0
for year in year_courses:
    gpa = 0
    total_credits = 0
    for course in year:
        if course['weight'] and course['credits']:
            gpa += int(course['weight']) * int(course['credits'])
            total_credits += int(course['credits'])
    cgpa += gpa
    c_total_credits += total_credits
    if gpa and total_credits:
        year_details[year_counter]['total_credits'] = total_credits
        year_details[year_counter]['gpa'] = "%4.2f" % (float(gpa)/int(total_credits))
    else:
        year_details[year_counter]['total_credits'] = 0
        year_details[year_counter]['gpa'] = 0

    if cgpa and c_total_credits:
        year_details[year_counter]['c_total_credits'] = c_total_credits
        year_details[year_counter]['cgpa'] = "%4.2f" % (float(cgpa)/int(c_total_credits))
    else:
        year_details[year_counter]['c_total_credits'] = 0
        year_details[year_counter]['cgpa'] = 0

    year.sort(cmp=lambda x,y: cmp("%(semester)s%(code)s" % x,
                                         "%(semester)s%(code)s" % y))
    year_counter += 1

info['year_details'] = year_details
info['year_courses'] = year_courses

return info