@@ -376,7 +376,16 @@ def get_random_items(self, count):
376376 selected_prizes = [system_random .choice (self .prizes ) for _ in range (count )]
377377
378378 if not self .enable_student_assignment or not self .current_class_name :
379- return selected_prizes
379+ prizes_with_meta = []
380+ for prize in selected_prizes :
381+ prize_copy = dict (prize )
382+ prize_name = prize_copy .get ("name" , "" )
383+ prize_copy ["ipc_lottery_name" ] = str (prize_name or "" )
384+ prize_copy ["ipc_group_name" ] = ""
385+ prize_copy ["ipc_student_name" ] = ""
386+ prize_copy ["ipc_display_text" ] = str (prize_name or "" )
387+ prizes_with_meta .append (prize_copy )
388+ return prizes_with_meta
380389
381390 candidates = RollCallUtils ._get_filtered_candidates (
382391 self .current_class_name ,
@@ -400,6 +409,7 @@ def get_random_items(self, count):
400409 for prize in selected_prizes :
401410 prize_copy = dict (prize )
402411 prize_name = prize_copy .get ("name" , "" )
412+ prize_copy ["ipc_lottery_name" ] = str (prize_name or "" )
403413
404414 group_name = ""
405415 student_name = ""
@@ -422,10 +432,13 @@ def get_random_items(self, count):
422432 else :
423433 student_name = system_random .choice (candidates ).get ("name" , "" )
424434
435+ prize_copy ["ipc_group_name" ] = str (group_name or "" )
436+ prize_copy ["ipc_student_name" ] = str (student_name or "" )
425437 if group_name or student_name :
426438 prize_copy ["name" ] = self ._format_prize_student_text (
427439 prize_name , group_name , student_name , show_random
428440 )
441+ prize_copy ["ipc_display_text" ] = str (prize_copy .get ("name" , "" ) or "" )
429442
430443 prizes_with_students .append (prize_copy )
431444
@@ -502,6 +515,7 @@ def draw_final_items(self, count):
502515 except Exception :
503516 show_random = 0
504517
518+ include_group = show_random in (0 , 1 , 2 , 5 , 6 , 7 , 8 , 9 )
505519 from app .common .data .list import get_group_members
506520
507521 for idx , prize in enumerate (selected_prizes_dict ):
@@ -522,6 +536,9 @@ def draw_final_items(self, count):
522536 )
523537
524538 display_name = prize_name
539+ ipc_group_name = ""
540+ ipc_student_name = ""
541+ ipc_display_text = str (prize_name or "" )
525542 if student_tuple and len (student_tuple ) >= 2 and student_tuple [1 ]:
526543 group_name = ""
527544 student_name = ""
@@ -545,18 +562,29 @@ def draw_final_items(self, count):
545562 else :
546563 student_name = str (student_tuple [1 ])
547564
565+ ipc_group_name = str (group_name or "" )
566+ ipc_student_name = str (student_name or "" )
548567 display_name = self ._format_prize_student_text (
549568 prize_name , group_name , student_name , show_random
550569 )
570+ ipc_display_text = str (display_name or "" )
551571
552572 selected_prizes_with_students .append ((prize_id , display_name , prize_exist ))
553573
554574 prize_copy = dict (prize )
575+ prize_copy ["ipc_lottery_name" ] = str (prize_name or "" )
576+ prize_copy ["ipc_group_name" ] = ipc_group_name if include_group else ""
577+ prize_copy ["ipc_student_name" ] = ipc_student_name
578+ prize_copy ["ipc_display_text" ] = ipc_display_text
555579 if isinstance (student_dict , dict ):
556580 prize_copy ["student" ] = student_dict
557581 prize_copy ["student_id" ] = student_dict .get ("id" , "" )
558582 prize_copy ["student_name" ] = student_dict .get ("name" , "" )
559583 prize_copy ["student_exist" ] = student_dict .get ("exist" , True )
584+ if include_group and not prize_copy ["ipc_group_name" ]:
585+ prize_copy ["ipc_group_name" ] = str (
586+ student_dict .get ("group" , "" ) or ""
587+ )
560588 updated_prizes_dict .append (prize_copy )
561589
562590 result ["selected_prizes" ] = selected_prizes_with_students
@@ -937,11 +965,65 @@ def stop_animation(widget):
937965
938966 settings = widget .manager .get_notification_settings (refresh = True )
939967 if settings is not None :
968+ settings_for_notify = (
969+ dict (settings ) if isinstance (settings , dict ) else settings
970+ )
971+ show_random = readme_settings_async ("lottery_settings" , "show_random" )
972+ try :
973+ show_random = int (show_random or 0 )
974+ except Exception :
975+ show_random = 0
976+ include_group = show_random in (0 , 1 , 2 , 5 , 6 , 7 , 8 , 9 )
977+ ipc_selected_students = []
978+ for prize in widget .final_selected_students_dict or []:
979+ if not isinstance (prize , dict ):
980+ continue
981+ student = prize .get ("student" )
982+ if not isinstance (student , dict ):
983+ student = None
984+ try :
985+ student_id = int (prize .get ("student_id" , 0 ) or 0 )
986+ except Exception :
987+ student_id = 0
988+ if not student_id and student is not None :
989+ try :
990+ student_id = int (student .get ("id" , 0 ) or 0 )
991+ except Exception :
992+ student_id = 0
993+ student_name = str (
994+ prize .get ("ipc_student_name" , "" )
995+ or prize .get ("student_name" , "" )
996+ or ""
997+ )
998+ display_text = str (
999+ prize .get ("ipc_display_text" , "" ) or prize .get ("name" , "" ) or ""
1000+ )
1001+ group_name = str (prize .get ("ipc_group_name" , "" ) or "" )
1002+ if not include_group :
1003+ group_name = ""
1004+ lottery_name = str (
1005+ prize .get ("ipc_lottery_name" , "" ) or prize .get ("name" , "" ) or ""
1006+ )
1007+ exists = bool (prize .get ("student_exist" , prize .get ("exist" , True )))
1008+ ipc_selected_students .append (
1009+ {
1010+ "student_id" : student_id ,
1011+ "student_name" : student_name ,
1012+ "display_text" : display_text ,
1013+ "exists" : exists ,
1014+ "group_name" : group_name ,
1015+ "lottery_name" : lottery_name ,
1016+ }
1017+ )
1018+
1019+ if ipc_selected_students and isinstance (settings_for_notify , dict ):
1020+ settings_for_notify ["ipc_selected_students" ] = ipc_selected_students
1021+
9401022 ResultDisplayUtils .show_notification_if_enabled (
9411023 widget .final_pool_name ,
9421024 widget .final_selected_students ,
9431025 actual_draw_count ,
944- settings ,
1026+ settings_for_notify ,
9451027 settings_group = "lottery_notification_settings" ,
9461028 )
9471029
@@ -991,13 +1073,32 @@ def draw_random(widget):
9911073 display_count = min (display_count , remaining_count )
9921074
9931075 prizes = widget .manager .get_random_items (display_count )
1076+ ipc_selected_students = []
1077+ for p in prizes or []:
1078+ if not isinstance (p , dict ):
1079+ continue
1080+ ipc_selected_students .append (
1081+ {
1082+ "student_id" : 0 ,
1083+ "student_name" : str (p .get ("ipc_student_name" , "" ) or "" ),
1084+ "display_text" : str (
1085+ p .get ("ipc_display_text" , p .get ("name" , "" )) or ""
1086+ ),
1087+ "exists" : bool (p .get ("exist" , True )),
1088+ "group_name" : str (p .get ("ipc_group_name" , "" ) or "" ),
1089+ "lottery_name" : str (
1090+ p .get ("ipc_lottery_name" , p .get ("name" , "" )) or ""
1091+ ),
1092+ }
1093+ )
9941094 selected_prizes = [(p ["id" ], p ["name" ], p .get ("exist" , True )) for p in prizes ]
9951095
9961096 display_result_animated (
9971097 widget ,
9981098 selected_prizes ,
9991099 widget .manager .current_pool_name ,
10001100 draw_count = display_count ,
1101+ ipc_selected_students = ipc_selected_students ,
10011102 )
10021103
10031104
@@ -1034,7 +1135,9 @@ def display_result(widget, selected_students, pool_name, draw_count=None):
10341135 ResultDisplayUtils .display_results_in_grid (widget .result_grid , student_labels )
10351136
10361137
1037- def display_result_animated (widget , selected_students , pool_name , draw_count = None ):
1138+ def display_result_animated (
1139+ widget , selected_students , pool_name , draw_count = None , ipc_selected_students = None
1140+ ):
10381141 render_settings = widget .manager .get_render_settings (refresh = False )
10391142 if draw_count is None :
10401143 draw_count = widget .current_count
@@ -1069,11 +1172,18 @@ def display_result_animated(widget, selected_students, pool_name, draw_count=Non
10691172
10701173 settings = widget .manager .get_notification_settings (refresh = False )
10711174 if settings is not None :
1175+ settings_for_notify = dict (settings ) if isinstance (settings , dict ) else settings
1176+ if (
1177+ ipc_selected_students
1178+ and isinstance (settings_for_notify , dict )
1179+ and isinstance (ipc_selected_students , list )
1180+ ):
1181+ settings_for_notify ["ipc_selected_students" ] = ipc_selected_students
10721182 ResultDisplayUtils .show_notification_if_enabled (
10731183 pool_name ,
10741184 selected_students ,
10751185 draw_count ,
1076- settings ,
1186+ settings_for_notify ,
10771187 settings_group = "lottery_notification_settings" ,
10781188 is_animating = True ,
10791189 )
0 commit comments