diff --git a/event_topics/migrations/0002_eventsubtopic.py b/event_topics/migrations/0002_eventsubtopic.py new file mode 100644 index 0000000000..cde07ca4e8 --- /dev/null +++ b/event_topics/migrations/0002_eventsubtopic.py @@ -0,0 +1,23 @@ +# Generated by Django 5.0 on 2024-03-13 19:20 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('event_topics', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='EventSubTopic', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, null=True)), + ('slug', models.CharField(max_length=200, null=True)), + ('event_topic_id', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='event_topics.eventtopic')), + ], + ), + ] diff --git a/event_topics/models.py b/event_topics/models.py index dd828ff748..5b96f045d2 100644 --- a/event_topics/models.py +++ b/event_topics/models.py @@ -11,3 +11,11 @@ class EventTopic(models.Model): def __str__(self): return self.name + +class EventSubTopic(models.Model): + name = models.CharField(max_length=200, null=True) + slug = models.CharField(max_length=200, null=True) + event_topic_id = models.ForeignKey(EventTopic, on_delete=models.CASCADE, null=True) + + def __str__(self): + return self.name diff --git a/events/__init__.py b/events/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/events/admin.py b/events/admin.py new file mode 100644 index 0000000000..2e0f0486a5 --- /dev/null +++ b/events/admin.py @@ -0,0 +1,11 @@ +from django.contrib import admin +from .models import Event, EventType, DiscountCode, Group, Sessions, Microlocations, SessionTypes, Tracks + +admin.site.register(Event) +admin.site.register(EventType) +admin.site.register(DiscountCode) +admin.site.register(Group) +admin.site.register(Sessions) +admin.site.register(Microlocations) +admin.site.register(SessionTypes) +admin.site.register(Tracks) \ No newline at end of file diff --git a/events/apps.py b/events/apps.py new file mode 100644 index 0000000000..20f48f26be --- /dev/null +++ b/events/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class EventsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'events' diff --git a/events/migrations/0001_initial.py b/events/migrations/0001_initial.py new file mode 100644 index 0000000000..d9f9ed5f08 --- /dev/null +++ b/events/migrations/0001_initial.py @@ -0,0 +1,164 @@ +# Generated by Django 5.0 on 2024-03-13 19:20 + +import django.contrib.postgres.fields.citext +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('event_topics', '0002_eventsubtopic'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='EventType', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, null=True)), + ('slug', models.CharField(max_length=200, null=True)), + ('deleted_at', models.DateTimeField(null=True)), + ], + ), + migrations.CreateModel( + name='DiscountCode', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', django.contrib.postgres.fields.citext.CITextField(max_length=200, null=True)), + ('value', models.FloatField(null=True)), + ('type', models.CharField(max_length=200, null=True)), + ('is_active', models.BooleanField(null=True)), + ('tickets_number', models.IntegerField(null=True)), + ('min_quantity', models.IntegerField(null=True)), + ('max_quantity', models.IntegerField(null=True)), + ('valid_from', models.DateTimeField(null=True)), + ('valid_till', models.DateTimeField(null=True)), + ('created_at', models.DateTimeField(null=True)), + ('used_for', models.CharField(max_length=200, null=True)), + ('discount_url', models.CharField(max_length=200, null=True)), + ('deleted_at', models.DateTimeField(null=True)), + ('marketer_id', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Event', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('identifier', models.CharField(max_length=8)), + ('name', models.CharField(max_length=255)), + ('external_event_url', models.URLField(blank=True, null=True)), + ('logo_url', models.URLField(blank=True, null=True)), + ('starts_at', models.DateTimeField()), + ('ends_at', models.DateTimeField()), + ('timezone', models.CharField(default='UTC', max_length=50)), + ('online', models.BooleanField(default=False)), + ('latitude', models.FloatField(blank=True, null=True)), + ('longitude', models.FloatField(blank=True, null=True)), + ('location_name', models.CharField(blank=True, max_length=255, null=True)), + ('searchable_location_name', models.CharField(blank=True, max_length=255, null=True)), + ('public_stream_link', models.CharField(blank=True, max_length=255, null=True)), + ('stream_loop', models.BooleanField(default=False)), + ('stream_autoplay', models.BooleanField(default=False)), + ('is_featured', models.BooleanField(default=False)), + ('is_promoted', models.BooleanField(default=False)), + ('is_demoted', models.BooleanField(default=False)), + ('is_chat_enabled', models.BooleanField(default=False)), + ('is_videoroom_enabled', models.BooleanField(default=False)), + ('is_document_enabled', models.BooleanField(default=False)), + ('document_links', models.JSONField(blank=True, null=True)), + ('chat_room_id', models.CharField(blank=True, max_length=255, null=True)), + ('description', models.TextField(blank=True, null=True)), + ('after_order_message', models.TextField(blank=True, null=True)), + ('original_image_url', models.URLField(blank=True, null=True)), + ('thumbnail_image_url', models.URLField(blank=True, null=True)), + ('large_image_url', models.URLField(blank=True, null=True)), + ('show_remaining_tickets', models.BooleanField(default=False)), + ('icon_image_url', models.URLField(blank=True, null=True)), + ('owner_name', models.CharField(blank=True, max_length=255, null=True)), + ('is_map_shown', models.BooleanField(default=False)), + ('is_oneclick_signup_enabled', models.BooleanField(default=False)), + ('has_owner_info', models.BooleanField(default=False)), + ('owner_description', models.CharField(blank=True, max_length=255, null=True)), + ('is_sessions_speakers_enabled', models.BooleanField(default=False)), + ('is_cfs_enabled', models.BooleanField(default=False)), + ('privacy', models.CharField(default='public', max_length=10)), + ('state', models.CharField(default='draft', max_length=10)), + ('is_announced', models.BooleanField(default=False)), + ('ticket_url', models.CharField(blank=True, max_length=255, null=True)), + ('code_of_conduct', models.CharField(blank=True, max_length=255, null=True)), + ('schedule_published_on', models.DateTimeField(blank=True, null=True)), + ('is_ticketing_enabled', models.BooleanField(default=False)), + ('is_donation_enabled', models.BooleanField(default=False)), + ('is_ticket_form_enabled', models.BooleanField(default=True)), + ('is_badges_enabled', models.BooleanField(default=False)), + ('payment_country', models.CharField(blank=True, max_length=100, null=True)), + ('payment_currency', models.CharField(blank=True, max_length=100, null=True)), + ('paypal_email', models.CharField(blank=True, max_length=255, null=True)), + ('is_tax_enabled', models.BooleanField(default=False)), + ('is_billing_info_mandatory', models.BooleanField(default=False)), + ('can_pay_by_paypal', models.BooleanField(default=False)), + ('can_pay_by_stripe', models.BooleanField(default=False)), + ('can_pay_by_cheque', models.BooleanField(default=False)), + ('can_pay_by_bank', models.BooleanField(default=False)), + ('can_pay_by_invoice', models.BooleanField(default=False)), + ('can_pay_by_onsite', models.BooleanField(default=False)), + ('can_pay_by_omise', models.BooleanField(default=False)), + ('can_pay_by_alipay', models.BooleanField(default=False)), + ('can_pay_by_paytm', models.BooleanField(default=False)), + ('cheque_details', models.CharField(blank=True, max_length=255, null=True)), + ('bank_details', models.CharField(blank=True, max_length=255, null=True)), + ('onsite_details', models.CharField(blank=True, max_length=255, null=True)), + ('invoice_details', models.CharField(blank=True, max_length=255, null=True)), + ('created_at', models.DateTimeField(null=True)), + ('pentabarf_url', models.CharField(blank=True, max_length=255, null=True)), + ('ical_url', models.CharField(blank=True, max_length=255, null=True)), + ('xcal_url', models.CharField(blank=True, max_length=255, null=True)), + ('is_sponsors_enabled', models.BooleanField(default=False)), + ('refund_policy', models.CharField(blank=True, max_length=255, null=True)), + ('is_stripe_linked', models.BooleanField(default=False)), + ('completed_order_sales', models.IntegerField(default=0)), + ('placed_order_sales', models.IntegerField(default=0)), + ('pending_order_sales', models.IntegerField(default=0)), + ('completed_order_tickets', models.IntegerField(default=0)), + ('placed_order_tickets', models.IntegerField(default=0)), + ('pending_order_tickets', models.IntegerField(default=0)), + ('discount_code_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='events.discountcode')), + ('event_sub_topic_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='event_topics.eventsubtopic')), + ('event_topic_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='event_topics.eventtopic')), + ('event_type_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='events.eventtype')), + ], + ), + migrations.AddField( + model_name='discountcode', + name='event_id', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='events.event'), + ), + migrations.CreateModel( + name='Group', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, null=True)), + ('created_at', models.DateTimeField(null=True)), + ('modified_at', models.DateTimeField(null=True)), + ('social_links', models.JSONField(null=True)), + ('about', models.TextField(null=True)), + ('banner_url', models.CharField(max_length=200, null=True)), + ('logo_url', models.CharField(max_length=200, null=True)), + ('deleted_at', models.DateTimeField(null=True)), + ('follower_count', models.IntegerField(default=0)), + ('thumbnail_image_url', models.URLField(blank=True, null=True)), + ('is_promoted', models.BooleanField(default=False)), + ('user_id', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.AddField( + model_name='event', + name='group_id', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='events.group'), + ), + ] diff --git a/events/migrations/0002_alter_discountcode_code.py b/events/migrations/0002_alter_discountcode_code.py new file mode 100644 index 0000000000..a5afa7c9bf --- /dev/null +++ b/events/migrations/0002_alter_discountcode_code.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0 on 2024-03-13 19:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='discountcode', + name='code', + field=models.TextField(max_length=200, null=True), + ), + ] diff --git a/events/migrations/0003_sessions_sessiontypes_tracks_microlocations.py b/events/migrations/0003_sessions_sessiontypes_tracks_microlocations.py new file mode 100644 index 0000000000..a49a7e0837 --- /dev/null +++ b/events/migrations/0003_sessions_sessiontypes_tracks_microlocations.py @@ -0,0 +1,94 @@ +# Generated by Django 5.0 on 2024-03-14 20:22 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0002_alter_discountcode_code'), + ] + + operations = [ + migrations.CreateModel( + name='Sessions', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=2147483647)), + ('subtitle', models.CharField(max_length=2147483647, null=True)), + ('short_abstract', models.TextField(null=True)), + ('long_abstract', models.TextField(null=True)), + ('comments', models.TextField(null=True)), + ('starts_at', models.DateTimeField(null=True)), + ('ends_at', models.DateTimeField(null=True)), + ('language', models.CharField(max_length=2147483647, null=True)), + ('slides_url', models.CharField(max_length=2147483647, null=True)), + ('video_url', models.CharField(max_length=2147483647, null=True)), + ('audio_url', models.CharField(max_length=2147483647, null=True)), + ('signup_url', models.CharField(max_length=2147483647, null=True)), + ('state', models.CharField(max_length=2147483647, null=True)), + ('created_at', models.DateTimeField(null=True)), + ('deleted_at', models.DateTimeField(null=True)), + ('submitted_at', models.DateTimeField(null=True)), + ('submission_modifier', models.CharField(max_length=2147483647, null=True)), + ('is_mail_sent', models.BooleanField(null=True)), + ('level', models.CharField(max_length=2147483647, null=True)), + ('last_modified_at', models.DateTimeField(null=True)), + ('send_email', models.BooleanField(null=True)), + ('is_locked', models.BooleanField(default=False)), + ('complex_field_values', models.JSONField(null=True)), + ('average_rating', models.FloatField(default=0.0, null=True)), + ('rating_count', models.IntegerField(default=0)), + ('facebook', models.CharField(max_length=2147483647, null=True)), + ('github', models.CharField(max_length=2147483647, null=True)), + ('gitlab', models.CharField(max_length=2147483647, null=True)), + ('instagram', models.CharField(max_length=2147483647, null=True)), + ('linkedin', models.CharField(max_length=2147483647, null=True)), + ('twitter', models.CharField(max_length=2147483647, null=True)), + ('website', models.CharField(max_length=2147483647, null=True)), + ('favourite_count', models.IntegerField(default=0)), + ('mastodon', models.CharField(max_length=2147483647, null=True)), + ('slides', models.JSONField(max_length=2147483647, null=True)), + ], + ), + migrations.CreateModel( + name='SessionTypes', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(blank=True, max_length=2147483647, null=True)), + ('length', models.CharField(blank=True, max_length=2147483647, null=True)), + ('deleted_at', models.DateTimeField(blank=True, null=True)), + ('position', models.IntegerField(blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='Tracks', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, null=True)), + ('description', models.TextField(null=True)), + ('color', models.CharField(max_length=200, null=True)), + ('deleted_at', models.DateTimeField(null=True)), + ('position', models.IntegerField(null=True)), + ], + ), + migrations.CreateModel( + name='Microlocations', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=2147483647, null=True)), + ('latitude', models.FloatField(null=True)), + ('longitude', models.FloatField(null=True)), + ('floor', models.IntegerField(null=True)), + ('room', models.CharField(max_length=2147483647, null=True)), + ('deleted_at', models.DateTimeField(null=True)), + ('position', models.IntegerField(null=True)), + ('hidden_in_scheduler', models.BooleanField(default=False)), + ('is_chat_enabled', models.BooleanField(blank=True, null=True)), + ('is_global_event_room', models.BooleanField(blank=True, null=True)), + ('chat_room_id', models.CharField(blank=True, max_length=2147483647, null=True)), + ('event_id', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='events.event')), + ], + ), + ] diff --git a/events/migrations/0004_microlocations_video_stream_id_sessions_creator_id_and_more.py b/events/migrations/0004_microlocations_video_stream_id_sessions_creator_id_and_more.py new file mode 100644 index 0000000000..bd12a3d22b --- /dev/null +++ b/events/migrations/0004_microlocations_video_stream_id_sessions_creator_id_and_more.py @@ -0,0 +1,57 @@ +# Generated by Django 5.0 on 2024-03-14 20:22 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0003_sessions_sessiontypes_tracks_microlocations'), + ('video_channels', '0002_videostreams'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='microlocations', + name='video_stream_id', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='video_channels.videostreams'), + ), + migrations.AddField( + model_name='sessions', + name='creator_id', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='sessions', + name='event_id', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='events.event'), + ), + migrations.AddField( + model_name='sessions', + name='microlocation_id', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='events.microlocations'), + ), + migrations.AddField( + model_name='sessiontypes', + name='event_id', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='events.event'), + ), + migrations.AddField( + model_name='sessions', + name='session_type_id', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='events.sessiontypes'), + ), + migrations.AddField( + model_name='tracks', + name='event_id', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='events.event'), + ), + migrations.AddField( + model_name='sessions', + name='track_id', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='events.tracks'), + ), + ] diff --git a/events/migrations/__init__.py b/events/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/events/models.py b/events/models.py new file mode 100644 index 0000000000..019235c3fc --- /dev/null +++ b/events/models.py @@ -0,0 +1,223 @@ +from django.db import models +from users.models import CustomUser +from event_topics.models import EventTopic, EventSubTopic +from video_channels.models import VideoStreams + +class EventType(models.Model): + name = models.CharField(max_length=200, null=True) + slug = models.CharField(max_length=200, null=True) + deleted_at = models.DateTimeField(null=True) + def __str__(self): + return self.name + +class Group(models.Model): + name = models.CharField(max_length=200, null=True) + user_id = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True) + created_at = models.DateTimeField(null=True) + modified_at = models.DateTimeField(null=True) + social_links = models.JSONField(null=True) + about = models.TextField(null=True) + banner_url = models.CharField(max_length=200, null=True) + logo_url = models.CharField(max_length=200, null=True) + deleted_at = models.DateTimeField(null=True) + follower_count = models.IntegerField(default=0) + thumbnail_image_url = models.URLField(null=True, blank=True) + is_promoted = models.BooleanField(default=False) + + def __str__(self): + return self.name + +class DiscountCode(models.Model): + code = models.TextField(max_length=200, null=True) + value = models.FloatField(null=True) + type = models.CharField(max_length=200, null=True) + is_active = models.BooleanField(null=True) + tickets_number = models.IntegerField(null=True) + min_quantity = models.IntegerField(null=True) + max_quantity = models.IntegerField(null=True) + valid_from = models.DateTimeField(null=True) + valid_till = models.DateTimeField(null=True) + event_id = models.ForeignKey('Event', on_delete=models.CASCADE, null=True) + created_at = models.DateTimeField(null=True) + marketer_id = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True) + used_for = models.CharField(max_length=200, null=True) + discount_url = models.CharField(max_length=200, null=True) + deleted_at = models.DateTimeField(null=True) + + + def __str__(self): + return self.code + +class Event(models.Model): + identifier = models.CharField(max_length=8) + name = models.CharField(max_length=255, null=False) + external_event_url = models.URLField(blank=True, null=True) + logo_url = models.URLField(blank=True, null=True) + starts_at = models.DateTimeField(null=False) + ends_at = models.DateTimeField(null=False) + timezone = models.CharField(max_length=50, null=False, default="UTC") + online = models.BooleanField(default=False) + latitude = models.FloatField(blank=True, null=True) + longitude = models.FloatField(blank=True, null=True) + location_name = models.CharField(max_length=255, blank=True, null=True) + searchable_location_name = models.CharField(max_length=255, blank=True, null=True) + public_stream_link = models.CharField(max_length=255, blank=True, null=True) + stream_loop = models.BooleanField(default=False) + stream_autoplay = models.BooleanField(default=False) + is_featured = models.BooleanField(default=False) + is_promoted = models.BooleanField(default=False) + is_demoted = models.BooleanField(default=False) + is_chat_enabled = models.BooleanField(default=False) + is_videoroom_enabled = models.BooleanField(default=False) + is_document_enabled = models.BooleanField(default=False) + document_links = models.JSONField(blank=True, null=True) + chat_room_id = models.CharField(max_length=255, blank=True, null=True) + description = models.TextField(blank=True, null=True) + after_order_message = models.TextField(blank=True, null=True) + original_image_url = models.URLField(blank=True, null=True) + thumbnail_image_url = models.URLField(blank=True, null=True) + large_image_url = models.URLField(blank=True, null=True) + show_remaining_tickets = models.BooleanField(default=False) + icon_image_url = models.URLField(blank=True, null=True) + owner_name = models.CharField(max_length=255, blank=True, null=True) + is_map_shown = models.BooleanField(default=False) + is_oneclick_signup_enabled = models.BooleanField(default=False) + has_owner_info = models.BooleanField(default=False) + owner_description = models.CharField(max_length=255, blank=True, null=True) + is_sessions_speakers_enabled = models.BooleanField(default=False) + is_cfs_enabled = models.BooleanField(default=False) + privacy = models.CharField(max_length=10, default="public") + state = models.CharField(max_length=10, default="draft") + is_announced = models.BooleanField(default=False) + ticket_url = models.CharField(max_length=255, blank=True, null=True) + code_of_conduct = models.CharField(max_length=255, blank=True, null=True) + schedule_published_on = models.DateTimeField(blank=True, null=True) + is_ticketing_enabled = models.BooleanField(default=False) + is_donation_enabled = models.BooleanField(default=False) + is_ticket_form_enabled = models.BooleanField(default=True) + is_badges_enabled = models.BooleanField(default=False) + payment_country = models.CharField(max_length=100, blank=True, null=True) + payment_currency = models.CharField(max_length=100, blank=True, null=True) + paypal_email = models.CharField(max_length=255, blank=True, null=True) + is_tax_enabled = models.BooleanField(default=False) + is_billing_info_mandatory = models.BooleanField(default=False) + can_pay_by_paypal = models.BooleanField(default=False) + can_pay_by_stripe = models.BooleanField(default=False) + can_pay_by_cheque = models.BooleanField(default=False) + can_pay_by_bank = models.BooleanField(default=False) + can_pay_by_invoice = models.BooleanField(default=False) + can_pay_by_onsite = models.BooleanField(default=False) + can_pay_by_omise = models.BooleanField(default=False) + can_pay_by_alipay = models.BooleanField(default=False) + can_pay_by_paytm = models.BooleanField(default=False) + cheque_details = models.CharField(max_length=255, blank=True, null=True) + bank_details = models.CharField(max_length=255, blank=True, null=True) + onsite_details = models.CharField(max_length=255, blank=True, null=True) + invoice_details = models.CharField(max_length=255, blank=True, null=True) + created_at = models.DateTimeField(null=True) + pentabarf_url = models.CharField(max_length=255, blank=True, null=True) + ical_url = models.CharField(max_length=255, blank=True, null=True) + xcal_url = models.CharField(max_length=255, blank=True, null=True) + is_sponsors_enabled = models.BooleanField(default=False) + refund_policy = models.CharField(max_length=255, blank=True, null=True) + is_stripe_linked = models.BooleanField(default=False) + completed_order_sales = models.IntegerField(default=0) + placed_order_sales = models.IntegerField(default=0) + pending_order_sales = models.IntegerField(default=0) + completed_order_tickets = models.IntegerField(default=0) + placed_order_tickets = models.IntegerField(default=0) + pending_order_tickets = models.IntegerField(default=0) + discount_code_id = models.ForeignKey(DiscountCode, on_delete=models.CASCADE, null=True, blank=True) + event_type_id = models.ForeignKey(EventType, on_delete=models.CASCADE, null=True, blank=True) + event_topic_id = models.ForeignKey(EventTopic, on_delete=models.CASCADE, null=True, blank=True) + event_sub_topic_id = models.ForeignKey(EventSubTopic, on_delete=models.CASCADE, null=True, blank=True) + group_id = models.ForeignKey(Group, on_delete=models.SET_NULL, null=True, blank=True) + + def __str__(self): + return self.name + +class Tracks(models.Model): + name = models.CharField(max_length=200, null=True) + description = models.TextField(null=True) + color = models.CharField(max_length=200, null=True) + event_id = models.IntegerField(null=True) + deleted_at = models.DateTimeField(null=True) + position = models.IntegerField(null=True) + event_id = models.ForeignKey(Event, on_delete=models.CASCADE) + + def __str__(self): + return self.name + +class Microlocations(models.Model): + name = models.CharField(max_length=2147483647, null=True) + latitude = models.FloatField(null=True) + longitude = models.FloatField(null=True) + floor = models.IntegerField(null=True) + room = models.CharField(max_length=2147483647, null=True) + deleted_at = models.DateTimeField(null=True) + position = models.IntegerField(null=True) + hidden_in_scheduler = models.BooleanField(default=False) + is_chat_enabled = models.BooleanField(null=True, blank=True) + is_global_event_room = models.BooleanField(null=True, blank=True) + chat_room_id = models.CharField(max_length=2147483647, null=True, blank=True) + event_id = models.ForeignKey(Event, on_delete=models.CASCADE, null=True) + video_stream_id = models.ForeignKey(VideoStreams, on_delete=models.CASCADE, null=True) + + def __str__(self): + return self.name + +class SessionTypes(models.Model): + name = models.CharField(max_length=2147483647, null=True, blank=True) + length = models.CharField(max_length=2147483647, null=True, blank=True) + deleted_at = models.DateTimeField(null=True, blank=True) + position = models.IntegerField(null=True, blank=True) + event_id = models.ForeignKey(Event, on_delete=models.SET_NULL, null=True, blank=True) + + def __str__(self): + return self.name + +class Sessions(models.Model): + title = models.CharField(max_length=2147483647) + subtitle = models.CharField(max_length=2147483647, null=True) + short_abstract = models.TextField(null=True) + long_abstract = models.TextField(null=True) + comments = models.TextField(null=True) + starts_at = models.DateTimeField(null=True) + ends_at = models.DateTimeField(null=True) + track_id = models.ForeignKey(Tracks, on_delete=models.CASCADE) + language = models.CharField(max_length=2147483647, null=True) + microlocation_id = models.ForeignKey(Microlocations, on_delete=models.CASCADE, null=True) + session_type_id = models.ForeignKey(SessionTypes, on_delete=models.CASCADE, null=True) + slides_url = models.CharField(max_length=2147483647, null=True) + video_url = models.CharField(max_length=2147483647, null=True) + audio_url = models.CharField(max_length=2147483647, null=True) + signup_url = models.CharField(max_length=2147483647, null=True) + event_id = models.ForeignKey(Event, on_delete=models.CASCADE, null=True) + state = models.CharField(max_length=2147483647, null=True) + created_at = models.DateTimeField(null=True) + deleted_at = models.DateTimeField(null=True) + submitted_at = models.DateTimeField(null=True) + submission_modifier = models.CharField(max_length=2147483647, null=True) + is_mail_sent = models.BooleanField(null=True) + level = models.CharField(max_length=2147483647, null=True) + creator_id = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True) + last_modified_at = models.DateTimeField(null=True) + send_email = models.BooleanField(null=True) + is_locked = models.BooleanField(default=False) + complex_field_values = models.JSONField(null=True) + average_rating = models.FloatField(null=True, default=0.0) + rating_count = models.IntegerField(default=0) + facebook = models.CharField(max_length=2147483647, null=True) + github = models.CharField(max_length=2147483647, null=True) + gitlab = models.CharField(max_length=2147483647, null=True) + instagram = models.CharField(max_length=2147483647, null=True) + linkedin = models.CharField(max_length=2147483647, null=True) + twitter = models.CharField(max_length=2147483647, null=True) + website = models.CharField(max_length=2147483647, null=True) + favourite_count = models.IntegerField(default=0) + mastodon = models.CharField(max_length=2147483647, null=True) + slides = models.JSONField(max_length=2147483647, null=True) + + def __str__(self): + return self.name + diff --git a/events/tests.py b/events/tests.py new file mode 100644 index 0000000000..7ce503c2dd --- /dev/null +++ b/events/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/events/views.py b/events/views.py new file mode 100644 index 0000000000..91ea44a218 --- /dev/null +++ b/events/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/open_event_api/settings.py b/open_event_api/settings.py index c164044073..eee93deb09 100644 --- a/open_event_api/settings.py +++ b/open_event_api/settings.py @@ -54,6 +54,7 @@ "event_topics.apps.EventTopicsConfig", "notification_contents.apps.NotificationContentsConfig", "video_channels.apps.VideoChannelsConfig", + "events.apps.EventsConfig", ] MIDDLEWARE = [ diff --git a/video_channels/admin.py b/video_channels/admin.py index 2f8c820229..d5a565ee86 100644 --- a/video_channels/admin.py +++ b/video_channels/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin - -from .models import VideoChannel +from .models import VideoChannel, VideoStreams admin.site.register(VideoChannel) +admin.site.register(VideoStreams) diff --git a/video_channels/migrations/0002_videostreams.py b/video_channels/migrations/0002_videostreams.py new file mode 100644 index 0000000000..97347d1ca5 --- /dev/null +++ b/video_channels/migrations/0002_videostreams.py @@ -0,0 +1,32 @@ +# Generated by Django 5.0 on 2024-03-14 20:22 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0003_sessions_sessiontypes_tracks_microlocations'), + ('video_channels', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='VideoStreams', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=2147483647, null=True)), + ('url', models.CharField(max_length=2147483647, null=True)), + ('password', models.CharField(blank=True, max_length=2147483647, null=True)), + ('additional_information', models.CharField(blank=True, max_length=2147483647, null=True)), + ('extra', models.JSONField(blank=True, null=True)), + ('bg_img_url', models.CharField(blank=True, max_length=2147483647, null=True)), + ('is_chat_enabled', models.BooleanField(blank=True, null=True)), + ('is_global_event_room', models.BooleanField(blank=True, null=True)), + ('chat_room_id', models.CharField(blank=True, max_length=2147483647, null=True)), + ('channel_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='video_channels.videochannel')), + ('event_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='events.event')), + ], + ), + ] diff --git a/video_channels/models.py b/video_channels/models.py index decd46dfd7..c6be9e9884 100644 --- a/video_channels/models.py +++ b/video_channels/models.py @@ -1,6 +1,5 @@ from django.db import models - class VideoChannel(models.Model): name = models.CharField(max_length=200) provider = models.CharField(max_length=200) @@ -15,3 +14,19 @@ class VideoChannel(models.Model): def __str__(self): return f"{self.name} {self.provider} {self.url} {self.api_url} {self.extra} {self.api_key}" + +class VideoStreams(models.Model): + name = models.CharField(max_length=2147483647, null=True) + url = models.CharField(max_length=2147483647, null=True) + password = models.CharField(max_length=2147483647, null=True, blank=True) + additional_information = models.CharField(max_length=2147483647, null=True, blank=True) + extra = models.JSONField(null=True, blank=True) + bg_img_url = models.CharField(max_length=2147483647, null=True, blank=True) + is_chat_enabled = models.BooleanField(null=True, blank=True) + is_global_event_room = models.BooleanField(null=True, blank=True) + chat_room_id = models.CharField(max_length=2147483647, null=True, blank=True) + event_id = models.ForeignKey('events.Event', on_delete=models.SET_NULL, null=True, blank=True) + channel_id = models.ForeignKey(VideoChannel, on_delete=models.SET_NULL, null=True, blank=True) + + def __str__(self): + return self.name