app/soc/logic/models/survey.py
author Lennard de Rijk <ljvderijk@gmail.com>
Tue, 30 Jun 2009 08:50:56 +0200
changeset 2460 b8b0c631bcfe
parent 2459 accd8ba94b44
child 2462 2d5d2961f774
permissions -rw-r--r--
Added getSurveyForContent method to SurveyLogic. This method returns a Survey for a given content. The backreferenceproperty will not work because of inheritance.
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
2460
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   175
  def getSurveyForContent(self, survey_content):
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   176
    """Returns the Survey belonging to the given SurveyContent.
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   177
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   178
    params:
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   179
      survey_content: the SurveyContent to retrieve the Survey for.
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   180
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   181
    returns:
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   182
      Survey or subclass if possible else None.
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   183
    """
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   184
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   185
    fields = {'survey_content': survey_content}
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   186
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   187
    return self.getForFields(fields, unique=True)
b8b0c631bcfe Added getSurveyForContent method to SurveyLogic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2459
diff changeset
   188
2431
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   189
  def getUserRole(self, user, survey, project):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   190
    """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
   191
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   192
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   193
      user: user taking survey
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   194
      survey: survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   195
      project: student project for this user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   196
    """
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 survey.taking_access == 'mentor evaluation':
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   199
      mentors = self.getMentorforProject(user, project)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   200
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   201
      if len(mentors) < 1 or len(mentors) > 1:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   202
        logging.warning('Unable to determine mentor for \
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   203
        user %s. Results returned: %s ' % (
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   204
        user.key().name(), str(mentors)) )
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   205
        return False
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
      this_mentor = mentors[0]
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   208
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   209
    if survey.taking_access == 'student evaluation':
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   210
      students = self.getStudentforProject(user, project)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   211
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   212
      if len(students) < 1 or len(students) > 1:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   213
        logging.warning('Unable to determine student for \
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   214
        user %s. Results returned: %s ' % (
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   215
        user.key().name(), str(students)) )
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   216
        return False
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   217
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   218
  def getStudentforProject(self, user, project):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   219
    """Get student projects for a given User.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   220
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   221
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   222
      user = survey taking user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   223
      project = survey taker's student project
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
    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
   226
    import soc.models.student
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   227
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   228
    # TODO this should be done per Student or Program
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   229
    # TODO filter for accepted, midterm_passed, etc?
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   230
    user_students = student_logic.getForFields({'user': user}) 
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   231
    if not user_students: return []
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   232
    return set([project.student for project in sum(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   233
    (list(s.student_projects.run())
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   234
    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
   235
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   236
  def getMentorforProject(self, user, project):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   237
    """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
   238
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   239
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   240
      user = survey taking user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   241
      project = survey taker's student project
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   242
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   243
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   244
    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
   245
    import soc.models.mentor
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   246
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   247
    # TODO filter for accepted, midterm_passed, etc?
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   248
    # 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
   249
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   250
    user_mentors = mentor_logic.getForFields({'user': user}) 
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   251
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   252
    if not user_mentors:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   253
      return []
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   254
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   255
    return set([project.mentor for project in sum(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   256
            (list(mentor.student_projects.run())
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   257
             for mentor in user_mentors), [])
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   258
        if project.key() == project.key()])
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   259
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   260
  def activateGrades(self, survey):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   261
    """Activates the grades on a Grading Survey.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   262
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   263
    TODO(James) Fix this Docstring
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   264
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   265
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   266
      survey = survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   267
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   268
    if survey.taking_access != "mentor evaluation":
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   269
      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
   270
      % (survey.key().name(), survey.taking_access))
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   271
      return False
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   272
2442
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   273
    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
   274
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   275
    for project in program.student_projects.fetch(1000):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   276
      this_record_group = SurveyRecordGroup.all().filter(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   277
      "project = ", project).filter(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   278
      "initial_status = ", project.status).get()
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   279
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   280
      if not this_record_group:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   281
         logging.warning('neither mentor nor student has \
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   282
         taken the survey for project %s' % project.key().name() )
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   283
         continue
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   284
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   285
      if not this_record_group.mentor_record:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   286
        # student has taken survey, but not mentor
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   287
        logging.warning('not continuing without mentor record...')
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   288
        continue
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   289
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   290
      status_options = PROJECT_STATUSES.get(project.status)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   291
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   292
      if not status_options:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   293
        logging.warning('unable to find status options for project \
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   294
        status %s' % project.status)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   295
        continue
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   296
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   297
      new_project_grade = this_record_group.mentor_record.grade
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   298
      new_project_status = status_options.get(new_project_grade)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   299
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   300
      if getattr(this_record_group, 'final_status'):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   301
         logging.warning('project %s record group should not \
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   302
         yet have a final status %s' % (
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   303
         project.key().name(), this_record_group.final_status ) )
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   304
         continue
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   305
2442
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   306
      # 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
   307
      project.status = new_project_status
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   308
      this_record_group.final_status = new_project_status
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   309
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   310
  def getKeyNameFromPath(self, path):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   311
    """Gets survey key name from a request path.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   312
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   313
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   314
      path = path of the current request
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   315
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   316
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   317
    # 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
   318
    return '/'.join(path.split('/')[-4:]).split('?')[0]
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
  def getProjects(self, survey, user):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   321
    """Get projects linking user to a program.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   322
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   323
    Serves as access handler (since no projects == no access).
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   324
    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
   325
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   326
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   327
      survey = survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   328
      user = survey taking user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   329
    """
2442
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   330
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   331
    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
   332
2431
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   333
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   334
    if 'mentor' in survey.taking_access:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   335
      these_projects = self.getMentorProjects(user, this_program)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   336
2442
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   337
    elif 'student' in survey.taking_access:
2431
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   338
      these_projects = self.getStudentProjects(user, this_program)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   339
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   340
    logging.info(these_projects)
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
    if len(these_projects) == 0:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   343
      return False
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   344
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   345
    return these_projects
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   346
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   347
  def getDebugUser(self, survey, this_program):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   348
    """Debugging method impersonates other roles.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   349
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   350
    Tests taking survey, saving response, and grading.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   351
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   352
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   353
      survey = survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   354
      this_program = program scope of survey
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   355
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   356
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   357
    if 'mentor' in survey.taking_access:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   358
      from soc.models.mentor import Mentor
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   359
      role = Mentor.get_by_key_name(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   360
      this_program.key().name() + "/org_1/test")
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   361
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   362
    if 'student' in survey.taking_access:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   363
      from soc.models.student import Student
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   364
      role = Student.get_by_key_name(
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   365
      this_program.key().name() + "/test")
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
    if role: return role.user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   368
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   369
  def getKeyValuesFromEntity(self, entity):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   370
    """See base.Logic.getKeyNameValues.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   371
    """
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
    return [entity.prefix, entity.scope_path, entity.link_id]
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   374
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   375
  def getKeyValuesFromFields(self, fields):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   376
    """See base.Logic.getKeyValuesFromFields.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   377
    """
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
    return [fields['prefix'], fields['scope_path'], fields['link_id']]
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   380
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   381
  def getKeyFieldNames(self):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   382
    """See base.Logic.getKeyFieldNames.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   383
    """
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   384
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   385
    return ['prefix', 'scope_path', 'link_id']
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   386
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   387
  def getScope(self, entity):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   388
    """Gets Scope for entity.
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   389
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   390
    params:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   391
      entity = Survey entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   392
    """
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
    if getattr(entity, 'scope', None):
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   395
      return entity.scope
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
    import soc.models.program
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   398
    import soc.models.organization
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   399
    import soc.models.user
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   400
    import soc.models.site
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   401
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   402
    # use prefix to generate dict key
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   403
    scope_types = {"program": soc.models.program.Program,
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   404
    "org": soc.models.organization.Organization,
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   405
    "user": soc.models.user.User,
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   406
    "site": soc.models.site.Site}
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   407
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   408
    # determine the type of the scope
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   409
    scope_type = scope_types.get(entity.prefix)
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   410
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   411
    if not scope_type:
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   412
      # no matching scope type found
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   413
      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
   414
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   415
    # set the scope and update the entity
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   416
    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
   417
    entity.put()
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   418
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   419
    # return the scope
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   420
    return entity.scope
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   421
2443
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   422
class ProjectLogic(Logic):
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   423
  """Logic class for ProjectSurvey.
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
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   426
  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
   427
               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
   428
    """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
   429
    """
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   430
2459
accd8ba94b44 Calling the correct super in Project and Grading Survey Logic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
   431
    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
   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
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   434
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   435
class GradingProjectLogic(ProjectLogic):
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   436
  """Logic class for GradingProjectSurvey
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   437
  """
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   438
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   439
  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
   440
               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
   441
    """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
   442
    """
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   443
2459
accd8ba94b44 Calling the correct super in Project and Grading Survey Logic.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2455
diff changeset
   444
    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
   445
                                              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
   446
                                              scope_logic=scope_logic)
2443
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   447
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
   448
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
   449
  """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
   450
  """
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 __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
   453
               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
   454
    """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
   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
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
    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
   458
                                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
   459
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
  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
   461
    """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
   462
    """
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
    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
   465
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
  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
   467
    """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
   468
    """
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
    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
   471
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
  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
   473
    """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
   474
    """
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
    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
   477
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
  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
   479
    """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
   480
    """
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
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 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
   483
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
   484
  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
   485
    """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
   486
    """
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
   487
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
    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
   489
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
   490
    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
   491
      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
   492
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
   493
    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
   494
    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
   495
      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
   496
    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
   497
2442
dd1f94c3594c Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents: 2439
diff changeset
   498
2431
800a020c9bcf Added logic for Survey and SurveyRecord.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff changeset
   499
logic = Logic()
2443
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   500
project_logic = ProjectLogic()
2e86dbd47907 Seperated Logic for ProjectSurvey and GradingProject surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 2442
diff changeset
   501
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
   502
results_logic = ResultsLogic()