# HG changeset patch # User Lennard de Rijk # Date 1247407301 -7200 # Node ID 216002ba6b86dd16f54f9f369e6adb3472b4fd3b # Parent 0fe19187a3bbb2e4cfc16ae4a46af596270e6b59 Added view to GradingSurveyGroup to list all records for a specified group. This view will later be extended with options to start Tasks for collecting the data and processing it. diff -r 0fe19187a3bb -r 216002ba6b86 app/soc/templates/soc/grading_survey_group/records.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/soc/templates/soc/grading_survey_group/records.html Sun Jul 12 16:01:41 2009 +0200 @@ -0,0 +1,35 @@ +{% extends "soc/base.html" %} +{% comment %} +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +{% endcomment %} +{% load forms_helpers %} + +{% block body %} + +

+ All records collected for this Grading Survey Group are shown on this page. +

+ +

+ Collection Task last started: {{ entity.last_update_started|date:"jS F Y H:i"|default:"Never Started" }}
+ Collection Task last completed: {{ entity.last_update_completed|date:"jS F Y H:i"|default:"Never Completed" }}
+

+ +{% for list_number in list.lists %} +

+{% include list.nextList %} +

+ +{% endfor %} + +{% endblock %} diff -r 0fe19187a3bb -r 216002ba6b86 app/soc/views/models/grading_survey_group.py --- a/app/soc/views/models/grading_survey_group.py Sun Jul 12 16:00:32 2009 +0200 +++ b/app/soc/views/models/grading_survey_group.py Sun Jul 12 16:01:41 2009 +0200 @@ -38,9 +38,12 @@ from soc.models.grading_survey_group import GradingSurveyGroup from soc.models.grading_project_survey import GradingProjectSurvey from soc.models.project_survey import ProjectSurvey +from soc.views import out_of_band from soc.views.helper import access from soc.views.helper import decorators +from soc.views.helper import lists from soc.views.helper import redirects +from soc.views.helper import responses from soc.views.models import base from soc.views.models import program as program_view @@ -63,6 +66,7 @@ rights['delete'] = ['checkIsDeveloper'] rights['show'] = ['checkIsHostForProgramInScope'] rights['list'] = ['checkIsDeveloper'] + rights['records'] = ['checkIsHostForProgramInScope'] new_params = {} new_params['logic'] = survey_group_logic @@ -91,6 +95,18 @@ 'link_id': forms.CharField(widget=forms.HiddenInput), } + patterns = [ + (r'^%(url_name)s/(?Precords)/%(key_fields)s$', + 'soc.views.models.%(module_name)s.grading_records', + 'Overview of GradingRecords'), + ] + + new_params['extra_django_patterns'] = patterns + + new_params['records_template'] = 'soc/grading_survey_group/records.html' + new_params['records_heading_template'] = 'soc/grading_record/list/heading.html' + new_params['records_row_template'] = 'soc/grading_record/list/row.html' + params = dicts.merge(params, new_params) super(View, self).__init__(params=params) @@ -204,11 +220,86 @@ group_form.base_fields[field].choices = choices + @decorators.merge_params + @decorators.check_access + def gradingRecords(self, request, access_type, page_name=None, params=None, + **kwargs): + """View which shows all collected records for a given GradingSurveyGroup. + + For args see base.View.public(). + """ + + from soc.logic import lists as lists_logic + from soc.logic.models.grading_record import logic as record_logic + + survey_group_logic = params['logic'] + + try: + entity = survey_group_logic.getFromKeyFieldsOr404(kwargs) + except out_of_band.Error, error: + return responses.errorResponse( + error, request, template=params['error_public']) + + template = params['records_template'] + + list_params = params.copy() + list_params['logic'] = record_logic + list_params['list_heading'] = params['records_heading_template'] + list_params['list_row'] = params['records_row_template'] + # TODO(ljvderijk) proper redirect to edit a record + list_params['list_action'] = None + + # get the context for this webpage + context = responses.getUniversalContext(request) + responses.useJavaScript(context, params['js_uses_all']) + context['page_name'] = "%s for %s named '%s'" %( + page_name, params['name'], entity.name) + context['entity'] = entity + + fields = {'grading_survey_group': entity} + + # list all records with grading_decision set to pass + fields['grade_decision'] = 'pass' + + # get the list content for passing records + pr_params = list_params.copy() + pr_params['list_description'] = \ + 'List of all Records which have their grading outcome set to pass.' + pr_list = lists.getListContent( + request, pr_params, fields, idx=0) + + # list all records with grading_decision set to fail + fields['grade_decision'] = 'fail' + + # get the list content for all failing records + fr_params = list_params.copy() + fr_params['list_description'] = \ + 'List of all Records which have their grading outcome set to fail.' + fr_list = lists.getListContent( + request, fr_params, fields, idx=1) + + # list all records with grading decision set to undecided + fields['grade_decision'] = 'undecided' + + # get the list content for all undecided records + ur_params = list_params.copy() + ur_params['list_description'] = \ + 'List of all Records which have their grading outcome set to undecided.' + ur_list = lists.getListContent( + request, ur_params, fields, idx=2) + + # specify the contents and create a Lists object for use in the context + contents = [pr_list, fr_list, ur_list] + context['list'] = lists_logic.Lists(contents) + + return responses.respond(request, template, context) + view = View() create = decorators.view(view.create) +delete = decorators.view(view.delete) edit = decorators.view(view.edit) -delete = decorators.view(view.delete) +grading_records = decorators.view(view.gradingRecords) list = decorators.view(view.list) public = decorators.view(view.public)