@@ -37,35 +37,36 @@ def eligible_students
37
37
38
38
course = Course . find_by! ( name : "#{ params [ :organization_slug ] } -#{ params [ :course_name ] } " )
39
39
40
- authorize! :read , course
40
+ authorize! :teach , course
41
41
42
- applied_students = UserAppDatum . where ( field_name : 'applies_for_study_right' , value : 't' , namespace : 'ohjelmoinnin-mooc-2019' ) . each { | datum | datum . user_id }
42
+ applied_students = UserAppDatum . where ( field_name : 'applies_for_study_right' , value : 't' , namespace : 'ohjelmoinnin-mooc-2019' ) . pluck ( : user_id)
43
43
44
- authorize! :read , applied_students
44
+ groups = course . exercise_groups [ 0 .. 6 ] + course . exercise_groups [ 8 .. 13 ]
45
45
46
- eligible_student_ids = [ ]
46
+ cbu = course . exercise_group_completion_by_user
47
47
48
- applied_students . map do |user |
49
- drop = false
50
- course . exercise_group_completion_counts_for_user ( user ) . map do |group , info |
51
- if info [ :progress ] < 0.9
52
- drop = true
53
- end
54
- end
55
- eligible_student_ids . push ( user ) unless drop
56
- end
48
+ user_ids = groups . flat_map { |group | ap = cbu [ group . name ] [ :available_points ] ; cbu [ group . name ] [ :points_by_user ] . map { |k , v | { k => ( v . to_f / ap ) } } } . group_by { |o | o . keys . first } . map { |k , v | { k => v . map { |o2 | o2 [ k ] } } } . inject ( :merge ) . select { |_k , v | v . length == groups . length } . select { |_k , v | v . all? { |o2 | o2 >= 0.8995 } } . map { |k , _v | k }
57
49
58
- eligible_students = [ ]
59
-
60
- eligible_student_ids . map do |user_id |
61
- u = User . find ( user_id )
62
- info = {
50
+ eligble_ids = ( user_ids & applied_students )
51
+ eligible_students = User . where ( id : eligble_ids ) . map do |u |
52
+ d = {
63
53
id : u . id ,
64
54
username : u . login ,
65
55
email : u . email ,
66
56
administrator : u . administrator
67
57
}
68
- eligible_students . push ( info )
58
+ if user_id_to_extra_fields
59
+ extra_fields = user_id_to_extra_fields [ u . id ] || [ ]
60
+ d [ :extra_fields ] = extra_fields . map { |o | [ o . field_name , o . value ] } . to_h
61
+ end
62
+ if params [ :user_fields ]
63
+ user_fields = u . user_field_values . map { |o | [ o . field_name , o . value ] } . to_h
64
+ d [ :user_fields ] = user_fields
65
+ d [ :student_number ] = user_fields [ 'organizational_id' ]
66
+ d [ :first_name ] = user_fields [ 'first_name' ]
67
+ d [ :last_name ] = user_fields [ 'last_name' ]
68
+ end
69
+ d
69
70
end
70
71
71
72
render json : {
0 commit comments