diff --git a/symposion/sponsorship/models.py b/symposion/sponsorship/models.py index 9c9eeda275b2aeadda39a27f45e5ff4f3895c63a..3fb21ea273ec037c330a0144e6efa18f5e2606e8 100644 --- a/symposion/sponsorship/models.py +++ b/symposion/sponsorship/models.py @@ -26,7 +26,7 @@ class SponsorLevel(models.Model): verbose_name_plural = _("sponsor levels") def __unicode__(self): - return u"%s %s" % (self.conference, self.name) + return self.name def sponsors(self): return self.sponsor_set.filter(active=True).order_by("added") @@ -62,6 +62,48 @@ class Sponsor(models.Model): return reverse("sponsor_detail", kwargs={"pk": self.pk}) return reverse("sponsor_list") + def reset_benefits(self): + """ + Reset all benefits for this sponsor to the defaults for their + sponsorship level. + """ + level = None + + try: + level = self.level + except SponsorLevel.DoesNotExist: + pass + + allowed_benefits = [] + if level: + for benefit_level in level.benefit_levels.all(): + # Create all needed benefits if they don't exist already + sponsor_benefit, created = SponsorBenefit.objects.get_or_create( + sponsor=self, benefit=benefit_level.benefit) + + # and set to default limits for this level. + sponsor_benefit.max_words = benefit_level.max_words + sponsor_benefit.other_limits = benefit_level.other_limits + + # and set to active + sponsor_benefit.active = True + + # @@@ We don't call sponsor_benefit.clean here. This means + # that if the sponsorship level for a sponsor is adjusted + # downwards, an existing too-long text entry can remain, + # and won't raise a validation error until it's next + # edited. + sponsor_benefit.save() + + allowed_benefits.append(sponsor_benefit.pk) + + # Any remaining sponsor benefits that don't normally belong to + # this level are set to inactive + self.sponsor_benefits.exclude(pk__in=allowed_benefits).update(active=False, max_words=None, other_limits="") + + def send_coordinator_emails(self): + pass # @@@ should this just be done centrally? + BENEFIT_TYPE_CHOICES = [ ("text", "Text"),