Add score and working time to feedback page

This commit is contained in:
Sebastian Serth
2019-11-29 15:01:04 +01:00
parent 15c9a0daa7
commit 9dfe6b4529
3 changed files with 16 additions and 2 deletions

View File

@ -105,6 +105,9 @@ class ExercisesController < ApplicationController
def feedback
authorize!
@feedbacks = @exercise.user_exercise_feedbacks.paginate(page: params[:page])
@submissions = @feedbacks.map do |feedback|
feedback.exercise.final_submission(feedback.user)
end
end
def import_proforma_xml

View File

@ -493,12 +493,17 @@ class Exercise < ApplicationRecord
def maximum_score(user = nil)
if user
# FIXME: where(user: user) will not work here!
submissions.where(user: user).where("cause IN ('submit','assess')").where("score IS NOT NULL").order("score DESC").first.score || 0 rescue 0
else
files.teacher_defined_tests.sum(:weight)
end
end
def final_submission(user)
submissions.final.where(user_id: user.id, user_type: user.class.name).order(created_at: :desc).first
end
def has_user_solved(user)
maximum_score(user).to_i == maximum_score.to_i
end

View File

@ -4,12 +4,15 @@ h1 = link_to_if(policy(@exercise).show?, @exercise, exercise_path(@exercise))
.header = t('activerecord.attributes.exercise.description')
.value = render_markdown(@exercise.description)
.header = t('activerecord.models.user_exercise_feedback.other')
span.header.col-sm-3.pl-0 = "#{t('activerecord.attributes.exercise.maximum_score')}"
span.col-sm-9 = @exercise.maximum_score
.header.mt-3 = t('activerecord.models.user_exercise_feedback.other')
- if @feedbacks.nil? or @feedbacks.size == 0
.no-feedback = t('user_exercise_feedback.no_feedback')
ul.list-unstyled
- @feedbacks.each do |feedback|
- @feedbacks.each_with_index do |feedback, index|
li.card.mt-2
.card-header role="tab" id="heading"
div.clearfix.feedback-header
@ -22,6 +25,9 @@ h1 = link_to_if(policy(@exercise).show?, @exercise, exercise_path(@exercise))
.text = feedback.feedback_text
.difficulty = "#{t('user_exercise_feedback.difficulty')} #{feedback.difficulty}" if feedback.difficulty
.worktime = "#{t('user_exercise_feedback.working_time')} #{feedback.user_estimated_worktime}" if feedback.user_estimated_worktime
.card-footer
span.points = "#{t('exercises.statistics.score')}: #{@submissions[index].score}"
span.working_time.pull-right = "#{t('exercises.statistics.worktime')}: #{@exercise.average_working_time_for(feedback.user.id) or 0}"
= render('shared/pagination', collection: @feedbacks)