# Path: symposion/proposals/models.py
# class ProposalBase(models.Model):
#     
#     objects = InheritanceManager()
#     
#     kind = models.ForeignKey(ProposalKind)
#     
#     title = models.CharField(max_length=100)
#     description = models.TextField(
#         _("Brief Outline"),
#         max_length=400,  # @@@ need to enforce 400 in UI
#         help_text="If your talk is accepted this will be made public and printed in the program. Should be one paragraph, maximum 400 characters."
#     )
#     abstract = MarkupField(
#         _("Detailed Abstract"),
#         help_text=_("Detailed description and outline. Will be made public if your talk is accepted. Edit using <a href='http://daringfireball.net/projects/markdown/basics' target='_blank'>Markdown</a>.")
#     )
#     additional_notes = MarkupField(
#         blank=True,
#         help_text=_("Anything else you'd like the program committee to know when making their selection: your past speaking experience, open source community experience, etc. Edit using <a href='http://daringfireball.net/projects/markdown/basics' target='_blank'>Markdown</a>.")
#     )
#     submitted = models.DateTimeField(
#         default=datetime.datetime.now,
#         editable=False,
#     )
#     speaker = models.ForeignKey("speakers.Speaker", related_name="proposals")
#     additional_speakers = models.ManyToManyField("speakers.Speaker", through="AdditionalSpeaker", blank=True)
#     cancelled = models.BooleanField(default=False)
#     
#     def can_edit(self):
#         if hasattr(self, "presentation") and self.presentation:
#             return False
#         else:
#             return True
#     
#     @property
#     def section(self):
#         return self.kind.section
#     
#     @property
#     def speaker_email(self):
#         return self.speaker.email
#     
#     @property
#     def number(self):
#         return str(self.pk).zfill(3)
#     
#     def speakers(self):
#         yield self.speaker
#         for speaker in self.additional_speakers.exclude(additionalspeaker__status=AdditionalSpeaker.SPEAKING_STATUS_DECLINED):
#             yield speaker
#     
#     def notification_email_context(self):
#         return {
#             "title": self.title,
#             "speaker": self.speaker.name,
#             "kind": self.kind.name,
#         }


from django.db import models
from symposion.proposals.models import ProposalBase


class PyConTalkProposal(PyConProposal):
    
    DURATION_CHOICES = [
        (0, "No preference"),
        (1, "I prefer a 30 minute slot"),
        (2, "I prefer a 45 minute slot"),
    ]
    
    extreme = models.BooleanField(
        default=False,
        help_text="'Extreme' talks are advanced talks with little or no introductory material. See <a href='http://us.pycon.org/2013/speaker/extreme/' target='_blank'>Extreme Talks</a> for details."
    )
    duration = models.IntegerField(choices=DURATION_CHOICES)
    
    class Meta:
        verbose_name = "PyCon talk proposal"


class PyConTutorialProposal(PyConProposal):
    class Meta:
        verbose_name = "PyCon tutorial proposal"


class PyConPosterProposal(PyConProposal):
    class Meta:
        verbose_name = "PyCon poster proposal"



# Path: symposion/proposals/models.py
# class ProposalBase(models.Model):
#     
#     objects = InheritanceManager()
#     
#     kind = models.ForeignKey(ProposalKind)
#     
#     title = models.CharField(max_length=100)
#     description = models.TextField(
#         _("Brief Outline"),
#         max_length=400,  # @@@ need to enforce 400 in UI
#         help_text="If your talk is accepted this will be made public and printed in the program. Should be one paragraph, maximum 400 characters."
#     )
#     abstract = MarkupField(
#         _("Detailed Abstract"),
#         help_text=_("Detailed description and outline. Will be made public if your talk is accepted. Edit using <a href='http://daringfireball.net/projects/markdown/basics' target='_blank'>Markdown</a>.")
#     )
#     additional_notes = MarkupField(
#         blank=True,
#         help_text=_("Anything else you'd like the program committee to know when making their selection: your past speaking experience, open source community experience, etc. Edit using <a href='http://daringfireball.net/projects/markdown/basics' target='_blank'>Markdown</a>.")
#     )
#     submitted = models.DateTimeField(
#         default=datetime.datetime.now,
#         editable=False,
#     )
#     speaker = models.ForeignKey("speakers.Speaker", related_name="proposals")
#     additional_speakers = models.ManyToManyField("speakers.Speaker", through="AdditionalSpeaker", blank=True)
#     cancelled = models.BooleanField(default=False)
#     
#     def can_edit(self):
#         if hasattr(self, "presentation") and self.presentation:
#             return False
#         else:
#             return True
#     
#     @property
#     def section(self):
#         return self.kind.section
#     
#     @property
#     def speaker_email(self):
#         return self.speaker.email
#     
#     @property
#     def number(self):
#         return str(self.pk).zfill(3)
#     
#     def speakers(self):
#         yield self.speaker
#         for speaker in self.additional_speakers.exclude(additionalspeaker__status=AdditionalSpeaker.SPEAKING_STATUS_DECLINED):
#             yield speaker
#     
#     def notification_email_context(self):
#         return {
#             "title": self.title,
#             "speaker": self.speaker.name,
#             "kind": self.kind.name,
#         }


# Path: pycon/models.py
from django.db import models
from symposion.proposals.models import ProposalBase



class PyConTalkProposal(PyConProposal):
    
    DURATION_CHOICES = [
        (0, "No preference"),
        (1, "I prefer a 30 minute slot"),
        (2, "I prefer a 45 minute slot"),
    ]
    
    extreme = models.BooleanField(
        default=False,
        help_text="'Extreme' talks are advanced talks with little or no introductory material. See <a href='http://us.pycon.org/2013/speaker/extreme/' target='_blank'>Extreme Talks</a> for details."
    )
    duration = models.IntegerField(choices=DURATION_CHOICES)
    
    class Meta:
        verbose_name = "PyCon talk proposal"


class PyConTutorialProposal(PyConProposal):
    class Meta:
        verbose_name = "PyCon tutorial proposal"


class PyConPosterProposal(PyConProposal):
    class Meta:
        verbose_name = "PyCon poster proposal"



class PyConSponsorTutorialProposal(ProposalBase):