1
1
from django .contrib import admin
2
2
from datetime import datetime , timedelta
3
3
4
+ from django .db .models import Max
5
+
4
6
from skyroom .models import *
5
- from core .models import Seminar , Event
7
+ from core .models import Seminar , Event , RoundTable
8
+
6
9
# Register your models here.
7
10
admin .site .register (SkyroomRoom )
8
11
12
+
9
13
class SkyroomEventAdmin (admin .ModelAdmin ):
10
14
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' ]
12
22
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' )
18
33
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 )
23
51
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 ,
27
63
room = room ,
28
64
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
+
32
72
33
- admin .site .register (SkyroomEvent , SkyroomEventAdmin )
73
+ admin .site .register (SkyroomEvent , SkyroomEventAdmin )
0 commit comments