2017-01-12 17:27:04 +08:00
#encoding: utf-8
2013-09-12 10:41:15 +08:00
class StudentsForCourse < ActiveRecord :: Base
attr_accessible :course_id , :student_id
2014-06-16 17:14:05 +08:00
belongs_to :course , :class_name = > 'Course' , :foreign_key = > :course_id
2013-09-12 10:41:15 +08:00
belongs_to :student , :class_name = > 'User' , :foreign_key = > :student_id
validates_presence_of :course_id , :student_id
validates_uniqueness_of :student_id , :scope = > :course_id
2016-11-11 13:58:07 +08:00
2017-01-20 10:16:51 +08:00
after_destroy :delete_student_works , :delete_course_homework_statistic
after_create :recovery_student_works , :create_student_works , :create_course_homework_statistic
2016-11-11 13:58:07 +08:00
2016-11-17 10:23:13 +08:00
#退出班级或删除学生时隐藏学生的作品
2016-11-11 13:58:07 +08:00
def delete_student_works
course = self . course
homework_ids = course . homework_commons . blank? ? " (-1) " : " ( " + course . homework_commons . map { | hw | hw . id } . join ( " , " ) + " ) "
student_works = StudentWork . where ( " user_id = #{ self . student_id } && homework_common_id in #{ homework_ids } " )
2016-11-17 10:23:13 +08:00
student_works . update_all ( :is_delete = > 1 )
end
#加入班级时还原作品
def recovery_student_works
course = self . course
homework_ids = course . homework_commons . blank? ? " (-1) " : " ( " + course . homework_commons . map { | hw | hw . id } . join ( " , " ) + " ) "
student_works = StudentWork . where ( " user_id = #{ self . student_id } && homework_common_id in #{ homework_ids } " )
student_works . update_all ( :is_delete = > 0 )
2016-11-11 13:58:07 +08:00
end
2017-01-12 17:27:04 +08:00
#加入班级时创建已发布作业的作品
def create_student_works
course = self . course
course . homework_commons . each do | hw |
if hw . homework_type != 3 && hw . student_works . where ( " user_id = #{ self . student_id } " ) . count == 0
hw . student_works << StudentWork . new ( :user_id = > self . student_id , :name = > hw . name . to_s + " 的作品提交 " , :work_status = > 0 )
end
end
end
2017-01-20 10:16:51 +08:00
#加入班级时创建一条记录
def create_course_homework_statistic
2017-02-10 14:35:43 +08:00
if CourseHomeworkStatistic . where ( :user_id = > self . student_id , :course_id = > self . course_id ) . count == 0
course = self . course
user = self . student
hw_count = course . homework_commons . includes ( :homework_detail_manual ) . where ( " homework_detail_manuals.comment_status > 0 " ) . count
homework_ids = course . homework_commons . empty? ? " (-1) " : " ( " + course . homework_commons . map { | hw | hw . id } . join ( " , " ) + " ) "
student_works = StudentWork . where ( " homework_common_id in #{ homework_ids } and work_status !=0 " )
is_eva_homeworks = course . homework_commons . includes ( :homework_detail_manual ) . where ( " homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 2 " )
is_eva_student_works = StudentWork . where ( :homework_common_id = > is_eva_homeworks . map { | hw | hw . id } )
has_eva_homeworks = course . homework_commons . includes ( :homework_detail_manual ) . where ( " homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 3 " )
has_eva_student_works = StudentWork . where ( :homework_common_id = > has_eva_homeworks . map { | hw | hw . id } )
committed_work_num = user . student_works . where ( " homework_common_id in #{ homework_ids } and work_status != 0 " ) . count
un_commit_work_num = ( hw_count - committed_work_num ) < 0 ? 0 : ( hw_count - committed_work_num )
late_commit_work_num = user . student_works . where ( " homework_common_id in #{ homework_ids } and work_status = 2 " ) . count
absence_evaluation_work_num = user . student_works_evaluation_distributions . where ( :student_work_id = > has_eva_student_works . map ( & :id ) ) . count -
user . student_works_scores . where ( :reviewer_role = > 3 , :student_work_id = > has_eva_student_works . map ( & :id ) ) . group_by ( & :student_work_id ) . count
absence_evaluation_work_num = absence_evaluation_work_num < 0 ? 0 : absence_evaluation_work_num
un_evaluation_work_num = user . student_works_evaluation_distributions . where ( :student_work_id = > is_eva_student_works . map ( & :id ) ) . count -
user . student_works_scores . where ( :reviewer_role = > 3 , :student_work_id = > is_eva_student_works . map ( & :id ) ) . group_by ( & :student_work_id ) . count
un_evaluation_work_num = un_evaluation_work_num < 0 ? 0 : un_evaluation_work_num
appeal_num = user . student_works_scores . where ( :student_work_id = > student_works . map ( & :id ) , :appeal_status = > 3 ) . count
average_score = user . student_works . where ( :id = > student_works . map ( & :id ) ) . select ( " AVG(student_works.work_score) as score " ) . first ? user . student_works . where ( :id = > student_works . map ( & :id ) ) . select ( " AVG(student_works.work_score) as score " ) . first . score : 0
total_score = user . student_works . where ( :id = > student_works . map ( & :id ) ) . select ( " SUM(student_works.work_score) as score " ) . first ? user . student_works . where ( :id = > student_works . map ( & :id ) ) . select ( " SUM(student_works.work_score) as score " ) . first . score : 0
CourseHomeworkStatistic . create ( :course_id = > course . id , :user_id = > user . id , :committed_work_num = > committed_work_num , :un_commit_work_num = > un_commit_work_num ,
:late_commit_work_num = > late_commit_work_num , :absence_evaluation_work_num = > absence_evaluation_work_num , :un_evaluation_work_num = > un_evaluation_work_num ,
:appeal_num = > appeal_num , :average_score = > average_score , :total_score = > total_score )
end
2017-01-20 10:16:51 +08:00
end
def delete_course_homework_statistic
2017-02-10 14:35:43 +08:00
CourseHomeworkStatistic . where ( :user_id = > self . student_id , :course_id = > self . course_id ) . destroy_all
2017-01-20 10:16:51 +08:00
end
2013-09-12 10:41:15 +08:00
end