Skip to content

Commit e6bda15

Browse files
committed
fix create_events action
1 parent 630cc19 commit e6bda15

File tree

3 files changed

+71
-22
lines changed

3 files changed

+71
-22
lines changed

Diff for: backend/skyroom/admin.py

+58-18
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,73 @@
11
from django.contrib import admin
22
from datetime import datetime, timedelta
33

4+
from django.db.models import Max
5+
46
from skyroom.models import *
5-
from core.models import Seminar, Event
7+
from core.models import Seminar, Event, RoundTable
8+
69
# Register your models here.
710
admin.site.register(SkyroomRoom)
811

12+
913
class SkyroomEventAdmin(admin.ModelAdmin):
1014
list_display = ('title', 'room', 'starting_time', 'duration', 'tolerance')
11-
actions = ['create_from_seminars']
15+
actions = ['create_events']
16+
17+
def create_events(self, request, queryset):
18+
from itertools import chain
19+
20+
rooms = list(SkyroomRoom.objects.all())
21+
latest_order = Event.objects.aggregate(Max('order'))['order__max']
1222

13-
def create_from_seminars(self, request, queryset):
14-
room = SkyroomRoom.objects.first()
15-
plan = ParticipationPlan.objects.first()
16-
if room is None:
17-
self.message_user(request, "No Skyroom room found", level='ERROR')
23+
plans = ParticipationPlan.objects.filter(
24+
event__order=latest_order
25+
).order_by('-id')[:3]
26+
27+
if not rooms:
28+
self.message_user(request, "No Skyroom rooms found", level='ERROR')
29+
return
30+
31+
if not plans:
32+
self.message_user(request, "No participation plans found", level='ERROR')
1833
return
19-
event_seminars = Seminar.objects.filter(sub_event__event=Event.objects.last()).order_by('sub_event__date', 'sub_event__starting_time')
20-
for seminar in event_seminars:
21-
seminar_datetime = datetime.combine(seminar.sub_event.date, seminar.sub_event.starting_time)
22-
ending_datetime = datetime.combine(seminar.sub_event.date, seminar.sub_event.ending_time)
34+
35+
event_seminars = Seminar.objects.filter(
36+
sub_event__event=Event.objects.last()
37+
).order_by('sub_event__date', 'sub_event__starting_time')
38+
39+
event_roundTables = RoundTable.objects.filter(
40+
sub_event__event=Event.objects.last()
41+
).order_by('sub_event', 'sub_event__starting_time')
42+
43+
room_count = len(rooms)
44+
45+
combined_events = list(chain(event_seminars, event_roundTables))
46+
combined_events.sort(key=lambda e: (e.sub_event.date, e.sub_event.starting_time))
47+
48+
for index, event in enumerate(combined_events):
49+
seminar_datetime = datetime.combine(event.sub_event.date, event.sub_event.starting_time)
50+
ending_datetime = datetime.combine(event.sub_event.date, event.sub_event.ending_time)
2351
seminar_duration = ending_datetime - seminar_datetime
24-
SkyroomEvent.objects.create(
25-
title=seminar.sub_event.name,
26-
description=seminar.sub_event.description,
52+
53+
room = rooms[index % room_count]
54+
55+
if hasattr(event, 'speaker') and event.speaker:
56+
title = f"{event.speaker.name} | {event.sub_event.name}"
57+
else:
58+
title = f"RoundTable | {event.sub_event.name}"
59+
60+
skyroom_event = SkyroomEvent.objects.create(
61+
title=title,
62+
description=event.sub_event.description,
2763
room=room,
2864
starting_time=seminar_datetime,
29-
duration=seminar_duration,
30-
tolerance=timedelta(minutes=10),
31-
).plans.add(plan)
65+
duration=seminar_duration + timedelta(minutes=30),
66+
tolerance=timedelta(days=7),
67+
)
68+
69+
for plan in plans:
70+
skyroom_event.plans.add(plan)
71+
3272

33-
admin.site.register(SkyroomEvent, SkyroomEventAdmin)
73+
admin.site.register(SkyroomEvent, SkyroomEventAdmin)

Diff for: backend/skyroom/views.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from django.db.models import F
1111
from rest_framework.response import Response
1212

13+
1314
# Create your views here.
1415
class SkyroomEventsView(ListAPIView):
1516
queryset = SkyroomEvent.objects.all()
@@ -35,7 +36,7 @@ class SkyroomEventLinkView(GenericAPIView):
3536
serializer_class = SkyroomEventWithLinkSerializer
3637
permission_classes = [IsAuthenticated]
3738
skyroom = SkyroomAPI()
38-
39+
3940
def get(self, request, *args, **kwargs):
4041
try:
4142
participant = Participant.objects.get(user=self.request.user)
@@ -46,4 +47,4 @@ def get(self, request, *args, **kwargs):
4647
return Response(self.get_serializer({
4748
'id': event.id,
4849
'link': link
49-
}).data)
50+
}).data)

Diff for: frontend/src/app/dashboard/stream/StreamEvent.tsx

+10-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import { attendStream } from '../../../lib/api/dashboard/stream';
99

1010
const formatTime = (time: Date) => {
1111
const options: Intl.DateTimeFormatOptions = {
12+
year: 'numeric',
13+
month: 'short',
14+
day: 'numeric',
1215
hour: 'numeric',
1316
minute: 'numeric',
1417
hour12: true,
@@ -65,7 +68,9 @@ export default function StreamEvent({
6568
</div>
6669
)}
6770
<div className="min-w-0 flex-shrink flex-grow overflow-hidden overflow-ellipsis whitespace-nowrap p-3">
68-
{streamEvent.title}
71+
{streamEvent.title.length > 70
72+
? streamEvent.title.slice(0, 70) + '...'
73+
: streamEvent.title}
6974
</div>
7075
</div>
7176
<div className="flex w-fit flex-shrink-0 flex-grow-0 justify-between">
@@ -74,7 +79,10 @@ export default function StreamEvent({
7479
</Disclosure.Button>
7580
<button
7681
onClick={onAttendClick}
77-
className="ml-4 flex w-28 justify-around rounded-md bg-secondary p-3 text-center text-white transition-colors hover:bg-secondary-400"
82+
disabled={!hasStarted}
83+
className={`ml-4 flex w-28 justify-around rounded-md bg-secondary p-3 text-center text-white transition-colors hover:bg-secondary-400 ${
84+
!hasStarted ? 'opacity-50' : ''
85+
}`}
7886
>
7987
<Image src={play} height={22} width={22} alt="" />
8088
Attend

0 commit comments

Comments
 (0)