Initial commit
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,160 @@
|
||||
from django.core.management.base import BaseCommand
|
||||
from apps.users.models import User, RegistrationDomainRule, RegistrationRestrictionSetting
|
||||
from apps.events.models import Skill, Event, TaskArea, Shift, ShiftSignup, EventTemplate
|
||||
from apps.branding.models import BrandingSetting
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Populate database with initial demo data including Demo Admin & Demo User"
|
||||
|
||||
def handle(self, *args, **options):
|
||||
# 1. Branding
|
||||
branding = BrandingSetting.get_solo()
|
||||
branding.app_name = "Veranstaltungsschichtplaner (Dev)"
|
||||
branding.custom_banner_text = "💡 DEV INSTANZ: Demo Admin (admin / adminpassword) & Demo User (demouser / demouser123)"
|
||||
branding.save()
|
||||
|
||||
# 2. Skills
|
||||
skill_ersthelfer, _ = Skill.objects.get_or_create(
|
||||
name="Ersthelfer",
|
||||
defaults={'description': 'Gültiger Erste-Hilfe-Schein', 'color': '#ef4444'}
|
||||
)
|
||||
skill_bar, _ = Skill.objects.get_or_create(
|
||||
name="Bar-Erfahrung",
|
||||
defaults={'description': 'Erfahrung an der Zapfanlage', 'color': '#3b82f6'}
|
||||
)
|
||||
skill_fuehrerschein, _ = Skill.objects.get_or_create(
|
||||
name="Führerschein B",
|
||||
defaults={'description': 'PKW / Transporter fahren', 'color': '#10b981'}
|
||||
)
|
||||
|
||||
# 3. Demo Admin User
|
||||
admin_user, admin_created = User.objects.get_or_create(
|
||||
username='admin',
|
||||
defaults={
|
||||
'email': 'admin@demo.local',
|
||||
'display_name': 'Demo Admin',
|
||||
'is_admin_user': True,
|
||||
'is_staff': True,
|
||||
'is_superuser': True
|
||||
}
|
||||
)
|
||||
if admin_created:
|
||||
admin_user.set_password('adminpassword')
|
||||
admin_user.save()
|
||||
self.stdout.write(self.style.SUCCESS("Demo Admin created: admin / adminpassword"))
|
||||
else:
|
||||
admin_user.set_password('adminpassword')
|
||||
admin_user.is_admin_user = True
|
||||
admin_user.is_staff = True
|
||||
admin_user.is_superuser = True
|
||||
admin_user.save()
|
||||
|
||||
# 4. Demo Regular User
|
||||
demo_user, user_created = User.objects.get_or_create(
|
||||
username='demouser',
|
||||
defaults={
|
||||
'email': 'user@demo.local',
|
||||
'display_name': 'Demo User',
|
||||
'is_admin_user': False
|
||||
}
|
||||
)
|
||||
if user_created:
|
||||
demo_user.set_password('demouser123')
|
||||
demo_user.save()
|
||||
demo_user.skills.add(skill_bar, skill_ersthelfer)
|
||||
self.stdout.write(self.style.SUCCESS("Demo User created: demouser / demouser123"))
|
||||
else:
|
||||
demo_user.set_password('demouser123')
|
||||
demo_user.save()
|
||||
demo_user.skills.add(skill_bar, skill_ersthelfer)
|
||||
|
||||
# 5. Sample Event with Task Areas & Shifts
|
||||
if not Event.objects.filter(title="Sommerfest 2026").exists():
|
||||
event = Event.objects.create(
|
||||
title="Sommerfest 2026",
|
||||
description="Großes Vereins-Sommerfest mit Musik, Essen und Kinderprogramm",
|
||||
location="Vereinsgelände, Festwiese",
|
||||
start_date="2026-08-15",
|
||||
end_date="2026-08-16",
|
||||
created_by=admin_user
|
||||
)
|
||||
|
||||
# Task Area: Tresendienst
|
||||
ta_tresen = TaskArea.objects.create(
|
||||
event=event, name="Tresendienst", description="Getränke- & Barverkauf", order=1
|
||||
)
|
||||
s1 = Shift.objects.create(
|
||||
task_area=ta_tresen, title="Nachmittagsschicht", start_time="14:00", end_time="18:00", max_participants=3
|
||||
)
|
||||
s1.required_skills.add(skill_bar)
|
||||
# Demo signup for demo_user
|
||||
ShiftSignup.objects.create(shift=s1, user=demo_user)
|
||||
|
||||
s2 = Shift.objects.create(
|
||||
task_area=ta_tresen, title="Abendschicht", start_time="18:00", end_time="23:00", max_participants=4
|
||||
)
|
||||
|
||||
# Task Area: Essen kochen
|
||||
ta_essen = TaskArea.objects.create(
|
||||
event=event, name="Essen kochen & Stand", description="Grill & Salatausgabe", order=2
|
||||
)
|
||||
Shift.objects.create(
|
||||
task_area=ta_essen, title="Vorbereitung & Grillen", start_time="11:30", end_time="16:00", max_participants=3
|
||||
)
|
||||
Shift.objects.create(
|
||||
task_area=ta_essen, title="Abendschicht Essen", start_time="16:00", end_time="21:00", max_participants=3
|
||||
)
|
||||
|
||||
# Task Area: Aufbau & Aufräumen
|
||||
ta_aufbau = TaskArea.objects.create(
|
||||
event=event, name="Aufbau & Aufräumen", description="Bänke, Pavillons & Technik", order=3
|
||||
)
|
||||
s_aufbau = Shift.objects.create(
|
||||
task_area=ta_aufbau, title="Früher Aufbau", start_time="09:00", end_time="13:00", max_participants=5
|
||||
)
|
||||
s_aufbau.required_skills.add(skill_fuehrerschein)
|
||||
|
||||
Shift.objects.create(
|
||||
task_area=ta_aufbau, title="Nacht-Aufräumen", start_time="23:00", end_time="01:00", max_participants=4
|
||||
)
|
||||
|
||||
self.stdout.write(self.style.SUCCESS("Sample Event 'Sommerfest 2026' created."))
|
||||
|
||||
# 6. Sample Template
|
||||
if not EventTemplate.objects.filter(name="Standard Vereinsfest Template").exists():
|
||||
EventTemplate.objects.create(
|
||||
name="Standard Vereinsfest Template",
|
||||
description="Standard-Struktur mit Tresendienst, Essen kochen sowie Aufbau & Aufräumen",
|
||||
template_data={
|
||||
"task_areas": [
|
||||
{
|
||||
"name": "Tresendienst",
|
||||
"description": "Getränkezapfen und Verkauf",
|
||||
"order": 1,
|
||||
"shifts": [
|
||||
{"title": "Frühschicht", "start_time": "12:00", "end_time": "17:00", "max_participants": 2, "required_skill_names": ["Bar-Erfahrung"]},
|
||||
{"title": "Spätschicht", "start_time": "17:00", "end_time": "22:00", "max_participants": 3}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Essen kochen",
|
||||
"description": "Zubereitung & Verpflegung",
|
||||
"order": 2,
|
||||
"shifts": [
|
||||
{"title": "Mittagessen", "start_time": "11:00", "end_time": "15:00", "max_participants": 3}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Aufbau & Aufräumen",
|
||||
"description": "Aufbau und Abbau der Infrastruktur",
|
||||
"order": 3,
|
||||
"shifts": [
|
||||
{"title": "Gesamtaufbau", "start_time": "08:00", "end_time": "12:00", "max_participants": 4}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
created_by=admin_user
|
||||
)
|
||||
|
||||
self.stdout.write(self.style.SUCCESS("Dev seed data populated with Demo Admin & Demo User!"))
|
||||
Reference in New Issue
Block a user