70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
import datetime
|
|
|
|
import structlog
|
|
from django.utils import timezone
|
|
from factory.django import DjangoModelFactory
|
|
|
|
from .models import Event
|
|
from ..assignment.models import Assignment
|
|
from ..course.models import CourseSession
|
|
from ..learnpath.models import LearningContentAttendanceCourse
|
|
|
|
logger = structlog.get_logger(__name__)
|
|
|
|
|
|
def get_date(date_string):
|
|
return datetime.datetime.strptime(date_string, '%b %d %Y', ).astimezone(timezone.get_current_timezone())
|
|
|
|
|
|
class EventFactory(DjangoModelFactory):
|
|
class Meta:
|
|
model = Event
|
|
|
|
title = "Prüfung Versicherungsvermittler/-in"
|
|
end = get_date("Jan 01 2021")
|
|
|
|
|
|
def generate_events(start=timezone.now()):
|
|
for i in range(20):
|
|
EventFactory(title=f"{i}", start=start + datetime.timedelta(days=i),
|
|
end=start + datetime.timedelta(days=i, hours=1))
|
|
|
|
|
|
def hour_rounder(t):
|
|
# Rounds to nearest hour by adding a timedelta hour if minute >= 30
|
|
return (t.replace(second=0, microsecond=0, minute=0, hour=t.hour)
|
|
+ datetime.timedelta(hours=t.minute // 30))
|
|
|
|
|
|
def create_events_for_all_course_sessions():
|
|
all_course_sessions: list[CourseSession] = CourseSession.objects.all()
|
|
|
|
for course_session in all_course_sessions:
|
|
create_events_for_course_session(course_session)
|
|
|
|
|
|
def create_events_for_course_session(course_session: CourseSession):
|
|
course = course_session.course
|
|
attendance_courses = list(LearningContentAttendanceCourse.objects.descendant_of(course.get_learning_path()))
|
|
assignments = list(Assignment.objects.descendant_of(course.get_learning_path()))
|
|
contents = attendance_courses + assignments
|
|
|
|
for content in contents:
|
|
if callable(getattr(content, 'get_frontend_url', None)):
|
|
url = content.get_frontend_url()
|
|
|
|
event, created = Event.objects.get_or_create(course_session=course_session, title=content.title, url=url)
|
|
if created:
|
|
logger.info(f"Created event {event} for course session {course_session} and content {content}")
|
|
|
|
|
|
#
|
|
|
|
def set_default_times_for_events():
|
|
now = hour_rounder(timezone.now())
|
|
|
|
for i, event in enumerate(Event.objects.filter(end__isnull=True)):
|
|
event.start = now + datetime.timedelta(days=i)
|
|
event.end = event.start + datetime.timedelta(hours=3)
|
|
event.save()
|