diff --git a/calendars/forms.py b/calendars/forms.py index af669f9..97915f4 100644 --- a/calendars/forms.py +++ b/calendars/forms.py @@ -12,9 +12,14 @@ class EventForm(forms.ModelForm): class TrainingForm(forms.ModelForm): start_time = forms.DateTimeField(input_formats=['%d.%m.%Y %H:%M', '%Y-%m-%dT%H:%M'], widget=forms.DateTimeInput(format='%d.%m.%Y %H:%M', attrs={'type': 'datetime-local'})) end_time = forms.DateTimeField(input_formats=['%d.%m.%Y %H:%M', '%Y-%m-%dT%H:%M'], widget=forms.DateTimeInput(format='%d.%m.%Y %H:%M', attrs={'type': 'datetime-local'}), required=False) + is_recurring = forms.BooleanField(required=False, widget=forms.CheckboxInput(attrs={'class': 'form-check-input'})) + recurrence_interval = forms.IntegerField(required=False, min_value=1, widget=forms.NumberInput(attrs={'class': 'form-control'}), help_text="Repeat every X days.") + recurrence_end_date = forms.DateField(required=False, widget=forms.DateInput(attrs={'class': 'form-control', 'type': 'date'})) + class Meta: model = Training - fields = ['title', 'description', 'start_time', 'end_time', 'location_address', 'team'] + fields = ['title', 'description', 'start_time', 'end_time', 'location_address', 'team', 'is_recurring', 'recurrence_interval', 'recurrence_end_date'] + class GameForm(forms.ModelForm): start_time = forms.DateTimeField(input_formats=['%d.%m.%Y %H:%M', '%Y-%m-%dT%H:%M'], widget=forms.DateTimeInput(format='%d.%m.%Y %H:%M', attrs={'type': 'datetime-local'})) diff --git a/calendars/migrations/0006_event_is_recurring_event_parent_event_and_more.py b/calendars/migrations/0006_event_is_recurring_event_parent_event_and_more.py new file mode 100644 index 0000000..481abe9 --- /dev/null +++ b/calendars/migrations/0006_event_is_recurring_event_parent_event_and_more.py @@ -0,0 +1,34 @@ +# Generated by Django 5.2.6 on 2025-11-22 09:00 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('calendars', '0005_game_number_of_innings_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='event', + name='is_recurring', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='event', + name='parent_event', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='child_events', to='calendars.event'), + ), + migrations.AddField( + model_name='event', + name='recurrence_end_date', + field=models.DateField(blank=True, null=True), + ), + migrations.AddField( + model_name='event', + name='recurrence_interval', + field=models.PositiveIntegerField(blank=True, help_text='In days', null=True), + ), + ] diff --git a/calendars/models.py b/calendars/models.py index 5ce1ae0..23c4724 100644 --- a/calendars/models.py +++ b/calendars/models.py @@ -10,6 +10,12 @@ class Event(models.Model): location_address = models.CharField(max_length=255) maps_shortlink = models.URLField(blank=True, editable=False) team = models.ForeignKey('clubs.Team', on_delete=models.CASCADE, related_name='events') + + # Fields for recurring events + is_recurring = models.BooleanField(default=False) + recurrence_interval = models.PositiveIntegerField(null=True, blank=True, help_text="In days") + recurrence_end_date = models.DateField(null=True, blank=True) + parent_event = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, related_name='child_events') def save(self, *args, **kwargs): if self.location_address and not self.maps_shortlink: diff --git a/calendars/templates/calendars/event_confirm_delete.html b/calendars/templates/calendars/event_confirm_delete.html index 87be18f..e0c74c9 100644 --- a/calendars/templates/calendars/event_confirm_delete.html +++ b/calendars/templates/calendars/event_confirm_delete.html @@ -8,9 +8,28 @@
Are you sure you want to delete "{{ object.title }}"?
+Are you sure you want to delete the event: "{{ object.title }}" on {{ object.start_time|date:"d.m.Y" }}?
diff --git a/calendars/templates/calendars/event_form.html b/calendars/templates/calendars/event_form.html index 9ca22e2..a64c604 100644 --- a/calendars/templates/calendars/event_form.html +++ b/calendars/templates/calendars/event_form.html @@ -1,40 +1,83 @@ {% extends "base.html" %} -{% load l10n %} {% block content %}