2015-05-26 18:14:53 +08:00
# encoding: utf-8
2015-09-02 19:41:45 +08:00
include UserScoreHelper
2015-05-21 11:58:34 +08:00
module StudentWorkHelper
2015-09-15 15:18:33 +08:00
#获取当前用户的项目列表
2015-05-21 11:58:34 +08:00
def user_projects_option
2015-09-15 15:18:33 +08:00
projects = User . current . projects . visible
2015-05-21 11:58:34 +08:00
not_have_project = [ ]
2015-09-18 17:34:44 +08:00
not_have_project << " 请选择关联项目 "
2015-05-21 11:58:34 +08:00
not_have_project << 0
type = [ ]
type << not_have_project
projects . each do | project |
2015-09-15 15:18:33 +08:00
if project
2015-05-21 11:58:34 +08:00
option = [ ]
option << project . name
option << project . id
type << option
end
end
type
end
2015-05-26 18:14:53 +08:00
#获取指定用户对某一作业的评分结果
2016-08-30 15:01:41 +08:00
def student_work_score work , user , reviewer_role = 0
if reviewer_role != 0
StudentWorksScore . where ( :user_id = > user . id , :student_work_id = > work . id , :reviewer_role = > reviewer_role ) . last
else
StudentWorksScore . where ( :user_id = > user . id , :student_work_id = > work . id ) . last
end
2015-05-26 18:14:53 +08:00
end
2015-05-27 11:25:32 +08:00
#获取指定评分的角色
def student_work_score_role score
case score . reviewer_role
when 1
role = " 教师 "
when 2
2015-05-27 16:21:59 +08:00
role = " 助教 "
2015-05-27 11:25:32 +08:00
when 3
role = " 学生 "
end
end
2015-05-27 16:21:59 +08:00
def get_role_by_name role
case role
when " Teacher "
result = 1
when " Manager "
result = 1
when " TeachingAsistant "
result = 2
when " Student "
result = 3
end
result
end
2015-05-28 16:10:40 +08:00
2016-07-08 13:17:14 +08:00
def get_status status
str = " "
case status
when 0
str = " 未提交 "
when 1
str = " 已提交 "
when 2
str = " 迟交 "
end
str
end
2016-11-04 11:27:15 +08:00
#获取学生作品的评分记录:同一个教师或教辅只显示最后一次评分
def student_work_score_record work
sql = " SELECT MAX(id) id FROM student_works_scores WHERE (reviewer_role = 2 OR reviewer_role = 1) AND score IS NOT NULL AND student_work_id = #{ work . id } GROUP BY user_id "
tea_ts_ids = StudentWorksScore . find_by_sql sql
tea_ts_ids = tea_ts_ids . empty? ? " (-1) " : " ( " + tea_ts_ids . map { | tea | tea . id } . join ( " , " ) + " ) "
scores = work . student_works_scores . where ( " score IS NULL or reviewer_role = 3 or id in #{ tea_ts_ids } " ) . order ( " updated_at desc " )
return scores
end
2015-05-28 16:10:40 +08:00
#获取赞的总数
def praise_homework_count obj_id
PraiseTread . where ( " praise_tread_object_id = #{ obj_id } AND praise_tread_object_type = 'StudentWork' " ) . count
end
#判断指定用户是不是已经赞过该作业
def is_praise_homework user_id , obj_id
PraiseTread . where ( " user_id = #{ user_id } AND praise_tread_object_id = #{ obj_id } AND praise_tread_object_type = 'StudentWork' " ) . empty?
end
2015-06-18 17:56:28 +08:00
#获取指定学生在指定作业内应匿评的数量
def all_evaluation_count user , homework
StudentWorksEvaluationDistribution . joins ( :student_work ) . where ( " student_works_evaluation_distributions.user_id = #{ user . id } AND student_works.homework_common_id = #{ homework . id } " ) . count
end
#获取指定学生在指定作业内已匿评的数量
def has_evaluation_count user , homework
StudentWorksScore . joins ( :student_work ) . where ( " student_works_scores.user_id = #{ user . id } AND student_works.homework_common_id = #{ homework . id } " ) . count
end
2015-06-19 13:56:55 +08:00
#传入分数,获取对应颜色
def score_color score
if score
color = score > = 90 ? " c_red " : " c_green "
else
color = " c_grey "
end
color
end
2015-07-15 16:01:03 +08:00
#获取分班信息
def course_group_list course
result = [ ]
if course . course_groups && ! course . course_groups . empty?
2015-07-15 17:34:34 +08:00
base = [ ]
base << l ( :label_chose_group )
2016-07-13 16:58:31 +08:00
base << - 1
result << base
base = [ ]
base << l ( :label_no_group )
2015-07-15 17:34:34 +08:00
base << 0
result << base
2015-07-15 16:01:03 +08:00
course . course_groups . each do | group |
option = [ ]
option << group . name
option << group . id
result << option
end
end
result
end
2015-09-17 20:20:20 +08:00
#教辅评分比例下拉框
def ta_proportion_option
type = [ ]
i = 0
while i < = 100
option = [ ]
option << i . to_s + " % "
option << i . to_f / 100
type << option
i += 10
end
type
end
def ta_proportion_option_to num
type = [ ]
i = 0
while i < = num
option = [ ]
option << i . to_s + " % "
option << i . to_f / 100
type << option
i += 10
end
type
end
2015-12-04 16:21:11 +08:00
def revise_attachment_status homework , attach
date = Time . parse ( format_time ( attach . created_on . to_s ) ) . strftime ( " %Y-%m-%d " )
status = " "
2016-03-29 09:24:11 +08:00
if homework . homework_detail_manual && ( ( homework . anonymous_comment == 0 && homework . homework_detail_manual . evaluation_start . to_s < = date ) || ( homework . anonymous_comment == 1 && homework . end_time . to_s < date ) )
2015-12-04 16:21:11 +08:00
status = " 此时其他同学作品已公开 "
else
status = " 此时其他同学作品尚未公开 "
end
return status
end
2016-09-06 15:07:43 +08:00
def group_student_works student_work , homework
pros = student_work . student_work_projects . where ( " is_leader = 0 " )
user_ids = pros . empty? ? " (-1) " : " ( " + pros . map { | stu | stu . user_id } . join ( " , " ) + " ) "
student_works = homework . student_works . where ( " user_id in #{ user_ids } " )
return student_works
end
2016-09-14 17:38:57 +08:00
2016-11-04 16:10:13 +08:00
def add_score_to_member student_work , homework , new_score
2016-09-14 17:38:57 +08:00
student_works = group_student_works student_work , homework
student_works . each do | st_work |
2016-11-04 16:10:13 +08:00
st_work . student_works_scores << StudentWorksScore . create ( :user_id = > new_score . user_id , :score = > new_score . score , :reviewer_role = > new_score . reviewer_role , :comment = > new_score . comment )
if new_score . reviewer_role == 1
st_work . teacher_score = new_score . score
elsif new_score . reviewer_role == 2
ts_score = StudentWorksScore . find_by_sql ( " SELECT AVG(score) AS score FROM (SELECT * FROM (SELECT * FROM student_works_scores WHERE student_work_id = #{ st_work . id } AND reviewer_role = 2 AND score IS NOT NULL ORDER BY created_at DESC) AS t GROUP BY user_id) AS a " )
st_work . teaching_asistant_score = ts_score . first . score . nil? ? nil : ts_score . first . score . try ( :round , 2 ) . to_f
else
st_work . student_score = student_work . student_score
2016-09-14 17:38:57 +08:00
end
2016-11-04 16:10:13 +08:00
st_work . save
2016-09-14 17:38:57 +08:00
end
end
2015-05-21 11:58:34 +08:00
end