app/soc/logic/models/survey.py
author Lennard de Rijk <ljvderijk@gmail.com>
Tue, 30 Jun 2009 08:49:34 +0200
changeset 2459 accd8ba94b44
parent 2455 a023b71ce125
child 2460 b8b0c631bcfe
permissions -rw-r--r--
Calling the correct super in Project and Grading Survey Logic.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2431
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     2
#
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     3
# Copyright 2009 the Melange authors.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     4
#
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     8
#
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    10
#
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    16
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    17
"""Survey (Model) query functions.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    18
"""
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    19
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    20
__authors__ = [
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    21
  '"Daniel Diniz" <ajaksu@gmail.com>',
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    22
  '"James Levy" <jamesalexanderlevy@gmail.com>',
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    23
  '"Lennard de Rijk" <ljvderijk@gmail.com>',
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    24
  ]
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    25
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    26
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    27
import logging
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    28
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    29
from google.appengine.ext import db
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    30
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    31
from soc.cache import sidebar
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    32
from soc.logic.models import linkable as linkable_logic
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    33
from soc.logic.models.user import logic as user_logic
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    34
from soc.logic.models import work
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    35
from soc.models.program import Program
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    36
from soc.models import student_project
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    37
from soc.models.survey import Survey
2444
6276c3340c30 Separated two survey types out of the main survey model.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2443
diff changeset
    38
from soc.models.grading_project_survey import GradingProjectSurvey
6276c3340c30 Separated two survey types out of the main survey model.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2443
diff changeset
    39
from soc.models.project_survey import ProjectSurvey
2431
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    40
from soc.models.survey import SurveyContent
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    41
from soc.models.survey_record import SurveyRecord
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    42
from soc.models.survey_record_group import SurveyRecordGroup
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    43
from soc.models.work import Work
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    44
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    45
#TODO(James): Ensure this facilitates variable # of surveys 
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    46
GRADES = {'pass': True, 'fail': False}
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    47
PROJECT_STATUSES = {
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    48
'accepted': {True: 'mid_term_passed', False: 'mid_term_failed'},
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    49
'mid_term_passed': {True: 'passed', False: 'final_failed'}
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    50
}
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    51
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    52
class Logic(work.Logic):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    53
  """Logic methods for the Survey model.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    54
  """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    55
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    56
  def __init__(self, model=Survey, base_model=Work,
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    57
               scope_logic=linkable_logic):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    58
    """Defines the name, key_name and model for this entity.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    59
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    60
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    61
    super(Logic, self).__init__(model=model, base_model=base_model,
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    62
                                scope_logic=scope_logic)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    63
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    64
  def createSurvey(self, survey_fields, schema, survey_content=False):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    65
    """Create a new survey from prototype.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    66
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    67
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    68
      survey_fields = dict of survey field items (see SurveyContent model)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    69
      schema = metadata about survey fields (SurveyContent.schema)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    70
      survey_content = existing SurveyContent entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    71
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    72
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    73
    if not survey_content:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    74
      survey_content = SurveyContent()
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    75
    else:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    76
      # wipe clean existing dynamic properties if they exist
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    77
      for prop in survey_content.dynamic_properties():
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    78
        delattr(survey_content, prop)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    79
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    80
    for name, value in survey_fields.items():
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    81
      setattr(survey_content, name, value)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    82
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    83
    survey_content.schema = str(schema)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    84
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    85
    db.put(survey_content)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    86
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    87
    return survey_content
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    88
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    89
  def updateSurveyRecord(self, user, survey, survey_record, fields):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    90
    """ Create a new survey record, or get an existing one.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    91
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    92
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    93
      user = user taking survey
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    94
      survey = survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    95
      survey_record = existing record, if one exists
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    96
      fields = submitted responses to survey fields
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    97
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    98
    if survey_record:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
    99
      create = False
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   100
      for prop in survey_record.dynamic_properties():
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   101
        delattr(survey_record, prop)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   102
    else:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   103
      create = True
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   104
      survey_record = SurveyRecord(user=user, survey=survey)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   105
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   106
    schema = eval(survey.survey_content.schema)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   107
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   108
    for name, value in fields.items():
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   109
      if name == 'project':
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   110
        project = student_project.StudentProject.get(value)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   111
        survey_record.project = project
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   112
      elif name == 'grade':
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   113
        survey_record.grade = GRADES[value]
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   114
      else:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   115
        pick_multi = name in schema and schema[name]['type'] == 'pick_multi'
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   116
        if pick_multi and hasattr(fields, 'getlist'): # it's a multidict
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   117
          setattr(survey_record, name, ','.join(fields.getlist(name)))
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   118
        else:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   119
          setattr(survey_record, name, value)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   120
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   121
    # if creating evaluation record, set SurveyRecordGroup
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   122
    db.put(survey_record)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   123
    if 'evaluation' in survey.taking_access and create:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   124
      if not project: return False
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   125
      role = self.getUserRole(user, survey, project)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   126
      survey_record_group = self.setSurveyRecordGroup(survey,
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   127
      survey_record, project)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   128
      if survey_record_group:  db.put(survey_record_group)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   129
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   130
    return survey_record
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   131
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   132
  def setSurveyRecordGroup(self, survey, survey_record, project):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   133
    """First looks for an existing SurveyRecordGroup, using the
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   134
    project and its current status as a filter.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   135
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   136
    IOW SurveyRecordGroup cannot consist of surveys taken with
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   137
    two different statuses.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   138
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   139
    This means that a student cannot take a survey after the mentor
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   140
    has taken the accompanying survey and the project has since
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   141
    changed. (Assuming we want this strict behavior)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   142
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   143
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   144
      survey = survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   145
      survey_record = saved response to survey
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   146
      project = student project for survey taker
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   147
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   148
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   149
    group_query = SurveyRecordGroup.all(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   150
    ).filter("project = ", project
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   151
    ).filter("initial_status = ", project.status
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   152
    )
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   153
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   154
    if survey.taking_access == 'mentor evaluation':
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   155
      survey_record_group = group_query.filter(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   156
      "mentor = ", None ).get()
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   157
    elif survey.taking_access == 'student evaluation':
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   158
      survey_record_group = group_query.filter(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   159
      "student = ", None ).get()
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   160
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   161
    if not survey_record_group:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   162
      #create Survey Record Group if it doesn't already exist
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   163
      survey_record_group = SurveyRecordGroup(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   164
      project=project,
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   165
      initial_status = project.status
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   166
      )
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   167
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   168
    if survey.taking_access == 'mentor evaluation':
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   169
      survey_record_group.mentor_record = survey_record
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   170
    elif survey.taking_access == 'student evaluation':
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   171
      survey_record_group.student_record = survey_record
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   172
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   173
    return survey_record_group
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   174
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   175
  def getUserRole(self, user, survey, project):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   176
    """Gets the role of a user for a project, used for SurveyRecordGroup.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   177
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   178
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   179
      user: user taking survey
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   180
      survey: survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   181
      project: student project for this user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   182
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   183
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   184
    if survey.taking_access == 'mentor evaluation':
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   185
      mentors = self.getMentorforProject(user, project)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   186
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   187
      if len(mentors) < 1 or len(mentors) > 1:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   188
        logging.warning('Unable to determine mentor for \
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   189
        user %s. Results returned: %s ' % (
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   190
        user.key().name(), str(mentors)) )
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   191
        return False
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   192
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   193
      this_mentor = mentors[0]
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   194
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   195
    if survey.taking_access == 'student evaluation':
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   196
      students = self.getStudentforProject(user, project)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   197
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   198
      if len(students) < 1 or len(students) > 1:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   199
        logging.warning('Unable to determine student for \
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   200
        user %s. Results returned: %s ' % (
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   201
        user.key().name(), str(students)) )
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   202
        return False
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   203
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   204
  def getStudentforProject(self, user, project):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   205
    """Get student projects for a given User.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   206
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   207
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   208
      user = survey taking user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   209
      project = survey taker's student project
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   210
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   211
    from soc.logic.models.student import logic as student_logic
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   212
    import soc.models.student
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   213
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   214
    # TODO this should be done per Student or Program
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   215
    # TODO filter for accepted, midterm_passed, etc?
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   216
    user_students = student_logic.getForFields({'user': user}) 
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   217
    if not user_students: return []
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   218
    return set([project.student for project in sum(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   219
    (list(s.student_projects.run())
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   220
    for s in user_students), []) if project.key() == project.key()])
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   221
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   222
  def getMentorforProject(self, user, project):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   223
    """Get Student Projects that are being mentored by the given User.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   224
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   225
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   226
      user = survey taking user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   227
      project = survey taker's student project
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   228
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   229
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   230
    from soc.logic.models.mentor import logic as mentor_logic
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   231
    import soc.models.mentor
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   232
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   233
    # TODO filter for accepted, midterm_passed, etc?
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   234
    # TODO this should be done a program basis not user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   235
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   236
    user_mentors = mentor_logic.getForFields({'user': user}) 
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   237
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   238
    if not user_mentors:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   239
      return []
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   240
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   241
    return set([project.mentor for project in sum(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   242
            (list(mentor.student_projects.run())
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   243
             for mentor in user_mentors), [])
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   244
        if project.key() == project.key()])
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   245
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   246
  def activateGrades(self, survey):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   247
    """Activates the grades on a Grading Survey.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   248
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   249
    TODO(James) Fix this Docstring
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   250
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   251
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   252
      survey = survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   253
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   254
    if survey.taking_access != "mentor evaluation":
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   255
      logging.error("Cannot grade survey %s with taking access %s"
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   256
      % (survey.key().name(), survey.taking_access))
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   257
      return False
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   258
2442
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   259
    program = survey.scope or Program.get_by_key_name(survey.scope_path)
2431
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   260
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   261
    for project in program.student_projects.fetch(1000):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   262
      this_record_group = SurveyRecordGroup.all().filter(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   263
      "project = ", project).filter(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   264
      "initial_status = ", project.status).get()
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   265
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   266
      if not this_record_group:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   267
         logging.warning('neither mentor nor student has \
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   268
         taken the survey for project %s' % project.key().name() )
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   269
         continue
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   270
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   271
      if not this_record_group.mentor_record:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   272
        # student has taken survey, but not mentor
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   273
        logging.warning('not continuing without mentor record...')
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   274
        continue
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   275
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   276
      status_options = PROJECT_STATUSES.get(project.status)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   277
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   278
      if not status_options:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   279
        logging.warning('unable to find status options for project \
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   280
        status %s' % project.status)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   281
        continue
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   282
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   283
      new_project_grade = this_record_group.mentor_record.grade
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   284
      new_project_status = status_options.get(new_project_grade)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   285
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   286
      if getattr(this_record_group, 'final_status'):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   287
         logging.warning('project %s record group should not \
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   288
         yet have a final status %s' % (
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   289
         project.key().name(), this_record_group.final_status ) )
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   290
         continue
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   291
2442
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   292
      # assign the new status to the project and surveyrecordgroup
2431
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   293
      project.status = new_project_status
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   294
      this_record_group.final_status = new_project_status
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   295
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   296
  def getKeyNameFromPath(self, path):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   297
    """Gets survey key name from a request path.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   298
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   299
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   300
      path = path of the current request
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   301
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   302
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   303
    # TODO determine if kwargs in the request contains this information
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   304
    return '/'.join(path.split('/')[-4:]).split('?')[0]
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   305
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   306
  def getProjects(self, survey, user):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   307
    """Get projects linking user to a program.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   308
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   309
    Serves as access handler (since no projects == no access).
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   310
    And retrieves projects to choose from (if mentors have >1 projects).
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   311
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   312
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   313
      survey = survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   314
      user = survey taking user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   315
    """
2442
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   316
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   317
    this_program = survey.scope or Program.get_by_key_name(survey.scope_path)
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   318
2431
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   319
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   320
    if 'mentor' in survey.taking_access:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   321
      these_projects = self.getMentorProjects(user, this_program)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   322
2442
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   323
    elif 'student' in survey.taking_access:
2431
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   324
      these_projects = self.getStudentProjects(user, this_program)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   325
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   326
    logging.info(these_projects)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   327
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   328
    if len(these_projects) == 0:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   329
      return False
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   330
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   331
    return these_projects
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   332
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   333
  def getDebugUser(self, survey, this_program):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   334
    """Debugging method impersonates other roles.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   335
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   336
    Tests taking survey, saving response, and grading.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   337
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   338
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   339
      survey = survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   340
      this_program = program scope of survey
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   341
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   342
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   343
    if 'mentor' in survey.taking_access:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   344
      from soc.models.mentor import Mentor
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   345
      role = Mentor.get_by_key_name(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   346
      this_program.key().name() + "/org_1/test")
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   347
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   348
    if 'student' in survey.taking_access:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   349
      from soc.models.student import Student
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   350
      role = Student.get_by_key_name(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   351
      this_program.key().name() + "/test")
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   352
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   353
    if role: return role.user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   354
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   355
  def getKeyValuesFromEntity(self, entity):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   356
    """See base.Logic.getKeyNameValues.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   357
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   358
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   359
    return [entity.prefix, entity.scope_path, entity.link_id]
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   360
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   361
  def getKeyValuesFromFields(self, fields):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   362
    """See base.Logic.getKeyValuesFromFields.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   363
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   364
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   365
    return [fields['prefix'], fields['scope_path'], fields['link_id']]
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   366
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   367
  def getKeyFieldNames(self):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   368
    """See base.Logic.getKeyFieldNames.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   369
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   370
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   371
    return ['prefix', 'scope_path', 'link_id']
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   372
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   373
  def getScope(self, entity):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   374
    """Gets Scope for entity.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   375
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   376
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   377
      entity = Survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   378
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   379
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   380
    if getattr(entity, 'scope', None):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   381
      return entity.scope
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   382
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   383
    import soc.models.program
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   384
    import soc.models.organization
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   385
    import soc.models.user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   386
    import soc.models.site
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   387
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   388
    # use prefix to generate dict key
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   389
    scope_types = {"program": soc.models.program.Program,
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   390
    "org": soc.models.organization.Organization,
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   391
    "user": soc.models.user.User,
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   392
    "site": soc.models.site.Site}
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   393
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   394
    # determine the type of the scope
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   395
    scope_type = scope_types.get(entity.prefix)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   396
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   397
    if not scope_type:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   398
      # no matching scope type found
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   399
      raise AttributeError('No Matching Scope type found for %s' % entity.prefix)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   400
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   401
    # set the scope and update the entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   402
    entity.scope = scope_type.get_by_key_name(entity.scope_path)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   403
    entity.put()
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   404
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   405
    # return the scope
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   406
    return entity.scope
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   407
2443
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   408
class ProjectLogic(Logic):
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   409
  """Logic class for ProjectSurvey.
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   410
  """
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   411
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   412
  def __init__(self, model=ProjectSurvey,
2453
9b8f3240e3bf Set the correct base_model and scope_logic for extended Survey logic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2444
diff changeset
   413
               base_model=Survey, scope_logic=linkable_logic):
2443
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   414
    """Defines the name, key_name and model for this entity.
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   415
    """
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   416
2459
accd8ba94b44 Calling the correct super in Project and Grading Survey Logic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
   417
    super(ProjectLogic, self).__init__(model=model, base_model=base_model,
accd8ba94b44 Calling the correct super in Project and Grading Survey Logic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
   418
                                       scope_logic=scope_logic)
2443
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   419
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   420
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   421
class GradingProjectLogic(ProjectLogic):
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   422
  """Logic class for GradingProjectSurvey
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   423
  """
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   424
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   425
  def __init__(self, model=GradingProjectSurvey,
2453
9b8f3240e3bf Set the correct base_model and scope_logic for extended Survey logic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2444
diff changeset
   426
               base_model=ProjectSurvey, scope_logic=linkable_logic):
2443
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   427
    """Defines the name, key_name and model for this entity.
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   428
    """
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   429
2459
accd8ba94b44 Calling the correct super in Project and Grading Survey Logic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
   430
    super(GradingProjectLogic, self).__init__(model=model,
accd8ba94b44 Calling the correct super in Project and Grading Survey Logic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
   431
                                              base_model=base_model,
accd8ba94b44 Calling the correct super in Project and Grading Survey Logic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
   432
                                              scope_logic=scope_logic)
2443
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   433
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   434
class ResultsLogic(work.Logic):
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   435
  """Logic methods for the Survey model
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   436
  """
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   437
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   438
  def __init__(self, model=SurveyRecord,
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   439
               base_model=Work, scope_logic=linkable_logic):
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   440
    """Defines the name, key_name and model for this entity.
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   441
    """
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   442
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   443
    super(ResultsLogic, self).__init__(model=model, base_model=base_model,
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   444
                                scope_logic=scope_logic)
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   445
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   446
  def getKeyValuesFromEntity(self, entity):
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   447
    """See base.Logic.getKeyNameValues.
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   448
    """
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   449
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   450
    return [entity.prefix, entity.scope_path, entity.link_id]
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   451
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   452
  def getKeyValuesFromFields(self, fields):
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   453
    """See base.Logic.getKeyValuesFromFields.
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   454
    """
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   456
    return [fields['prefix'], fields['scope_path'], fields['link_id']]
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   457
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   458
  def getKeyFieldNames(self):
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   459
    """See base.Logic.getKeyFieldNames.
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   460
    """
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   461
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   462
    return ['prefix', 'scope_path', 'link_id']
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   463
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   464
  def isDeletable(self, entity):
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   465
    """See base.Logic.isDeletable.
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   466
    """
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   467
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   468
    return not entity.home_for
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   469
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   470
  def _updateField(self, entity, entity_properties, name):
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   471
    """Special logic for role. If state changes to active we flush the sidebar.
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   472
    """
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   473
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   474
    value = entity_properties[name]
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   475
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   476
    if (name == 'is_featured') and (entity.is_featured != value):
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   477
      sidebar.flush()
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   478
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   479
    home_for = entity.home_for
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   480
    if (name != 'home_for') and home_for:
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   481
      home.flush(home_for)
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   482
    return True
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   483
2442
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   484
2431
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   485
logic = Logic()
2443
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   486
project_logic = ProjectLogic()
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   487
grading_logic = GradingProjectLogic()
2455
a023b71ce125 fixed critical errors related to survey subclassing and renaming of deadline and opening properties, and surveys in sidebar are now marked as such and have a red color if untaken
james@jamess-macbook-air.local
parents: 2453
diff changeset
   488
results_logic = ResultsLogic()