55 - append_javascript_pack_tag(' d3-tip' )
66h1 = @exercise
77
8- = row(label: ' .participants' , value: @exercise .contributors.size)
8+ - statistic_base = policy_scope(Submission ).where(exercise: @exercise ).unscope(where: :cause )
9+ - participants = statistic_base.group(:contributor_id , :contributor_type ).count.size
10+ - finishers_count = @exercise .finishers_count(statistic_base)
11+ - average_score = @exercise .average_score(statistic_base)
12+ - average_percentage = @exercise .average_percentage(statistic_base)
13+
14+ = row(label: ' .participants' , value: participants)
915
1016- %i[intermediate final] .each do |scope |
1117 / i18n-tasks-use t('.intermediate_submissions') t('.final_submissions')
1218 = row(label: " .#{ scope } _submissions" ) do
1319 / TODO: Refactor next line
14- = " #{ @exercise .submissions. send(scope).count} (#{ t(' .users_and_programming_groups' , count: Submission .from(@exercise .submissions .send(scope).group(:contributor_id , :contributor_type ).select (:contributor_id , :contributor_type )).count) } )"
20+ = " #{ statistic_base. send(scope).count} (#{ t(' .users_and_programming_groups' , count: Submission .from(statistic_base .send(scope).group(:contributor_id , :contributor_type ).select (:contributor_id , :contributor_type )).count) } )"
1521
1622= row(label: ' .finishing_rate' ) do
1723 p
18- - if @exercise .finishers_count
19- span .number
20- = @exercise .finishers_count
21- =<> t(' shared.out_of' )
22- span .number
23- = @exercise .contributors.size
24- =< t(' exercises.statistics.external_users' )
24+ - if finishers_count
25+ = t(' .users_and_programming_groups' , count: " #{ finishers_count } #{ t(' shared.out_of' ) } #{ participants } " )
2526 - else
2627 = empty
27- - finishers_count = @exercise .contributors.size
28- - finishers_percentage = finishers_count.zero? ? 0 : (100.0 / finishers_count * @exercise .finishers_count).round(2 )
28+ - finishers_percentage = participants.zero? ? 0 : (100.0 / participants * finishers_count).round(2 )
2929 p = progress_bar(finishers_percentage)
3030
3131= row(label: ' .average_score' ) do
3232 p
33- - if @exercise .average_score
34- span .number
35- = @exercise .average_score.round(2 )
33+ - if average_score
34+ = average_score.round(2 )
3635 =<> t(' shared.out_of' )
37- span .number
38- = @exercise .maximum_score
36+ = format (' %.1f' , @exercise .maximum_score)
3937 - else
4038 = empty
41- p = progress_bar(@exercise . average_percentage)
39+ p = progress_bar(average_percentage)
4240
4341- if policy(@exercise ).detailed_statistics?
4442 = row(label: ' .average_worktime' ) do
4543 p = @exercise .average_working_time
4644
47- - {internal_users: t(' .internal_users' ), external_users: t(' .external_users' ), programming_groups: t(' .programming_groups' )}.each_pair do |symbol , label |
48- - submissions = policy_scope(Submission ).where(contributor: @exercise .send(symbol), exercise: @exercise )
49- - if submissions.any?
50- strong = label
51- - if symbol == :external_users
45+ - contributor_statistics.each_pair do |user_type , user_with_submission_stats |
46+ - if user_with_submission_stats.any?
47+ h5 = t(" .#{ user_type.model_name.collection } " )
48+ - if user_type == ExternalUser
5249 - working_time_array = []
53- - @exercise .send(symbol).distinct.each do |user |
54- - working_time = @exercise .average_working_time_for(user ) || 0
50+ - user_with_submission_stats.each_key do |contributor |
51+ - working_time = @exercise .average_working_time_for(contributor ) || 0
5552 - working_time_array.push working_time
5653 hr
5754 .d-none #data data-working-time =ActiveSupport ::JSON .encode(working_time_array)
@@ -60,9 +57,8 @@ h1 = @exercise
6057 hr
6158 #chart_2
6259 hr
63- - contributors = symbol.to_s.classify.constantize.where(id: submissions.joins(symbol).group(:contributor_id ).select (:contributor_id ).distinct)
6460 .table-responsive .mb-4
65- table .table .table-striped class =(contributors .present? ? ' sortable' : ' ' )
61+ table .table .table-striped class =(user_with_submission_stats .present? ? ' sortable' : ' ' )
6662 thead
6763 tr
6864 th .header = t(' .user' )
@@ -71,12 +67,10 @@ h1 = @exercise
7167 th .header = t(' .runs' ) if policy(@exercise ).detailed_statistics?
7268 th .header = t(' .worktime' ) if policy(@exercise ).detailed_statistics?
7369 tbody
74- - contributors.each do |contributor |
75- - us = contributor_statistics[contributor.class .name][contributor.id] || {' maximum_score' => nil , ' runs' => nil }
76- - label = contributor.displayname.to_s
70+ - user_with_submission_stats.each do |contributor , submission_stat |
7771 tr
78- td = link_to_if symbol == :external_users && policy(contributor).statistics?, label, { controller: ' exercises ' , action: ' external_user_statistics ' , external_user_id: contributor.id, id: @exercise .id}
79- td = us [' maximum_score' ] || 0
72+ td = link_to_if user_type == ExternalUser && policy(contributor).statistics?, contributor.displayname, statistics_external_user_exercise_path( contributor, @exercise )
73+ td = submission_stat [' maximum_score' ] || ' 0.0 '
8074 td .align-middle
8175 - latest_user_submission = @exercise .final_submission(contributor)
8276 - if latest_user_submission.present?
@@ -86,5 +80,5 @@ h1 = @exercise
8680 .deadline-result .unknown-result
8781 - elsif latest_user_submission.after_late_deadline?
8882 .deadline-result .negative-result
89- td = us [' runs' ] if policy(@exercise ).detailed_statistics?
90- td = @exercise .average_working_time_for(contributor) || 0 if policy(@exercise ).detailed_statistics?
83+ td = submission_stat [' runs' ] if policy(@exercise ).detailed_statistics?
84+ td = @exercise .average_working_time_for(contributor) || ' 00:00:00 ' if policy(@exercise ).detailed_statistics?
0 commit comments