##parameters=key=None
# $Id: getStudentLevelsVoc.py 5033 2010-02-23 08:36:45Z henrik $
"""
Return the levels as an vocabulary
"""
student_id = context.getStudentId()
end_level = 800
if student_id:
    end_level = context.students_catalog(id = student_id)[0].end_level
    if end_level and end_level.isdigit():
        end_level = int(end_level)
    else:
        end_level = 700

if key is None:
    levels = [l for l in range(0,end_level+200,10)
               if l % 100 < 30 and l < end_level + 120]
    voc = [('','')]
    for l in levels:
        level_nr,repeat = divmod(l, 100)
        if level_nr > end_level/100 and repeat:
            voc += ("%s" % l,"%s (2nd spillover)" % context.portal_vocabularies.levels.get("%d00" % (level_nr - 1))),
        elif level_nr > end_level/100:
            voc += ("%s" % l,"%s (spillover)" % context.portal_vocabularies.levels.get("%d00" % (level_nr - 1))),
        elif repeat > 0:
            voc += ("%s" % l,"%s (on %d. probation)" %
                    (context.portal_vocabularies.levels.get("%d00" % (level_nr)),
                                                            (repeat // 10))),
        else:
            voc += ("%03d" % l,"%s" %
                    (context.portal_vocabularies.levels.get("%d00" % (level_nr)))),
    return voc

if key and key.isdigit():
    ikey = int(key)
else:
    raise KeyError
level_nr,repeat = divmod(ikey, 100)
l = []

level = context.portal_vocabularies.levels.get("%d00" % level_nr,None)
if level is None:
    raise KeyError
    
if level_nr > end_level/100 and repeat:    
    return "%s 2nd Spillover" % context.portal_vocabularies.levels.get("%d00" % (level_nr - 1))
elif level_nr > end_level/100:
    return "%s Spillover" % context.portal_vocabularies.levels.get("%d00" % (level_nr - 1))

if repeat > 0:
    level += " on %d. Probation" % (repeat // 10)

return level

