app/soc/views/helper/list_info.py
changeset 2685 506cda0463e8
parent 2206 4daf85a152ca
child 2687 1e2bcc7f6d3a
--- a/app/soc/views/helper/list_info.py	Tue Jul 28 11:20:42 2009 +0200
+++ b/app/soc/views/helper/list_info.py	Tue Jul 28 11:23:11 2009 +0200
@@ -31,7 +31,7 @@
   """
 
   def wrapper(item, _):
-    """Decorator wrapper method.
+    """Wrapper method.
     """
     info = {'rank': ranking[item.key()]}
 
@@ -42,3 +42,56 @@
 
     return info
   return wrapper
+
+
+def getStudentProjectSurveyInfo(program_entity):
+  """Returns a function that returns information used in a Student Project
+  table to show how many evaluations have been available and how
+  many have been taken.
+
+  Args:
+    program_entity: the program to check the total amount of
+                    (Grading)ProjctSurveys for
+  """
+
+  from soc.logic.models.survey import grading_logic as grading_survey_logic
+  from soc.logic.models.survey import project_logic as project_survey_logic
+
+  fields = {'scope_path': program_entity.key().id_or_name()}
+
+  # count the number of have been active ProjectSurveys
+  project_surveys = project_survey_logic.getForFields(fields)
+  project_survey_count = len(project_surveys)
+
+  for project_survey in project_surveys:
+    if not project_survey_logic.hasAtLeastOneRecord(project_survey):
+      project_survey_count = project_survey_count - 1
+
+  # count the number of have been active GradingProjectSurveys
+  grading_surveys = grading_survey_logic.getForFields(fields)
+  grading_survey_count = len(grading_surveys)
+
+  for grading_survey in grading_surveys:
+    if not grading_survey_logic.hasAtLeastOneRecord(grading_survey):
+      grading_survey_count = grading_survey_count - 1
+
+  def wrapper(item, _):
+    """Wrapper method.
+    """
+
+    from soc.logic.models.survey_record import grading_logic
+    from soc.logic.models.survey_record import project_logic
+
+    fields = {'project': item}
+
+    # count the amount of records we have on store for this project
+    project_record_count = project_logic.getQueryForFields(fields).count()
+    grading_record_count = grading_logic.getQueryForFields(fields).count()
+
+    info = {'project_surveys_total': project_survey_count,
+            'project_surveys_completed': project_record_count,
+            'grading_project_surveys_total': grading_survey_count,
+            'grading_project_surveys_completed': grading_record_count}
+
+    return info
+  return wrapper