Group statistics per user type
This commit is contained in:
@ -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
|
||||||
|
@ -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})"
|
||||||
|
@ -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:
|
||||||
|
@ -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:
|
||||||
|
Reference in New Issue
Block a user