From b41a858762bfa9bfad340e9083f1f28df9804eef Mon Sep 17 00:00:00 2001 From: Thomas Hille Date: Mon, 27 Feb 2017 15:31:11 +0100 Subject: [PATCH] changed way working times are returned. builtin protection if exercise is new --- app/controllers/exercises_controller.rb | 4 ++-- app/models/exercise.rb | 13 +++++++++---- app/models/proxy_exercise.rb | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index f27324ad..c2d50125 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -167,8 +167,8 @@ class ExercisesController < ApplicationController end def working_times - working_time_accumulated = Time.parse(@exercise.average_working_time_for_only(current_user.id) || "00:00:00").seconds_since_midnight - working_time_avg = Time.parse(@exercise.average_working_time || "00:00:00").seconds_since_midnight + working_time_accumulated = @exercise.accumulated_working_time_for_only(current_user.id) + working_time_avg = @exercise.get_quantiles([0.75]).first render(json: {working_time_avg: working_time_avg, working_time_accumulated: working_time_accumulated}) end diff --git a/app/models/exercise.rb b/app/models/exercise.rb index ad3baeca..3419d9d8 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -96,7 +96,12 @@ class Exercise < ActiveRecord::Base GROUP BY user_id ) AS foo """) - quantiles.each_with_index.map{|q,i| Time.parse(result[i]["unnest"]).seconds_since_midnight} + if result.count > 0 + quantiles.each_with_index.map{|q,i| Time.parse(result[i]["unnest"]).seconds_since_midnight} + else + quantiles.map{|q| 0} + end + end def retrieve_working_time_statistics @@ -121,8 +126,8 @@ class Exercise < ActiveRecord::Base @working_time_statistics[user_id]["working_time"] end - def average_working_time_for_only(user_id) - self.class.connection.execute(""" + def accumulated_working_time_for_only(user_id) + Time.parse(self.class.connection.execute(""" SELECT sum(working_time_new) AS working_time FROM (SELECT CASE WHEN working_time >= '0:30:00' THEN '0' ELSE working_time END AS working_time_new @@ -132,7 +137,7 @@ class Exercise < ActiveRecord::Base ORDER BY created_at)) AS working_time FROM submissions WHERE exercise_id=#{id} and user_id=#{user_id} and user_type='ExternalUser') AS foo) AS bar - """).first["working_time"] + """).first["working_time"] || "00:00:00").seconds_since_midnight end def duplicate(attributes = {}) diff --git a/app/models/proxy_exercise.rb b/app/models/proxy_exercise.rb index 6f177778..fe81f447 100644 --- a/app/models/proxy_exercise.rb +++ b/app/models/proxy_exercise.rb @@ -144,7 +144,7 @@ class ProxyExercise < ActiveRecord::Base return 0.0 end points_ratio_index = ((scoring_matrix.size - 1) * points_ratio).to_i - working_time_user = Time.parse(ex.average_working_time_for_only(user.id) || "00:00:00").seconds_since_midnight + working_time_user = ex.accumulated_working_time_for_only(user.id) quantiles_working_time = ex.get_quantiles(scoring_matrix_quantiles) quantile_index = quantiles_working_time.size quantiles_working_time.each_with_index do |quantile_time, i|