First go at the student proposal model.
The scope will be set to the student role and the link_id will be time-based.
Patch by: Lennard de Rijk
Reviewed by: to-be-reviewed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/soc/models/student_proposal.py Fri Feb 20 11:39:00 2009 +0000
@@ -0,0 +1,87 @@
+#!/usr/bin/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."""
+
+__authors__ = [
+ '"Lennard de Rijk" <ljvderijk@gmail.com>',
+]
+
+
+from google.appengine.ext import db
+
+from django.utils.translation import ugettext
+
+import soc.models.linkable
+import soc.models.mentor
+import soc.models.organization
+import soc.models.program
+
+
+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('Title'))
+ title.help_text = ugettext(
+ 'title of the proposal')
+
+ #: optional, indexed plain text field used for different purposes,
+ #: depending on the specific type of the work
+ abstract = db.StringProperty(multiline=True)
+ abstract.help_text = ugettext(
+ 'short abstract, summary, or snippet;'
+ ' 500 characters or less, plain text displayed publicly')
+
+ #: an URL linking to more information about this students proposal
+ additional_info = db.URLProperty(required=False)
+ additional_info.help_text = ugettext(
+ 'Link to a resource containing more information about your 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.mentor.Mentor,
+ required=False, collection_name='student_proposals')
+
+ #: 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
+ #: 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 or the organization
+ #: does not want this proposal.
+ #: invalid: the student or developer marked this as an invalid proposal.
+ status = db.StringProperty(required=True, default='pending',
+ choices=['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
+ modified_on = db.DateTimeProperty(required=True, auto_now_add=True)