blob: b0c1c5969a4f5b12567c3c487807245412969c37 [file] [log] [blame]
#!/usr/bin/env python2.5
#
# Copyright 2009 the Melange authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""This module contains the Student Proposal Model.
"""
from google.appengine.ext import db
from django.utils.translation import ugettext
import soc.models.linkable
import soc.models.organization
import soc.models.program
import soc.models.profile
# define the [min_score, max_score] and the name for the RankList
DEF_SCORE = [-1000, 1000]
DEF_RANKER_NAME = 'student_app_ranker'
class StudentProposal(soc.models.linkable.Linkable):
"""Model for a student proposal used in the GSoC workflow.
"""
#: Required field indicating the "title" of the proposal
title = db.StringProperty(required=True,
verbose_name=ugettext('Project Title'))
title.help_text = ugettext('Title of the proposal')
#: required, text field used for different purposes,
#: depending on the specific type of the proposal
abstract = db.TextProperty(required=True,
verbose_name=ugettext('Short Description'))
abstract.help_text = ugettext(
'Short abstract, summary, or snippet;'
' 500 characters or less, plain text displayed publicly')
#: Required field containing the content of the proposal.
content = db.TextProperty(required=True,
verbose_name=ugettext('Content'))
content.help_text = ugettext('This contains your actual proposal')
#: an URL linking to more information about this students proposal
additional_info = db.URLProperty(required=False,
verbose_name=ugettext('Additional Info'))
additional_info.help_text = ugettext(
'Link to a resource containing more information about your proposal')
#: indicates whether the proposal's content may be publicly seen or not
is_publicly_visible = db.BooleanProperty(required=False, default=False,
verbose_name=ugettext('Make public'))
is_publicly_visible.help_text = ugettext(
'If you check here, the content of your proposal will be visible '
'for others. Please note that they still will not be able to see '
'any public comments and reviews of the proposal.')
#: A property containing which mentor has assigned himself to this proposal.
#: Only a proposal with an assigned mentor can be turned into
#: a accepted proposal. A proposal can only have one mentor.
mentor = db.ReferenceProperty(reference_class=soc.models.profile.Profile,
required=False,
collection_name='student_proposals')
#: A property containing a list of possible Mentors for this proposal
possible_mentors = db.ListProperty(item_type=db.Key, default=[])
#: the current score of this proposal, used to determine which proposals
#: should be assigned a project slot.
score = db.IntegerProperty(required=True, default=0)
#: the status of this proposal
#: new : the proposal has not been ranked/scored yet
#: pending: the proposal is in the process of being ranked/scored
#: accepted: the proposal has been assigned a project slot
#: rejected: the proposal has not been assigned a slot
#: invalid: the student or org admin marked this as an invalid proposal.
status = db.StringProperty(required=True, default='new',
choices=['new', 'pending', 'accepted', 'rejected', 'invalid'])
#: organization to which this proposal is directed
org = db.ReferenceProperty(
reference_class=soc.models.organization.Organization,
required=True, collection_name='student_proposals')
#: program in which this proposal has been created
program = db.ReferenceProperty(reference_class=soc.models.program.Program,
required=True,
collection_name='student_proposals')
#: date when the proposal was created
created_on = db.DateTimeProperty(required=True, auto_now_add=True)
#: date when the proposal was last modified, should be set manually on edit
last_modified_on = db.DateTimeProperty(required=True, auto_now_add=True)