Use postgres interval explicitly for all default occasions
This commit is contained in:
@ -215,7 +215,9 @@ class Exercise < ApplicationRecord
|
|||||||
"AND user_id = #{user.id} AND user_type = '#{user.class.name}'"
|
"AND user_id = #{user.id} AND user_type = '#{user.class.name}'"
|
||||||
end
|
end
|
||||||
|
|
||||||
results = self.class.connection.execute(study_group_working_time_query(id, study_group_id, additional_filter)).each do |tuple|
|
results = ActiveRecord::Base.transaction do
|
||||||
|
self.class.connection.execute("SET LOCAL intervalstyle = 'postgres'")
|
||||||
|
self.class.connection.execute(study_group_working_time_query(id, study_group_id, additional_filter)).each do |tuple|
|
||||||
bucket = if maximum_score > 0.0 && tuple['score'] <= maximum_score
|
bucket = if maximum_score > 0.0 && tuple['score'] <= maximum_score
|
||||||
(tuple['score'] / maximum_score * max_bucket).round
|
(tuple['score'] / maximum_score * max_bucket).round
|
||||||
else
|
else
|
||||||
@ -230,6 +232,7 @@ class Exercise < ApplicationRecord
|
|||||||
additional_user_data[bucket][tuple['index']] = {start_time: tuple['start_time'], score: tuple['score']}
|
additional_user_data[bucket][tuple['index']] = {start_time: tuple['start_time'], score: tuple['score']}
|
||||||
additional_user_data[max_bucket + 1][tuple['index']] = {id: tuple['user_id'], type: tuple['user_type'], name: tuple['name']}
|
additional_user_data[max_bucket + 1][tuple['index']] = {id: tuple['user_id'], type: tuple['user_type'], name: tuple['name']}
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if results.ntuples > 0
|
if results.ntuples > 0
|
||||||
first_index = results[0]['index']
|
first_index = results[0]['index']
|
||||||
@ -366,18 +369,24 @@ class Exercise < ApplicationRecord
|
|||||||
|
|
||||||
def retrieve_working_time_statistics
|
def retrieve_working_time_statistics
|
||||||
@working_time_statistics = {}
|
@working_time_statistics = {}
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
self.class.connection.execute("SET LOCAL intervalstyle = 'postgres'")
|
||||||
self.class.connection.execute(user_working_time_query).each do |tuple|
|
self.class.connection.execute(user_working_time_query).each do |tuple|
|
||||||
@working_time_statistics[tuple['user_id'].to_i] = tuple
|
@working_time_statistics[tuple['user_id'].to_i] = tuple
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def average_working_time
|
def average_working_time
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
self.class.connection.execute("SET LOCAL intervalstyle = 'postgres'")
|
||||||
self.class.connection.execute(''"
|
self.class.connection.execute(''"
|
||||||
SELECT avg(working_time) as average_time
|
SELECT avg(working_time) as average_time
|
||||||
FROM
|
FROM
|
||||||
(#{user_working_time_query}) AS baz;
|
(#{user_working_time_query}) AS baz;
|
||||||
"'').first['average_time']
|
"'').first['average_time']
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def average_working_time_for(user_id)
|
def average_working_time_for(user_id)
|
||||||
retrieve_working_time_statistics if @working_time_statistics.nil?
|
retrieve_working_time_statistics if @working_time_statistics.nil?
|
||||||
@ -389,7 +398,6 @@ class Exercise < ApplicationRecord
|
|||||||
begin
|
begin
|
||||||
result = ActiveRecord::Base.transaction do
|
result = ActiveRecord::Base.transaction do
|
||||||
self.class.connection.execute(''"
|
self.class.connection.execute(''"
|
||||||
BEGIN;
|
|
||||||
SET LOCAL intervalstyle = 'iso_8601';
|
SET LOCAL intervalstyle = 'iso_8601';
|
||||||
WITH WORKING_TIME AS
|
WITH WORKING_TIME AS
|
||||||
(SELECT user_id,
|
(SELECT user_id,
|
||||||
@ -531,7 +539,7 @@ class Exercise < ApplicationRecord
|
|||||||
end
|
end
|
||||||
|
|
||||||
def finishers
|
def finishers
|
||||||
ExternalUser.joins(:submissions).where(submissions: {exercise_id: id, score: maximum_score, cause: %w[submit assess]}).distinct
|
ExternalUser.joins(:submissions).where(submissions: {exercise_id: id, score: maximum_score, cause: %w[submit assess remoteSubmit remoteAssess]}).distinct
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_default_values
|
def set_default_values
|
||||||
|
Reference in New Issue
Block a user