@ -9,7 +9,7 @@ class Weapps::AttendancesController < ApplicationController
def create
ActiveRecord :: Base . transaction do
attendance = @course . course_attendances . create! ( create_params . merge ( user_id : current_user . id ) )
unless params [ :group_ids ] . blank?
unless params [ :group_ids ] . blank? || @course . course_groups . where ( id : params [ :group_ids ] ) . count == @course . course_groups . count
group_ids = @course . charge_group_ids ( current_user ) & params [ :group_ids ] . map ( & :to_i )
group_ids . each do | group_id |
@course . course_attendance_groups . create! ( course_group_id : group_id , course_attendance : attendance )
@ -17,7 +17,7 @@ class Weapps::AttendancesController < ApplicationController
CreateStudentAttendanceRecordJob . perform_now ( attendance . id , group_ids )
else
@course . course_attendance_groups . create! ( course_group_id : 0 , course_attendance : attendance )
CreateStudentAttendanceRecordJob . perform_ later ( attendance . id , [ 0 ] )
CreateStudentAttendanceRecordJob . perform_ now ( attendance . id , [ 0 ] )
end
render_ok ( { attendance_id : attendance . id } )
end
@ -44,35 +44,41 @@ class Weapps::AttendancesController < ApplicationController
def student_attendances
# tip_exception("学生身份的签到列表") if @user_course_identity != Course::STUDENT
member = @course . students . find_by ( user_id : current_user . id )
current_date = Date . current
current_end_time = Time . current . strftime ( " %H:%M:%S " )
# 先算出该学生所在分班的签到id
# 分班id为0 表示签到不限制分班
group_ids = [ member & . course_group_id . to_i , 0 ]
all_attendance_ids = @course . course_attendance_groups . where ( course_group_id : group_ids ) . pluck ( :course_attendance_id )
@history_attendances = @course . course_attendances . where ( id : all_attendance_ids . uniq ) .
where ( " attendance_date < ' #{ current_date } ' or (attendance_date = ' #{ current_date } ' and end_time < ' #{ current_end_time } ') " ) . order ( " id desc " )
@current_attendance = @course . course_attendances . where ( id : all_attendance_ids . uniq ) .
where ( " attendance_date = ' #{ current_date } ' and start_time <= ' #{ current_end_time } ' and end_time > ' #{ current_end_time } ' " )
@history_count = @history_attendances . size
student_attendance_ids = @history_attendances . pluck ( :id )
student_attendance_ids += @current_attendance . present? ? @current_attendance . pluck ( :id ) : [ ]
if member . present?
current_date = Date . current
current_end_time = Time . current . strftime ( " %H:%M:%S " )
# 先算出该学生所在分班的签到id
# 分班id为0 表示签到不限制分班
group_ids = [ member & . course_group_id . to_i , 0 ]
all_attendance_ids = @course . course_attendance_groups . where ( course_group_id : group_ids ) . pluck ( :course_attendance_id )
# 学生的历史签到只统计加入课堂后创建的签到
history_attendance_ids = member . course_member_attendances . where ( course_id : @course . id ) . pluck ( :course_attendance_id )
@history_attendances = @course . course_attendances . where ( id : history_attendance_ids . uniq ) .
where ( " attendance_date < ' #{ current_date } ' or (attendance_date = ' #{ current_date } ' and end_time < ' #{ current_end_time } ') " ) . order ( " id desc " )
@current_attendance = @course . course_attendances . where ( id : all_attendance_ids . uniq ) .
where ( " attendance_date = ' #{ current_date } ' and start_time <= ' #{ current_end_time } ' and end_time > ' #{ current_end_time } ' " )
@history_count = @history_attendances . size
student_attendance_ids = @history_attendances . pluck ( :id )
student_attendance_ids += @current_attendance . present? ? @current_attendance . pluck ( :id ) : [ ]
if student_attendance_ids . uniq . blank?
@normal_count = 0
@leave_count = 0
@absence_count = 0
else
@normal_count = @course . course_member_attendances . where ( course_member_id : member & . id , course_attendance_id : student_attendance_ids , attendance_status : " NORMAL " ) . size
@leave_count = @course . course_member_attendances . where ( course_member_id : member & . id , course_attendance_id : student_attendance_ids , attendance_status : " LEAVE " ) . size
# 旷课只统计历史签到的
@absence_count = @course . course_member_attendances . where ( course_member_id : member & . id , course_attendance_id : @history_attendances . pluck ( :id ) , attendance_status : " ABSENCE " ) . size
end
if student_attendance_ids . uniq . blank?
@normal_count = 0
@leave_count = 0
@absence_count = 0
else
@normal_count = @course . course_member_attendances . where ( course_attendance_id : student_attendance_ids , attendance_status : " NORMAL " ) . size
@leave_count = @course . course_member_attendances . where ( course_attendance_id : student_attendance_ids , attendance_status : " LEAVE " ) . size
@absence_count = student_attendance_ids . uniq . size - @normal_count - @leave_count
@all_history_count = @history_attendances . size
@history_attendances = paginate @history_attendances . includes ( :course_member_attendances )
end
@all_history_count = @history_attendances . size
@history_attendances = paginate @history_attendances . includes ( :course_member_attendances )
end
def show
@ -84,12 +90,13 @@ class Weapps::AttendancesController < ApplicationController
@_is_current_attendance = @attendance . current_attendance?
if @attendance . course_attendance_groups . first & . course_group_id . to_i == 0
@group s = @course . course_groups
@group _id s = @course . course_groups . pluck ( :id ) + [ 0 ]
else
@group s = @course . course_groups . where ( id : @attendance . course_attendance_groups . pluck ( :course_group_id ) )
@group _id s = @attendance . course_attendance_groups . pluck ( :course_group_id )
end
@groups = @groups . includes ( :course_members ) if @_is_current_attendance
@groups = @course . course_groups . where ( id : @group_ids )
@course_members = @course . students if @_is_current_attendance
@all_attendances = @attendance . course_member_attendances
end