Group statistics per user type

This commit is contained in:
Maximilian Grundke
2015-11-01 14:47:52 +01:00
parent c41818e324
commit 7baff6ddaf
4 changed files with 29 additions and 19 deletions

View File

@ -11,7 +11,10 @@ class Exercise < ActiveRecord::Base
belongs_to :execution_environment belongs_to :execution_environment
has_many :submissions has_many :submissions
belongs_to :team 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)') } scope :with_submissions, -> { where('id IN (SELECT exercise_id FROM submissions)') }
@ -22,6 +25,7 @@ class Exercise < ActiveRecord::Base
validates :title, presence: true validates :title, presence: true
validates :token, presence: true, uniqueness: true validates :token, presence: true, uniqueness: true
def average_percentage def average_percentage
(average_score / maximum_score * 100).round if average_score (average_score / maximum_score * 100).round if average_score
end end

View File

@ -8,14 +8,16 @@ h1 = @exercise
p == @exercise.average_score ? t('shared.out_of', maximum_value: @exercise.maximum_score, value: @exercise.average_score.round(2)) : empty 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) p = progress_bar(@exercise.average_percentage)
.table-responsive - Hash[:internal_users => t('.internal_users'), :external_users => t('.external_users')].each_pair do |symbol, label|
strong = label
.table-responsive
table.table table.table
thead thead
tr tr
- ['.user', '.score', '.runs', '.worktime'].each do |title| - ['.user', '.score', '.runs', '.worktime'].each do |title|
th.header = t(title) th.header = t(title)
tbody tbody
- @exercise.users.distinct().each do |user| - @exercise.send(symbol).distinct().each do |user|
tr tr
- submissions = @exercise.submissions.where('user_id=?', user.id) - submissions = @exercise.submissions.where('user_id=?', user.id)
td = "#{user.name} (#{user.email})" td = "#{user.name} (#{user.email})"

View File

@ -244,10 +244,12 @@ de:
intermediate_submissions: Intermediäre Abgaben intermediate_submissions: Intermediäre Abgaben
participants: Bearbeitende Nutzer participants: Bearbeitende Nutzer
users: '%{count} verschiedene Nutzer' users: '%{count} verschiedene Nutzer'
user: 'Nutzer' user: Nutzer
score: 'Punktzahl' score: Punktzahl
runs: 'Versuche' runs: Versuche
worktime: 'Arbeitszeit' worktime: Arbeitszeit
internal_users: Interne Nutzer
external_user: Externe Nutzer
submit: submit:
failure: Beim Übermitteln Ihrer Punktzahl ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut. failure: Beim Übermitteln Ihrer Punktzahl ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.
files: files:

View File

@ -248,6 +248,8 @@ en:
score: Score score: Score
runs: Runs runs: Runs
worktime: Worktime worktime: Worktime
internal_users: Internal Users
external_users: External Users
submit: submit:
failure: An error occured while transmitting your score. Please try again later. failure: An error occured while transmitting your score. Please try again later.
files: files: