diff --git a/registrasion/models/conditions.py b/registrasion/models/conditions.py index 837753e1..c04b453f 100644 --- a/registrasion/models/conditions.py +++ b/registrasion/models/conditions.py @@ -8,6 +8,8 @@ from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ from model_utils.managers import InheritanceManager +from symposion import proposals + # Condition Types @@ -77,6 +79,30 @@ class IncludedProductCondition(models.Model): ) +class SpeakerCondition(models.Model): + ''' Conditions that are met if a user is a presenter, or copresenter, + of a specific of presentation. ''' + + class Meta: + abstract = True + + is_presenter = models.BooleanField( + blank=True, + help_text=_("This condition is met if the user is the primary " + "presenter of a presentation."), + ) + is_copresenter = models.BooleanField( + blank=True, + help_text=_("This condition is met if the user is a copresenter of a " + "presentation."), + ) + proposal_kind = models.ManyToManyField( + proposals.models.ProposalKind, + help_text=_("The types of proposals that these users may be " + "presenters of."), + ) + + # Discounts @python_2_unicode_compatible @@ -276,6 +302,29 @@ class IncludedProductDiscount(IncludedProductCondition, DiscountBase): verbose_name_plural = _("discounts (product inclusions)") +class SpeakerDiscount(SpeakerCondition, DiscountBase): + ''' Discounts that are enabled because the user is a presenter or + co-presenter of a kind of presentation. + + Attributes: + is_presenter (bool): The condition should be met if the user is a + presenter of a presentation. + + is_copresenter (bool): The condition should be met if the user is a + copresenter of a presentation. + + proposal_kind ([symposion.proposals.models.ProposalKind, ...]): The + kinds of proposals that the user may be a presenter or + copresenter of for this condition to be met. + + ''' + + class Meta: + app_label = "registrasion" + verbose_name = _("discount (speaker)") + verbose_name_plural = _("discounts (speaker)") + + class RoleDiscount(object): ''' Discounts that are enabled because the active user has a specific role. This is for e.g. volunteers who can get a discount ticket. ''' @@ -445,6 +494,29 @@ class VoucherFlag(VoucherCondition, FlagBase): return "Enabled by voucher: %s" % self.voucher +class SpeakerFlag(SpeakerCondition, FlagBase): + ''' Conditions that are enabled because the user is a presenter or + co-presenter of a kind of presentation. + + Attributes: + is_presenter (bool): The condition should be met if the user is a + presenter of a presentation. + + is_copresenter (bool): The condition should be met if the user is a + copresenter of a presentation. + + proposal_kind ([symposion.proposals.models.ProposalKind, ...]): The + kinds of proposals that the user may be a presenter or + copresenter of for this condition to be met. + + ''' + + class Meta: + app_label = "registrasion" + verbose_name = _("flag (speaker)") + verbose_name_plural = _("flags (speaker)") + + # @python_2_unicode_compatible class RoleFlag(object): ''' The condition is met because the active user has a particular Role.