diff --git a/conference.example.toml b/conference.example.toml index 6d563ca..72f9cd0 100644 --- a/conference.example.toml +++ b/conference.example.toml @@ -6,6 +6,7 @@ timezone = "America/New_York" venue = "David L. Lawrence Convention Center, Pittsburgh PA" pretalx_event_slug = "pycon-us-2027" website_url = "https://us.pycon.org/2027/" +total_capacity = 2500 [[conference.sections]] name = "Tutorials" diff --git a/src/django_program/conference/admin.py b/src/django_program/conference/admin.py index 1d1d403..7afec2f 100644 --- a/src/django_program/conference/admin.py +++ b/src/django_program/conference/admin.py @@ -106,7 +106,7 @@ class ConferenceAdmin(admin.ModelAdmin): ( None, { - "fields": ("name", "slug", "venue", "address", "website_url"), + "fields": ("name", "slug", "venue", "address", "website_url", "total_capacity"), }, ), ( diff --git a/src/django_program/conference/management/commands/bootstrap_conference.py b/src/django_program/conference/management/commands/bootstrap_conference.py index 793a2cc..d168000 100644 --- a/src/django_program/conference/management/commands/bootstrap_conference.py +++ b/src/django_program/conference/management/commands/bootstrap_conference.py @@ -41,6 +41,7 @@ "venue": "venue", "website_url": "website_url", "pretalx_event_slug": "pretalx_event_slug", + "total_capacity": "total_capacity", } _SECTION_FIELD_MAP: dict[str, str] = { diff --git a/src/django_program/conference/migrations/0004_add_total_capacity.py b/src/django_program/conference/migrations/0004_add_total_capacity.py new file mode 100644 index 0000000..6d5be36 --- /dev/null +++ b/src/django_program/conference/migrations/0004_add_total_capacity.py @@ -0,0 +1,19 @@ +# Generated by Django 5.2.11 on 2026-02-14 03:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("program_conference", "0003_conference_address"), + ] + + operations = [ + migrations.AddField( + model_name="conference", + name="total_capacity", + field=models.PositiveIntegerField( + default=0, help_text="Maximum total tickets across all types. 0 means unlimited." + ), + ), + ] diff --git a/src/django_program/conference/models.py b/src/django_program/conference/models.py index c37dbe8..a0b60f3 100644 --- a/src/django_program/conference/models.py +++ b/src/django_program/conference/models.py @@ -26,6 +26,11 @@ class Conference(models.Model): stripe_publishable_key = EncryptedCharField(max_length=200, blank=True, null=True, default=None) stripe_webhook_secret = EncryptedCharField(max_length=200, blank=True, null=True, default=None) + total_capacity = models.PositiveIntegerField( + default=0, + help_text="Maximum total tickets across all types. 0 means unlimited.", + ) + is_active = models.BooleanField(default=True) created_at = models.DateTimeField(auto_now_add=True) diff --git a/src/django_program/manage/forms.py b/src/django_program/manage/forms.py index 686ea76..03e601d 100644 --- a/src/django_program/manage/forms.py +++ b/src/django_program/manage/forms.py @@ -80,6 +80,7 @@ class Meta: "address", "website_url", "pretalx_event_slug", + "total_capacity", "is_active", ] widgets = { diff --git a/src/django_program/manage/templates/django_program/manage/conference_edit.html b/src/django_program/manage/templates/django_program/manage/conference_edit.html index ab7b5ec..63ff1ac 100644 --- a/src/django_program/manage/templates/django_program/manage/conference_edit.html +++ b/src/django_program/manage/templates/django_program/manage/conference_edit.html @@ -136,6 +136,18 @@