Files
infoscreen/server/init_academic_periods.py
olaf 41194000a4 feat: Add academic periods system for educational institutions
- Add AcademicPeriod model with support for schuljahr/semester/trimester
- Extend Event and EventMedia models with optional academic_period_id
- Create Alembic migration (8d1df7199cb7) for academic periods system
- Add init script for Austrian school year defaults (2024/25-2026/27)
- Maintain full backward compatibility for existing events/media
- Update program-info.json to version 2025.1.0-alpha.6

Database changes:
- New academic_periods table with unique name constraint
- Foreign key relationships with proper indexing
- Support for multiple period types with single active period

This lays the foundation for period-based organization of events
and media content, specifically designed for school environments
with future extensibility for universities.
2025-09-20 11:16:56 +00:00

75 lines
2.4 KiB
Python

#!/usr/bin/env python3
"""
Erstellt Standard-Schuljahre für österreichische Schulen
Führe dieses Skript nach der Migration aus, um Standard-Perioden zu erstellen.
"""
from datetime import date
from models.models import AcademicPeriod, AcademicPeriodType
from server.database import Session
import sys
sys.path.append('/workspace')
def create_default_academic_periods():
"""Erstellt Standard-Schuljahre für österreichische Schulen"""
session = Session()
try:
# Prüfe ob bereits Perioden existieren
existing = session.query(AcademicPeriod).first()
if existing:
print("Academic periods already exist. Skipping creation.")
return
# Standard Schuljahre erstellen
periods = [
{
'name': 'Schuljahr 2024/25',
'display_name': 'SJ 24/25',
'start_date': date(2024, 9, 2),
'end_date': date(2025, 7, 4),
'period_type': AcademicPeriodType.schuljahr,
'is_active': True # Aktuelles Schuljahr
},
{
'name': 'Schuljahr 2025/26',
'display_name': 'SJ 25/26',
'start_date': date(2025, 9, 1),
'end_date': date(2026, 7, 3),
'period_type': AcademicPeriodType.schuljahr,
'is_active': False
},
{
'name': 'Schuljahr 2026/27',
'display_name': 'SJ 26/27',
'start_date': date(2026, 9, 7),
'end_date': date(2027, 7, 2),
'period_type': AcademicPeriodType.schuljahr,
'is_active': False
}
]
for period_data in periods:
period = AcademicPeriod(**period_data)
session.add(period)
session.commit()
print(f"Successfully created {len(periods)} academic periods")
# Zeige erstellte Perioden
for period in session.query(AcademicPeriod).all():
status = "AKTIV" if period.is_active else "inaktiv"
print(
f" - {period.name} ({period.start_date} - {period.end_date}) [{status}]")
except Exception as e:
session.rollback()
print(f"Error creating academic periods: {e}")
finally:
session.close()
if __name__ == "__main__":
create_default_academic_periods()