From 7baff6ddaf568493d6b66ce32ae61827c456e49a Mon Sep 17 00:00:00 2001 From: Maximilian Grundke Date: Sun, 1 Nov 2015 14:47:52 +0100 Subject: [PATCH] Group statistics per user type --- app/models/exercise.rb | 6 ++++- app/views/exercises/statistics.html.slim | 30 +++++++++++++----------- config/locales/de.yml | 10 ++++---- config/locales/en.yml | 2 ++ 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/app/models/exercise.rb b/app/models/exercise.rb index b6ff3bd1..91a9c2b2 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -11,7 +11,10 @@ class Exercise < ActiveRecord::Base belongs_to :execution_environment has_many :submissions belongs_to :team - has_many :users, source_type: ExternalUser, through: :submissions + + has_many :external_users, source: :user, source_type: ExternalUser, through: :submissions + has_many :internal_users, source: :user, source_type: InternalUser, through: :submissions + alias_method :users, :external_users scope :with_submissions, -> { where('id IN (SELECT exercise_id FROM submissions)') } @@ -22,6 +25,7 @@ class Exercise < ActiveRecord::Base validates :title, presence: true validates :token, presence: true, uniqueness: true + def average_percentage (average_score / maximum_score * 100).round if average_score end diff --git a/app/views/exercises/statistics.html.slim b/app/views/exercises/statistics.html.slim index 3af02b10..99e6ead2 100644 --- a/app/views/exercises/statistics.html.slim +++ b/app/views/exercises/statistics.html.slim @@ -8,18 +8,20 @@ h1 = @exercise 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) -.table-responsive - table.table - thead - tr - - ['.user', '.score', '.runs', '.worktime'].each do |title| - th.header = t(title) - tbody - - @exercise.users.distinct().each do |user| +- Hash[:internal_users => t('.internal_users'), :external_users => t('.external_users')].each_pair do |symbol, label| + strong = label + .table-responsive + table.table + thead tr - - submissions = @exercise.submissions.where('user_id=?', user.id) - td = "#{user.name} (#{user.email})" - td = submissions.maximum('score') - td = submissions.count('id') - - seconds = submissions.maximum('created_at') - submissions.minimum('created_at') - td = "#{distance_of_time_in_words(seconds)} (#{seconds})" + - ['.user', '.score', '.runs', '.worktime'].each do |title| + th.header = t(title) + tbody + - @exercise.send(symbol).distinct().each do |user| + tr + - submissions = @exercise.submissions.where('user_id=?', user.id) + td = "#{user.name} (#{user.email})" + td = submissions.maximum('score') + td = submissions.count('id') + - seconds = submissions.maximum('created_at') - submissions.minimum('created_at') + td = "#{distance_of_time_in_words(seconds)} (#{seconds})" diff --git a/config/locales/de.yml b/config/locales/de.yml index 12b3df92..d445aa40 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -244,10 +244,12 @@ de: intermediate_submissions: Intermediäre Abgaben participants: Bearbeitende Nutzer users: '%{count} verschiedene Nutzer' - user: 'Nutzer' - score: 'Punktzahl' - runs: 'Versuche' - worktime: 'Arbeitszeit' + user: Nutzer + score: Punktzahl + runs: Versuche + worktime: Arbeitszeit + internal_users: Interne Nutzer + external_user: Externe Nutzer submit: failure: Beim Übermitteln Ihrer Punktzahl ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut. files: diff --git a/config/locales/en.yml b/config/locales/en.yml index 771d5a00..07d5b6b5 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -248,6 +248,8 @@ en: score: Score runs: Runs worktime: Worktime + internal_users: Internal Users + external_users: External Users submit: failure: An error occured while transmitting your score. Please try again later. files: