From 2541451d4b99cf4566a06be94186c1c8297390b8 Mon Sep 17 00:00:00 2001 From: Maximilian Grundke Date: Tue, 15 May 2018 12:47:54 +0200 Subject: [PATCH] Add finishing rate to exercise statistics --- app/models/exercise.rb | 6 +++++- app/views/exercises/statistics.html.slim | 8 +++++++- config/locales/de.yml | 3 ++- config/locales/en.yml | 1 + 4 files changed, 15 insertions(+), 3 deletions(-) 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!