Index: WAeUP_SRP/trunk/skins/waeup_student/getStudentInfo.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/getStudentInfo.py	(revision 712)
+++ WAeUP_SRP/trunk/skins/waeup_student/getStudentInfo.py	(revision 723)
@@ -21,5 +21,5 @@
 roles = member.getRoles()
 info = {}
-info['is_manager'] = context.isManager
+info['is_manager'] = context.isManager()
 info['is_student'] = context.isStudent()
 member_id = str(member)
@@ -66,7 +66,8 @@
               'StudentPersonal': '',
               }
-s_view_links = {'StudentApplication': 'application_view',
-              'StudentAccommodation': 'accommodation_view',
-              'StudentPersonal': 'personal_view',
+s_view_links = {'StudentApplication': None,
+              'StudentAccommodation': None,
+              'StudentPersonal': None,
+              'StudentStudyCourse': 'study_course_view',
               }
 sos = context.portal_catalog(container_path=student_path)
@@ -80,8 +81,6 @@
     row['type'] = so.portal_type
     row['is_editable'] = mtool.checkPermission('Modify portal content', soo)
-    sv_link = s_view_links.get(so.portal_type,None)
-    row['s_view_link'] = None
-    if sv_link:
-        row['s_view_link'] = "%s/%s" % (student.absolute_url(),sv_link)
+    sv_link = s_view_links.get(so.portal_type,None) or "academics_document_view"
+    row['s_view_link'] = "%s/%s" % (soo.absolute_url(),sv_link)
     se_link = s_edit_links.get(so.portal_type,None)
     row['s_edit_link'] = None
Index: WAeUP_SRP/trunk/skins/waeup_student/getStudyCourseInfo.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/getStudyCourseInfo.py	(revision 723)
+++ WAeUP_SRP/trunk/skins/waeup_student/getStudyCourseInfo.py	(revision 723)
@@ -0,0 +1,38 @@
+## Script (Python) "cpsdocument_edit"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=student=None
+##title=
+##
+# $Id: student_edit.py 486 2006-09-06 10:09:39Z joachim $
+"""
+return Info about the Students StudyCourse
+"""
+request = context.REQUEST
+
+wf = context.portal_workflow
+path_info = request.get('PATH_INFO').split('/')
+
+info = {}
+info['is_manager'] = context.isManager()
+info['is_student'] = context.isStudent()
+info['action'] = "%s" % context.campus.absolute_url()
+info['choosen_ids'] = request.get('ids',[])
+info['doc'] = context.getContent()
+items = []
+levels = context.objectValues()
+for l in levels:
+    row = {}
+    ld = l.getContent()
+    row['id'] = l.getId()
+    if hasattr(ld,'Title'):
+        row['title'] = ld.Title()
+    else:
+        row['title'] = getattr(ld,'title','no title')
+    row['url'] = l.absolute_url()
+    items.append(row)
+info['items'] = items
+return info
Index: WAeUP_SRP/trunk/skins/waeup_student/getStudyLevelInfo.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/getStudyLevelInfo.py	(revision 723)
+++ WAeUP_SRP/trunk/skins/waeup_student/getStudyLevelInfo.py	(revision 723)
@@ -0,0 +1,111 @@
+## Script (Python) "cpsdocument_edit"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=student=None
+##title=
+##
+# $Id: student_edit.py 486 2006-09-06 10:09:39Z joachim $
+"""
+return Info about the Studylevel
+"""
+def findCourse(cid):
+    ''' find the course'''
+    res = context.portal_catalog({'meta_type': 'Course',
+                                  'id': cid})
+    if len(res) < 1:
+        return None
+    course = res[0].getObject().getContent()
+    return course
+        
+def calculateGPA():
+    """calculate the gpa"""
+    sum = 0
+    course_count = 0
+    for sc in context.objectValues():
+        result = sc.getContent()
+        if not result.grade:
+            continue
+        res = context.portal_catalog({'meta_type': 'Course',
+                                      'id': sc.aq_parent.id})
+        if len(res) < 1:
+            continue
+        course = res[0].getObject().getContent()
+    if course_count:
+        return sum/course_count
+    return 0.0
+
+request = context.REQUEST
+
+wf = context.portal_workflow
+mtool = context.portal_membership
+path_info = request.get('PATH_INFO').split('/')
+try:
+    i = int(path_info[-1])
+    p = 0
+except:
+    p = 1
+info = {}
+pt = request.get('PATH_TRANSLATED').split('/')
+
+student_id = pt[-(3+p)]
+level_id = pt[-(1+p)]
+info['is_manager'] = context.isManager()
+info['is_student'] = context.isStudent()
+info['action'] = "%s" % context.absolute_url()
+info['choosen_ids'] = request.get('ids',[])
+info['doc'] = context.getContent()
+study_course = context.aq_parent.getContent()  
+cert_id = study_course.study_course
+brain = context.portal_catalog(meta_type="Student",id = student_id)[-1]
+cp = brain.getPath()
+info['container_path'] = cp
+info['cert_id'] = cert_id
+
+res = context.portal_catalog(meta_type="StudentCourseResult", 
+                             container_path="%s/study_course/%s" % (cp,level_id))
+first = []
+second = []
+sum = 0
+course_count = 0
+for r in res:
+    row = {}
+    ro = r.getObject()
+    rd = ro.getContent()
+    row['id'] = ro.getId()
+    course = findCourse(ro.getId())
+    row['credits'] = 0
+    if course:
+        row['credits'] = course.credits
+    if row['credits'] and rd.grade:
+        credits = int(course.credits)
+        sum += credits * (['F','E','D','C','B','A'].index(rd.grade) + 1)
+        course_count += credits
+    row['sum'] = sum
+    row['count'] = course_count
+    row['title'] = rd.Title()
+    #row['core'] = rd.core_or_elective
+    row['semester'] = rd.semester
+    row['score'] = rd.score
+    row['grade'] = rd.grade
+    row['weight'] = rd.weight
+    row['url'] = ro.absolute_url()
+    row['review_state'] = wf.getInfoFor(ro,'review_state','None')
+    row['is_editable'] = mtool.checkPermission('Modify portal content', ro)
+    if rd.semester == 1:
+        first.append(row)
+    else:
+        second.append(row)
+first.sort()
+second.sort()
+gpaf = 0.0
+if course_count:
+    gpaf = (float(sum)/course_count)
+info['doc'].edit(mapping={'gpa': gpaf})
+gpa = "%4.2f" % gpaf 
+info['gpa'] = gpa
+info['first'] = first
+info['second'] = second
+return info
Index: WAeUP_SRP/trunk/skins/waeup_student/student_index.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/student_index.py	(revision 712)
+++ WAeUP_SRP/trunk/skins/waeup_student/student_index.py	(revision 723)
@@ -20,4 +20,8 @@
     return redirect("%s/srp_anonymous_view" % context.absolute_url())
 if context.isManager():
+    if context.portal_type == 'StudentStudyCourse':
+        return context.study_course_view()
+    elif context.portal_type == 'StudentStudyLevel':
+        return context.study_level_view()
     return redirect("%s/student_view" % context.absolute_url())
 if context.isStudent():
Index: WAeUP_SRP/trunk/skins/waeup_student/student_view.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/student_view.pt	(revision 712)
+++ WAeUP_SRP/trunk/skins/waeup_student/student_view.pt	(revision 723)
@@ -23,5 +23,5 @@
           <tr tal:repeat="row rows"
             tal:attributes="class python:test(repeat['row'].even(), 'even ajaxtd', 'odd ajaxtd')">
-            <td><a href="view" tal:attributes="href string:${row/url}/academics_document_view">
+            <td><a href="view" tal:attributes="href string:${row/s_view_link}">
               <strong tal:content="row/title" /></a> </td>
             <td> 
Index: WAeUP_SRP/trunk/skins/waeup_student/study_course_view.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/study_course_view.pt	(revision 723)
+++ WAeUP_SRP/trunk/skins/waeup_student/study_course_view.pt	(revision 723)
@@ -0,0 +1,65 @@
+<metal:html tal:define="info context/getStudyCourseInfo;
+            is_manager info/is_manager|nothing;"
+            >
+  <metal:body use-macro="here/waeup_content_master/macros/master">
+    <metal:block fill-slot="header">
+      <a href=""
+         tal:attributes="href string:${here/academicsParent}">
+        <img tal:attributes="src string:${here/portal_url}/arrow_up.gif"/>
+        Up one level
+      </a>
+      <h3 tal:content="here/title_or_id" />
+    </metal:block>
+    <metal:main fill-slot="main">
+      <span tal:omit-tag=""  
+            tal:content="structure python: info['doc'].render(layout_mode='view')" />
+      
+      <form action="" method="post" class="group"
+            tal:attributes="action info/action"
+            tal:define="rows python: info['items'];"
+            >
+        <table tal:condition="python: 1" class="contentListing" width="100%" summary="content layout" id="folder_content">      
+          <tr tal:repeat="row rows"
+            tal:attributes="class python:test(repeat['row'].even(), 'even ajaxtd', 'odd ajaxtd')">
+            <td align="left" valign="middle" style="width: 5px;" 
+                tal:condition="python: 0 and is_manager">
+              <input type="checkbox" name="ids:list" value="" id="" class="noborder"
+                     tal:condition="is_manager"
+                     tal:define="id row/id"
+                     tal:attributes="value id;
+                     id python:'cb_' + id;
+                     checked python:id in info['choosen_ids'];" 
+                     />
+            </td>
+            <td><a href="view" tal:attributes="href string:${row/url}">
+              <strong tal:content="row/title" /></a> </td>
+          </tr>
+        </table>
+        <table width="100%" cellspacing="0" cellpadding="2"
+               summary="contents of the folder"
+               class="folderButtons">
+          <tr>
+            <td align="left" valign="top" rowspan="3"></td>
+            <td align="left" valign="top">
+              <span tal:condition="python:0 and is_manager">
+                <input type="button" value="button_select_all" class="context"
+                       onclick="someJavaScriptFunctionThatWillBeReplaced"
+                       i18n:attributes="value"
+                       tal:attributes="onclick python:'toggleSelect(this, \'%s\', \'%s\')'
+                       % (cpsmcat('button_select_all'), cpsmcat('button_deselect_all'))"
+                       />
+                <input type="submit" name="folder_delete:method" value="button_delete"
+                       class="destructive" i18n:attributes="value"
+                       tal:attributes="onclick python:'return window.confirm(\'%s\')' %
+                       (cpsmcat('description_confirm_delete'), )" 
+                       />
+              </span>
+            </td>
+          </tr>
+        </table>
+      </form>
+    </metal:main>
+    
+    <metal:sub fill-slot="sub"/>
+  </metal:body>
+</metal:html>
Index: WAeUP_SRP/trunk/skins/waeup_student/study_level_view.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/study_level_view.pt	(revision 723)
+++ WAeUP_SRP/trunk/skins/waeup_student/study_level_view.pt	(revision 723)
@@ -0,0 +1,94 @@
+<metal:html tal:define="info context/getStudyLevelInfo;
+            is_manager info/is_manager|nothing;"
+            >
+  <metal:body use-macro="here/waeup_content_master/macros/master">
+    <metal:block fill-slot="header">
+      <a href=""
+         tal:attributes="href string:${here/academicsParent}">
+        <img tal:attributes="src string:${here/portal_url}/arrow_up.gif"/>
+        Up one level
+      </a>
+      <h3 tal:content="here/title_or_id" />
+      <div tal:condition="python:0" tal:content="info/container_path"/>
+      <div tal:condition="python:0" tal:content="info/cert_id"/>
+      <div tal:condition="python:0" tal:content="info/gpa"/>
+    </metal:block>
+    <metal:main fill-slot="main" tal:condition="python:1">
+      <span tal:omit-tag=""  
+            tal:content="structure python: info['doc'].render(layout_mode='view')" />
+      
+      <form action="" method="post" class="group"
+            tal:attributes="action info/action"
+            >
+        <table tal:condition="python: 1" class="contentListing" width="100%" summary="content layout" id="folder_content">      
+          <span tal:repeat="sem python:('first','second')">
+            <tr><th colspan="3" tal:content="python: test(sem == 'first','First Semester', 'Second Semester')" />
+            <tr tal:repeat="row python: info[sem]"
+                tal:attributes="class python:test(repeat['row'].even(), 'even ajaxtd', 'odd ajaxtd')">
+              <td align="left" valign="middle" style="width: 5px;" 
+                  tal:condition="python:0 and is_manager">
+                <input type="checkbox" name="ids:list" value="" id="" class="noborder"
+                       tal:condition="is_manager"
+                       tal:define="id row/id"
+                       tal:attributes="value id;
+                       id python:'cb_' + id;
+                       checked python:id in info['choosen_ids'];" 
+                       />
+                </td>
+                <td><a href="view" tal:attributes="href string:${row/url}">
+                    <strong tal:content="row/title" /></a> </td>
+                <td tal:content="row/id"></td>
+                <td tal:content="row/semester"></td>
+                <td tal:content="row/credits"></td>
+                <td tal:condition="is_manager" tal:content="row/score"></td>
+                <td tal:content="row/grade"></td>
+                <td tal:content="row/weight"></td>
+                <td tal:condition="python:0" tal:content="row/sum"></td>
+                <td tal:condition="python:0" tal:content="row/count"></td>
+                <td tal:condition="row/is_editable" tal:content="row/review_state"> </td>
+                <td> 
+                <a tal:condition="row/is_editable"
+                    href="edit" tal:attributes="href string:${row/url}/external_edit_form"
+                    target="edit"
+                    onclick="javascript:window.open('','edit','width=600, height=700, directories=no, toolbar=no, location=no, menubar=no, scrollbars=yes, status=no, resizable=no, dependent=no')">
+                    [edit]
+                    </a> 
+                </td>
+              </tr>
+            </span>
+          </table>
+        <table width="100%" cellspacing="0" cellpadding="2"
+               class="folderButtons">
+          <tr>
+            <td align="left" valign="top" rowspan="3"></td>
+            <td align="left" valign="top">
+              <span tal:condition="python:0 and is_manager">
+                <input type="button" value="button_select_all" class="context"
+                       onclick="someJavaScriptFunctionThatWillBeReplaced"
+                       i18n:attributes="value"
+                       tal:attributes="onclick python:'toggleSelect(this, \'%s\', \'%s\')'
+                       % (cpsmcat('button_select_all'), cpsmcat('button_deselect_all'))"
+                       />
+                <input type="submit" name="approve_checked:method"
+                       class="context" value="Approve" />
+                <input type="submit" name="retract_checked:method"
+                       class="context" value="Retract" />
+                <input type="submit" name="folder_delete:method" value="button_delete"
+                       class="destructive" i18n:attributes="value"
+                       tal:attributes="onclick python:'return window.confirm(\'%s\')' %
+                       (cpsmcat('description_confirm_delete'), )" 
+                       />
+                <input tal:condition="python: context.portal_type not in ('Semester','Certificate')"
+                       type="submit" name="id_rename_form:method"
+                       class="context" value="Change Object ID" i18n:attributes="value" 
+                       />
+              </span>
+            </td>
+          </tr>
+        </table>
+      </form>
+    </metal:main>
+    
+    <metal:sub fill-slot="sub"/>
+  </metal:body>
+</metal:html>
