diff --git a/app/models/exercise.rb b/app/models/exercise.rb index efdb00c7..3ff49ad8 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -352,7 +352,11 @@ class Exercise < ActiveRecord::Base end def has_user_solved(user) - return maximum_score(user).to_i == maximum_score.to_i + maximum_score(user).to_i == maximum_score.to_i + end + + def finishers + ExternalUser.joins(:submissions).where(submissions: {exercise_id: id, score: maximum_score, cause: %w(submit assess)}).distinct end def set_default_values diff --git a/app/views/exercises/statistics.html.slim b/app/views/exercises/statistics.html.slim index d39c514b..6d967885 100644 --- a/app/views/exercises/statistics.html.slim +++ b/app/views/exercises/statistics.html.slim @@ -2,9 +2,15 @@ script src="http://labratrevenge.com/d3-tip/javascripts/d3.tip.v0.6.3.js" h1 = @exercise = row(label: '.participants', value: @exercise.users.distinct.count) + - [:intermediate, :final].each do |scope| = row(label: ".#{scope}_submissions") do = "#{@exercise.submissions.send(scope).count} (#{t('.users', count: @exercise.submissions.send(scope).distinct.count(:user_id))})" + += row(label: '.finishing_rate') do + p == @exercise.finishers.count ? "#{t('shared.out_of', maximum_value: @exercise.users.distinct.count, value: @exercise.finishers.count)} #{t('exercises.statistics.external_users')}" : empty + p = progress_bar((100.0 / @exercise.users.distinct.count * @exercise.finishers.count).round(2)) + = row(label: '.average_score') do p == @exercise.average_score ? t('shared.out_of', maximum_value: @exercise.maximum_score, value: @exercise.average_score.round(2)) : empty p = progress_bar(@exercise.average_percentage) @@ -40,4 +46,4 @@ h1 = @exercise td = link_to_if symbol==:external_users, label, {controller: "exercises", action: "statistics", external_user_id: user.id, id: @exercise.id} td = us['maximum_score'] or 0 td = us['runs'] - td = @exercise.average_working_time_for(user.id) or 0 \ No newline at end of file + td = @exercise.average_working_time_for(user.id) or 0 diff --git a/config/locales/de.yml b/config/locales/de.yml index 23d681b1..9d155d92 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -350,7 +350,8 @@ de: worktime: Arbeitszeit average_worktime: Durchschnittliche Arbeitszeit internal_users: Interne Nutzer - external_user: Externe Nutzer + external_users: Externe Nutzer + finishing_rate: Abschlussrate submit: failure: Beim Übermitteln Ihrer Punktzahl ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut. full_score_redirect_to_rfc: Herzlichen Glückwunsch! Sie haben die maximale Punktzahl für diese Aufgabe an den Kurs übertragen. Ein anderer Teilnehmer hat eine Frage zu der von Ihnen gelösten Aufgabe. Er würde sich sicherlich sehr über ihre Hilfe und Kommentare freuen. diff --git a/config/locales/en.yml b/config/locales/en.yml index ae6d99a2..faa2d0db 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -351,6 +351,7 @@ en: average_worktime: Average Working Time internal_users: Internal Users external_users: External Users + finishing_rate: Finishing Rate submit: failure: An error occured while transmitting your score. Please try again later. full_score_redirect_to_rfc: Congratulations! You achieved and submitted the highest possible score for this exercise. Another participant has a question concerning the exercise you just solved. Your help and comments will be greatly appreciated!