app/soc/views/models/grading_project_survey.py
changeset 2542 a9dec4763c6b
parent 2536 9f1b7aba026f
child 2564 81b36f56d61a
equal deleted inserted replaced
2541:7ef468836f6e 2542:a9dec4763c6b
    84     survey_key_name = survey_logic.getKeyNameFromPath(request.path)
    84     survey_key_name = survey_logic.getKeyNameFromPath(request.path)
    85     survey = Survey.get_by_key_name(survey_key_name)
    85     survey = Survey.get_by_key_name(survey_key_name)
    86     survey_logic.activateGrades(survey)
    86     survey_logic.activateGrades(survey)
    87     return
    87     return
    88 
    88 
    89   def _getSurveyTakeForm(self, survey, record, params):
    89   def _getSurveyTakeForm(self, survey, record, params, post_dict=None):
    90     """Returns the specific SurveyTakeForm needed for the take view.
    90     """Returns the specific SurveyTakeForm needed for the take view.
    91 
    91 
    92     Args:
    92     Args:
    93         survey: a Survey entity
    93         survey: a Survey entity
    94         record: a SurveyRecord instance if any exist
    94         record: a SurveyRecord instance if any exist
    98         An instance of GradseSurveyTakeForm.
    98         An instance of GradseSurveyTakeForm.
    99     """
    99     """
   100 
   100 
   101     grade_choices = (('pass', 'Pass'), ('fail', 'Fail'))
   101     grade_choices = (('pass', 'Pass'), ('fail', 'Fail'))
   102     survey_form = GradeSurveyTakeForm(survey_content=survey.survey_content,
   102     survey_form = GradeSurveyTakeForm(survey_content=survey.survey_content,
       
   103                                       survey_record=record,
   103                                       survey_logic=params['logic'],
   104                                       survey_logic=params['logic'],
   104                                       grade_choices=grade_choices)
   105                                       grade_choices=grade_choices,
       
   106                                       data=post_dict)
   105 
   107 
   106     return survey_form
   108     return survey_form
   107 
   109 
   108   def _constructFilterForProjectSelection(self, survey, params):
   110   def _constructFilterForProjectSelection(self, survey, params):
   109     """Returns the filter needed for the Project selection view.
   111     """Returns the filter needed for the Project selection view.
   153 
   155 
   154     self.grade_choices = kwargs.pop('grade_choices', None)
   156     self.grade_choices = kwargs.pop('grade_choices', None)
   155 
   157 
   156     if self.grade_choices:
   158     if self.grade_choices:
   157       # add grade field to self.data, respecting the data kwarg if present
   159       # add grade field to self.data, respecting the data kwarg if present
   158       data = kwargs.pop('data', {})
   160       if kwargs.get('data') and kwargs['data'].get('grade'):
   159       data['grade'] = None
   161         data = {}
   160       kwargs['data'] = data
   162         data['grade'] = kwargs['data']['grade']
       
   163         self.data = data
   161 
   164 
   162     super(GradeSurveyTakeForm, self).__init__(*args, **kwargs)
   165     super(GradeSurveyTakeForm, self).__init__(*args, **kwargs)
   163 
   166 
   164   def clean_grade(self):
   167   def clean_grade(self):
   165     """Validate the grade field.
   168     """Validate the grade field.
   166     """
   169     """
   167 
   170 
   168     grade = self.cleaned_data['grade']
   171     grade = self.cleaned_data['grade']
   169 
       
   170     # map to bool
   172     # map to bool
   171     grade_vals = {'pass': True, 'fail': False, '': ''}
   173     grade_vals = {'pass': True, 'fail': False, '': ''}
   172 
   174 
   173     return grade_vals.get(grade, None)
   175     return grade_vals.get(grade, None)
   174 
   176 
   191     vals_grade = {True: 'pass', False: 'fail'}
   193     vals_grade = {True: 'pass', False: 'fail'}
   192 
   194 
   193     if self.grade_choices:
   195     if self.grade_choices:
   194       self.data['grade'] = vals_grade.get(grade, None) or grade
   196       self.data['grade'] = vals_grade.get(grade, None) or grade
   195 
   197 
   196     super(GradeSurveyTakeForm, self).getFields(post_dict)
   198     return super(GradeSurveyTakeForm, self).getFields(post_dict)
   197 
   199 
   198   def insertFields(self):
   200   def insertFields(self):
   199     """Add ordered fields to self.fields, add grade field with grade choices.
   201     """Add ordered fields to self.fields, add grade field with grade choices.
   200     """
   202     """
   201 
   203 
   202     # add common survey fields
   204     # add common survey fields
   203     super(GradeSurveyTakeForm, self).insertFields()
   205     fields = super(GradeSurveyTakeForm, self).insertFields()
   204 
   206 
   205     if self.grade_choices:
   207     if self.grade_choices:
   206       # add empty option to choices
   208       # add empty option to choices
   207       grade_choices = (('', "Choose a Grade"),) + tuple(self.grade_choices)
   209       grade_choices = (('', "Choose a Grade"),) + tuple(self.grade_choices)
   208 
   210 
   209       gradeField = forms.fields.ChoiceField(choices=grade_choices,
   211       gradeField = forms.fields.ChoiceField(choices=grade_choices,
   210                                             required=True,
   212                                             required=True,
   211                                             widget=forms.Select())
   213                                             widget=forms.Select(),
       
   214                                             initial=self.data.get('grade'))
   212       # add the grade field at the form's bottom
   215       # add the grade field at the form's bottom
   213       self.fields.insert(len(self.fields) + 1, 'grade', gradeField)
   216       fields.insert(len(fields) + 1, 'grade', gradeField)
   214 
   217 
   215     return self.fields
   218     return fields
   216 
   219 
   217 
   220 
   218 view = View()
   221 view = View()
   219 
   222 
   220 create = decorators.view(view.create)
   223 create = decorators.view(view.create)