Skip to content
Snippets Groups Projects
Commit 71470468 authored by Benjamin Hättasch's avatar Benjamin Hättasch
Browse files

Introduce default slots

Create model
Create migration
Create admin interface
parent 42277fcf
No related branches found
No related tags found
No related merge requests found
......@@ -16,7 +16,7 @@ from simple_history.admin import SimpleHistoryAdmin
from AKModel.availability.forms import AvailabilitiesFormMixin
from AKModel.availability.models import Availability
from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequirement, AK, AKSlot, Room, AKOrgaMessage, \
ConstraintViolation
ConstraintViolation, DefaultSlot
from AKModel.urls import get_admin_urls_event_wizard, get_admin_urls_event
......@@ -329,3 +329,23 @@ class ConstraintViolationAdmin(admin.ModelAdmin):
list_filter = ['event']
readonly_fields = ['timestamp']
form = ConstraintViolationAdminForm
class DefaultSlotAdminForm(forms.ModelForm):
class Meta:
widgets = {
'primary_categories': forms.CheckboxSelectMultiple
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Filter possible values for foreign keys & m2m when event is specified
if hasattr(self.instance, "event") and self.instance.event is not None:
self.fields["primary_categories"].queryset = AKCategory.objects.filter(event=self.instance.event)
@admin.register(DefaultSlot)
class DefaultSlotAdmin(admin.ModelAdmin):
list_display = ['start', 'end', 'event']
list_filter = ['event']
form = DefaultSlotAdminForm
This diff is collapsed.
# Generated by Django 3.2.16 on 2022-10-22 12:18
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('AKModel', '0053_plan_published_at'),
]
operations = [
migrations.CreateModel(
name='DefaultSlot',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('start', models.DateTimeField(help_text='Time and date the slot begins', verbose_name='Slot Begin')),
('end', models.DateTimeField(help_text='Time and date the slot ends', verbose_name='Slot End')),
('event', models.ForeignKey(help_text='Associated event', on_delete=django.db.models.deletion.CASCADE, to='AKModel.event', verbose_name='Event')),
('primary_categories', models.ManyToManyField(blank=True, help_text='Categories that should be assigned to this slot primarily', to='AKModel.AKCategory', verbose_name='Primary categories')),
],
options={
'verbose_name': 'Default Slot',
'verbose_name_plural': 'Default Slots',
'ordering': ['-start'],
},
),
]
......@@ -641,3 +641,30 @@ class ConstraintViolation(models.Model):
if getattr(self, field) != getattr(other, field):
return False
return True
class DefaultSlot(models.Model):
class Meta:
verbose_name = _('Default Slot')
verbose_name_plural = _('Default Slots')
ordering = ['-start']
start = models.DateTimeField(verbose_name=_('Slot Begin'), help_text=_('Time and date the slot begins'))
end = models.DateTimeField(verbose_name=_('Slot End'), help_text=_('Time and date the slot ends'))
event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name=_('Event'),
help_text=_('Associated event'))
primary_categories = models.ManyToManyField(to=AKCategory, verbose_name=_('Primary categories'), blank=True,
help_text=_('Categories that should be assigned to this slot primarily'))
@property
def start_simplified(self):
return self.start.astimezone(self.event.timezone).strftime('%a %H:%M')
@property
def end_simplified(self):
return self.end.astimezone(self.event.timezone).strftime('%a %H:%M')
def __str__(self):
return f"{self.event}: {self.start_simplified} - {self.end_simplified}"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment