diff --git a/src/sponsors/management/__init__.py b/src/sponsors/management/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/sponsors/management/commands/__init__.py b/src/sponsors/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/sponsors/management/commands/generate_sponsor_tickets.py b/src/sponsors/management/commands/generate_sponsor_tickets.py new file mode 100644 index 00000000..4511250c --- /dev/null +++ b/src/sponsors/management/commands/generate_sponsor_tickets.py @@ -0,0 +1,38 @@ +# coding: utf-8 +from django.core.management.base import BaseCommand +from django.utils import timezone + +from camps.models import Camp +from sponsors.models import Sponsor +from tickets.models import SponsorTicket, TicketType + + +class Command(BaseCommand): + help = 'Creates sponsor tickets' + + def add_arguments(self, parser): + parser.add_argument('camp_slug', type=str,) + parser.add_argument('ticket_type_pk', type=str,) + + def output(self, message): + self.stdout.write('{}: {}'.format( + timezone.now().strftime("%Y-%m-%d %H:%M:%S"), + message + ) + ) + + def handle(self, *args, **options): + ticket_type = TicketType.objects.get(pk=options['ticket_type_pk']) + camp = Camp.objects.get(slug=options['camp_slug']) + sponsors = Sponsor.objects.filter(tier__camp=camp, tickets_generated=False) + + for sponsor in sponsors: + if sponsor.tier.tickets: + self.output("# Generating tickets for {}:".format(sponsor)) + for _ in range(sponsor.tier.tickets): + ticket = SponsorTicket(sponsor=sponsor, ticket_type=ticket_type) + ticket.save() + ticket.generate_pdf() + self.output("- {}_ticket_{}.pdf".format(ticket.shortname, ticket.pk)) + else: + self.output("{} is in tier {}, which has no tickets set.".format(sponsor, sponsor.tier)) diff --git a/src/sponsors/migrations/0008_auto_20180815_1119.py b/src/sponsors/migrations/0008_auto_20180815_1119.py new file mode 100644 index 00000000..b28de296 --- /dev/null +++ b/src/sponsors/migrations/0008_auto_20180815_1119.py @@ -0,0 +1,23 @@ +# Generated by Django 2.1 on 2018-08-15 09:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sponsors', '0007_auto_20180318_0906'), + ] + + operations = [ + migrations.AddField( + model_name='sponsor', + name='tickets_generated', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='sponsortier', + name='tickets', + field=models.IntegerField(blank=True, help_text='If set this is the number of tickets generated for a sponsor in this tier.', null=True), + ), + ] diff --git a/src/sponsors/models.py b/src/sponsors/models.py index cf8c2fb8..3edd2acf 100644 --- a/src/sponsors/models.py +++ b/src/sponsors/models.py @@ -36,6 +36,8 @@ class Sponsor(CampRelatedModel): help_text="An URL to the sponsor." ) + tickets_generated = models.BooleanField(default=False) + def __str__(self): return '{} ({})'.format(self.name, self.tier.camp) @@ -70,5 +72,11 @@ class SponsorTier(CampRelatedModel): gold should have a lower value than silver.""" ) + tickets = models.IntegerField( + null=True, + blank=True, + help_text="If set this is the number of tickets generated for a sponsor in this tier." + ) + def __str__(self): return '{} ({})'.format(self.name, self.camp)