Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 10552)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py	(revision 10553)
@@ -546,4 +546,5 @@
     certcode = Attribute('The certificate code of the study course')
     is_current_level = Attribute('Is this level the current level of the student?')
+    passed_params = Attribute('Information about passed and failed courses')
 
     level_session = schema.Choice(
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/reports/level_report.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/reports/level_report.py	(revision 10552)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/reports/level_report.py	(revision 10553)
@@ -54,9 +54,13 @@
         if level_obj.level_session != session:
             continue
+        passed_params = level_obj.passed_params
         line = (stud.student_id,
                 stud.matric_number,
                 stud.display_fullname,
                 level_obj.total_credits,
-                level_obj.gpa)
+                passed_params[2],
+                level_obj.gpa,
+                passed_params[4],
+                )
         table.append(line)
     return table
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/reports/tests/test_level_report.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/reports/tests/test_level_report.py	(revision 10552)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/reports/tests/test_level_report.py	(revision 10553)
@@ -19,4 +19,4 @@
         result = get_students_by('fac1', 'dep1', 2010, 100)
         self.assertEqual(result,
-            [(u'K1000000', u'1234', u'Bob Tester', 30, 5.0)])
+            [(u'K1000000', u'1234', u'Bob Tester', 30, 30, 5.0, [])])
         return
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 10552)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/studylevel.py	(revision 10553)
@@ -137,4 +137,21 @@
 
     @property
+    def passed_params(self):
+        passed = failed = 0
+        failed_courses = []
+        failed_credits = 0
+        passed_credits = 0
+        for ticket in self.values():
+            if ticket.score is not None:
+                if ticket.score < ticket.passmark:
+                    failed += 1
+                    failed_credits += ticket.credits
+                    failed_courses.append(ticket.code)
+                else:
+                    passed += 1
+                    passed_credits += ticket.credits
+        return passed, failed, passed_credits, failed_credits, failed_courses
+
+    @property
     def is_current_level(self):
         try:
Index: /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 10552)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py	(revision 10553)
@@ -786,5 +786,5 @@
         self.assertEqual(self.student['studycourse']['100']['COURSE1'].grade, 'C')
         self.assertEqual(self.student['studycourse']['100']['COURSE1'].weight, 3)
-        # We add another ticket to check if GPAwill be correctly calculated
+        # We add another ticket to check if GPA will be correctly calculated
         # (and rounded)
         courseticket = createObject('waeup.CourseTicket')
@@ -820,4 +820,11 @@
         self.assertTrue(
             self.student['studycourse']['200']['COURSE1'].carry_over)
+        # Passed and failed courses have been counted
+        self.assertEqual(
+            self.student['studycourse']['100'].passed_params,
+            (1, 1, 13, 10, ['COURSE1']))
+        self.assertEqual(
+            self.student['studycourse']['200'].passed_params,
+            (0, 0, 0, 0, []))
         return
 
